Skip to content

Commit c03d7c8

Browse files
authored
Merge pull request #147 from jschlyter/p256k
Support for P-256K/ES256K
2 parents 2312639 + 4488a73 commit c03d7c8

File tree

7 files changed

+19
-1
lines changed

7 files changed

+19
-1
lines changed

src/cryptojwt/jwk/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def __init__(
6969
"RS384",
7070
"RS512",
7171
"ES256",
72+
"ES256K",
7273
"ES384",
7374
"ES512",
7475
"PS256",
@@ -86,6 +87,7 @@ def __init__(
8687
"RS384",
8788
"RS512",
8889
"ES256",
90+
"ES256K",
8991
"ES384",
9092
"ES512",
9193
"PS256",

src/cryptojwt/jwk/ec.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"P-256": ec.SECP256R1,
2929
"P-224": ec.SECP224R1,
3030
"P-192": ec.SECP192R1,
31+
"P-256K": ec.SECP256K1,
3132
}
3233

3334
# Inverted NIST2SEC dictionary

src/cryptojwt/jws/dsa.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ def __init__(self, algorithm="ES256"):
1616
if algorithm == "ES256":
1717
self.hash_algorithm = hashes.SHA256
1818
self.curve_name = "secp256r1"
19+
elif algorithm == "ES256K":
20+
self.hash_algorithm = hashes.SHA256
21+
self.curve_name = "secp256k1"
1922
elif algorithm == "ES384":
2023
self.hash_algorithm = hashes.SHA384
2124
self.curve_name = "secp384r1"

src/cryptojwt/jws/jws.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"RS384": RSASigner("RS384"),
4242
"RS512": RSASigner("RS512"),
4343
"ES256": ECDSASigner("ES256"),
44+
"ES256K": ECDSASigner("ES256K"),
4445
"ES384": ECDSASigner("ES384"),
4546
"ES512": ECDSASigner("ES512"),
4647
"PS256": PSSSigner("SHA256"),

src/cryptojwt/key_bundle.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,6 +1364,8 @@ def key_by_alg(alg: str):
13641364
elif alg.startswith("ES"):
13651365
if alg == "ES256":
13661366
return key_gen("EC", crv="P-256")
1367+
elif alg == "ES256K":
1368+
return key_gen("EC", crv="P-256K")
13671369
elif alg == "ES384":
13681370
return key_gen("EC", crv="P-384")
13691371
elif alg == "ES512":

tests/test_06_jws.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,12 @@ def test_jws_mm():
511511

512512
@pytest.mark.parametrize(
513513
"ec_func,alg",
514-
[(ec.SECP256R1, "ES256"), (ec.SECP384R1, "ES384"), (ec.SECP521R1, "ES512")],
514+
[
515+
(ec.SECP256R1, "ES256"),
516+
(ec.SECP384R1, "ES384"),
517+
(ec.SECP521R1, "ES512"),
518+
(ec.SECP256K1, "ES256K"),
519+
],
515520
)
516521
def test_signer_es(ec_func, alg):
517522
payload = "Please take a moment to register today"

tests/test_09_jwt.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ def test_msg_cls():
212212
{"type": "RSA", "use": ["sig"]},
213213
{"type": "RSA", "use": ["enc"]},
214214
{"type": "EC", "crv": "P-256", "use": ["sig"]},
215+
{"type": "EC", "crv": "P-256K", "use": ["sig"]},
215216
{"type": "EC", "crv": "P-384", "use": ["sig"]},
216217
]
217218

@@ -230,6 +231,9 @@ def test_pick_key():
230231
_k = pick_key(keys, "sig", "ES384")
231232
assert len(_k) == 1
232233

234+
_k = pick_key(keys, "sig", "ES256K")
235+
assert len(_k) == 1
236+
233237
_k = pick_key(keys, "enc", "RSA-OAEP-256")
234238
assert len(_k) == 1
235239

0 commit comments

Comments
 (0)