You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.3 KiB
37 lines
1.3 KiB
# This file is dual licensed under the terms of the Apache License, Version
|
|
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
|
# for complete details.
|
|
|
|
from __future__ import absolute_import, division, print_function
|
|
|
|
import binascii
|
|
|
|
import pytest
|
|
|
|
from cryptography.exceptions import InvalidSignature
|
|
from cryptography.hazmat.backends.interfaces import CMACBackend
|
|
from cryptography.hazmat.primitives.ciphers.algorithms import AES
|
|
from cryptography.hazmat.primitives.cmac import CMAC
|
|
|
|
|
|
@pytest.mark.requires_backend_interface(interface=CMACBackend)
|
|
@pytest.mark.wycheproof_tests("aes_cmac_test.json")
|
|
def test_aes_cmac(backend, wycheproof):
|
|
key = binascii.unhexlify(wycheproof.testcase["key"])
|
|
msg = binascii.unhexlify(wycheproof.testcase["msg"])
|
|
tag = binascii.unhexlify(wycheproof.testcase["tag"])
|
|
|
|
# skip truncated tags, which we don't support in the API
|
|
if wycheproof.valid and len(tag) == 16:
|
|
ctx = CMAC(AES(key), backend)
|
|
ctx.update(msg)
|
|
ctx.verify(tag)
|
|
elif len(key) not in [16, 24, 32]:
|
|
with pytest.raises(ValueError):
|
|
CMAC(AES(key), backend)
|
|
else:
|
|
ctx = CMAC(AES(key), backend)
|
|
ctx.update(msg)
|
|
with pytest.raises(InvalidSignature):
|
|
ctx.verify(tag)
|