Skip to content

Commit 1f4ed48

Browse files
committed
add key conversion
1 parent f6e8a5d commit 1f4ed48

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

src/cryptojwt/tools/keyconv.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
from cryptojwt.jwk.ec import import_private_ec_key_from_file
1515
from cryptojwt.jwk.ec import import_public_ec_key_from_file
1616
from cryptojwt.jwk.hmac import SYMKey
17+
from cryptojwt.jwk.okp import OKPKey
18+
from cryptojwt.jwk.okp import import_private_okp_key_from_file
19+
from cryptojwt.jwk.okp import import_public_okp_key_from_file
1720
from cryptojwt.jwk.rsa import RSAKey
1821
from cryptojwt.jwk.rsa import import_private_rsa_key_from_file
1922
from cryptojwt.jwk.rsa import import_public_rsa_key_from_file
@@ -59,6 +62,22 @@ def pem2ec(
5962
return jwk
6063

6164

65+
def pem2okp(
66+
filename: str,
67+
kid: Optional[str] = None,
68+
private: bool = False,
69+
passphrase: Optional[str] = None,
70+
) -> JWK:
71+
"""Convert OKP key from PEM to JWK"""
72+
if private:
73+
key = import_private_okp_key_from_file(filename, passphrase)
74+
else:
75+
key = import_public_okp_key_from_file(filename)
76+
jwk = OKPKey(kid=kid)
77+
jwk.load_key(key)
78+
return jwk
79+
80+
6281
def bin2jwk(filename: str, kid: str) -> JWK:
6382
"""Read raw key from filename and return JWK"""
6483
with open(filename, "rb") as file:
@@ -91,13 +110,17 @@ def pem2jwk(
91110
jwk = pem2ec(filename, kid, private=False)
92111
elif kty is not None and kty == "RSA":
93112
jwk = pem2rsa(filename, kid, private=False)
113+
elif kty is not None and kty == "OKP":
114+
jwk = pem2okp(filename, kid, private=False)
94115
else:
95116
raise ValueError("Unknown key type")
96117
elif "BEGIN PRIVATE KEY" in header:
97118
if kty is not None and kty == "EC":
98119
jwk = pem2ec(filename, kid, private=True, passphrase=passphrase)
99120
elif kty is not None and kty == "RSA":
100121
jwk = pem2rsa(filename, kid, private=True, passphrase=passphrase)
122+
elif kty is not None and kty == "OKP":
123+
jwk = pem2okp(filename, kid, private=True, passphrase=passphrase)
101124
else:
102125
raise ValueError("Unknown key type")
103126
elif "BEGIN EC PRIVATE KEY" in header:

0 commit comments

Comments
 (0)