@@ -60,6 +60,7 @@ use openssl_macros::corresponds;
60
60
use std:: convert:: { TryFrom , TryInto } ;
61
61
use std:: ffi:: CString ;
62
62
use std:: fmt;
63
+ #[ cfg( all( not( boringssl) , ossl110) ) ]
63
64
use std:: mem;
64
65
use std:: ptr;
65
66
@@ -407,38 +408,37 @@ impl<T> Clone for PKey<T> {
407
408
408
409
impl < T > PKey < T > {
409
410
/// Creates a new `PKey` containing an RSA key.
410
- #[ corresponds( EVP_PKEY_assign_RSA ) ]
411
+ #[ corresponds( EVP_PKEY_set1_RSA ) ]
411
412
pub fn from_rsa ( rsa : Rsa < T > ) -> Result < PKey < T > , ErrorStack > {
413
+ // TODO: Next time we make backwards incompatible changes, this could
414
+ // become an `&RsaRef<T>`. Same for all the other `from_*` methods.
412
415
unsafe {
413
416
let evp = cvt_p ( ffi:: EVP_PKEY_new ( ) ) ?;
414
417
let pkey = PKey :: from_ptr ( evp) ;
415
- cvt ( ffi:: EVP_PKEY_assign_RSA ( pkey. 0 , rsa. as_ptr ( ) ) ) ?;
416
- mem:: forget ( rsa) ;
418
+ cvt ( ffi:: EVP_PKEY_set1_RSA ( pkey. 0 , rsa. as_ptr ( ) ) ) ?;
417
419
Ok ( pkey)
418
420
}
419
421
}
420
422
421
423
/// Creates a new `PKey` containing a DSA key.
422
- #[ corresponds( EVP_PKEY_assign_DSA ) ]
424
+ #[ corresponds( EVP_PKEY_set1_DSA ) ]
423
425
pub fn from_dsa ( dsa : Dsa < T > ) -> Result < PKey < T > , ErrorStack > {
424
426
unsafe {
425
427
let evp = cvt_p ( ffi:: EVP_PKEY_new ( ) ) ?;
426
428
let pkey = PKey :: from_ptr ( evp) ;
427
- cvt ( ffi:: EVP_PKEY_assign_DSA ( pkey. 0 , dsa. as_ptr ( ) ) ) ?;
428
- mem:: forget ( dsa) ;
429
+ cvt ( ffi:: EVP_PKEY_set1_DSA ( pkey. 0 , dsa. as_ptr ( ) ) ) ?;
429
430
Ok ( pkey)
430
431
}
431
432
}
432
433
433
434
/// Creates a new `PKey` containing a Diffie-Hellman key.
434
- #[ corresponds( EVP_PKEY_assign_DH ) ]
435
+ #[ corresponds( EVP_PKEY_set1_DH ) ]
435
436
#[ cfg( not( boringssl) ) ]
436
437
pub fn from_dh ( dh : Dh < T > ) -> Result < PKey < T > , ErrorStack > {
437
438
unsafe {
438
439
let evp = cvt_p ( ffi:: EVP_PKEY_new ( ) ) ?;
439
440
let pkey = PKey :: from_ptr ( evp) ;
440
- cvt ( ffi:: EVP_PKEY_assign_DH ( pkey. 0 , dh. as_ptr ( ) ) ) ?;
441
- mem:: forget ( dh) ;
441
+ cvt ( ffi:: EVP_PKEY_set1_DH ( pkey. 0 , dh. as_ptr ( ) ) ) ?;
442
442
Ok ( pkey)
443
443
}
444
444
}
@@ -460,13 +460,12 @@ impl<T> PKey<T> {
460
460
}
461
461
462
462
/// Creates a new `PKey` containing an elliptic curve key.
463
- #[ corresponds( EVP_PKEY_assign_EC_KEY ) ]
463
+ #[ corresponds( EVP_PKEY_set1_EC_KEY ) ]
464
464
pub fn from_ec_key ( ec_key : EcKey < T > ) -> Result < PKey < T > , ErrorStack > {
465
465
unsafe {
466
466
let evp = cvt_p ( ffi:: EVP_PKEY_new ( ) ) ?;
467
467
let pkey = PKey :: from_ptr ( evp) ;
468
- cvt ( ffi:: EVP_PKEY_assign_EC_KEY ( pkey. 0 , ec_key. as_ptr ( ) ) ) ?;
469
- mem:: forget ( ec_key) ;
468
+ cvt ( ffi:: EVP_PKEY_set1_EC_KEY ( pkey. 0 , ec_key. as_ptr ( ) ) ) ?;
470
469
Ok ( pkey)
471
470
}
472
471
}
0 commit comments