@@ -351,7 +351,7 @@ fn import_same_identity_multiple_times() {
351351 ) ) ;
352352
353353 let cert = keys. server . cert_and_key . cert . to_pem ( ) . into_bytes ( ) ;
354- let key = rsa_to_pkcs8 ( & key_to_pem ( keys. server . cert_and_key . key . get_der ( ) ) ) . into_bytes ( ) ;
354+ let key = rsa_to_pkcs8 ( & keys. server . cert_and_key . key . to_pem_incorrect ( ) ) . into_bytes ( ) ;
355355 let _ = p ! ( Identity :: from_pkcs8( & cert, & key) ) ;
356356 let _ = p ! ( Identity :: from_pkcs8( & cert, & key) ) ;
357357}
@@ -360,7 +360,7 @@ fn import_same_identity_multiple_times() {
360360fn from_pkcs8_rejects_rsa_key ( ) {
361361 let keys = test_cert_gen:: keys ( ) ;
362362 let cert = keys. server . cert_and_key . cert . to_pem ( ) . into_bytes ( ) ;
363- let rsa_key = key_to_pem ( keys. server . cert_and_key . key . get_der ( ) ) ;
363+ let rsa_key = keys. server . cert_and_key . key . to_pem_incorrect ( ) ;
364364 assert ! ( Identity :: from_pkcs8( & cert, rsa_key. as_bytes( ) ) . is_err( ) ) ;
365365 let pkcs8_key = rsa_to_pkcs8 ( & rsa_key) ;
366366 assert ! ( Identity :: from_pkcs8( & cert, pkcs8_key. as_bytes( ) ) . is_ok( ) ) ;
@@ -439,7 +439,7 @@ fn alpn_google_none() {
439439fn server_pkcs8 ( ) {
440440 let keys = test_cert_gen:: keys ( ) ;
441441 let cert = keys. server . cert_and_key . cert . to_pem ( ) . into_bytes ( ) ;
442- let key = rsa_to_pkcs8 ( & key_to_pem ( keys. server . cert_and_key . key . get_der ( ) ) ) . into_bytes ( ) ;
442+ let key = rsa_to_pkcs8 ( & keys. server . cert_and_key . key . to_pem_incorrect ( ) ) . into_bytes ( ) ;
443443
444444 let ident = Identity :: from_pkcs8 ( & cert, & key) . unwrap ( ) ;
445445 let ident2 = ident. clone ( ) ;
@@ -486,7 +486,7 @@ fn server_pkcs8() {
486486fn two_servers ( ) {
487487 let keys1 = test_cert_gen:: gen_keys ( ) ;
488488 let cert = keys1. server . cert_and_key . cert . to_pem ( ) . into_bytes ( ) ;
489- let key = rsa_to_pkcs8 ( & key_to_pem ( keys1. server . cert_and_key . key . get_der ( ) ) ) . into_bytes ( ) ;
489+ let key = rsa_to_pkcs8 ( & keys1. server . cert_and_key . key . to_pem_incorrect ( ) ) . into_bytes ( ) ;
490490 let identity = p ! ( Identity :: from_pkcs8( & cert, & key) ) ;
491491 let builder = TlsAcceptor :: builder ( identity) ;
492492 let builder = p ! ( builder. build( ) ) ;
@@ -507,7 +507,7 @@ fn two_servers() {
507507
508508 let keys2 = test_cert_gen:: gen_keys ( ) ;
509509 let cert = keys2. server . cert_and_key . cert . to_pem ( ) . into_bytes ( ) ;
510- let key = rsa_to_pkcs8 ( & key_to_pem ( keys2. server . cert_and_key . key . get_der ( ) ) ) . into_bytes ( ) ;
510+ let key = rsa_to_pkcs8 ( & keys2. server . cert_and_key . key . to_pem_incorrect ( ) ) . into_bytes ( ) ;
511511 let identity = p ! ( Identity :: from_pkcs8( & cert, & key) ) ;
512512 let builder = TlsAcceptor :: builder ( identity) ;
513513 let builder = p ! ( builder. build( ) ) ;
@@ -556,17 +556,18 @@ fn two_servers() {
556556 p ! ( j2. join( ) ) ;
557557}
558558
559- fn key_to_pem ( der : & [ u8 ] ) -> String {
560- pem:: encode ( & pem:: Pem {
561- tag : "RSA PRIVATE KEY" . to_owned ( ) ,
562- contents : der. to_owned ( ) ,
563- } )
564- }
565-
566559fn rsa_to_pkcs8 ( pem : & str ) -> String {
567- use rsa:: { pkcs1:: FromRsaPrivateKey , pkcs8:: ToPrivateKey , RsaPrivateKey } ;
568- let pkey = RsaPrivateKey :: from_pkcs1_pem ( pem) . unwrap ( ) ;
569- let pkcs8_pem = pkey. to_pkcs8_pem ( ) . unwrap ( ) ;
570- let pkcs8_pem: & str = pkcs8_pem. as_ref ( ) ;
571- pkcs8_pem. to_owned ( )
560+ let mut child = Command :: new ( "openssl" )
561+ . arg ( "pkcs8" )
562+ . arg ( "-topk8" )
563+ . arg ( "-nocrypt" )
564+ . stdin ( Stdio :: piped ( ) )
565+ . stdout ( Stdio :: piped ( ) )
566+ . spawn ( )
567+ . unwrap ( ) ;
568+ {
569+ let child_stdin = child. stdin . as_mut ( ) . unwrap ( ) ;
570+ child_stdin. write_all ( pem. as_bytes ( ) ) . unwrap ( ) ;
571+ }
572+ String :: from_utf8 ( child. wait_with_output ( ) . unwrap ( ) . stdout ) . unwrap ( )
572573}
0 commit comments