Skip to content

Commit 12dce31

Browse files
keymgmt: Add test for OSSL_FUNC_KEYMGMT_DUP
Signed-off-by: Tomás González <tomasagustin.gonzalezorlando@arm.com>
1 parent 08a8327 commit 12dce31

File tree

1 file changed

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

1 file changed

+50
-0
lines changed

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,3 +624,53 @@ fn test_kmgmt_match() {
624624
parsec_provider_teardown(provctx as *const OSSL_PROVIDER);
625625
}
626626
}
627+
628+
#[test]
629+
fn test_kmgmt_dup() {
630+
use crate::{parsec_provider_provider_init, parsec_provider_teardown};
631+
632+
let out: *const OSSL_DISPATCH = std::ptr::null();
633+
let mut provctx: types::VOID_PTR = std::ptr::null_mut();
634+
635+
// Initialize the provider
636+
let result: Result<(), parsec_openssl2::Error> = unsafe {
637+
parsec_provider_provider_init(
638+
std::ptr::null(),
639+
std::ptr::null(),
640+
&out as *const _ as *mut _,
641+
&mut provctx as *mut VOID_PTR,
642+
)
643+
};
644+
assert!(result.is_ok());
645+
646+
let keyobj = unsafe { parsec_provider_kmgmt_new(provctx) };
647+
648+
let my_key_name = "PARSEC_TEST_KEYNAME".to_string();
649+
let mut params = [
650+
ossl_param!(PARSEC_PROVIDER_KEY_NAME, OSSL_PARAM_UTF8_PTR, my_key_name),
651+
ossl_param!(),
652+
];
653+
let set_params_res = unsafe { parsec_provider_kmgmt_set_params(keyobj, &mut params as _) };
654+
assert_eq!(set_params_res, OPENSSL_SUCCESS);
655+
656+
let duplicated =
657+
unsafe { parsec_provider_keymgmt_dup(keyobj, OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS as i32) };
658+
659+
let duplicated_ptr = duplicated as *const ParsecProviderKeyObject;
660+
unsafe {
661+
Arc::increment_strong_count(duplicated_ptr);
662+
let arc_duplicated = Arc::from_raw(duplicated_ptr);
663+
let duplicated_key_name = arc_duplicated.key_name.lock().unwrap();
664+
665+
assert_eq!(
666+
*duplicated_key_name,
667+
Some("PARSEC_TEST_KEYNAME".to_string())
668+
)
669+
}
670+
671+
unsafe {
672+
parsec_provider_kmgmt_free(keyobj);
673+
parsec_provider_kmgmt_free(duplicated);
674+
parsec_provider_teardown(provctx as _);
675+
}
676+
}

0 commit comments

Comments
 (0)