22// SPDX-License-Identifier: Apache-2.0 
33
44use  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} ; 
1010use  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+ 
113139pub  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
176202pub  type  KeyMgmtNewPtr  = unsafe  extern  "C"  fn ( VOID_PTR )  -> VOID_PTR ; 
177203pub  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 ; 
178205pub  type  KeyMgmtImportPtr  =
179206    unsafe  extern  "C"  fn ( VOID_PTR ,  std:: os:: raw:: c_int ,  * mut  OSSL_PARAM )  -> std:: os:: raw:: c_int ; 
180207pub  type  KeyMgmtImportTypesPtr  = unsafe  extern  "C"  fn ( std:: os:: raw:: c_int )  -> * const  OSSL_PARAM ; 
@@ -186,6 +213,7 @@ pub type KeyMgmtValidatePtr =
186213
187214const  OSSL_FUNC_KEYMGMT_NEW_PTR :  KeyMgmtNewPtr  = parsec_provider_kmgmt_new; 
188215const  OSSL_FUNC_KEYMGMT_FREE_PTR :  KeyMgmtFreePtr  = parsec_provider_kmgmt_free; 
216+ const  OSSL_FUNC_KEYMGMT_HAS_PTR :  KeyMgmtHasPtr  = parsec_provider_kmgmt_has; 
189217const  OSSL_FUNC_KEYMGMT_IMPORT_PTR :  KeyMgmtImportPtr  = parsec_provider_kmgmt_import; 
190218const  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; 
195223const  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