@@ -23,13 +23,18 @@ pub struct EvpPkeyCtx {
23
23
/// Methods for creating and accessing `EvpPkeyCtx`.
24
24
impl EvpPkeyCtx {
25
25
/// Fetches an algorithm by name and returns a wrapper `EvpPkeyCtx`
26
- pub fn new ( ctx : & OsslContext , name : & CStr ) -> Result < EvpPkeyCtx , Error > {
26
+ pub fn new (
27
+ ctx : & OsslContext ,
28
+ name : & CStr ,
29
+ propq : Option < & CStr > ,
30
+ ) -> Result < EvpPkeyCtx , Error > {
31
+ let propqp = if let Some ( p) = propq {
32
+ p. as_ptr ( )
33
+ } else {
34
+ std:: ptr:: null ( )
35
+ } ;
27
36
let ptr = unsafe {
28
- EVP_PKEY_CTX_new_from_name (
29
- ctx. ptr ( ) ,
30
- name. as_ptr ( ) ,
31
- std:: ptr:: null ( ) ,
32
- )
37
+ EVP_PKEY_CTX_new_from_name ( ctx. ptr ( ) , name. as_ptr ( ) , propqp)
33
38
} ;
34
39
if ptr. is_null ( ) {
35
40
trace_ossl ! ( "EVP_PKEY_CTX_new_from_name()" ) ;
@@ -817,8 +822,9 @@ impl EvpPkey {
817
822
pkey_name : & CStr ,
818
823
pkey_type : u32 ,
819
824
params : & OsslParam ,
825
+ propq : Option < & CStr > ,
820
826
) -> Result < EvpPkey , Error > {
821
- let mut pctx = EvpPkeyCtx :: new ( ctx, pkey_name) ?;
827
+ let mut pctx = EvpPkeyCtx :: new ( ctx, pkey_name, propq ) ?;
822
828
let res = unsafe { EVP_PKEY_fromdata_init ( pctx. as_mut_ptr ( ) ) } ;
823
829
if res != 1 {
824
830
trace_ossl ! ( "EVP_PKEY_fromdata_init()" ) ;
@@ -877,11 +883,12 @@ impl EvpPkey {
877
883
pub fn generate (
878
884
ctx : & OsslContext ,
879
885
pkey_type : EvpPkeyType ,
886
+ propq : Option < & CStr > ,
880
887
) -> Result < EvpPkey , Error > {
881
888
let mut params_builder = OsslParamBuilder :: new ( ) ;
882
889
let name = pkey_type_to_params ( & pkey_type, & mut params_builder) ?;
883
890
let params = params_builder. finalize ( ) ;
884
- let mut pctx = EvpPkeyCtx :: new ( ctx, name) ?;
891
+ let mut pctx = EvpPkeyCtx :: new ( ctx, name, propq ) ?;
885
892
let res = unsafe { EVP_PKEY_keygen_init ( pctx. as_mut_ptr ( ) ) } ;
886
893
if res != 1 {
887
894
trace_ossl ! ( "EVP_PKEY_keygen_init()" ) ;
@@ -927,6 +934,7 @@ impl EvpPkey {
927
934
ctx : & OsslContext ,
928
935
pkey_type : EvpPkeyType ,
929
936
data : PkeyData ,
937
+ propq : Option < & CStr > ,
930
938
) -> Result < EvpPkey , Error > {
931
939
let mut pkey_class: u32 = 0 ;
932
940
let mut params_builder = OsslParamBuilder :: with_capacity ( 2 ) ;
@@ -1076,7 +1084,7 @@ impl EvpPkey {
1076
1084
}
1077
1085
let params = params_builder. finalize ( ) ;
1078
1086
1079
- EvpPkey :: fromdata ( ctx, name, pkey_class, & params)
1087
+ EvpPkey :: fromdata ( ctx, name, pkey_class, & params, propq )
1080
1088
}
1081
1089
1082
1090
/// Export public point in encoded form and/or private key
@@ -1181,6 +1189,7 @@ impl EvpPkey {
1181
1189
& self ,
1182
1190
ctx : & OsslContext ,
1183
1191
public : & [ u8 ] ,
1192
+ propq : Option < & CStr > ,
1184
1193
) -> Result < EvpPkey , Error > {
1185
1194
let mut params_builder = OsslParamBuilder :: with_capacity ( 1 ) ;
1186
1195
params_builder. add_empty_utf8_string (
@@ -1219,7 +1228,7 @@ impl EvpPkey {
1219
1228
} ) ,
1220
1229
_ => return Err ( Error :: new ( ErrorKind :: WrapperError ) ) ,
1221
1230
} ;
1222
- Self :: import ( ctx, pkey_type, data)
1231
+ Self :: import ( ctx, pkey_type, data, propq )
1223
1232
}
1224
1233
1225
1234
/// Returns a const pointer to the underlying `EVP_PKEY`.
0 commit comments