Skip to content

Commit 3092472

Browse files
committed
Improve SYMKey init (allow setting k and/or key)
1 parent e95fb93 commit 3092472

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ select = [
7474
# isort
7575
"I",
7676
]
77-
ignore = ["E501", "I001", "SIM102", "UP006", "UP035", "UP045", "UP007"]
77+
ignore = ["E501", "I001", "SIM102", "UP006", "UP035", "UP045", "UP007", "UP038"]
7878
exclude = ["examples/*"]
7979

8080
[tool.ruff.lint.isort]

src/cryptojwt/jwk/hmac.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ def __init__(
5959
if isinstance(self.k, str):
6060
self.k = self.k.encode("utf-8")
6161
self.key = b64d(bytes(self.k))
62+
elif self.key and not self.k:
63+
self.k = b64e(self.key)
64+
65+
if self.k and self.key and self.k != b64e(self.key):
66+
raise JWKException("k and key don't match")
6267

6368
if len(self.key) < 16:
6469
raise UnsupportedAlgorithm("client_secret too short, it should be at least 16 digits")

tests/test_02_jwk.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from cryptojwt.exception import (
1313
DeSerializationNotPossible,
14+
JWKException,
1415
UnsupportedAlgorithm,
1516
WrongUsage,
1617
)
@@ -660,6 +661,24 @@ def test_dump_load():
660661
assert key.use == "sig"
661662

662663

664+
def test_key_init():
665+
# init with only key
666+
secret1 = os.urandom(16)
667+
k1 = SYMKey(key=secret1, alg="HS256")
668+
assert k1.k == b64e(secret1)
669+
670+
# init with only k (base64 encoded key)
671+
secret2 = os.urandom(16)
672+
k2 = SYMKey(k=b64e(secret2), alg="HS256")
673+
assert k2.key == secret2
674+
675+
# init with different key and k should fail
676+
secret3a = os.urandom(16)
677+
secret3b = os.urandom(16)
678+
with pytest.raises(JWKException):
679+
_ = SYMKey(k=b64e(secret3a), key=secret3b, alg="HS256")
680+
681+
663682
def test_key_ops():
664683
sk = SYMKey(
665684
key="df34db91c16613deba460752522d28f6ebc8a73d0d9185836270c26b",

0 commit comments

Comments
 (0)