Skip to content

Commit 2907d43

Browse files
committed
handle more key conversions
1 parent ff5d3be commit 2907d43

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/cryptojwt/tools/keyconv.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)