Skip to content

Commit ca8b783

Browse files
author
Ivan Nikolchev
committed
fix aesccm when using m2crypto
1 parent 6355810 commit ca8b783

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

tlslite/utils/aesccm.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,12 @@ def seal(self, nonce, msg, aad):
101101

102102
mac = self._cbcmac_calc(nonce, aad, msg)
103103
self._ctr.counter = s_0
104-
auth_value = self._ctr.encrypt(mac)
104+
if self.tagLength == 16:
105+
auth_value = self._ctr.encrypt(mac)
106+
else:
107+
assert self.tagLength == 8
108+
self._pad_with_zeroes(mac, 16)
109+
auth_value = self._ctr.encrypt(mac)[:8]
105110
enc_msg = self._ctr.encrypt(msg)
106111

107112
ciphertext = enc_msg + auth_value
@@ -127,7 +132,12 @@ def open(self, nonce, ciphertext, aad):
127132

128133
# We decrypt the auth value
129134
self._ctr.counter = s_0
130-
received_mac = self._ctr.decrypt(auth_value)
135+
if self.tagLength == 16:
136+
received_mac = self._ctr.decrypt(auth_value)
137+
else:
138+
assert self.tagLength == 8
139+
self._pad_with_zeroes(auth_value, 16)
140+
received_mac = self._ctr.decrypt(auth_value)[:8]
131141
msg = self._ctr.decrypt(ciphertext)
132142
msg = msg[:-self.tagLength]
133143
computed_mac = self._cbcmac_calc(nonce, aad, msg)

tlslite/utils/openssl_aes.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,21 @@ def __init__(self, key, mode, IV):
2525
# IV argument/field names are a part of the interface
2626
# pylint: disable=invalid-name
2727
AES.__init__(self, key, mode, IV, "openssl")
28-
self.IV, self._key = IV, key
28+
self._IV, self._key = IV, key
2929
self._context = None
3030
self._encrypt = None
3131

32+
@property
33+
def IV(self):
34+
return self._IV
35+
36+
@IV.setter
37+
def IV(self, iv):
38+
if self._context is not None:
39+
m2.cipher_ctx_free(self._context)
40+
self._IV = iv
41+
self._init_context()
42+
3243
def _init_context(self, encrypt=True):
3344
if len(self._key) == 16:
3445
cipherType = m2.aes_128_cbc()
@@ -37,7 +48,7 @@ def _init_context(self, encrypt=True):
3748
if len(self._key) == 32:
3849
cipherType = m2.aes_256_cbc()
3950
self._context = m2.cipher_ctx_new()
40-
m2.cipher_init(self._context, cipherType, self._key, self.IV,
51+
m2.cipher_init(self._context, cipherType, self._key, self._IV,
4152
int(encrypt))
4253
m2.cipher_set_padding(self._context, 0)
4354
self._encrypt = encrypt

0 commit comments

Comments
 (0)