aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wycheproof/test_x25519.py
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2018-07-16 11:18:33 -0400
committerPaul Kehrer <paul.l.kehrer@gmail.com>2018-07-16 20:48:33 +0530
commit2e85a925b49e566776585f35a7c0653510d84262 (patch)
treee6c6242efcab8249cbc56e6db8735e3566b0b96a /tests/wycheproof/test_x25519.py
parentb09b9ecd695187f323c509aecdf517cadcf728d1 (diff)
downloadcryptography-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.py42
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