@@ -54,7 +54,7 @@ def bin2jwk(filename: str, kid: str) -> bytes:
54
54
return SYMKey (kid = kid , key = content )
55
55
56
56
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 :
58
58
"""Read PEM from filename and return JWK"""
59
59
with open (filename , 'rt' ) as file :
60
60
content = file .readlines ()
@@ -67,7 +67,14 @@ def pem2jwk(filename: str, kid: str, private: bool = False) -> JWK:
67
67
else :
68
68
passphrase = None
69
69
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 :
71
78
jwk = pem2ec (filename , kid , private = True , passphrase = passphrase )
72
79
elif 'BEGIN EC PUBLIC KEY' in header :
73
80
jwk = pem2ec (filename , kid , private = False )
@@ -134,6 +141,10 @@ def main():
134
141
dest = 'kid' ,
135
142
metavar = 'key_id' ,
136
143
help = 'Key ID' )
144
+ parser .add_argument ('--kty' ,
145
+ dest = 'kty' ,
146
+ metavar = 'type' ,
147
+ help = 'Key type' )
137
148
parser .add_argument ('--private' ,
138
149
dest = 'private' ,
139
150
action = 'store_true' ,
@@ -152,10 +163,10 @@ def main():
152
163
serialized = export_jwk (jwk , args .private )
153
164
output_bytes (data = serialized , binary = (jwk .kty == 'oct' ), filename = args .output )
154
165
elif f .endswith ('.bin' ):
155
- jwk = bin2jwk (f , args .kid )
166
+ jwk = bin2jwk (filename = f , kid = args .kid )
156
167
output_jwk (jwk = jwk , private = True , filename = args .output )
157
168
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 )
159
170
output_jwk (jwk = jwk , private = args .private , filename = args .output )
160
171
else :
161
172
exit (- 1 )
0 commit comments