diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2020-01-12 18:35:16 -0600 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2020-01-12 19:35:16 -0500 |
commit | fdd80ec89aa8f58b2d3bc6aaa51d74f4ea17d541 (patch) | |
tree | de39b4d375719b7e6f0ecca2f3cbe2e8dc9a865a | |
parent | f89ce40b621c88c5bcb48e45ea26aa5ecc08964d (diff) | |
download | cryptography-fdd80ec89aa8f58b2d3bc6aaa51d74f4ea17d541.tar.gz cryptography-fdd80ec89aa8f58b2d3bc6aaa51d74f4ea17d541.tar.bz2 cryptography-fdd80ec89aa8f58b2d3bc6aaa51d74f4ea17d541.zip |
Refs #5075 -- use x448_test.json from wycheproof (#5077)
* Refs #5075 -- use x448_test.json from wycheproof
* Fixed test
* crypto libraries from people who can't math, it's fine
* Skip teh weirdo 57 byte public keys
-rw-r--r-- | tests/wycheproof/test_x448.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/wycheproof/test_x448.py b/tests/wycheproof/test_x448.py new file mode 100644 index 00000000..094bf57c --- /dev/null +++ b/tests/wycheproof/test_x448.py @@ -0,0 +1,48 @@ +# 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.asymmetric.x448 import ( + X448PrivateKey, X448PublicKey +) + + +@pytest.mark.supported( + only_if=lambda backend: backend.x448_supported(), + skip_message="Requires OpenSSL with X448 support" +) +@pytest.mark.wycheproof_tests("x448_test.json") +def test_x448(backend, wycheproof): + assert set(wycheproof.testgroup.items()) == { + ("curve", "curve448"), ("type", "XdhComp") + } + + private_key = X448PrivateKey.from_private_bytes( + binascii.unhexlify(wycheproof.testcase["private"]) + ) + public_key_bytes = binascii.unhexlify(wycheproof.testcase["public"]) + if len(public_key_bytes) == 57: + assert wycheproof.acceptable + assert wycheproof.has_flag("NonCanonicalPublic") + with pytest.raises(ValueError): + X448PublicKey.from_public_bytes(public_key_bytes) + return + + public_key = X448PublicKey.from_public_bytes(public_key_bytes) + + assert wycheproof.valid or wycheproof.acceptable + + expected = binascii.unhexlify(wycheproof.testcase["shared"]) + if expected == b"\x00" * 56: + assert wycheproof.acceptable + # OpenSSL returns an error on all zeros shared key + with pytest.raises(ValueError): + private_key.exchange(public_key) + else: + assert private_key.exchange(public_key) == expected |