aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cryptography/fernet.py21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/cryptography/fernet.py b/src/cryptography/fernet.py
index 1f33a12d..ac2dd0b6 100644
--- a/src/cryptography/fernet.py
+++ b/src/cryptography/fernet.py
@@ -74,6 +74,12 @@ class Fernet(object):
timestamp, data = Fernet._get_unverified_token_data(token)
return self._decrypt_data(data, timestamp, ttl)
+ def extract_timestamp(self, token):
+ timestamp, data = Fernet._get_unverified_token_data(token)
+ # Verify the token was not tampered with.
+ self._verify_signature(data)
+ return timestamp
+
@staticmethod
def _get_unverified_token_data(token):
if not isinstance(token, bytes):
@@ -93,6 +99,14 @@ class Fernet(object):
raise InvalidToken
return timestamp, data
+ def _verify_signature(self, data):
+ h = HMAC(self._signing_key, hashes.SHA256(), backend=self._backend)
+ h.update(data[:-32])
+ try:
+ h.verify(data[-32:])
+ except InvalidSignature:
+ raise InvalidToken
+
def _decrypt_data(self, data, timestamp, ttl):
current_time = int(time.time())
if ttl is not None:
@@ -102,12 +116,7 @@ class Fernet(object):
if current_time + _MAX_CLOCK_SKEW < timestamp:
raise InvalidToken
- h = HMAC(self._signing_key, hashes.SHA256(), backend=self._backend)
- h.update(data[:-32])
- try:
- h.verify(data[-32:])
- except InvalidSignature:
- raise InvalidToken
+ self._verify_signature(data)
iv = data[9:25]
ciphertext = data[25:-32]