Skip to content

Commit d4908be

Browse files
committed
better tests
set salt on password only
1 parent 03af3f5 commit d4908be

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

src/cryptojwt/jwe/fernet.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,13 @@ class FernetEncrypter(Encrypter):
1717
def __init__(
1818
self,
1919
password: Optional[str] = None,
20-
key: Optional[bytes] = None,
2120
salt: Optional[bytes] = "",
21+
key: Optional[bytes] = None,
2222
hash_alg: Optional[str] = "SHA256",
2323
digest_size: Optional[int] = 0,
2424
iterations: Optional[int] = DEFAULT_ITERATIONS,
2525
):
2626
Encrypter.__init__(self)
27-
if not salt:
28-
salt = os.urandom(16)
29-
else:
30-
salt = as_bytes(salt)
3127

3228
if password is not None:
3329
_alg = getattr(hashes, hash_alg)
@@ -36,12 +32,15 @@ def __init__(
3632
_algorithm = _alg(digest_size)
3733
else:
3834
_algorithm = _alg()
35+
salt = as_bytes(salt) if salt else os.urandom(16)
3936
kdf = PBKDF2HMAC(algorithm=_algorithm, length=32, salt=salt, iterations=iterations)
4037
self.key = base64.urlsafe_b64encode(kdf.derive(as_bytes(password)))
4138
elif key is not None:
39+
if not isinstance(key, bytes):
40+
raise TypeError("Raw key must be bytes")
4241
if len(key) != 32:
4342
raise ValueError("Raw key must be 32 bytes")
44-
self.key = base64.urlsafe_b64encode(as_bytes(key))
43+
self.key = base64.urlsafe_b64encode(key)
4544
else:
4645
self.key = Fernet.generate_key()
4746

tests/test_07_jwe.py

+7
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,13 @@ def test_fernet_symkey():
668668
assert resp == plain
669669

670670

671+
def test_fernet_bad():
672+
with pytest.raises(TypeError):
673+
encrypter = FernetEncrypter(key="xyzzy")
674+
with pytest.raises(ValueError):
675+
encrypter = FernetEncrypter(key=os.urandom(16))
676+
677+
671678
def test_fernet_bytes():
672679
key = os.urandom(32)
673680

0 commit comments

Comments
 (0)