Skip to content

Commit df794e0

Browse files
keymgmt: Add Key Objects checks for filled data
Implement: 1. OSSL_FUNC_KEYMGMT_HAS 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 5d0bafb commit df794e0

File tree

1 file changed

+34
-5
lines changed
  • parsec-openssl-provider/src/keymgmt

1 file changed

+34
-5
lines changed

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

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
use crate::openssl_bindings::{
5-
OSSL_ALGORITHM, OSSL_DISPATCH, OSSL_FUNC_KEYMGMT_FREE, OSSL_FUNC_KEYMGMT_IMPORT,
6-
OSSL_FUNC_KEYMGMT_IMPORT_TYPES, OSSL_FUNC_KEYMGMT_NEW, OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS,
7-
OSSL_FUNC_KEYMGMT_SET_PARAMS, OSSL_FUNC_KEYMGMT_VALIDATE, OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS,
8-
OSSL_PARAM, OSSL_PARAM_UTF8_PTR,
5+
OSSL_ALGORITHM, OSSL_DISPATCH, OSSL_FUNC_KEYMGMT_FREE, OSSL_FUNC_KEYMGMT_HAS,
6+
OSSL_FUNC_KEYMGMT_IMPORT, OSSL_FUNC_KEYMGMT_IMPORT_TYPES, OSSL_FUNC_KEYMGMT_NEW,
7+
OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS, OSSL_FUNC_KEYMGMT_SET_PARAMS, OSSL_FUNC_KEYMGMT_VALIDATE,
8+
OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS, OSSL_PARAM, OSSL_PARAM_UTF8_PTR,
99
};
1010
use crate::{
1111
ParsecProviderContext, PARSEC_PROVIDER_DESCRIPTION_RSA, PARSEC_PROVIDER_DFLT_PROPERTIES,
@@ -110,6 +110,32 @@ pub unsafe extern "C" fn parsec_provider_kmgmt_set_params(
110110
}
111111
}
112112

113+
/*
114+
should return 1 if all the selected data subsets are contained in the given keydata or 0 otherwise.
115+
*/
116+
pub unsafe extern "C" fn parsec_provider_kmgmt_has(
117+
keydata: VOID_PTR,
118+
selection: std::os::raw::c_int,
119+
) -> std::os::raw::c_int {
120+
if keydata.is_null() {
121+
return OPENSSL_SUCCESS;
122+
}
123+
124+
if selection & OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS as std::os::raw::c_int != 0 {
125+
let keydata_ptr = keydata as *const ParsecProviderKeyObject;
126+
Arc::increment_strong_count(keydata_ptr);
127+
let arc_keydata = Arc::from_raw(keydata_ptr);
128+
let key_name = arc_keydata.key_name.lock().unwrap();
129+
if key_name.is_some() {
130+
OPENSSL_SUCCESS
131+
} else {
132+
OPENSSL_ERROR
133+
}
134+
} else {
135+
OPENSSL_ERROR
136+
}
137+
}
138+
113139
pub unsafe extern "C" fn parsec_provider_kmgmt_import(
114140
key_data: VOID_PTR,
115141
selection: std::os::raw::c_int,
@@ -175,6 +201,7 @@ pub unsafe extern "C" fn parsec_provider_kmgmt_validate(
175201

176202
pub type KeyMgmtNewPtr = unsafe extern "C" fn(VOID_PTR) -> VOID_PTR;
177203
pub type KeyMgmtFreePtr = unsafe extern "C" fn(VOID_PTR);
204+
pub type KeyMgmtHasPtr = unsafe extern "C" fn(VOID_PTR, std::os::raw::c_int) -> std::os::raw::c_int;
178205
pub type KeyMgmtImportPtr =
179206
unsafe extern "C" fn(VOID_PTR, std::os::raw::c_int, *mut OSSL_PARAM) -> std::os::raw::c_int;
180207
pub type KeyMgmtImportTypesPtr = unsafe extern "C" fn(std::os::raw::c_int) -> *const OSSL_PARAM;
@@ -186,6 +213,7 @@ pub type KeyMgmtValidatePtr =
186213

187214
const OSSL_FUNC_KEYMGMT_NEW_PTR: KeyMgmtNewPtr = parsec_provider_kmgmt_new;
188215
const OSSL_FUNC_KEYMGMT_FREE_PTR: KeyMgmtFreePtr = parsec_provider_kmgmt_free;
216+
const OSSL_FUNC_KEYMGMT_HAS_PTR: KeyMgmtHasPtr = parsec_provider_kmgmt_has;
189217
const OSSL_FUNC_KEYMGMT_IMPORT_PTR: KeyMgmtImportPtr = parsec_provider_kmgmt_import;
190218
const OSSL_FUNC_KEYMGMT_IMPORT_TYPES_PTR: KeyMgmtImportTypesPtr =
191219
parsec_provider_kmgmt_import_types;
@@ -194,9 +222,10 @@ const OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS_PTR: KeyMgmtSettableParamsPtr =
194222
parsec_provider_kmgmt_settable_params;
195223
const OSSL_FUNC_KEYMGMT_VALIDATE_PTR: KeyMgmtValidatePtr = parsec_provider_kmgmt_validate;
196224

197-
const PARSEC_PROVIDER_RSA_KEYMGMT_IMPL: [OSSL_DISPATCH; 8] = [
225+
const PARSEC_PROVIDER_RSA_KEYMGMT_IMPL: [OSSL_DISPATCH; 9] = [
198226
unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_NEW, OSSL_FUNC_KEYMGMT_NEW_PTR) },
199227
unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_FREE, OSSL_FUNC_KEYMGMT_FREE_PTR) },
228+
unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_HAS, OSSL_FUNC_KEYMGMT_HAS_PTR) },
200229
unsafe { ossl_dispatch!(OSSL_FUNC_KEYMGMT_IMPORT, OSSL_FUNC_KEYMGMT_IMPORT_PTR) },
201230
unsafe {
202231
ossl_dispatch!(

0 commit comments

Comments
 (0)