Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
jvdsn
GitHub Repository: jvdsn/crypto-attacks
Path: blob/master/test/test_cbc_mac.py
2587 views
1
import os
2
import sys
3
from random import randbytes
4
from unittest import TestCase
5
6
from Crypto.Cipher import AES
7
8
path = os.path.dirname(os.path.dirname(os.path.realpath(os.path.abspath(__file__))))
9
if sys.path[1] != path:
10
sys.path.insert(1, path)
11
12
from attacks.cbc_mac import length_extension
13
14
15
class TestCBCMAC(TestCase):
16
def _compute_tag(self, key, m):
17
return AES.new(key, AES.MODE_CBC, bytes(16)).encrypt(m)[-16:]
18
19
def _verify_tag(self, key, m, t):
20
t_ = AES.new(key, AES.MODE_CBC, bytes(16)).encrypt(m)[-16:]
21
return t == t_
22
23
def test_length_extension(self):
24
key = randbytes(16)
25
m1 = randbytes(32)
26
t1 = self._compute_tag(key, m1)
27
m2 = randbytes(32)
28
t2 = self._compute_tag(key, m2)
29
30
m3, t3 = length_extension.attack(m1, t1, m2, t2)
31
self.assertTrue(self._verify_tag(key, m3, t3))
32
33