Skip to content

Commit 49416e1

Browse files
tgonzalezorlandoarmgowthamsk-arm
authored andcommitted
keymgmt: Add unit test for OSSL_FUNC_KEYMGMT_DUP
Signed-off-by: Tomás González <tomasagustin.gonzalezorlando@arm.com>
1 parent dad7172 commit 49416e1

File tree

1 file changed

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

1 file changed

+47
-0
lines changed

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

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,3 +714,50 @@ fn test_kmgmt_import() {
714714
parsec_provider_teardown(provctx as *const OSSL_PROVIDER);
715715
}
716716
}
717+
718+
#[test]
719+
fn test_kmgmt_dup() {
720+
use crate::{parsec_provider_provider_init, parsec_provider_teardown};
721+
722+
let out: *const OSSL_DISPATCH = std::ptr::null();
723+
let mut provctx: types::VOID_PTR = std::ptr::null_mut();
724+
725+
// Initialize the provider
726+
let result: Result<(), parsec_openssl2::Error> = unsafe {
727+
parsec_provider_provider_init(
728+
std::ptr::null(),
729+
std::ptr::null(),
730+
&out as *const _ as *mut _,
731+
&mut provctx as *mut VOID_PTR,
732+
)
733+
};
734+
assert!(result.is_ok());
735+
736+
let keyobj = unsafe { parsec_provider_kmgmt_new(provctx) };
737+
738+
let my_key_name = "PARSEC_TEST_KEYNAME".to_string();
739+
let mut params = [
740+
ossl_param!(PARSEC_PROVIDER_KEY_NAME, OSSL_PARAM_UTF8_PTR, my_key_name),
741+
ossl_param!(),
742+
];
743+
let set_params_res = unsafe { parsec_provider_kmgmt_set_params(keyobj, &mut params as _) };
744+
assert_eq!(set_params_res, OPENSSL_SUCCESS);
745+
746+
let duplicated =
747+
unsafe { parsec_provider_keymgmt_dup(keyobj, OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS as i32) };
748+
749+
let duplicated_ptr = duplicated as *const ParsecProviderKeyObject;
750+
unsafe {
751+
Arc::increment_strong_count(duplicated_ptr);
752+
let arc_duplicated = Arc::from_raw(duplicated_ptr);
753+
let duplicated_key_name = arc_duplicated.key_name.lock().unwrap();
754+
755+
assert_eq!(*duplicated_key_name, Some(my_key_name))
756+
}
757+
758+
unsafe {
759+
parsec_provider_kmgmt_free(keyobj);
760+
parsec_provider_kmgmt_free(duplicated);
761+
parsec_provider_teardown(provctx as _);
762+
}
763+
}

0 commit comments

Comments
 (0)