@@ -54,7 +54,7 @@ def bin2jwk(filename: str, kid: str) -> bytes:
5454 return SYMKey (kid = kid , key = content )
5555
5656
57- def pem2jwk (filename : str , kid : str , private : bool = False ) -> JWK :
57+ def pem2jwk (filename : str , kid : str , kty : Optional [ str ] = None , private : bool = False ) -> JWK :
5858 """Read PEM from filename and return JWK"""
5959 with open (filename , 'rt' ) as file :
6060 content = file .readlines ()
@@ -67,7 +67,14 @@ def pem2jwk(filename: str, kid: str, private: bool = False) -> JWK:
6767 else :
6868 passphrase = None
6969
70- if 'BEGIN EC PRIVATE KEY' in header :
70+ if 'BEGIN PUBLIC KEY' in header :
71+ if kty is not None and kty = 'EC' :
72+ jwk = pem2ec (filename , kid , private = False )
73+ elif kty is not None and kty = 'RSA' :
74+ jwk = pem2rsa (filename , kid , private = False )
75+ else :
76+ raise ValueError ("Unknown key type" )
77+ elif 'BEGIN EC PRIVATE KEY' in header :
7178 jwk = pem2ec (filename , kid , private = True , passphrase = passphrase )
7279 elif 'BEGIN EC PUBLIC KEY' in header :
7380 jwk = pem2ec (filename , kid , private = False )
@@ -134,6 +141,10 @@ def main():
134141 dest = 'kid' ,
135142 metavar = 'key_id' ,
136143 help = 'Key ID' )
144+ parser .add_argument ('--kty' ,
145+ dest = 'kty' ,
146+ metavar = 'type' ,
147+ help = 'Key type' )
137148 parser .add_argument ('--private' ,
138149 dest = 'private' ,
139150 action = 'store_true' ,
@@ -152,10 +163,10 @@ def main():
152163 serialized = export_jwk (jwk , args .private )
153164 output_bytes (data = serialized , binary = (jwk .kty == 'oct' ), filename = args .output )
154165 elif f .endswith ('.bin' ):
155- jwk = bin2jwk (f , args .kid )
166+ jwk = bin2jwk (filename = f , kid = args .kid )
156167 output_jwk (jwk = jwk , private = True , filename = args .output )
157168 elif f .endswith ('.pem' ):
158- jwk = pem2jwk (f , args .kid , args .private )
169+ jwk = pem2jwk (filename = f , kid = args .kid , private = args .private , kty = args . kty )
159170 output_jwk (jwk = jwk , private = args .private , filename = args .output )
160171 else :
161172 exit (- 1 )
0 commit comments