summaryrefslogtreecommitdiff
path: root/tests/signing/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/signing/tests.py')
-rw-r--r--tests/signing/tests.py161
1 files changed, 83 insertions, 78 deletions
diff --git a/tests/signing/tests.py b/tests/signing/tests.py
index c375f2dbf2..15d66f29d8 100644
--- a/tests/signing/tests.py
+++ b/tests/signing/tests.py
@@ -7,66 +7,66 @@ from django.utils.crypto import InvalidAlgorithm
class TestSigner(SimpleTestCase):
-
def test_signature(self):
"signature() method should generate a signature"
- signer = signing.Signer('predictable-secret')
- signer2 = signing.Signer('predictable-secret2')
+ signer = signing.Signer("predictable-secret")
+ signer2 = signing.Signer("predictable-secret2")
for s in (
- b'hello',
- b'3098247:529:087:',
- '\u2019'.encode(),
+ b"hello",
+ b"3098247:529:087:",
+ "\u2019".encode(),
):
self.assertEqual(
signer.signature(s),
signing.base64_hmac(
- signer.salt + 'signer',
+ signer.salt + "signer",
s,
- 'predictable-secret',
+ "predictable-secret",
algorithm=signer.algorithm,
- )
+ ),
)
self.assertNotEqual(signer.signature(s), signer2.signature(s))
def test_signature_with_salt(self):
"signature(value, salt=...) should work"
- signer = signing.Signer('predictable-secret', salt='extra-salt')
+ signer = signing.Signer("predictable-secret", salt="extra-salt")
self.assertEqual(
- signer.signature('hello'),
+ signer.signature("hello"),
signing.base64_hmac(
- 'extra-salt' + 'signer',
- 'hello',
- 'predictable-secret',
+ "extra-salt" + "signer",
+ "hello",
+ "predictable-secret",
algorithm=signer.algorithm,
- )
+ ),
)
self.assertNotEqual(
- signing.Signer('predictable-secret', salt='one').signature('hello'),
- signing.Signer('predictable-secret', salt='two').signature('hello'))
+ signing.Signer("predictable-secret", salt="one").signature("hello"),
+ signing.Signer("predictable-secret", salt="two").signature("hello"),
+ )
def test_custom_algorithm(self):
- signer = signing.Signer('predictable-secret', algorithm='sha512')
+ signer = signing.Signer("predictable-secret", algorithm="sha512")
self.assertEqual(
- signer.signature('hello'),
- 'Usf3uVQOZ9m6uPfVonKR-EBXjPe7bjMbp3_Fq8MfsptgkkM1ojidN0BxYaT5HAEN1'
- 'VzO9_jVu7R-VkqknHYNvw',
+ signer.signature("hello"),
+ "Usf3uVQOZ9m6uPfVonKR-EBXjPe7bjMbp3_Fq8MfsptgkkM1ojidN0BxYaT5HAEN1"
+ "VzO9_jVu7R-VkqknHYNvw",
)
def test_invalid_algorithm(self):
- signer = signing.Signer('predictable-secret', algorithm='whatever')
+ signer = signing.Signer("predictable-secret", algorithm="whatever")
msg = "'whatever' is not an algorithm accepted by the hashlib module."
with self.assertRaisesMessage(InvalidAlgorithm, msg):
- signer.sign('hello')
+ signer.sign("hello")
def test_sign_unsign(self):
"sign/unsign should be reversible"
- signer = signing.Signer('predictable-secret')
+ signer = signing.Signer("predictable-secret")
examples = [
- 'q;wjmbk;wkmb',
- '3098247529087',
- '3098247:529:087:',
- 'jkw osanteuh ,rcuh nthu aou oauh ,ud du',
- '\u2019',
+ "q;wjmbk;wkmb",
+ "3098247529087",
+ "3098247:529:087:",
+ "jkw osanteuh ,rcuh nthu aou oauh ,ud du",
+ "\u2019",
]
for example in examples:
signed = signer.sign(example)
@@ -75,7 +75,7 @@ class TestSigner(SimpleTestCase):
self.assertEqual(example, signer.unsign(signed))
def test_sign_unsign_non_string(self):
- signer = signing.Signer('predictable-secret')
+ signer = signing.Signer("predictable-secret")
values = [
123,
1.23,
@@ -91,14 +91,14 @@ class TestSigner(SimpleTestCase):
def test_unsign_detects_tampering(self):
"unsign should raise an exception if the value has been tampered with"
- signer = signing.Signer('predictable-secret')
- value = 'Another string'
+ signer = signing.Signer("predictable-secret")
+ value = "Another string"
signed_value = signer.sign(value)
transforms = (
lambda s: s.upper(),
- lambda s: s + 'a',
- lambda s: 'a' + s[1:],
- lambda s: s.replace(':', ''),
+ lambda s: s + "a",
+ lambda s: "a" + s[1:],
+ lambda s: s.replace(":", ""),
)
self.assertEqual(value, signer.unsign(signed_value))
for transform in transforms:
@@ -106,11 +106,11 @@ class TestSigner(SimpleTestCase):
signer.unsign(transform(signed_value))
def test_sign_unsign_object(self):
- signer = signing.Signer('predictable-secret')
+ signer = signing.Signer("predictable-secret")
tests = [
- ['a', 'list'],
- 'a string \u2019',
- {'a': 'dictionary'},
+ ["a", "list"],
+ "a string \u2019",
+ {"a": "dictionary"},
]
for obj in tests:
with self.subTest(obj=obj):
@@ -124,9 +124,9 @@ class TestSigner(SimpleTestCase):
def test_dumps_loads(self):
"dumps and loads be reversible for any JSON serializable object"
objects = [
- ['a', 'list'],
- 'a string \u2019',
- {'a': 'dictionary'},
+ ["a", "list"],
+ "a string \u2019",
+ {"a": "dictionary"},
]
for o in objects:
self.assertNotEqual(o, signing.dumps(o))
@@ -138,13 +138,13 @@ class TestSigner(SimpleTestCase):
"loads should raise exception for tampered objects"
transforms = (
lambda s: s.upper(),
- lambda s: s + 'a',
- lambda s: 'a' + s[1:],
- lambda s: s.replace(':', ''),
+ lambda s: s + "a",
+ lambda s: "a" + s[1:],
+ lambda s: s.replace(":", ""),
)
value = {
- 'foo': 'bar',
- 'baz': 1,
+ "foo": "bar",
+ "baz": 1,
}
encoded = signing.dumps(value)
self.assertEqual(value, signing.loads(encoded))
@@ -153,85 +153,90 @@ class TestSigner(SimpleTestCase):
signing.loads(transform(encoded))
def test_works_with_non_ascii_keys(self):
- binary_key = b'\xe7' # Set some binary (non-ASCII key)
+ binary_key = b"\xe7" # Set some binary (non-ASCII key)
s = signing.Signer(binary_key)
self.assertEqual(
- 'foo:EE4qGC5MEKyQG5msxYA0sBohAxLC0BJf8uRhemh0BGU',
- s.sign('foo'),
+ "foo:EE4qGC5MEKyQG5msxYA0sBohAxLC0BJf8uRhemh0BGU",
+ s.sign("foo"),
)
def test_valid_sep(self):
- separators = ['/', '*sep*', ',']
+ separators = ["/", "*sep*", ","]
for sep in separators:
- signer = signing.Signer('predictable-secret', sep=sep)
+ signer = signing.Signer("predictable-secret", sep=sep)
self.assertEqual(
- 'foo%sjZQoX_FtSO70jX9HLRGg2A_2s4kdDBxz1QoO_OpEQb0' % sep,
- signer.sign('foo'),
+ "foo%sjZQoX_FtSO70jX9HLRGg2A_2s4kdDBxz1QoO_OpEQb0" % sep,
+ signer.sign("foo"),
)
def test_invalid_sep(self):
"""should warn on invalid separator"""
- msg = 'Unsafe Signer separator: %r (cannot be empty or consist of only A-z0-9-_=)'
- separators = ['', '-', 'abc']
+ msg = (
+ "Unsafe Signer separator: %r (cannot be empty or consist of only A-z0-9-_=)"
+ )
+ separators = ["", "-", "abc"]
for sep in separators:
with self.assertRaisesMessage(ValueError, msg % sep):
signing.Signer(sep=sep)
def test_verify_with_non_default_key(self):
- old_signer = signing.Signer('secret')
- new_signer = signing.Signer('newsecret', fallback_keys=['othersecret', 'secret'])
- signed = old_signer.sign('abc')
- self.assertEqual(new_signer.unsign(signed), 'abc')
+ old_signer = signing.Signer("secret")
+ new_signer = signing.Signer(
+ "newsecret", fallback_keys=["othersecret", "secret"]
+ )
+ signed = old_signer.sign("abc")
+ self.assertEqual(new_signer.unsign(signed), "abc")
def test_sign_unsign_multiple_keys(self):
"""The default key is a valid verification key."""
- signer = signing.Signer('secret', fallback_keys=['oldsecret'])
- signed = signer.sign('abc')
- self.assertEqual(signer.unsign(signed), 'abc')
+ signer = signing.Signer("secret", fallback_keys=["oldsecret"])
+ signed = signer.sign("abc")
+ self.assertEqual(signer.unsign(signed), "abc")
@override_settings(
- SECRET_KEY='secret',
- SECRET_KEY_FALLBACKS=['oldsecret'],
+ SECRET_KEY="secret",
+ SECRET_KEY_FALLBACKS=["oldsecret"],
)
def test_sign_unsign_ignore_secret_key_fallbacks(self):
- old_signer = signing.Signer('oldsecret')
- signed = old_signer.sign('abc')
+ old_signer = signing.Signer("oldsecret")
+ signed = old_signer.sign("abc")
signer = signing.Signer(fallback_keys=[])
with self.assertRaises(signing.BadSignature):
signer.unsign(signed)
@override_settings(
- SECRET_KEY='secret',
- SECRET_KEY_FALLBACKS=['oldsecret'],
+ SECRET_KEY="secret",
+ SECRET_KEY_FALLBACKS=["oldsecret"],
)
def test_default_keys_verification(self):
- old_signer = signing.Signer('oldsecret')
- signed = old_signer.sign('abc')
+ old_signer = signing.Signer("oldsecret")
+ signed = old_signer.sign("abc")
signer = signing.Signer()
- self.assertEqual(signer.unsign(signed), 'abc')
+ self.assertEqual(signer.unsign(signed), "abc")
class TestTimestampSigner(SimpleTestCase):
-
def test_timestamp_signer(self):
- value = 'hello'
+ value = "hello"
with freeze_time(123456789):
- signer = signing.TimestampSigner('predictable-key')
+ signer = signing.TimestampSigner("predictable-key")
ts = signer.sign(value)
- self.assertNotEqual(ts, signing.Signer('predictable-key').sign(value))
+ self.assertNotEqual(ts, signing.Signer("predictable-key").sign(value))
self.assertEqual(signer.unsign(ts), value)
with freeze_time(123456800):
self.assertEqual(signer.unsign(ts, max_age=12), value)
# max_age parameter can also accept a datetime.timedelta object
- self.assertEqual(signer.unsign(ts, max_age=datetime.timedelta(seconds=11)), value)
+ self.assertEqual(
+ signer.unsign(ts, max_age=datetime.timedelta(seconds=11)), value
+ )
with self.assertRaises(signing.SignatureExpired):
signer.unsign(ts, max_age=10)
class TestBase62(SimpleTestCase):
def test_base62(self):
- tests = [-10 ** 10, 10 ** 10, 1620378259, *range(-100, 100)]
+ tests = [-(10**10), 10**10, 1620378259, *range(-100, 100)]
for i in tests:
self.assertEqual(i, signing.b62_decode(signing.b62_encode(i)))