diff options
Diffstat (limited to 'tests/test_utils.py')
| -rw-r--r-- | tests/test_utils.py | 596 |
1 files changed, 470 insertions, 126 deletions
diff --git a/tests/test_utils.py b/tests/test_utils.py index 8601d11d..ecd257bd 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -18,77 +18,24 @@ from cryptography.exceptions import UnsupportedAlgorithm, _Reasons import cryptography_vectors from .utils import ( - check_backend_support, load_cryptrec_vectors, + check_backend_support, load_cryptrec_vectors, load_ed25519_vectors, load_fips_dsa_key_pair_vectors, load_fips_dsa_sig_vectors, load_fips_ecdsa_key_pair_vectors, load_fips_ecdsa_signing_vectors, load_hash_vectors, load_kasvs_dh_vectors, - load_kasvs_ecdh_vectors, load_nist_vectors, - load_pkcs1_vectors, load_rsa_nist_vectors, load_vectors_from_file, - raises_unsupported_algorithm, select_backends, skip_if_empty + load_kasvs_ecdh_vectors, load_nist_ccm_vectors, load_nist_kbkdf_vectors, + load_nist_vectors, load_pkcs1_vectors, load_rsa_nist_vectors, + load_vectors_from_file, load_x963_vectors, raises_unsupported_algorithm ) -class FakeInterface(object): - pass - - -def test_select_one_backend(): - b1 = pretend.stub(name="b1") - b2 = pretend.stub(name="b2") - b3 = pretend.stub(name="b3") - backends = [b1, b2, b3] - name = "b2" - selected_backends = select_backends(name, backends) - assert len(selected_backends) == 1 - assert selected_backends[0] == b2 - - -def test_select_no_backend(): - b1 = pretend.stub(name="b1") - b2 = pretend.stub(name="b2") - b3 = pretend.stub(name="b3") - backends = [b1, b2, b3] - name = "back!" - with pytest.raises(ValueError): - select_backends(name, backends) - - -def test_select_backends_none(): - b1 = pretend.stub(name="b1") - b2 = pretend.stub(name="b2") - b3 = pretend.stub(name="b3") - backends = [b1, b2, b3] - name = None - selected_backends = select_backends(name, backends) - assert len(selected_backends) == 3 - - -def test_select_two_backends(): - b1 = pretend.stub(name="b1") - b2 = pretend.stub(name="b2") - b3 = pretend.stub(name="b3") - backends = [b1, b2, b3] - name = "b2 ,b1 " - selected_backends = select_backends(name, backends) - assert len(selected_backends) == 2 - assert selected_backends == [b1, b2] - - -def test_skip_if_empty(): - with pytest.raises(pytest.skip.Exception): - skip_if_empty([], [FakeInterface]) - - skip_if_empty(["notempty"], [FakeInterface]) - - def test_check_backend_support_skip(): supported = pretend.stub( kwargs={"only_if": lambda backend: False, "skip_message": "Nope"} ) - item = pretend.stub(keywords={"supported": supported}, - funcargs={"backend": True}) + node = pretend.stub(iter_markers=lambda x: [supported]) + item = pretend.stub(node=node) with pytest.raises(pytest.skip.Exception) as exc_info: - check_backend_support(item) + check_backend_support(True, item) assert exc_info.value.args[0] == "Nope (True)" @@ -96,19 +43,9 @@ def test_check_backend_support_no_skip(): supported = pretend.stub( kwargs={"only_if": lambda backend: True, "skip_message": "Nope"} ) - item = pretend.stub(keywords={"supported": supported}, - funcargs={"backend": True}) - assert check_backend_support(item) is None - - -def test_check_backend_support_no_backend(): - supported = pretend.stub( - kwargs={"only_if": "notalambda", "skip_message": "Nope"} - ) - item = pretend.stub(keywords={"supported": supported}, - funcargs={}) - with pytest.raises(ValueError): - check_backend_support(item) + node = pretend.stub(iter_markers=lambda x: [supported]) + item = pretend.stub(node=node) + assert check_backend_support(None, item) is None def test_load_nist_vectors(): @@ -196,9 +133,101 @@ def test_load_nist_vectors_with_null_chars(): ] +def test_load_ed25519_vectors(): + vector_data = ( + "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60d75a9" + "80182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a:d75a98018" + "2b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a::e5564300c360" + "ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc" + "61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b:\n" + "4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb3d401" + "7c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c:3d4017c3e" + "843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c:72:92a009a9f0" + "d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996" + "e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c0072:\n" + "c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7fc51c" + "d8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025:fc51cd8e6" + "218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025:af82:6291d657" + "deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f" + "290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40aaf82:\n" + "0d4a05b07352a5436e180356da0ae6efa0345ff7fb1572575772e8005ed978e9e61a1" + "85bcef2613a6c7cb79763ce945d3b245d76114dd440bcf5f2dc1aa57057:e61a185bc" + "ef2613a6c7cb79763ce945d3b245d76114dd440bcf5f2dc1aa57057:cbc77b:d9868d" + "52c2bebce5f3fa5a79891970f309cb6591e3e1702a70276fa97c24b3a8e58606c38c9" + "758529da50ee31b8219cba45271c689afa60b0ea26c99db19b00ccbc77b:\n" + ).splitlines() + + assert load_ed25519_vectors(vector_data) == [ + { + "secret_key": ( + "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7" + "f60" + ), + "public_key": ( + "d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f7075" + "11a" + ), + "message": "", + "signature": ( + "e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e06522490" + "1555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e" + "7a100b" + ) + }, + { + "secret_key": ( + "4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a" + "6fb" + ), + "public_key": ( + "3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af46" + "60c" + ), + "message": "72", + "signature": ( + "92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb6" + "9da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612" + "bb0c00" + ) + }, + { + "secret_key": ( + "c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b445" + "8f7" + ), + "public_key": ( + "fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908" + "025" + ), + "message": "af82", + "signature": ( + "6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac" + "3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea" + "1ec40a" + ) + }, + { + "secret_key": ( + "0d4a05b07352a5436e180356da0ae6efa0345ff7fb1572575772e8005ed97" + "8e9" + ), + "public_key": ( + "e61a185bcef2613a6c7cb79763ce945d3b245d76114dd440bcf5f2dc1aa57" + "057" + ), + "message": "cbc77b", + "signature": ( + "d9868d52c2bebce5f3fa5a79891970f309cb6591e3e1702a70276fa97c24b" + "3a8e58606c38c9758529da50ee31b8219cba45271c689afa60b0ea26c99db" + "19b00c" + ) + }, + ] + + def test_load_cryptrec_vectors(): vector_data = textwrap.dedent(""" - # Vectors taken from http://info.isl.ntt.co.jp/crypt/eng/camellia/ + # Vectors taken from https://info.isl.ntt.co.jp/crypt/eng/camellia/ # Download is t_camelia.txt # Camellia with 128-bit key @@ -238,7 +267,7 @@ def test_load_cryptrec_vectors(): def test_load_cryptrec_vectors_invalid(): vector_data = textwrap.dedent(""" - # Vectors taken from http://info.isl.ntt.co.jp/crypt/eng/camellia/ + # Vectors taken from https://info.isl.ntt.co.jp/crypt/eng/camellia/ # Download is t_camelia.txt # Camellia with 128-bit key @@ -253,7 +282,7 @@ def test_load_cryptrec_vectors_invalid(): def test_load_hash_vectors(): vector_data = textwrap.dedent(""" - # http://tools.ietf.org/html/rfc1321 + # https://tools.ietf.org/html/rfc1321 [irrelevant] Len = 0 @@ -298,7 +327,7 @@ MD = 750c783e6ab0b503eaa86e310a5db738 def test_load_hash_vectors_bad_data(): vector_data = textwrap.dedent(""" - # http://tools.ietf.org/html/rfc1321 + # https://tools.ietf.org/html/rfc1321 Len = 0 Msg = 00 @@ -1487,42 +1516,6 @@ e80204646bf99b5771d249a6fea627 7383a06365af82225dd3713ca5a45006316f53bd12b0e260d5f79795e5a4c9f353f12867a1d320\ 2394673ada8563b71555e53f415254 - [mod = L=2048, N=224] - - P = 904ef8e31e14721910fa0969e77c99b79f190071a86026e37a887a6053960dbfb74390\ -a6641319fe0af32c4e982934b0f1f4c5bc57534e8e56d77c36f0a99080c0d5bc9022fa34f58922\ -81d7b1009571cb5b35699303f912b276d86b1b0722fc0b1500f0ffb2e4d90867a3bdca181a9734\ -617a8a9f991aa7c14dec1cf45ceba00600f8425440ed0c3b52c82e3aa831932a98b477da220867\ -eb2d5e0ca34580b33b1b65e558411ed09c369f4717bf03b551787e13d9e47c267c91c697225265\ -da157945cd8b32e84fc45b80533265239aa00a2dd3d05f5cb231b7daf724b7ecdce170360a8397\ -2e5be94626273d449f441be300a7345db387bebadad67d8060a7 - Q = d7d0a83e84d13032b830ed74a6a88592ec9a4cf42bf37080c6600aad - G = 2050b18d3c9f39fac396c009310d6616f9309b67b59aef9aee813d6b4f12ee29ba8a6b\ -350b11d4336d44b4641230002d870f1e6b1d8728bdd40262df0d2440999185ae077f7034c61679\ -f4360fbb5d181569e7cb8acb04371c11ba55f1bbd777b74304b99b66d4405303e7120dc8bc4785\ -f56e9533e65b63a0c77cce7bba0d5d6069df5edffa927c5a255a09405a008258ed93506a843366\ -2154f6f67e922d7c9788f04d4ec09581063950d9cde8e373ea59a58b2a6df6ba8663345574fabb\ -a9ca981696d83aeac1f34f14f1a813ba900b3f0341dea23f7d3297f919a97e1ae00ac0728c93fe\ -0a88b66591baf4eb0bc6900f39ba5feb41cbbeea7eb7919aa4d3 - - X = 3f19424da3b4f0cafca3fc5019fcd225dd7e496ffdf6b77e364f45be - Y = 7681ed0ac257ab7ff17c52de4638c0614749792707a0c0d23883697e34963df15c806f\ -a6206f7fafb3269018e7703bd1e6f518d13544331a017713dbbe0cee8da6c095271fbf24edb74a\ -44e18b1d3b835622f68d31921c67c83e8479d1972ed0cb106c68188fe22c044254251ebf880b90\ -49dc3b7958ef61e1e67d2f677d2a7d2ab6b7c42b70cc5dedc3e5de7459a2dbc70c69008553d7ff\ -b6bf81c012c8bd67bdddeaab9a4a4373027912a7c7d9cd9cfc6c81dffe0cc7a6d40c3b2065aee7\ -be80e3c35497d64c8045bc511edaf7314c84c56bd9f0fecf62262ea5b45b49a0cffb223713bdbd\ -3ad03a25a0bb2211eba41ffcd08ab0e1ad485c29a3fc25ee8359 - - X = 241396352dd26efe0e2e184da52fe2b61d9d51b91b5009674c447854 - Y = 2f07a3aa9884c65288e5fef56c7b7f4445632273290bae6fcaab87c90058b2bef81ad3\ -34958657cf649ffb976d618b34ce69ef6d68c0d8bfe275cf097a301e8dd5595958e0c668c15f67\ -b5c0b0d01983057ce61593635aab5e0564ed720b0336f055a86755c76be22df3b8487f16e2ba0b\ -5136fd30d7e3b1d30c3bd298d3acc0a1988a11756c94e9a53184d0d3edfbb649caf03eace3083d\ -e9933921e627f4b2e011d1c79e45d8ea1eb7e4e59a1cbd8382b3238474eb949749c985200fbb25\ -41e2dce080aa881945d4d935076e48a0846dc5513bb4da8563b946af54f546455931e79c065ce7\ -ca223a98f8fde40091d38eb2c3eb8e3b81d88374f3146b0afc42 - [mod = L=2048, N=256] P = ea1fb1af22881558ef93be8a5f8653c5a559434c49c8c2c12ace5e9c41434c9cf0a8e9\ @@ -1856,17 +1849,6 @@ d291b6da18eb0cbe51676ceb0977504eb97c27c0b191883f72fb2710a9fbd8bcf13be\ S = 18ea15bd9f00475b25204cbc23f8c23e01588015 Result = F (3 - R changed ) - [mod = L=2048, N=224, SHA-1] - - # unsupported so we ignore this - - Msg = f9d01693df99a125b4f17e184331c6b6e8ca00f54f3a - X = e0c4b7d58836046c436fbb2322 - Y = fb6d9bf23a07215093f319725ad0877accff - R = 5764e8dae0327c5bf1972ff7681b9 - S = 475b25204cbc23f8c23e01588015 - Result = F (3 - R changed ) - [mod = L=2048, N=256, SHA-384] P = e7c1c86125db9ef417da1ced7ea0861bdad629216a3f3c745df42a46b989e59f4d984\ @@ -3045,8 +3027,13 @@ d518475576730ed528779366568e46b7dd4ed787cb72d0733c93 assert expected == load_kasvs_dh_vectors(vector_data) +def test_load_kasvs_ecdh_vectors_empty_vector_data(): + assert [] == load_kasvs_ecdh_vectors([]) + + def test_load_kasvs_ecdh_vectors(): vector_data = textwrap.dedent(""" + # CAVS 11.0 # Parameter set(s) supported: EA EB EC ED EE # CAVSid: CAVSid (in hex: 434156536964) # IUTid: In hex: a1b2c3d4e5 @@ -3357,7 +3344,7 @@ def test_load_kasvs_ecdh_kdf_vectors(): [EB - SHA224] - COUNT = 0 + COUNT = 50 dsCAVS = 540904b67b3716823dd621ed72ad3dbc615887b4f56f910b78a57199 QsCAVSx = 28e5f3a72d8f6b8499dd1bcdfceafcecec68a0d715789bcf4b55fe15 QsCAVSy = 8c8006a7da7c1a19f5328d7e865522b0c0dfb9a29b2c46dc96590d2a @@ -3379,7 +3366,7 @@ ffdfa60dd7 expected = [ {'errno': 12, 'fail': True, - 'COUNT': 0, + 'COUNT': 50, 'CAVS': { 'd': int("540904b67b3716823dd621ed72ad3dbc615887b4f56f910b" "78a57199", 16), @@ -3405,6 +3392,363 @@ ffdfa60dd7 assert expected == load_kasvs_ecdh_vectors(vector_data) +def test_load_x963_vectors(): + vector_data = textwrap.dedent(""" + # CAVS 12.0 + # 'ANS X9.63-2001' information for sample + + [SHA-1] + [shared secret length = 192] + [SharedInfo length = 0] + [key data length = 128] + + COUNT = 0 + Z = 1c7d7b5f0597b03d06a018466ed1a93e30ed4b04dc64ccdd + SharedInfo = + Counter = 00000001 + Hash input 1 = 1c7d7b5f0597b03d06a018466ed1a93e30ed4b04dc64ccdd00000001 + K1 = bf71dffd8f4d99223936beb46fee8ccc60439b7e + key_data = bf71dffd8f4d99223936beb46fee8ccc + + COUNT = 1 + Z = 5ed096510e3fcf782ceea98e9737993e2b21370f6cda2ab1 + SharedInfo = + Counter = 00000001 + Hash input 1 = 5ed096510e3fcf782ceea98e9737993e2b21370f6cda2ab100000001 + K1 = ec3e224446bfd7b3be1df404104af953c1b2d0f5 + key_data = ec3e224446bfd7b3be1df404104af953 + + [SHA-512] + [shared secret length = 521] + [SharedInfo length = 128] + [key data length = 1024] + + COUNT = 0 + Z = 00aa5bb79b33e389fa58ceadc047197f14e73712f452caa9fc4c9adb369348b8150739\ +2f1a86ddfdb7c4ff8231c4bd0f44e44a1b55b1404747a9e2e753f55ef05a2d + SharedInfo = e3b5b4c1b0d5cf1d2b3a2f9937895d31 + Counter = 00000001 + Hash input 1 = 00aa5bb79b33e389fa58ceadc047197f14e73712f452caa9fc4c9ad\ +b369348b81507392f1a86ddfdb7c4ff8231c4bd0f44e44a1b55b1404747a9e2e753f55ef05a2d0\ +0000001e3b5b4c1b0d5cf1d2b3a2f9937895d31 + K1 = 4463f869f3cc18769b52264b0112b5858f7ad32a5a2d96d8cffabf7fa733633d6\ +e4dd2a599acceb3ea54a6217ce0b50eef4f6b40a5c30250a5a8eeee20800226 + Counter = 00000002 + Hash input 2 = 00aa5bb79b33e389fa58ceadc047197f14e73712f452caa9fc4c9ad\ +b369348b81507392f1a86ddfdb7c4ff8231c4bd0f44e44a1b55b1404747a9e2e753f55ef05a2d0\ +0000002e3b5b4c1b0d5cf1d2b3a2f9937895d31 + K2 = 7089dbf351f3f5022aa9638bf1ee419dea9c4ff745a25ac27bda33ca08bd56dd1\ +a59b4106cf2dbbc0ab2aa8e2efa7b17902d34276951ceccab87f9661c3e8816 + key_data = 4463f869f3cc18769b52264b0112b5858f7ad32a5a2d96d8cffabf7fa733633\ +d6e4dd2a599acceb3ea54a6217ce0b50eef4f6b40a5c30250a5a8eeee208002267089dbf351f3f\ +5022aa9638bf1ee419dea9c4ff745a25ac27bda33ca08bd56dd1a59b4106cf2dbbc0ab2aa8e2ef\ +a7b17902d34276951ceccab87f9661c3e8816 + """).splitlines() + + assert load_x963_vectors(vector_data) == [ + {"hash": "SHA-1", "count": 0, + "shared_secret_length": 192, + "Z": "1c7d7b5f0597b03d06a018466ed1a93e30ed4b04dc64ccdd", + "sharedinfo_length": 0, + "key_data_length": 128, + "key_data": "bf71dffd8f4d99223936beb46fee8ccc"}, + {"hash": "SHA-1", "count": 1, + "shared_secret_length": 192, + "Z": "5ed096510e3fcf782ceea98e9737993e2b21370f6cda2ab1", + "sharedinfo_length": 0, + "key_data_length": 128, + "key_data": "ec3e224446bfd7b3be1df404104af953"}, + {"hash": "SHA-512", "count": 0, + "shared_secret_length": 521, + "Z": "00aa5bb79b33e389fa58ceadc047197f14e73712f452caa9fc4c9adb369348b\ +81507392f1a86ddfdb7c4ff8231c4bd0f44e44a1b55b1404747a9e2e753f55ef05a2d", + "sharedinfo_length": 128, + "sharedinfo": "e3b5b4c1b0d5cf1d2b3a2f9937895d31", + "key_data_length": 1024, + "key_data": "4463f869f3cc18769b52264b0112b5858f7ad32a5a2d96d8cffabf7f\ +a733633d6e4dd2a599acceb3ea54a6217ce0b50eef4f6b40a5c30250a5a8eeee208002267089db\ +f351f3f5022aa9638bf1ee419dea9c4ff745a25ac27bda33ca08bd56dd1a59b4106cf2dbbc0ab2\ +aa8e2efa7b17902d34276951ceccab87f9661c3e8816"}, + ] + + +def test_load_kbkdf_vectors(): + vector_data = textwrap.dedent(""" + # CAVS 14.4 + # "SP800-108 - KDF" information for "test1" + # KDF Mode Supported: Counter Mode + # Location of counter tested: (Before Fixed Input Data)\ +( After Fixed Input Data)(In Middle of Fixed Input Data before Context) + # PRFs tested: CMAC with key sizes: AES128 AES192 AES256 TDES2 TDES3\ +HMAC with key sizes: SHA1 SHA224 SHA256 SHA384 SHA512 + # Generated on Tue Apr 23 12:20:16 2013 + + [PRF=HMAC_SHA1] + [CTRLOCATION=BEFORE_FIXED] + [RLEN=8_BITS] + + COUNT=0 + L = 128 + KI = 00a39bd547fb88b2d98727cf64c195c61e1cad6c + FixedInputDataByteLen = 60 + FixedInputData = 98132c1ffaf59ae5cbc0a3133d84c551bb97e0c75ecaddfc30056f68\ +76f59803009bffc7d75c4ed46f40b8f80426750d15bc1ddb14ac5dcb69a68242 + Binary rep of i = 01 + instring = 0198132c1ffaf59ae5cbc0a3133d84c551bb97e0c75ecaddfc30056f68\ +76f59803009bffc7d75c4ed46f40b8f80426750d15bc1ddb14ac5dcb69a68242 + KO = 0611e1903609b47ad7a5fc2c82e47702 + + COUNT=1 + L = 128 + KI = a39bdf744ed7e33fdec060c8736e9725179885a8 + FixedInputDataByteLen = 60 + FixedInputData = af71b44940acff98949ad17f1ca20e8fdb3957cacdcd41e9c591e182\ +35019f90b9f8ee6e75700bcab2f8407525a104799b3e9725e27d738a9045e832 + Binary rep of i = 01 + instring = 01af71b44940acff98949ad17f1ca20e8fdb3957cacdcd41e9c591e182\ +35019f90b9f8ee6e75700bcab2f8407525a104799b3e9725e27d738a9045e832 + KO = 51dc4668947e3685099bc3b5f8527468 + + [PRF=HMAC_SHA224] + [CTRLOCATION=AFTER_FIXED] + [RLEN=8_BITS] + + COUNT=0 + L = 128 + KI = ab56556b107a3a79fe084df0f1bb3ad049a6cc1490f20da4b3df282c + FixedInputDataByteLen = 60 + FixedInputData = 7f50fc1f77c3ac752443154c1577d3c47b86fccffe82ff43aa1b91ee\ +b5730d7e9e6aab78374d854aecb7143faba6b1eb90d3d9e7a2f6d78dd9a6c4a7 + Binary rep of i = 01 + instring = 7f50fc1f77c3ac752443154c1577d3c47b86fccffe82ff43aa1b91eeb5\ +730d7e9e6aab78374d854aecb7143faba6b1eb90d3d9e7a2f6d78dd9a6c4a701 + KO = b8894c6133a46701909b5c8a84322dec + """).splitlines() + + assert load_nist_kbkdf_vectors(vector_data) == [ + {'prf': 'hmac_sha1', + 'ctrlocation': 'before_fixed', + 'rlen': 8, + 'l': 128, + 'ki': b'00a39bd547fb88b2d98727cf64c195c61e1cad6c', + 'fixedinputdatabytelen': b'60', + 'fixedinputdata': b'98132c1ffaf59ae5cbc0a3133d84c551bb97e0c75ecaddfc\ +30056f6876f59803009bffc7d75c4ed46f40b8f80426750d15bc1ddb14ac5dcb69a68242', + 'binary rep of i': b'01', + 'instring': b'0198132c1ffaf59ae5cbc0a3133d84c551bb97e0c75ecaddfc3005\ +6f6876f59803009bffc7d75c4ed46f40b8f80426750d15bc1ddb14ac5dcb69a68242', + 'ko': b'0611e1903609b47ad7a5fc2c82e47702'}, + {'prf': 'hmac_sha1', + 'ctrlocation': 'before_fixed', + 'rlen': 8, + 'l': 128, + 'ki': b'a39bdf744ed7e33fdec060c8736e9725179885a8', + 'fixedinputdatabytelen': b'60', + 'fixedinputdata': b'af71b44940acff98949ad17f1ca20e8fdb3957cacdcd41e9\ +c591e18235019f90b9f8ee6e75700bcab2f8407525a104799b3e9725e27d738a9045e832', + 'binary rep of i': b'01', + 'instring': b'01af71b44940acff98949ad17f1ca20e8fdb3957cacdcd41e9c591\ +e18235019f90b9f8ee6e75700bcab2f8407525a104799b3e9725e27d738a9045e832', + 'ko': b'51dc4668947e3685099bc3b5f8527468'}, + {'prf': 'hmac_sha224', + 'ctrlocation': 'after_fixed', + 'rlen': 8, + 'l': 128, + 'ki': b'ab56556b107a3a79fe084df0f1bb3ad049a6cc1490f20da4b3df282c', + 'fixedinputdatabytelen': b'60', + 'fixedinputdata': b'7f50fc1f77c3ac752443154c1577d3c47b86fccffe82ff43\ +aa1b91eeb5730d7e9e6aab78374d854aecb7143faba6b1eb90d3d9e7a2f6d78dd9a6c4a7', + 'binary rep of i': b'01', + 'instring': b'7f50fc1f77c3ac752443154c1577d3c47b86fccffe82ff43aa1b91\ +eeb5730d7e9e6aab78374d854aecb7143faba6b1eb90d3d9e7a2f6d78dd9a6c4a701', + 'ko': b'b8894c6133a46701909b5c8a84322dec'} + ] + + +def test_load_nist_ccm_vectors_dvpt(): + vector_data = textwrap.dedent(""" + # CAVS 11.0 + # "CCM-DVPT" information + # AES Keylen: 128 + # Generated on Tue Mar 15 08:09:25 2011 + + + [Alen = 0, Plen = 0, Nlen = 7, Tlen = 4] + + Key = 4ae701103c63deca5b5a3939d7d05992 + + Count = 0 + Nonce = 5a8aa485c316e9 + Adata = 00 + CT = 02209f55 + Result = Pass + Payload = 00 + + Count = 1 + Nonce = 3796cf51b87266 + Adata = 00 + CT = 9a04c241 + Result = Fail + + [Alen = 0, Plen = 0, Nlen = 7, Tlen = 16] + + Key = 4bb3c4a4f893ad8c9bdc833c325d62b3 + + Count = 15 + Nonce = 5a8aa485c316e9 + Adata = 00 + CT = 75d582db43ce9b13ab4b6f7f14341330 + Result = Pass + Payload = 00 + + Count = 16 + Nonce = 3796cf51b87266 + Adata = 00 + CT = 3a65e03af37b81d05acc7ec1bc39deb0 + Result = Fail + """).splitlines() + assert load_nist_ccm_vectors(vector_data) == [ + { + 'key': b'4ae701103c63deca5b5a3939d7d05992', + 'alen': 0, + 'plen': 0, + 'nlen': 7, + 'tlen': 4, + 'nonce': b'5a8aa485c316e9', + 'adata': b'00', + 'ct': b'02209f55', + 'fail': False, + 'payload': b'00' + }, + { + 'key': b'4ae701103c63deca5b5a3939d7d05992', + 'alen': 0, + 'plen': 0, + 'nlen': 7, + 'tlen': 4, + 'nonce': b'3796cf51b87266', + 'adata': b'00', + 'ct': b'9a04c241', + 'fail': True, + 'payload': b'00' + }, + { + 'key': b'4bb3c4a4f893ad8c9bdc833c325d62b3', + 'alen': 0, + 'plen': 0, + 'nlen': 7, + 'tlen': 16, + 'nonce': b'5a8aa485c316e9', + 'adata': b'00', + 'ct': b'75d582db43ce9b13ab4b6f7f14341330', + 'fail': False, + 'payload': b'00' + }, + { + 'key': b'4bb3c4a4f893ad8c9bdc833c325d62b3', + 'alen': 0, + 'plen': 0, + 'nlen': 7, + 'tlen': 16, + 'nonce': b'3796cf51b87266', + 'adata': b'00', + 'ct': b'3a65e03af37b81d05acc7ec1bc39deb0', + 'fail': True, + 'payload': b'00' + } + ] + + +def test_load_nist_ccm_vectors_vadt(): + vector_data = textwrap.dedent(""" + # CAVS 11.0 + # "CCM-VADT" information + # AES Keylen: 128 + # Generated on Tue Mar 15 08:09:24 2011 + + Plen = 24 + Nlen = 13 + Tlen = 16 + + [Alen = 0] + + Key = d24a3d3dde8c84830280cb87abad0bb3 + Nonce = f1100035bb24a8d26004e0e24b + + Count = 0 + Adata = 00 + Payload = 7c86135ed9c2a515aaae0e9a208133897269220f30870006 + CT = 1faeb0ee2ca2cd52f0aa3966578344f24e69b742c4ab37ab11233 + + Count = 1 + Adata = 00 + Payload = 48df73208cdc63d716752df7794807b1b2a80794a2433455 + CT = 2bf7d09079bc0b904c711a0b0e4a70ca8ea892d9566f03f8b77a1 + CT = 642145210f947bc4a0b1e678fd8c990c2c1d89d4110a95c954d61 + + [Alen = 1] + + Key = 08b0da255d2083808a1b4d367090bacc + Nonce = 777828b13679a9e2ca89568233 + + Count = 10 + Adata = dd + Payload = 1b156d7e2bf7c9a25ad91cff7b0b02161cb78ff9162286b0 + CT = e8b80af4960d5417c15726406e345c5c46831192b03432eed16b6 + + Count = 11 + Adata = c5 + Payload = 032fee9dbffccc751e6a1ee6d07bb218b3a7ec6bf5740ead + CT = f0828917020651c085e42459c544ec52e99372005362baf308ebe + """).splitlines() + assert load_nist_ccm_vectors(vector_data) == [ + { + 'plen': 24, + 'nlen': 13, + 'tlen': 16, + 'alen': 0, + 'key': b'd24a3d3dde8c84830280cb87abad0bb3', + 'nonce': b'f1100035bb24a8d26004e0e24b', + 'adata': b'00', + 'payload': b'7c86135ed9c2a515aaae0e9a208133897269220f30870006', + 'ct': b'1faeb0ee2ca2cd52f0aa3966578344f24e69b742c4ab37ab11233' + }, + { + 'plen': 24, + 'nlen': 13, + 'tlen': 16, + 'alen': 0, + 'key': b'd24a3d3dde8c84830280cb87abad0bb3', + 'nonce': b'f1100035bb24a8d26004e0e24b', + 'adata': b'00', + 'payload': b'48df73208cdc63d716752df7794807b1b2a80794a2433455', + 'ct': b'642145210f947bc4a0b1e678fd8c990c2c1d89d4110a95c954d61' + }, + { + 'plen': 24, + 'nlen': 13, + 'tlen': 16, + 'alen': 1, + 'key': b'08b0da255d2083808a1b4d367090bacc', + 'nonce': b'777828b13679a9e2ca89568233', + 'adata': b'dd', + 'payload': b'1b156d7e2bf7c9a25ad91cff7b0b02161cb78ff9162286b0', + 'ct': b'e8b80af4960d5417c15726406e345c5c46831192b03432eed16b6' + }, + { + 'plen': 24, + 'nlen': 13, + 'tlen': 16, + 'alen': 1, + 'key': b'08b0da255d2083808a1b4d367090bacc', + 'nonce': b'777828b13679a9e2ca89568233', + 'adata': b'c5', + 'payload': b'032fee9dbffccc751e6a1ee6d07bb218b3a7ec6bf5740ead', + 'ct': b'f0828917020651c085e42459c544ec52e99372005362baf308ebe' + } + ] + + def test_vector_version(): assert cryptography.__version__ == cryptography_vectors.__version__ |
