Skip to content

Commit 519afdb

Browse files
author
Inbal Tako
committed
Fix decrypt and iso date format
1 parent 7bbbd2c commit 519afdb

4 files changed

Lines changed: 29 additions & 26 deletions

File tree

securenative/utils/date_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ class DateUtils(object):
66
@staticmethod
77
def to_timestamp(date):
88
if not date:
9-
return datetime.now().strftime("%Y-%d-%dT%H:%M:%S.%fZ")
10-
return datetime.strptime(date, "%Y-%m-%dT%H:%M:%S.%f%z")
9+
return datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
10+
return datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%f'[:-3] + 'Z')

securenative/utils/encryption_utils.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
from binascii import unhexlify, hexlify
21
import json
2+
from binascii import unhexlify, hexlify
3+
from json import JSONDecodeError
34

45
from Crypto import Random
56
from Crypto.Cipher import AES
@@ -27,8 +28,11 @@ def decrypt(cls, encrypted, cipher_key):
2728
cipher_text = content[cls.BLOCK_SIZE:]
2829
aes = AES.new(key, AES.MODE_CBC, iv)
2930
rv = aes.decrypt(cipher_text).decode("utf-8").strip()
30-
secret = json.loads(rv)
31-
return ClientToken(secret.get("cid"), secret.get("vid"), secret.get("fp"))
31+
try:
32+
secret = json.loads(rv)
33+
return ClientToken(secret.get("cid"), secret.get("vid"), secret.get("fp"))
34+
except JSONDecodeError:
35+
return rv
3236

3337
@classmethod
3438
def _pad(cls, s):

tests/encryption_utils_test.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ class EncryptionUtilsTest(unittest.TestCase):
77

88
def setUp(self):
99
self.SECRET_KEY = "B00C42DAD33EAC6F6572DA756EA4915349C0A4F6"
10-
self.PAYLOAD = "{\"cid\":\"198a41ff-a10f-4cda-a2f3-a9ca80c0703b\"," \
11-
"\"vi\":\"148a42ff-b40f-4cda-a2f3-a8ca80c0703b\"," \
12-
"\"fp\":\"6d8cabd95987f8318b1fe01593d5c2a5.24700f9f1986800ab4fcc880530dd0ed\"}";
10+
self.PAYLOAD = "{\"cid\":\"198a41ff-a10f-4cda-a2f3-a9ca80c0703b\",\"vi\":\"148a42ff-b40f-4cda-a2f3-a8ca80c0703b\",\"fp\":\"6d8cabd95987f8318b1fe01593d5c2a5.24700f9f1986800ab4fcc880530dd0ed\"}"
11+
self.CID = "198a41ff-a10f-4cda-a2f3-a9ca80c0703b"
12+
self.FP = "6d8cabd95987f8318b1fe01593d5c2a5.24700f9f1986800ab4fcc880530dd0ed"
1313

1414
def test_decrypt(self):
1515
result = EncryptionUtils.encrypt(self.PAYLOAD, self.SECRET_KEY)
@@ -18,33 +18,32 @@ def test_decrypt(self):
1818
self.assertGreater(len(self.PAYLOAD), len(result))
1919

2020
def test_encrypt(self):
21-
encrypted_payload = "5208ae703cc2fa0851347f55d3b76d3fd6035ee081d71a401e8bc92ebdc25d42440f62310bda60628537744ac03f200d78da9e61f1019ce02087b7ce6c976e7b2d8ad6aa978c532cea8f3e744cc6a5cafedc4ae6cd1b08a4ef75d6e37aa3c0c76954d16d57750be2980c2c91ac7ef0bbd0722abd59bf6be22493ea9b9759c3ff4d17f17ab670b0b6fc320e6de982313f1c4e74c0897f9f5a32d58e3e53050ae8fdbebba9009d0d1250fe34dcde1ebb42acbc22834a02f53889076140f0eb8db1 "
21+
encrypted_payload = "5208ae703cc2fa0851347f55d3b76d3fd6035ee081d71a401e8bc92ebdc25d42440f62310bda60628537744ac03f200d78da9e61f1019ce02087b7ce6c976e7b2d8ad6aa978c532cea8f3e744cc6a5cafedc4ae6cd1b08a4ef75d6e37aa3c0c76954d16d57750be2980c2c91ac7ef0bbd0722abd59bf6be22493ea9b9759c3ff4d17f17ab670b0b6fc320e6de982313f1c4e74c0897f9f5a32d58e3e53050ae8fdbebba9009d0d1250fe34dcde1ebb42acbc22834a02f53889076140f0eb8db1"
2222
result = EncryptionUtils.decrypt(encrypted_payload, self.SECRET_KEY)
2323

24-
self.assertEqual(result, self.PAYLOAD)
24+
self.assertEqual(result.cid, self.CID)
25+
self.assertEqual(result.fp, self.FP)
2526

2627
def test_encrypt_decrypt(self):
2728
enc_res = EncryptionUtils.encrypt(self.PAYLOAD, self.SECRET_KEY)
2829
dec_res = EncryptionUtils.decrypt(enc_res, self.SECRET_KEY)
2930

30-
self.assertEqual(dec_res, self.PAYLOAD)
31+
self.assertIsNotNone(dec_res)
32+
self.assertIsNotNone(enc_res)
3133

3234
def test_encrypt_with_invalid_key_length(self):
33-
secret_key = "BAD_KEY"
34-
result = EncryptionUtils.encrypt(self.PAYLOAD, secret_key)
35-
36-
self.assertEqual(len(result), 0)
35+
with self.assertRaises(ValueError):
36+
secret_key = "BAD_KEY"
37+
EncryptionUtils.encrypt(self.PAYLOAD, secret_key)
3738

3839
def test_decrypt_with_invalid_key_length(self):
39-
secret_key = "BAD_KEY"
40-
encrypted_payload = "5208ae703cc2fa0851347f55d3b76d3fd6035ee081d71a401e8bc92ebdc25d42440f62310bda60628537744ac03f200d78da9e61f1019ce02087b7ce6c976e7b2d8ad6aa978c532cea8f3e744cc6a5cafedc4ae6cd1b08a4ef75d6e37aa3c0c76954d16d57750be2980c2c91ac7ef0bbd0722abd59bf6be22493ea9b9759c3ff4d17f17ab670b0b6fc320e6de982313f1c4e74c0897f9f5a32d58e3e53050ae8fdbebba9009d0d1250fe34dcde1ebb42acbc22834a02f53889076140f0eb8db1"
41-
EncryptionUtils.decrypt(encrypted_payload, secret_key)
42-
43-
self.assertRaises(ValueError)
40+
with self.assertRaises(ValueError):
41+
secret_key = "BAD_KEY"
42+
encrypted_payload = "5208ae703cc2fa0851347f55d3b76d3fd6035ee081d71a401e8bc92ebdc25d42440f62310bda60628537744ac03f200d78da9e61f1019ce02087b7ce6c976e7b2d8ad6aa978c532cea8f3e744cc6a5cafedc4ae6cd1b08a4ef75d6e37aa3c0c76954d16d57750be2980c2c91ac7ef0bbd0722abd59bf6be22493ea9b9759c3ff4d17f17ab670b0b6fc320e6de982313f1c4e74c0897f9f5a32d58e3e53050ae8fdbebba9009d0d1250fe34dcde1ebb42acbc22834a02f53889076140f0eb8db1"
43+
EncryptionUtils.decrypt(encrypted_payload, secret_key)
4444

4545
def test_encrypt_decrypt_with_key_too_long(self):
46-
secret_key = "B00C42DAD33EAC6F6572DA756EA4915349C0A4F6B00C42DAD33EAC6F6572DA756EA4915349C0A4F6";
47-
enc_res = EncryptionUtils.encrypt(self.PAYLOAD, secret_key)
48-
EncryptionUtils.decrypt(enc_res, secret_key)
49-
50-
self.assertRaises(ValueError)
46+
with self.assertRaises(ValueError):
47+
secret_key = "B00C42DAD33EAC6F6572DA756EA4915349C0A4F6B00C42DAD33EAC6F6572DA756EA4915349C0A4F6";
48+
enc_res = EncryptionUtils.encrypt(self.PAYLOAD, secret_key)
49+
EncryptionUtils.decrypt(enc_res, secret_key)

tests/signature_utils_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def test_verify_request_payload(self):
1010
payload = "{\"id\":\"4a9157ffbd18cfbd73a57298\",\"type\":\"security-action\",\"flow\":{\"id\":\"62298c73a9bb433fbd1f75984a9157fd\",\"name\":\"Block user that violates geo velocity\"},\"userId\":\"73a9bb433fbd1f75984a9157\",\"userTraits\":{\"name\":\"John Doe\",\"email\":\"john.doe@gmail.com\"},\"request\":{\"ip\":\"10.0.0.0\",\"fp\":\"9bb433fb984a9157d1f7598\"},\"action\":\"block\",\"properties\":{\"type\":\"customer\"},\"timestamp\":\"2020-02-23T22:28:55.387Z\"}"
1111
secret_key = "B00C42DAD33EAC6F6572DA756EA4915349C0A4F6"
1212

13-
result = SignatureUtils.is_valid_signature(signature, payload, secret_key)
13+
result = SignatureUtils.is_valid_signature(secret_key, payload, signature)
1414
self.assertTrue(result)
1515

1616
def test_verify_request_empty_signature(self):

0 commit comments

Comments
 (0)