Skip to content

Commit 9fbf0c4

Browse files
keymgmt: Add KeyObject checks for missing information
Checks the behaviour of OSSL_FUNC_KEYMGMT_HAS Signed-off-by: Tomás González <tomasagustin.gonzalezorlando@arm.com>
1 parent a439435 commit 9fbf0c4

File tree

1 file changed

+59
-0
lines changed
  • parsec-openssl-provider/src/keymgmt

1 file changed

+59
-0
lines changed

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

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,3 +260,62 @@ pub const PARSEC_PROVIDER_KEYMGMT: [OSSL_ALGORITHM; 2] = [
260260
),
261261
ossl_algorithm!(),
262262
];
263+
264+
#[test]
265+
fn test_kmgmt_has() {
266+
use crate::openssl_bindings::OSSL_KEYMGMT_SELECT_PRIVATE_KEY;
267+
use crate::parsec_provider_provider_init;
268+
269+
let out: *const OSSL_DISPATCH = std::ptr::null();
270+
let mut provctx: types::VOID_PTR = std::ptr::null_mut();
271+
272+
// Initialize the provider
273+
let result: Result<(), parsec_openssl2::Error> = unsafe {
274+
parsec_provider_provider_init(
275+
std::ptr::null(),
276+
std::ptr::null(),
277+
&out as *const _ as *mut _,
278+
&mut provctx as *mut VOID_PTR,
279+
)
280+
};
281+
assert!(result.is_ok());
282+
283+
// Test parsec_provider_kmgmt_has when keyctx is null. Selection should not matter in this case
284+
let selec_w_null = unsafe {
285+
parsec_provider_kmgmt_has(
286+
std::ptr::null_mut(),
287+
OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS as i32,
288+
)
289+
};
290+
assert_eq!(selec_w_null, OPENSSL_ERROR);
291+
292+
let keyctx = unsafe { parsec_provider_kmgmt_new(provctx) };
293+
// Test parsec_provider_kmgmt_has when keyctx has not been completed and the correct selection is used
294+
let selec_no_init =
295+
unsafe { parsec_provider_kmgmt_has(keyctx, OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS as i32) };
296+
assert_eq!(selec_no_init, OPENSSL_ERROR);
297+
298+
// Test parsec_provider_kmgmt_has when keyctx has not been completed but the a superfluous selection is used
299+
let no_selec_no_init =
300+
unsafe { parsec_provider_kmgmt_has(keyctx, OSSL_KEYMGMT_SELECT_PRIVATE_KEY as i32) };
301+
assert_eq!(no_selec_no_init, OPENSSL_SUCCESS);
302+
303+
// Set the key data with the correct name
304+
let my_key_name = "PARSEC_TEST_KEYNAME".to_string();
305+
let mut params = [
306+
ossl_param!(PARSEC_PROVIDER_KEY_NAME, OSSL_PARAM_UTF8_PTR, my_key_name),
307+
ossl_param!(),
308+
];
309+
310+
let set_params_res = unsafe { parsec_provider_kmgmt_set_params(keyctx, &mut params as _) };
311+
assert_eq!(set_params_res, OPENSSL_SUCCESS);
312+
313+
// Check parsec_provider_kmgmt_has confirms that keyctx now has the correct data
314+
let selec_init =
315+
unsafe { parsec_provider_kmgmt_has(keyctx, OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS as i32) };
316+
assert_eq!(selec_init, OPENSSL_SUCCESS);
317+
318+
unsafe {
319+
parsec_provider_kmgmt_free(keyctx);
320+
}
321+
}

0 commit comments

Comments
 (0)