diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2018-07-16 11:18:33 -0400 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2018-07-16 20:48:33 +0530 |
commit | 2e85a925b49e566776585f35a7c0653510d84262 (patch) | |
tree | e6c6242efcab8249cbc56e6db8735e3566b0b96a /tests/wycheproof/test_x25519.py | |
parent | b09b9ecd695187f323c509aecdf517cadcf728d1 (diff) | |
download | cryptography-2e85a925b49e566776585f35a7c0653510d84262.tar.gz cryptography-2e85a925b49e566776585f35a7c0653510d84262.tar.bz2 cryptography-2e85a925b49e566776585f35a7c0653510d84262.zip |
Refs #3331 -- added initial wycheproof integration, starting with x25519, rsa, and keywrap (#4310)
* Refs #3331 -- added initial wycheproof integration, starting with x25519 tests
Diffstat (limited to 'tests/wycheproof/test_x25519.py')
-rw-r--r-- | tests/wycheproof/test_x25519.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/wycheproof/test_x25519.py b/tests/wycheproof/test_x25519.py new file mode 100644 index 00000000..5e6253ce --- /dev/null +++ b/tests/wycheproof/test_x25519.py @@ -0,0 +1,42 @@ +# 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.backends.interfaces import DHBackend +from cryptography.hazmat.primitives.asymmetric.x25519 import ( + X25519PrivateKey, X25519PublicKey +) + + +@pytest.mark.supported( + only_if=lambda backend: backend.x25519_supported(), + skip_message="Requires OpenSSL with X25519 support" +) +@pytest.mark.requires_backend_interface(interface=DHBackend) +@pytest.mark.wycheproof_tests("x25519_test.json") +def test_x25519(backend, wycheproof): + assert list(wycheproof.testgroup.items()) == [("curve", "curve25519")] + + private_key = X25519PrivateKey._from_private_bytes( + binascii.unhexlify(wycheproof.testcase["private"]) + ) + public_key = X25519PublicKey.from_public_bytes( + binascii.unhexlify(wycheproof.testcase["public"]) + ) + + assert wycheproof.valid or wycheproof.acceptable + + expected = binascii.unhexlify(wycheproof.testcase["shared"]) + if expected == b"\x00" * 32: + 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 |