|  | 
| 2 | 2 | // SPDX-License-Identifier: Apache-2.0 | 
| 3 | 3 | 
 | 
| 4 | 4 | use crate::openssl_binding::{ | 
| 5 |  | -    OSSL_ALGORITHM, OSSL_DISPATCH, OSSL_FUNC_KEYMGMT_FREE, OSSL_FUNC_KEYMGMT_NEW, | 
| 6 |  | -    OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS, OSSL_FUNC_KEYMGMT_SET_PARAMS, OSSL_PARAM, | 
| 7 |  | -    OSSL_PARAM_UTF8_PTR, | 
|  | 5 | +    OSSL_ALGORITHM, OSSL_DISPATCH, OSSL_FUNC_KEYMGMT_FREE, OSSL_FUNC_KEYMGMT_IMPORT, | 
|  | 6 | +    OSSL_FUNC_KEYMGMT_NEW, OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS, OSSL_FUNC_KEYMGMT_SET_PARAMS, | 
|  | 7 | +    OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS, OSSL_PARAM, OSSL_PARAM_UTF8_PTR, | 
| 8 | 8 | }; | 
| 9 | 9 | use crate::{ | 
| 10 | 10 |     ParsecProviderContext, PARSEC_PROVIDER_DESCRIPTION_RSA, PARSEC_PROVIDER_DFLT_PROPERTIES, | 
| @@ -109,21 +109,39 @@ pub unsafe extern "C" fn parsec_provider_kmgmt_set_params( | 
| 109 | 109 |     } | 
| 110 | 110 | } | 
| 111 | 111 | 
 | 
|  | 112 | +pub unsafe extern "C" fn parsec_provider_kmgmt_import( | 
|  | 113 | +    key_data: VOID_PTR, | 
|  | 114 | +    selection: std::os::raw::c_int, | 
|  | 115 | +    params: *mut OSSL_PARAM, | 
|  | 116 | +) -> std::os::raw::c_int { | 
|  | 117 | +    //TODO: Query the parsec service and get a list of keys, check if the requested import is for a known key and then | 
|  | 118 | +    // set the parameter | 
|  | 119 | +    if selection & OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS as std::os::raw::c_int != 0 { | 
|  | 120 | +        return parsec_provider_kmgmt_set_params(key_data, params); | 
|  | 121 | +    } | 
|  | 122 | + | 
|  | 123 | +    1 | 
|  | 124 | +} | 
|  | 125 | + | 
| 112 | 126 | pub type KeyMgmtNewPtr = unsafe extern "C" fn(VOID_PTR) -> VOID_PTR; | 
| 113 | 127 | pub type KeyMgmtFreePtr = unsafe extern "C" fn(VOID_PTR); | 
|  | 128 | +pub type KeyMgmtImportPtr = | 
|  | 129 | +    unsafe extern "C" fn(VOID_PTR, std::os::raw::c_int, *mut OSSL_PARAM) -> std::os::raw::c_int; | 
| 114 | 130 | pub type KeyMgmtSetParamsPtr = | 
| 115 | 131 |     unsafe extern "C" fn(VOID_PTR, *mut OSSL_PARAM) -> std::os::raw::c_int; | 
| 116 | 132 | pub type KeyMgmtSettableParamsPtr = unsafe extern "C" fn(VOID_PTR) -> *const OSSL_PARAM; | 
| 117 | 133 | 
 | 
| 118 | 134 | const OSSL_FUNC_KEYMGMT_NEW_PTR: KeyMgmtNewPtr = parsec_provider_kmgmt_new; | 
| 119 | 135 | const OSSL_FUNC_KEYMGMT_FREE_PTR: KeyMgmtFreePtr = parsec_provider_kmgmt_free; | 
|  | 136 | +const OSSL_FUNC_KEYMGMT_IMPORT_PTR: KeyMgmtImportPtr = parsec_provider_kmgmt_import; | 
| 120 | 137 | const OSSL_FUNC_KEYMGMT_SET_PARAMS_PTR: KeyMgmtSetParamsPtr = parsec_provider_kmgmt_set_params; | 
| 121 | 138 | const OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS_PTR: KeyMgmtSettableParamsPtr = | 
| 122 | 139 |     parsec_provider_kmgmt_settable_params; | 
| 123 | 140 | 
 | 
| 124 |  | -const PARSEC_PROVIDER_RSA_KEYMGMT_IMPL: [OSSL_DISPATCH; 5] = [ | 
|  | 141 | +const PARSEC_PROVIDER_RSA_KEYMGMT_IMPL: [OSSL_DISPATCH; 6] = [ | 
| 125 | 142 |     unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_NEW, OSSL_FUNC_KEYMGMT_NEW_PTR) }, | 
| 126 | 143 |     unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_FREE, OSSL_FUNC_KEYMGMT_FREE_PTR) }, | 
|  | 144 | +    unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_IMPORT, OSSL_FUNC_KEYMGMT_IMPORT_PTR) }, | 
| 127 | 145 |     unsafe { | 
| 128 | 146 |         ossl_dispatch!( | 
| 129 | 147 |             OSSL_FUNC_KEYMGMT_SET_PARAMS, | 
|  | 
0 commit comments