blob: 382a232cfe26e8d352929c56c8ab9b363f901edb [file] [log] [blame]
Alex Gaynor2b21b122013-10-31 09:39:25 -07001import base64
Alex Gaynorfb8adfc2013-10-31 14:16:24 -07002import calendar
3import json
4import os
5
6import iso8601
7
8import pytest
Alex Gaynor2b21b122013-10-31 09:39:25 -07009
Alex Gaynorde36e902013-10-31 10:10:44 -070010import six
11
Alex Gaynor2b21b122013-10-31 09:39:25 -070012from cryptography.fernet import Fernet
13
14
Alex Gaynorfb8adfc2013-10-31 14:16:24 -070015def json_parametrize(keys, path):
16 with open(path) as f:
17 data = json.load(f)
18 return pytest.mark.parametrize(keys, [
19 tuple([entry[k] for k in keys])
20 for entry in data
21 ])
Alex Gaynor2b21b122013-10-31 09:39:25 -070022
Alex Gaynorfb8adfc2013-10-31 14:16:24 -070023
24class TestFernet(object):
25 @json_parametrize(
26 ("secret", "now", "iv", "src", "token"),
27 os.path.join(os.path.dirname(__file__), "vectors", "fernet", "generate.json")
28 )
29 def test_generate(self, secret, now, iv, src, token):
30 f = Fernet(base64.urlsafe_b64decode(secret.encode("ascii")))
31 actual_token = f._encrypt_from_parts(
32 src.encode("ascii"),
33 calendar.timegm(iso8601.parse_date(now).utctimetuple()),
34 b"".join(map(six.int2byte, iv))
Alex Gaynor5e87dfd2013-10-31 09:46:03 -070035 )
Alex Gaynorfb8adfc2013-10-31 14:16:24 -070036 assert actual_token == token
37
38 @json_parametrize(
39 ("secret", "now", "src", "ttl_sec", "token"),
40 os.path.join(os.path.dirname(__file__), "vectors", "fernet", "verify.json")
41 )
42 def test_verify(self, secret, now, src, ttl_sec, token):
43 f = Fernet(base64.urlsafe_b64decode(secret.encode("ascii")))
44 payload = f.decrypt(
45 token.encode("ascii"),
46 ttl=ttl_sec,
47 current_time=calendar.timegm(iso8601.parse_date(now).utctimetuple())
48 )
49 assert payload == src