|  | 
| 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::ParsecProviderContext; | 
| 10 | 10 | use parsec_openssl2::types::VOID_PTR; | 
| @@ -99,21 +99,37 @@ pub unsafe extern "C" fn parsec_provider_kmgmt_set_params( | 
| 99 | 99 |     } | 
| 100 | 100 | } | 
| 101 | 101 | 
 | 
|  | 102 | +pub unsafe extern "C" fn parsec_provider_kmgmt_import( | 
|  | 103 | +    key_data: VOID_PTR, | 
|  | 104 | +    selection: std::os::raw::c_int, | 
|  | 105 | +    params: *mut OSSL_PARAM, | 
|  | 106 | +) -> std::os::raw::c_int { | 
|  | 107 | +    if selection & OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS as std::os::raw::c_int != 0 { | 
|  | 108 | +        return parsec_provider_kmgmt_set_params(key_data, params); | 
|  | 109 | +    } | 
|  | 110 | + | 
|  | 111 | +    1 | 
|  | 112 | +} | 
|  | 113 | + | 
| 102 | 114 | pub type KeyMgmtNewPtr = unsafe extern "C" fn(VOID_PTR) -> VOID_PTR; | 
| 103 | 115 | pub type KeyMgmtFreePtr = unsafe extern "C" fn(VOID_PTR); | 
|  | 116 | +pub type KeyMgmtImportPtr = | 
|  | 117 | +    unsafe extern "C" fn(VOID_PTR, std::os::raw::c_int, *mut OSSL_PARAM) -> std::os::raw::c_int; | 
| 104 | 118 | pub type KeyMgmtSetParamsPtr = | 
| 105 | 119 |     unsafe extern "C" fn(VOID_PTR, *mut OSSL_PARAM) -> std::os::raw::c_int; | 
| 106 | 120 | pub type KeyMgmtSettableParamsPtr = unsafe extern "C" fn(VOID_PTR) -> *const OSSL_PARAM; | 
| 107 | 121 | 
 | 
| 108 | 122 | const OSSL_FUNC_KEYMGMT_NEW_PTR: KeyMgmtNewPtr = parsec_provider_kmgmt_new; | 
| 109 | 123 | const OSSL_FUNC_KEYMGMT_FREE_PTR: KeyMgmtFreePtr = parsec_provider_kmgmt_free; | 
|  | 124 | +const OSSL_FUNC_KEYMGMT_IMPORT_PTR: KeyMgmtImportPtr = parsec_provider_kmgmt_import; | 
| 110 | 125 | const OSSL_FUNC_KEYMGMT_SET_PARAMS_PTR: KeyMgmtSetParamsPtr = parsec_provider_kmgmt_set_params; | 
| 111 | 126 | const OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS_PTR: KeyMgmtSettableParamsPtr = | 
| 112 | 127 |     parsec_provider_kmgmt_settable_params; | 
| 113 | 128 | 
 | 
| 114 |  | -const PARSEC_PROVIDER_RSA_KEYMGMT_IMPL: [OSSL_DISPATCH; 4] = [ | 
|  | 129 | +const PARSEC_PROVIDER_RSA_KEYMGMT_IMPL: [OSSL_DISPATCH; 5] = [ | 
| 115 | 130 |     unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_NEW, OSSL_FUNC_KEYMGMT_NEW_PTR) }, | 
| 116 | 131 |     unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_FREE, OSSL_FUNC_KEYMGMT_FREE_PTR) }, | 
|  | 132 | +    unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_IMPORT, OSSL_FUNC_KEYMGMT_IMPORT_PTR) }, | 
| 117 | 133 |     unsafe { | 
| 118 | 134 |         ossl_dispatch!( | 
| 119 | 135 |             OSSL_FUNC_KEYMGMT_SET_PARAMS, | 
|  | 
0 commit comments