Как сгенерировать MIC из aes128_cmac в python - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь проверить код целостности сообщения, отправленный с пакетом, но не знаю, как реализовать его в python.Для контекста я студент университета, который никогда не работал с шифрованием в python.

Полезная нагрузка пакета в шестнадцатеричном формате - 001f7701d07ed5b3709fe4000000008000a010d2b54352, и ожидаемый MIC - D2B54352.Мой ключ шифрования для тестирования: f8f3432a2884bc6085740b11a5af04bb.MIC эквивалентен первым четырем байтам cmac, сгенерированным aes128.Я попытался с помощью импорта Crypto.Hash и Crypto.Cipher, как показано здесь: https://pycryptodome.readthedocs.io/en/latest/src/hash/cmac.html

Просто тестирование в оболочке на данный момент я сделал

>>>from Crypto.Hash import CMAC
>>>from Crypto.Cipher import AES
>>>import base64
>>>packet = 'AB93AdB+1bNwn+QAAAAAgACgENK1Q1I='  #This is the base64 packet
>>>phy_pay = base64.b64decode(packet).hex()
>>>key = bytes.fromhex("f8f3432a2884bc6085740b11a5af04bb")
>>>hex_pay = bytes.fromhex(phy_pay)
>>>cobj = CMAC.new(key,ciphermod=aes)
>>>cobj.update(hex_pay)
>>>print(cobj.hexdigest())

Я ожидалвыводом будет строка для печати, первые четыре байта которой можно вырезать как мой код MIC.Вместо этого я получил эту ошибку:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/remote/anaconda-3.7/lib/python3.7/site-packages/Crypto/Hash/CMAC.py", line 225, in hexdigest
    for x in tuple(self.digest())])
  File "/usr/remote/anaconda-3.7/lib/python3.7/site-packages/Crypto/Hash/CMAC.py", line 210, in digest
    pt = strxor(strxor(self._last_ct, partial), self._k2)
TypeError: argument 2 must be bytes, not bytearray

Любая помощь будет принята с благодарностью.

...