Skip to content

Commit 241400f

Browse files
committed
New keys should always have a kid.
1 parent 7659673 commit 241400f

File tree

6 files changed

+28
-10
lines changed

6 files changed

+28
-10
lines changed

src/cryptojwt/jwk/hmac.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,7 @@ def __eq__(self, other):
146146

147147

148148
def new_sym_key(use='', bytes=24, kid=''):
149-
return SYMKey(use=use, kid=kid, key=as_unicode(os.urandom(bytes)))
149+
_key = SYMKey(use=use, kid=kid, key=as_unicode(os.urandom(bytes)))
150+
if not _key.kid:
151+
_key.add_kid()
152+
return _key

src/cryptojwt/jwk/jwk.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ def jwk_wrap(key, use="", kid=""):
171171
else:
172172
raise Exception("Unknown key type:key=" + str(type(key)))
173173

174+
if not kspec.kid:
175+
kspec.add_kid()
176+
174177
kspec.serialize()
175178
return kspec
176179

src/cryptojwt/jwk/rsa.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ def new_rsa_key(key_size=2048, kid='', public_exponent=65537, **kwargs):
527527
backend=default_backend())
528528

529529
_rk = RSAKey(priv_key=_key, kid=kid, **kwargs)
530-
if not kid:
530+
if not _rk.kid:
531531
_rk.add_kid()
532532

533533
return _rk

src/cryptojwt/key_bundle.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,8 @@ def do_keys(self, keys):
261261
LOGGER.warning('While loading keys: %s', err)
262262
else:
263263
if _key not in self._keys:
264+
if not _key.kid:
265+
_key.add_kid()
264266
self._keys.append(_key)
265267
flag = 1
266268
break
@@ -308,6 +310,8 @@ def do_local_der(self, filename, keytype, keyusage=None, kid=''):
308310
_key.use = use
309311
if kid:
310312
_key.kid = kid
313+
if not _key.kid:
314+
_key.add_kid()
311315
self._keys.append(_key)
312316

313317
self.last_updated = time.time()

tests/test_02_jwk.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,15 @@ def test_kspec():
111111
def test_dumps():
112112
_ckey = import_rsa_key_from_cert_file(CERT)
113113
jwk = jwk_wrap(_ckey).serialize()
114-
assert _eq(list(jwk.keys()), ["kty", "e", "n"])
114+
assert _eq(list(jwk.keys()), ["kty", "e", "n", 'kid'])
115115

116116

117117
def test_import_rsa_key():
118118
_ckey = import_private_rsa_key_from_file(full_path(KEY))
119119
assert isinstance(_ckey, rsa.RSAPrivateKey)
120120
djwk = jwk_wrap(_ckey).to_dict()
121121

122-
assert _eq(djwk.keys(), ["kty", "e", "n", "p", "q", "d"])
122+
assert _eq(djwk.keys(), ["kty", "e", "n", "p", "q", "d", "kid"])
123123
assert djwk[
124124
"n"] == '5zbNbHIYIkGGJ3RGdRKkYmF4gOorv5eDuUKTVtuu3VvxrpOWvwnFV' \
125125
'-NY0LgqkQSMMyVzodJE3SUuwQTUHPXXY5784vnkFqzPRx6bHgPxKz7XfwQjEBTafQTMmOeYI8wFIOIHY5i0RWR-gxDbh_D5TXuUqScOOqR47vSpIbUH-nc'

tests/test_03_key_bundle.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ def test_with_2_sym_key():
219219
assert len(kb) == 2
220220

221221
assert kb.get_key_with_kid('kid') is None
222-
assert kb.kids() == []
222+
assert len(kb.kids()) == 2
223223

224224

225225
def test_remove_sym():
@@ -326,7 +326,9 @@ def test_keybundle_from_local_der():
326326
assert len(kb) == 1
327327
keys = kb.get('rsa')
328328
assert len(keys) == 1
329-
assert isinstance(keys[0], RSAKey)
329+
_key = keys[0]
330+
assert isinstance(_key, RSAKey)
331+
assert _key.kid
330332

331333

332334
def test_ec_keybundle_from_local_der():
@@ -336,7 +338,9 @@ def test_ec_keybundle_from_local_der():
336338
assert len(kb) == 1
337339
keys = kb.get('ec')
338340
assert len(keys) == 1
339-
assert isinstance(keys[0], ECKey)
341+
_key = keys[0]
342+
assert _key.kid
343+
assert isinstance(_key, ECKey)
340344

341345

342346
def test_keybundle_from_local_der_update():
@@ -346,15 +350,19 @@ def test_keybundle_from_local_der_update():
346350
assert len(kb) == 1
347351
keys = kb.get('rsa')
348352
assert len(keys) == 1
349-
assert isinstance(keys[0], RSAKey)
353+
_key = keys[0]
354+
assert _key.kid
355+
assert isinstance(_key, RSAKey)
350356

351357
kb.update()
352358

353359
# Nothing should change
354360
assert len(kb) == 1
355361
keys = kb.get('rsa')
356362
assert len(keys) == 1
357-
assert isinstance(keys[0], RSAKey)
363+
_key = keys[0]
364+
assert _key.kid
365+
assert isinstance(_key, RSAKey)
358366

359367

360368
def test_creat_jwks_sym():
@@ -363,7 +371,7 @@ def test_creat_jwks_sym():
363371
_jwks = kb.jwks()
364372
_loc = json.loads(_jwks)
365373
assert list(_loc.keys()) == ["keys"]
366-
assert set(_loc['keys'][0].keys()) == {'kty', 'use', 'k'}
374+
assert set(_loc['keys'][0].keys()) == {'kty', 'use', 'k', 'kid'}
367375

368376

369377
def test_keybundle_from_local_jwks_file():

0 commit comments

Comments
 (0)