Skip to content

Commit d5b02bb

Browse files
authored
Merge pull request #21 from jschlyter/export_jwks_usage
add usage argument to KeyJar.export_jwks()
2 parents b3f71e8 + 131dbc0 commit d5b02bb

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/cryptojwt/key_jar.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ def find(self, source, issuer):
373373

374374
return None
375375

376-
def export_jwks(self, private=False, issuer=""):
376+
def export_jwks(self, private=False, issuer="", usage=None):
377377
"""
378378
Produces a dictionary that later can be easily mapped into a
379379
JSON string representing a JWKS.
@@ -385,7 +385,7 @@ def export_jwks(self, private=False, issuer=""):
385385
keys = []
386386
for kb in self.issuer_keys[issuer]:
387387
keys.extend([k.serialize(private) for k in kb.keys() if
388-
k.inactive_since == 0])
388+
k.inactive_since == 0 and (usage is None or (hasattr(k, 'use') and k.use == usage))])
389389
return {"keys": keys}
390390

391391
def export_jwks_as_json(self, private=False, issuer=""):

tests/test_04_key_jar.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,21 @@ def test_build_keyjar():
206206
assert len(keyjar.get('enc')) == 1 # 1 for encryption
207207

208208

209+
def test_build_keyjar_usage():
210+
keys = [
211+
{"type": "RSA", "use": ["enc", "sig"]},
212+
{"type": "EC", "crv": "P-256", "use": ["sig"]},
213+
{"type": "oct", "use": ["enc"]},
214+
{"type": "oct", "use": ["enc"]},
215+
]
216+
217+
keyjar = build_keyjar(keys)
218+
jwks_sig = keyjar.export_jwks(usage='sig')
219+
jwks_enc = keyjar.export_jwks(usage='enc')
220+
assert len(jwks_sig.get('keys')) == 2 # A total of 2 keys with use=sig
221+
assert len(jwks_enc.get('keys')) == 3 # A total of 3 keys with use=enc
222+
223+
209224
def test_build_keyjar_missing(tmpdir):
210225
keys = [
211226
{

0 commit comments

Comments
 (0)