Skip to content

Commit a8a95b3

Browse files
committed
fix!: rename JWS and JWE Algorithm model class names to prevent name conflicts
1 parent 288f7e2 commit a8a95b3

File tree

4 files changed

+62
-45
lines changed

4 files changed

+62
-45
lines changed

src/joserfc/_rfc7518/jwe_algs.py

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
)
3535

3636

37-
class DirectAlgModel(JWEDirectEncryption):
37+
class DirectAlgEncryption(JWEDirectEncryption):
3838
name = "dir"
3939
description = "Direct use of a shared symmetric key"
4040
recommended = True
@@ -49,7 +49,7 @@ def compute_cek(self, size: int, recipient: Recipient[OctKey]) -> bytes:
4949
return cek
5050

5151

52-
class RSAAlgModel(JWEKeyEncryption):
52+
class RSAAlgKeyEncryption(JWEKeyEncryption):
5353
#: A key of size 2048 bits or larger MUST be used with these algorithms
5454
#: RSA1_5, RSA-OAEP, RSA-OAEP-256
5555
key_size = 2048
@@ -83,7 +83,7 @@ def decrypt_cek(self, recipient: Recipient[RSAKey]) -> bytes:
8383
return cek
8484

8585

86-
class AESAlgModel(JWEKeyWrapping):
86+
class AESAlgKeyWrapping(JWEKeyWrapping):
8787
def __init__(self, key_size: int, recommended: bool = False):
8888
self.name = f"A{key_size}KW"
8989
self.description = f"AES Key Wrap using {key_size}-bit key"
@@ -118,7 +118,7 @@ def decrypt_cek(self, recipient: Recipient[OctKey]) -> bytes:
118118
return self.unwrap_cek(recipient.encrypted_key, op_key)
119119

120120

121-
class AESGCMAlgModel(JWEKeyWrapping):
121+
class AESGCMAlgKeyWrapping(JWEKeyWrapping):
122122
more_header_registry = {
123123
"iv": HeaderParameter("Initialization vector", "str", True),
124124
"tag": HeaderParameter("Authentication tag", "str", True),
@@ -179,7 +179,7 @@ def decrypt_cek(self, recipient: Recipient[OctKey]) -> bytes:
179179
return cek
180180

181181

182-
class ECDHESAlgModel(JWEKeyAgreement):
182+
class ECDHESAlgKeyAgreement(JWEKeyAgreement):
183183
key_types = ["EC", "OKP"]
184184
more_header_registry = {
185185
"epk": HeaderParameter("Ephemeral Public Key", "jwk", True),
@@ -225,7 +225,7 @@ def decrypt_agreed_upon_key(self, enc: JWEEncModel, recipient: Recipient[ECKey])
225225
return derive_key_for_concat_kdf(shared_key, headers, enc.cek_size, self.key_size)
226226

227227

228-
class PBES2HSAlgModel(JWEKeyEncryption):
228+
class PBES2HSAlgKeyEncryption(JWEKeyEncryption):
229229
# https://www.rfc-editor.org/rfc/rfc7518#section-4.8
230230
key_size: int
231231
more_header_registry = {
@@ -293,40 +293,47 @@ def decrypt_cek(self, recipient: Recipient[OctKey]) -> bytes:
293293
return self.key_wrapping.unwrap_cek(recipient.encrypted_key, kek)
294294

295295

296-
RSA1_5 = RSAAlgModel("RSA1_5", "RSAES-PKCS1-v1_5", padding.PKCS1v15())
296+
RSA1_5 = RSAAlgKeyEncryption("RSA1_5", "RSAES-PKCS1-v1_5", padding.PKCS1v15())
297297
RSA1_5.security_warning = 'JWE algorithm "RSA1_5" is deprecated, via draft-ietf-jose-deprecate-none-rsa15-02'
298298

299-
A128KW = AESAlgModel(128, True) # A128KW, Recommended
300-
A192KW = AESAlgModel(192) # A192KW
301-
A256KW = AESAlgModel(256, True) # A256KW, Recommended
299+
A128KW = AESAlgKeyWrapping(128, True) # A128KW, Recommended
300+
A192KW = AESAlgKeyWrapping(192) # A192KW
301+
A256KW = AESAlgKeyWrapping(256, True) # A256KW, Recommended
302302

303303

304304
#: https://www.rfc-editor.org/rfc/rfc7518#section-4.1
305305
JWE_ALG_MODELS: list[JWEAlgModel] = [
306306
RSA1_5,
307-
RSAAlgModel(
307+
RSAAlgKeyEncryption(
308308
"RSA-OAEP",
309309
"RSAES OAEP using default parameters",
310310
padding.OAEP(padding.MGF1(hashes.SHA1()), hashes.SHA1(), None),
311311
True,
312312
), # Recommended+
313-
RSAAlgModel(
313+
RSAAlgKeyEncryption(
314314
"RSA-OAEP-256",
315315
"RSAES OAEP using SHA-256 and MGF1 with SHA-256",
316316
padding.OAEP(padding.MGF1(hashes.SHA256()), hashes.SHA256(), None),
317317
),
318318
A128KW,
319319
A192KW,
320320
A256KW,
321-
DirectAlgModel(), # dir, Recommended
322-
ECDHESAlgModel(None), # ECDH-ES, Recommended+
323-
ECDHESAlgModel(A128KW), # ECDH-ES+A128KW, Recommended
324-
ECDHESAlgModel(A192KW), # ECDH-ES+A192KW
325-
ECDHESAlgModel(A256KW), # ECDH-ES+A256KW, Recommended
326-
AESGCMAlgModel(128), # A128GCMKW
327-
AESGCMAlgModel(192), # A192GCMKW
328-
AESGCMAlgModel(256), # A256GCMKW
329-
PBES2HSAlgModel(256, A128KW), # PBES2-HS256+A128KW
330-
PBES2HSAlgModel(384, A192KW), # PBES2-HS384+A192KW
331-
PBES2HSAlgModel(512, A256KW), # PBES2-HS512+A256KW
321+
DirectAlgEncryption(), # dir, Recommended
322+
ECDHESAlgKeyAgreement(None), # ECDH-ES, Recommended+
323+
ECDHESAlgKeyAgreement(A128KW), # ECDH-ES+A128KW, Recommended
324+
ECDHESAlgKeyAgreement(A192KW), # ECDH-ES+A192KW
325+
ECDHESAlgKeyAgreement(A256KW), # ECDH-ES+A256KW, Recommended
326+
AESGCMAlgKeyWrapping(128), # A128GCMKW
327+
AESGCMAlgKeyWrapping(192), # A192GCMKW
328+
AESGCMAlgKeyWrapping(256), # A256GCMKW
329+
PBES2HSAlgKeyEncryption(256, A128KW), # PBES2-HS256+A128KW
330+
PBES2HSAlgKeyEncryption(384, A192KW), # PBES2-HS384+A192KW
331+
PBES2HSAlgKeyEncryption(512, A256KW), # PBES2-HS512+A256KW
332332
]
333+
334+
# compatible alias
335+
DirectAlgModel = DirectAlgEncryption
336+
AESAlgModel = AESAlgKeyWrapping
337+
ECDHESAlgModel = ECDHESAlgKeyAgreement
338+
AESGCMAlgModel = AESGCMAlgKeyWrapping
339+
PBES2HSAlgModel = PBES2HSAlgKeyEncryption

src/joserfc/_rfc7518/jws_algs.py

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from .util import encode_int, decode_int
2828

2929

30-
class NoneAlgModel(JWSAlgModel):
30+
class NoneAlgorithm(JWSAlgModel):
3131
name = "none"
3232
description = "No digital signature or MAC performed"
3333
security_warning = 'JWS algorithm "none" is deprecated, via draft-ietf-jose-deprecate-none-rsa15-02'
@@ -39,7 +39,7 @@ def verify(self, msg: bytes, sig: bytes, key: t.Any) -> bool:
3939
return sig == b""
4040

4141

42-
class HMACAlgModel(JWSAlgModel):
42+
class HMACAlgorithm(JWSAlgModel):
4343
"""HMAC using SHA algorithms for JWS. Available algorithms:
4444
4545
- HS256: HMAC using SHA-256
@@ -68,7 +68,7 @@ def verify(self, msg: bytes, sig: bytes, key: OctKey) -> bool:
6868
return hmac.compare_digest(sig, v_sig)
6969

7070

71-
class RSAAlgModel(JWSAlgModel):
71+
class RSAAlgorithm(JWSAlgModel):
7272
"""RSA using SHA algorithms for JWS. Available algorithms:
7373
7474
- RS256: RSASSA-PKCS1-v1_5 using SHA-256
@@ -102,7 +102,7 @@ def verify(self, msg: bytes, sig: bytes, key: RSAKey) -> bool:
102102
return False
103103

104104

105-
class ECAlgModel(JWSAlgModel):
105+
class ECAlgorithm(JWSAlgModel):
106106
"""ECDSA using SHA algorithms for JWS. Available algorithms:
107107
108108
- ES256: ECDSA using P-256 and SHA-256
@@ -156,7 +156,7 @@ def verify(self, msg: bytes, sig: bytes, key: ECKey) -> bool:
156156
return False
157157

158158

159-
class RSAPSSAlgModel(JWSAlgModel):
159+
class RSAPSSAlgorithm(JWSAlgModel):
160160
"""RSASSA-PSS using SHA algorithms for JWS. Available algorithms:
161161
162162
- PS256: RSASSA-PSS using SHA-256 and MGF1 with SHA-256
@@ -190,17 +190,24 @@ def verify(self, msg: bytes, sig: bytes, key: RSAKey) -> bool:
190190

191191

192192
JWS_ALGORITHMS: list[JWSAlgModel] = [
193-
NoneAlgModel(), # none
194-
HMACAlgModel(256, True), # HS256
195-
HMACAlgModel(384), # HS384
196-
HMACAlgModel(512), # HS512
197-
RSAAlgModel(256, True), # RS256
198-
RSAAlgModel(384), # RS384
199-
RSAAlgModel(512), # RS512
200-
ECAlgModel("ES256", "P-256", 256, True),
201-
ECAlgModel("ES384", "P-384", 384),
202-
ECAlgModel("ES512", "P-521", 512),
203-
RSAPSSAlgModel(256), # PS256
204-
RSAPSSAlgModel(384), # PS384
205-
RSAPSSAlgModel(512), # PS512
193+
NoneAlgorithm(), # none
194+
HMACAlgorithm(256, True), # HS256
195+
HMACAlgorithm(384), # HS384
196+
HMACAlgorithm(512), # HS512
197+
RSAAlgorithm(256, True), # RS256
198+
RSAAlgorithm(384), # RS384
199+
RSAAlgorithm(512), # RS512
200+
ECAlgorithm("ES256", "P-256", 256, True),
201+
ECAlgorithm("ES384", "P-384", 384),
202+
ECAlgorithm("ES512", "P-521", 512),
203+
RSAPSSAlgorithm(256), # PS256
204+
RSAPSSAlgorithm(384), # PS384
205+
RSAPSSAlgorithm(512), # PS512
206206
]
207+
208+
# compatible
209+
NoneAlgModel = NoneAlgorithm
210+
HMACAlgModel = HMACAlgorithm
211+
RSAAlgModel = RSAAlgorithm
212+
ECAlgModel = ECAlgorithm
213+
RSAPSSAlgModel = RSAPSSAlgorithm

src/joserfc/_rfc8037/jws_eddsa.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from .okp_key import OKPKey
66

77

8-
class EdDSAAlgModel(JWSAlgModel):
8+
class EdDSAAlgorithm(JWSAlgModel):
99
name = "EdDSA"
1010
description = "Edwards-curve Digital Signature Algorithm for JWS"
1111
key_type = "OKP"
@@ -25,4 +25,7 @@ def verify(self, msg: bytes, sig: bytes, key: OKPKey) -> bool:
2525
return False
2626

2727

28-
EdDSA = EdDSAAlgModel()
28+
EdDSA = EdDSAAlgorithm()
29+
30+
# compatible
31+
EdDSAAlgModel = EdDSAAlgorithm

src/joserfc/_rfc8812/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from cryptography.hazmat.primitives.asymmetric.ec import SECP256K1
22
from .._rfc7518.ec_key import ECKey
3-
from .._rfc7518.jws_algs import ECAlgModel
3+
from .._rfc7518.jws_algs import ECAlgorithm
44

5-
ES256K = ECAlgModel("ES256K", "secp256k1", 256)
5+
ES256K = ECAlgorithm("ES256K", "secp256k1", 256)
66

77

88
def register_secp256k1() -> None:

0 commit comments

Comments
 (0)