Skip to content

Commit f741812

Browse files
keymgmt: Add Key Objects Data validation
Implement: 1. OSSL_FUNC_KEYMGMT_VALIDATE for key objects as indicated by https://www.openssl.org/docs/man3.0/man7/provider-keymgmt.html This currently only checks whether selection is 'OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS' and the key_name has been filled, as currently we don't support any other selection/data in Key Objects. Signed-off-by: Tomás González <tomasagustin.gonzalezorlando@arm.com>
1 parent c18a009 commit f741812

File tree

1 file changed

+32
-2
lines changed
  • parsec-openssl-provider/src/keymgmt

1 file changed

+32
-2
lines changed

parsec-openssl-provider/src/keymgmt/mod.rs

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
use crate::openssl_binding::{
55
OSSL_ALGORITHM, OSSL_DISPATCH, OSSL_FUNC_KEYMGMT_FREE, OSSL_FUNC_KEYMGMT_IMPORT,
66
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,
7+
OSSL_FUNC_KEYMGMT_VALIDATE, OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS, OSSL_PARAM,
8+
OSSL_PARAM_UTF8_PTR,
89
};
910
use crate::{
1011
ParsecProviderContext, PARSEC_PROVIDER_DESCRIPTION_RSA, PARSEC_PROVIDER_DFLT_PROPERTIES,
@@ -123,22 +124,50 @@ pub unsafe extern "C" fn parsec_provider_kmgmt_import(
123124
OPENSSL_SUCCESS
124125
}
125126

127+
// Should check if the keydata contains valid data subsets indicated by selection.
128+
pub unsafe extern "C" fn parsec_provider_kmgmt_validate(
129+
keydata: VOID_PTR,
130+
selection: std::os::raw::c_int,
131+
_checktype: std::os::raw::c_int,
132+
) -> std::os::raw::c_int {
133+
if keydata.is_null() {
134+
return OPENSSL_ERROR;
135+
}
136+
137+
if selection & OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS as std::os::raw::c_int != 0 {
138+
let keydata_ptr = keydata as *const ParsecProviderKeyObject;
139+
Arc::increment_strong_count(keydata_ptr);
140+
let arc_keydata = Arc::from_raw(keydata_ptr);
141+
let key_name = arc_keydata.key_name.lock().unwrap();
142+
if key_name.is_some() {
143+
OPENSSL_SUCCESS
144+
} else {
145+
OPENSSL_ERROR
146+
}
147+
} else {
148+
OPENSSL_SUCCESS
149+
}
150+
}
151+
126152
pub type KeyMgmtNewPtr = unsafe extern "C" fn(VOID_PTR) -> VOID_PTR;
127153
pub type KeyMgmtFreePtr = unsafe extern "C" fn(VOID_PTR);
128154
pub type KeyMgmtImportPtr =
129155
unsafe extern "C" fn(VOID_PTR, std::os::raw::c_int, *mut OSSL_PARAM) -> std::os::raw::c_int;
130156
pub type KeyMgmtSetParamsPtr =
131157
unsafe extern "C" fn(VOID_PTR, *mut OSSL_PARAM) -> std::os::raw::c_int;
132158
pub type KeyMgmtSettableParamsPtr = unsafe extern "C" fn(VOID_PTR) -> *const OSSL_PARAM;
159+
pub type KeyMgmtValidatePtr =
160+
unsafe extern "C" fn(VOID_PTR, std::os::raw::c_int, std::os::raw::c_int) -> std::os::raw::c_int;
133161

134162
const OSSL_FUNC_KEYMGMT_NEW_PTR: KeyMgmtNewPtr = parsec_provider_kmgmt_new;
135163
const OSSL_FUNC_KEYMGMT_FREE_PTR: KeyMgmtFreePtr = parsec_provider_kmgmt_free;
136164
const OSSL_FUNC_KEYMGMT_IMPORT_PTR: KeyMgmtImportPtr = parsec_provider_kmgmt_import;
137165
const OSSL_FUNC_KEYMGMT_SET_PARAMS_PTR: KeyMgmtSetParamsPtr = parsec_provider_kmgmt_set_params;
138166
const OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS_PTR: KeyMgmtSettableParamsPtr =
139167
parsec_provider_kmgmt_settable_params;
168+
const OSSL_FUNC_KEYMGMT_VALIDATE_PTR: KeyMgmtValidatePtr = parsec_provider_kmgmt_validate;
140169

141-
const PARSEC_PROVIDER_RSA_KEYMGMT_IMPL: [OSSL_DISPATCH; 6] = [
170+
const PARSEC_PROVIDER_RSA_KEYMGMT_IMPL: [OSSL_DISPATCH; 7] = [
142171
unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_NEW, OSSL_FUNC_KEYMGMT_NEW_PTR) },
143172
unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_FREE, OSSL_FUNC_KEYMGMT_FREE_PTR) },
144173
unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_IMPORT, OSSL_FUNC_KEYMGMT_IMPORT_PTR) },
@@ -154,6 +183,7 @@ const PARSEC_PROVIDER_RSA_KEYMGMT_IMPL: [OSSL_DISPATCH; 6] = [
154183
OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS_PTR
155184
)
156185
},
186+
unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_VALIDATE, OSSL_FUNC_KEYMGMT_VALIDATE_PTR) },
157187
ossl_dispatch!(),
158188
];
159189

0 commit comments

Comments
 (0)