@@ -25,7 +25,7 @@ def jwk_from_file(filename: str, private: bool = True) -> JWK:
2525 return key_from_jwk_dict (jwk_dict , private = private )
2626
2727
28- def pem2rsa (filename : str , kid : str = None , private : bool = False , passphrase : str = None ) -> JWK :
28+ def pem2rsa (filename : str , kid : Optional [ str ] = None , private : bool = False , passphrase : Optional [ str ] = None ) -> JWK :
2929 """Convert RSA key from PEM to JWK"""
3030 if private :
3131 key = import_private_rsa_key_from_file (filename , passphrase )
@@ -36,7 +36,7 @@ def pem2rsa(filename: str, kid: str = None, private: bool = False, passphrase: s
3636 return jwk
3737
3838
39- def pem2ec (filename : str , kid : str = None , private : bool = False , passphrase : str = None ) -> JWK :
39+ def pem2ec (filename : str , kid : Optional [ str ] = None , private : bool = False , passphrase : Optional [ str ] = None ) -> JWK :
4040 """Convert EC key from PEM to JWK"""
4141 if private :
4242 key = import_private_key_from_file (filename , passphrase )
@@ -54,14 +54,15 @@ def bin2jwk(filename: str, kid: str) -> bytes:
5454 return SYMKey (kid = kid , key = content )
5555
5656
57- def pem2jwk (filename : str , kid : str , kty : Optional [str ] = None , private : bool = False ) -> JWK :
57+ def pem2jwk (filename : str , kid : Optional [ str ] = None , kty : Optional [str ] = None , private : bool = False , passphrase : Optional [ str ] = None ) -> JWK :
5858 """Read PEM from filename and return JWK"""
5959 with open (filename , 'rt' ) as file :
6060 content = file .readlines ()
6161 header = content [0 ]
6262
6363 if private :
64- passphrase = getpass ('Private key passphrase: ' )
64+ if passphrase is None :
65+ passphrase = getpass ('Private key passphrase: ' )
6566 if len (passphrase ) == 0 :
6667 passphrase = None
6768 else :
@@ -74,6 +75,13 @@ def pem2jwk(filename: str, kid: str, kty: Optional[str] = None, private: bool =
7475 jwk = pem2rsa (filename , kid , private = False )
7576 else :
7677 raise ValueError ("Unknown key type" )
78+ elif 'BEGIN PRIVATE KEY' in header :
79+ if kty is not None and kty == 'EC' :
80+ jwk = pem2ec (filename , kid , private = True , passphrase = passphrase )
81+ elif kty is not None and kty == 'RSA' :
82+ jwk = pem2rsa (filename , kid , private = True , passphrase = passphrase )
83+ else :
84+ raise ValueError ("Unknown key type" )
7785 elif 'BEGIN EC PRIVATE KEY' in header :
7886 jwk = pem2ec (filename , kid , private = True , passphrase = passphrase )
7987 elif 'BEGIN EC PUBLIC KEY' in header :
@@ -88,15 +96,16 @@ def pem2jwk(filename: str, kid: str, kty: Optional[str] = None, private: bool =
8896 return jwk
8997
9098
91- def export_jwk (jwk : JWK , private : bool = False , encrypt : bool = False ) -> bytes :
99+ def export_jwk (jwk : JWK , private : bool = False , encrypt : bool = False , passphrase : Optional [ str ] = None ) -> bytes :
92100 """Export JWK as PEM/bin"""
93101
94102 if jwk .kty == 'oct' :
95103 return jwk .key
96104
97105 if private :
98106 if encrypt :
99- passphrase = getpass ('Private key passphrase: ' )
107+ if passphrase is None :
108+ passphrase = getpass ('Private key passphrase: ' )
100109 else :
101110 passphrase = None
102111 if passphrase :
0 commit comments