diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2020-04-12 10:58:07 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-12 09:58:07 -0500 |
commit | ebb04592d2286118d3368d939d8a53a4a42be59d (patch) | |
tree | af02b303791e04acad0f6bf7d9f32c0fbb3e0a82 | |
parent | b77145a009b232f5b68c5f2f2a76370e793a8c1c (diff) | |
download | cryptography-ebb04592d2286118d3368d939d8a53a4a42be59d.tar.gz cryptography-ebb04592d2286118d3368d939d8a53a4a42be59d.tar.bz2 cryptography-ebb04592d2286118d3368d939d8a53a4a42be59d.zip |
Refs #5075 -- use hkdf_*.json from wycheproof (#5190)
-rw-r--r-- | tests/utils.py | 14 | ||||
-rw-r--r-- | tests/wycheproof/test_hkdf.py | 50 | ||||
-rw-r--r-- | tests/wycheproof/test_utils.py | 4 |
3 files changed, 61 insertions, 7 deletions
diff --git a/tests/utils.py b/tests/utils.py index 7e79830b..401b4e33 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -886,13 +886,17 @@ def load_nist_ccm_vectors(vector_data): class WycheproofTest(object): - def __init__(self, testgroup, testcase): + def __init__(self, testfiledata, testgroup, testcase): + self.testfiledata = testfiledata self.testgroup = testgroup self.testcase = testcase def __repr__(self): - return "<WycheproofTest({!r}, {!r}, tcId={})>".format( - self.testgroup, self.testcase, self.testcase["tcId"], + return "<WycheproofTest({!r}, {!r}, {!r}, tcId={})>".format( + self.testfiledata, + self.testgroup, + self.testcase, + self.testcase["tcId"], ) @property @@ -922,7 +926,7 @@ def load_wycheproof_tests(wycheproof, test_file): path = os.path.join(wycheproof, "testvectors", test_file) with open(path) as f: data = json.load(f) - for group in data["testGroups"]: + for group in data.pop("testGroups"): cases = group.pop("tests") for c in cases: - yield WycheproofTest(group, c) + yield WycheproofTest(data, group, c) diff --git a/tests/wycheproof/test_hkdf.py b/tests/wycheproof/test_hkdf.py new file mode 100644 index 00000000..7038d623 --- /dev/null +++ b/tests/wycheproof/test_hkdf.py @@ -0,0 +1,50 @@ +# 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.hazmat.primitives import hashes +from cryptography.hazmat.primitives.kdf.hkdf import HKDF + + +_HASH_ALGORITHMS = { + "HKDF-SHA-1": hashes.SHA1(), + "HKDF-SHA-256": hashes.SHA256(), + "HKDF-SHA-384": hashes.SHA384(), + "HKDF-SHA-512": hashes.SHA512(), +} + + +@pytest.mark.wycheproof_tests( + "hkdf_sha1_test.json", + "hkdf_sha256_test.json", + "hkdf_sha384_test.json", + "hkdf_sha512_test.json", +) +def test_hkdf(backend, wycheproof): + hash_algo = _HASH_ALGORITHMS[wycheproof.testfiledata["algorithm"]] + if wycheproof.invalid: + with pytest.raises(ValueError): + HKDF( + algorithm=hash_algo, + length=wycheproof.testcase["size"], + salt=binascii.unhexlify(wycheproof.testcase["salt"]), + info=binascii.unhexlify(wycheproof.testcase["info"]), + backend=backend + ) + return + + h = HKDF( + algorithm=hash_algo, + length=wycheproof.testcase["size"], + salt=binascii.unhexlify(wycheproof.testcase["salt"]), + info=binascii.unhexlify(wycheproof.testcase["info"]), + backend=backend + ) + result = h.derive(binascii.unhexlify(wycheproof.testcase["ikm"])) + assert result == binascii.unhexlify(wycheproof.testcase["okm"]) diff --git a/tests/wycheproof/test_utils.py b/tests/wycheproof/test_utils.py index 82c0a359..2cf3be08 100644 --- a/tests/wycheproof/test_utils.py +++ b/tests/wycheproof/test_utils.py @@ -10,8 +10,8 @@ from ..utils import WycheproofTest, skip_if_wycheproof_none def test_wycheproof_test_repr(): - wycheproof = WycheproofTest({}, {"tcId": 3}) - assert repr(wycheproof) == "<WycheproofTest({}, {'tcId': 3}, tcId=3)>" + wycheproof = WycheproofTest({}, {}, {"tcId": 3}) + assert repr(wycheproof) == "<WycheproofTest({}, {}, {'tcId': 3}, tcId=3)>" def test_skip_if_wycheproof_none(): |