Skip to content

Commit 4bc5bf3

Browse files
committed
fix: use MissingKeyTypeError, InvalidKeyIdError errors
1 parent b603ea5 commit 4bc5bf3

4 files changed

Lines changed: 23 additions & 12 deletions

File tree

src/joserfc/_keys.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from .rfc7518.rsa_key import RSAKey
77
from .rfc7518.ec_key import ECKey
88
from .rfc8037.okp_key import OKPKey
9+
from .errors import InvalidKeyIdError, InvalidKeyTypeError, MissingKeyTypeError
910
from .util import to_bytes
1011

1112
__all__ = [
@@ -62,10 +63,10 @@ def import_key(
6263
if "kty" in data:
6364
key_type = data["kty"] # type: ignore[assignment]
6465
else:
65-
raise ValueError("Missing key type")
66+
raise MissingKeyTypeError("Missing key type")
6667

6768
if key_type not in cls.key_types:
68-
raise ValueError(f'Invalid key type: "{key_type}"')
69+
raise InvalidKeyTypeError(f'Invalid key type: "{key_type}"')
6970

7071
if isinstance(data, str):
7172
data = to_bytes(data)
@@ -92,7 +93,7 @@ def generate_key(
9293
JWKRegistry.generate_key("EC", "P-256")
9394
"""
9495
if key_type not in cls.key_types:
95-
raise ValueError(f'Invalid key type: "{key_type}"')
96+
raise InvalidKeyTypeError(f'Invalid key type: "{key_type}"')
9697

9798
key_cls = cls.key_types[key_type]
9899
return key_cls.generate_key(crv_or_size, parameters, private, auto_kid) # type: ignore[arg-type]
@@ -138,7 +139,7 @@ def get_by_kid(self, kid: str | None = None) -> Key:
138139
for key in self.keys:
139140
if key.kid == kid:
140141
return key
141-
raise ValueError(f'No key for kid: "{kid}"')
142+
raise InvalidKeyIdError(f'No key for kid: "{kid}"')
142143

143144
def pick_random_key(self, algorithm: str) -> t.Optional[Key]:
144145
key_types = self.algorithm_keys.get(algorithm)

src/joserfc/errors.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,18 @@ class InvalidKeyLengthError(JoseError):
3737
error = "invalid_key_length"
3838

3939

40+
class MissingKeyTypeError(JoseError):
41+
error = "missing_key_type"
42+
43+
4044
class InvalidKeyTypeError(JoseError):
4145
error = "invalid_key_type"
4246

4347

48+
class InvalidKeyIdError(JoseError):
49+
error = "invalid_key_id"
50+
51+
4452
class InvalidExchangeKeyError(JoseError):
4553
error = "invalid_exchange_key"
4654
description = "Invalid key for exchanging shared key"

tests/jwk/test_jwk_set.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from unittest import TestCase
2+
3+
from joserfc.errors import InvalidKeyTypeError, InvalidKeyIdError
24
from joserfc.jwk import KeySet, RSAKey, ECKey, OctKey
35
from tests.keys import read_key
46

@@ -26,7 +28,7 @@ def test_generate_and_import_key_set(self):
2628
self.assertEqual(len(jwks2.keys), 4)
2729

2830
def test_generate_key_set_errors(self):
29-
self.assertRaises(ValueError, KeySet.generate_key_set, 'NOT_FOUND', 2048)
31+
self.assertRaises(InvalidKeyTypeError, KeySet.generate_key_set, 'NOT_FOUND', 2048)
3032

3133
def test_initialize_key_set(self):
3234
keys = []
@@ -57,7 +59,7 @@ def test_key_set_methods(self):
5759

5860
k1 = key_set.get_by_kid(key["kid"])
5961
self.assertEqual(k1.kid, key["kid"])
60-
self.assertRaises(ValueError, key_set.get_by_kid, "invalid")
62+
self.assertRaises(InvalidKeyIdError, key_set.get_by_kid, "invalid")
6163

6264
key_set = KeySet.generate_key_set("oct", 8, count=1)
6365
k2 = key_set.get_by_kid()

tests/jwk/test_key_methods.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from joserfc.errors import (
66
UnsupportedKeyAlgorithmError,
77
UnsupportedKeyUseError,
8-
UnsupportedKeyOperationError,
8+
UnsupportedKeyOperationError, InvalidKeyTypeError, MissingKeyTypeError, InvalidKeyIdError,
99
)
1010

1111
register_key_set()
@@ -66,14 +66,14 @@ def test_guess_key_set(self):
6666
guest = Guest()
6767
guest._headers["alg"] = "HS256"
6868

69-
self.assertRaises(ValueError, guess_key, key_set, guest)
69+
self.assertRaises(InvalidKeyIdError, guess_key, key_set, guest)
7070
key1 = guess_key(key_set, guest, True)
7171
self.assertIsInstance(key1, OctKey)
7272
guess_key(key_set, guest)
7373

7474
guest = Guest()
7575
guest._headers["alg"] = "RS256"
76-
self.assertRaises(ValueError, guess_key, key_set, guest)
76+
self.assertRaises(InvalidKeyIdError, guess_key, key_set, guest)
7777
key2 = guess_key(key_set, guest, True)
7878
self.assertIsInstance(key2, RSAKey)
7979

@@ -98,12 +98,12 @@ def test_import_key(self):
9898
key = JWKRegistry.import_key(data)
9999
self.assertIsInstance(key, OctKey)
100100

101-
self.assertRaises(ValueError, JWKRegistry.import_key, "secret", "invalid")
101+
self.assertRaises(InvalidKeyTypeError, JWKRegistry.import_key, "secret", "invalid")
102102

103103
def test_generate_key(self):
104104
key = JWKRegistry.generate_key("oct", 8)
105105
self.assertIsInstance(key, OctKey)
106-
self.assertRaises(ValueError, JWKRegistry.generate_key, "invalid", 8)
106+
self.assertRaises(InvalidKeyTypeError, JWKRegistry.generate_key, "invalid", 8)
107107

108108
def test_check_use(self):
109109
key = OctKey.import_key("secret", {"use": "sig"})
@@ -156,4 +156,4 @@ def test_check_ops(self):
156156
)
157157

158158
def test_import_without_kty(self):
159-
self.assertRaises(ValueError, JWKRegistry.import_key, {})
159+
self.assertRaises(MissingKeyTypeError, JWKRegistry.import_key, {})

0 commit comments

Comments
 (0)