# Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import absolute_import, division, print_function import binascii import os import textwrap import pretend import pytest import cryptography from cryptography.exceptions import UnsupportedAlgorithm, _Reasons import cryptography_vectors from .utils import ( check_backend_support, check_for_iface, der_encode_dsa_signature, load_cryptrec_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_nist_vectors, load_pkcs1_vectors, load_rsa_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm, select_backends ) 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_check_for_iface(): item = pretend.stub(keywords=["fake_name"], funcargs={"backend": True}) with pytest.raises(pytest.skip.Exception) as exc_info: check_for_iface("fake_name", FakeInterface, item) assert exc_info.value.args[0] == "True backend does not support fake_name" item = pretend.stub( keywords=["fake_name"], funcargs={"backend": FakeInterface()} ) check_for_iface("fake_name", FakeInterface, item) 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}) with pytest.raises(pytest.skip.Exception) as exc_info: check_backend_support(item) assert exc_info.value.args[0] == "Nope (True)" 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) def test_der_encode_dsa_signature_values(): sig = der_encode_dsa_signature(1, 1) assert sig == b"0\x06\x02\x01\x01\x02\x01\x01" sig2 = der_encode_dsa_signature( 1037234182290683143945502320610861668562885151617, 559776156650501990899426031439030258256861634312 ) assert sig2 == ( b'0-\x02\x15\x00\xb5\xaf0xg\xfb\x8bT9\x00\x13\xccg\x02\r\xdf\x1f,\x0b' b'\x81\x02\x14b\r;"\xabP1D\x0c>5\xea\xb6\xf4\x81)\x8f\x9e\x9f\x08' ) sig3 = der_encode_dsa_signature(0, 0) assert sig3 == b"0\x06\x02\x01\x00\x02\x01\x00" sig4 = der_encode_dsa_signature(-1, 0) assert sig4 == b"0\x06\x02\x01\xFF\x02\x01\x00" def test_load_nist_vectors(): vector_data = textwrap.dedent(""" # CAVS 11.1 # Config info for aes_values # AESVS GFSbox test data for CBC # State : Encrypt and Decrypt # Key Length : 128 # Generated on Fri Apr 22 15:11:33 2011 [ENCRYPT] COUNT = 0 KEY = 00000000000000000000000000000000 IV = 00000000000000000000000000000000 PLAINTEXT = f34481ec3cc627bacd5dc3fb08f273e6 CIPHERTEXT = 0336763e966d92595a567cc9ce537f5e COUNT = 1 KEY = 00000000000000000000000000000000 IV = 00000000000000000000000000000000 PLAINTEXT = 9798c4640bad75c7c3227db910174e72 CIPHERTEXT = a9a1631bf4996954ebc093957b234589 [DECRYPT] COUNT = 0 KEY = 00000000000000000000000000000000 IV = 00000000000000000000000000000000 CIPHERTEXT = 0336763e966d92595a567cc9ce537f5e PLAINTEXT = f34481ec3cc627bacd5dc3fb08f273e6 COUNT = 1 KEY = 00000000000000000000000000000000 IV = 00000000000000000000000000000000 CIPHERTEXT = a9a1631bf4996954ebc093957b234589 PLAINTEXT = 9798c4640bad75c7c3227db910174e72 """).splitlines() assert load_nist_vectors(vector_data) == [ { "key": b"00000000000000000000000000000000", "iv": b"00000000000000000000000000000000", "plaintext": b"f34481ec3cc627bacd5dc3fb08f273e6", "ciphertext": b"0336763e966d92595a567cc9ce537f5e", }, { "key": b"00000000000000000000000000000000", "iv": b"00000000000000000000000000000000", "plaintext": b"9798c4640bad75c7c3227db910174e72", "ciphertext": b"a9a1631bf4996954ebc093957b234589", }, { "key": b"00000000000000000000000000000000", "iv": b"00000000000000000000000000000000", "plaintext": b"f34481ec3cc627bacd5dc3fb08f273e6", "ciphertext": b"0336763e966d92595a567cc9ce537f5e", }, { "key": b"00000000000000000000000000000000", "iv": b"00000000000000000000000000000000", "plaintext": b"9798c4640bad75c7c3227db910174e72", "ciphertext": b"a9a1631bf4996954ebc093957b234589", }, ] def test_load_nist_vectors_with_null_chars(): vector_data = textwrap.dedent(""" COUNT = 0 KEY = thing\\0withnulls COUNT = 1 KEY = 00000000000000000000000000000000 """).splitlines() assert load_nist_vectors(vector_data) == [ { "key": b"thing\x00withnulls", }, { "key": b"00000000000000000000000000000000", }, ] def test_load_cryptrec_vectors(): vector_data = textwrap.dedent(""" # Vectors taken from http://info.isl.ntt.co.jp/crypt/eng/camellia/ # Download is t_camelia.txt # Camellia with 128-bit key K No.001 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 P No.001 : 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C No.001 : 07 92 3A 39 EB 0A 81 7D 1C 4D 87 BD B8 2D 1F 1C P No.002 : 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C No.002 : 48 CD 64 19 80 96 72 D2 34 92 60 D8 9A 08 D3 D3 K No.002 : 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 P No.001 : 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C No.001 : 07 92 3A 39 EB 0A 81 7D 1C 4D 87 BD B8 2D 1F 1C """).splitlines() assert load_cryptrec_vectors(vector_data) == [ { "key": b"00000000000000000000000000000000", "plaintext": b"80000000000000000000000000000000", "ciphertext": b"07923A39EB0A817D1C4D87BDB82D1F1C", }, { "key": b"00000000000000000000000000000000", "plaintext": b"40000000000000000000000000000000", "ciphertext": b"48CD6419809672D2349260D89A08D3D3", }, { "key": b"10000000000000000000000000000000", "plaintext": b"80000000000000000000000000000000", "ciphertext": b"07923A39EB0A817D1C4D87BDB82D1F1C", }, ] def test_load_cryptrec_vectors_invalid(): vector_data = textwrap.dedent(""" # Vectors taken from http://info.isl.ntt.co.jp/crypt/eng/camellia/ # Download is t_camelia.txt # Camellia with 128-bit key E No.001 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 """).splitlines() with pytest.raises(ValueError): load_cryptrec_vectors(vector_data) def test_load_hash_vectors(): vector_data = textwrap.dedent(""" # http://tools.ietf.org/html/rfc1321 [irrelevant] Len = 0 Msg = 00 MD = d41d8cd98f00b204e9800998ecf8427e Len = 8 Msg = 61 MD = 0cc175b9c0f1b6a831c399e269772661 Len = 24 Msg = 616263 MD = 900150983cd24fb0d6963f7d28e17f72 Len = 112 Msg = 6d65737361676520646967657374 MD = f96b697d7cb7938d525a2f31aaf161d0 """).splitlines() assert load_hash_vectors(vector_data) == [ (b"", "d41d8cd98f00b204e9800998ecf8427e"), (b"61", "0cc175b9c0f1b6a831c399e269772661"), (b"616263", "900150983cd24fb0d6963f7d28e17f72"), (b"6d65737361676520646967657374", "f96b697d7cb7938d525a2f31aaf161d0"), ] def test_load_hmac_vectors(): vector_data = textwrap.dedent(""" Len = 224 # "Jefe" Key = 4a656665 # "what do ya want for nothing?" Msg = 7768617420646f2079612077616e7420666f72206e6f7468696e673f MD = 750c783e6ab0b503eaa86e310a5db738 """).splitlines() assert load_hash_vectors(vector_data) == [ (b"7768617420646f2079612077616e7420666f72206e6f7468696e673f", "750c783e6ab0b503eaa86e310a5db738", b"4a656665"), ] def test_load_hash_vectors_bad_data(): vector_data = textwrap.dedent(""" # http://tools.ietf.org/html/rfc1321 Len = 0 Msg = 00 UNKNOWN=Hello World """).splitlines() with pytest.raises(ValueError): load_hash_vectors(vector_data) def test_load_vectors_from_file(): vectors = load_vectors_from_file( os.path.join("ciphers", "Blowfish", "bf-cfb.txt"), load_nist_vectors, ) assert vectors == [ { "key": b"0123456789ABCDEFF0E1D2C3B4A59687", "iv": b"FEDCBA9876543210", "plaintext": ( b"37363534333231204E6F77206973207468652074696D6520666F722000" ), "ciphertext": ( b"E73214A2822139CAF26ECF6D2EB9E76E3DA3DE04D1517200519D57A6C3" ), } ] def test_load_nist_gcm_vectors(): vector_data = textwrap.dedent(""" [Keylen = 128] [IVlen = 96] [PTlen = 0] [AADlen = 0] [Taglen = 128] Count = 0 Key = 11754cd72aec309bf52f7687212e8957 IV = 3c819d9a9bed087615030b65 PT = AAD = CT = Tag = 250327c674aaf477aef2675748cf6971 Count = 1 Key = 272f16edb81a7abbea887357a58c1917 IV = 794ec588176c703d3d2a7a07 PT = AAD = CT = Tag = b6e6f197168f5049aeda32dafbdaeb Count = 2 Key = a49a5e26a2f8cb63d05546c2a62f5343 IV = 907763b19b9b4ab6bd4f0281 CT = AAD = Tag = a2be08210d8c470a8df6e8fbd79ec5cf FAIL Count = 3 Key = 5c1155084cc0ede76b3bc22e9f7574ef IV = 9549e4ba69a61cad7856efc1 PT = d1448fa852b84408e2dad8381f363de7 AAD = e98e9d9c618e46fef32660976f854ee3 CT = f78b60ca125218493bea1c50a2e12ef4 Tag = d72da7f5c6cf0bca7242c71835809449 [Keylen = 128] [IVlen = 96] [PTlen = 0] [AADlen = 0] [Taglen = 120] Count = 0 Key = eac258e99c55e6ae8ef1da26640613d7 IV = 4e8df20faaf2c8eebe922902 CT = AAD = Tag = e39aeaebe86aa309a4d062d6274339 PT = Count = 1 Key = 3726cf02fcc6b8639a5497652c94350d IV = 55fef82cde693ce76efcc193 CT = AAD = Tag = 3d68111a81ed22d2ef5bccac4fc27f FAIL Count = 2 K
# 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

INCLUDES = """
#include <openssl/err.h>
"""

TYPES = """
static const int Cryptography_HAS_EC_CODES;
static const int Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR;

struct ERR_string_data_st {
    unsigned long error;
    const char *string;
};
typedef struct ERR_string_data_st ERR_STRING_DATA;
typedef ... ERR_STATE;

static const int ERR_LIB_DH;
static const int ERR_LIB_EVP;
static const int ERR_LIB_EC;
static const int ERR_LIB_PEM;
static const int ERR_LIB_ASN1;
static const int ERR_LIB_RSA;
static const int ERR_LIB_PKCS12;
static const int ERR_LIB_SSL;
static const int ERR_LIB_X509;

static const int ASN1_F_ASN1_EX_C2I;
static const int ASN1_F_ASN1_FIND_END;
static const int ASN1_F_ASN1_GENERATE_V3;
static const int ASN1_F_ASN1_GET_OBJECT;
static const int ASN1_F_ASN1_ITEM_I2D_FP;
static const int ASN1_F_ASN1_ITEM_PACK;
static const int ASN1_F_ASN1_ITEM_SIGN;
static const int ASN1_F_ASN1_ITEM_UNPACK;
static const int ASN1_F_ASN1_ITEM_VERIFY;
static const int ASN1_F_ASN1_MBSTRING_NCOPY;
static const int ASN1_F_ASN1_TEMPLATE_EX_D2I;
static const int ASN1_F_ASN1_TEMPLATE_NEW;
static const int ASN1_F_ASN1_TEMPLATE_NOEXP_D2I;
static const int ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING;
static const int ASN1_F_ASN1_TYPE_GET_OCTETSTRING;
static const int ASN1_F_ASN1_VERIFY;
static const int ASN1_F_BITSTR_CB;
static const int ASN1_F_D2I_ASN1_UINTEGER;
static const int ASN1_F_D2I_PRIVATEKEY;
static const int ASN1_F_I2D_DSA_PUBKEY;
static const int ASN1_F_LONG_C2I;
static const int ASN1_F_OID_MODULE_INIT;
static const int ASN1_F_PARSE_TAGGING;
static const int ASN1_F_PKCS5_PBE_SET;
static const int ASN1_F_B64_READ_ASN1;
static const int ASN1_F_B64_WRITE_ASN1;
static const int ASN1_F_SMIME_READ_ASN1;
static const int ASN1_F_SMIME_TEXT;
static const int ASN1_F_ASN1_CHECK_TLEN;

static const int ASN1_R_BOOLEAN_IS_WRONG_LENGTH;
static const int ASN1_R_BUFFER_TOO_SMALL;
static const int ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER;
static const int ASN1_R_DATA_IS_WRONG;
static const int ASN1_R_DECODE_ERROR;
static const int ASN1_R_DEPTH_EXCEEDED;
static const int ASN1_R_ENCODE_ERROR;
static const int ASN1_R_ERROR_GETTING_TIME;
static const int ASN1_R_ERROR_LOADING_SECTION;
static const int ASN1_R_MSTRING_WRONG_TAG;
static const int ASN1_R_NESTED_ASN1_STRING;
static const int ASN1_R_NO_MATCHING_CHOICE_TYPE;
static const int ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM;
static const int ASN1_R_UNKNOWN_OBJECT_TYPE;
static const int ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE;
static const int ASN1_R_UNKNOWN_TAG;
static const int ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE;
static const int ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE;
static const int ASN1_R_UNSUPPORTED_TYPE;
static const int ASN1_R_WRONG_TAG;
static const int ASN1_R_NO_CONTENT_TYPE;
static const int ASN1_R_NO_MULTIPART_BODY_FAILURE;
static const int ASN1_R_NO_MULTIPART_BOUNDARY;
static const int ASN1_R_HEADER_TOO_LONG;

static const int DH_F_COMPUTE_KEY;

static const int DH_R_INVALID_PUBKEY;

static const int EVP_F_AES_INIT_KEY;
static const int EVP_F_EVP_CIPHER_CTX_CTRL;
static const int EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH;
static const int EVP_F_EVP_CIPHERINIT_EX;
static const int EVP_F_EVP_DECRYPTFINAL_EX;
static const int EVP_F_EVP_DIGESTINIT_EX;
static const int EVP_F_EVP_ENCRYPTFINAL_EX;
static const int EVP_F_EVP_MD_CTX_COPY_EX;
static const int EVP_F_EVP_OPENINIT;
static const int EVP_F_EVP_PBE_ALG_ADD;
static const int EVP_F_EVP_PBE_CIPHERINIT;
static const int EVP_F_EVP_PKCS82PKEY;
static const int EVP_F_EVP_PKEY_COPY_PARAMETERS;
static const int EVP_F_EVP_PKEY_DECRYPT;
static const int EVP_F_EVP_PKEY_ENCRYPT;
static const int EVP_F_EVP_PKEY_NEW;
static const int EVP_F_EVP_SIGNFINAL;
static const int EVP_F_EVP_VERIFYFINAL;
static const int EVP_F_PKCS5_PBE_KEYIVGEN;
static const int EVP_F_PKCS5_V2_PBE_KEYIVGEN;
static const int EVP_F_RC2_MAGIC_TO_METH;
static const int EVP_F_RC5_CTRL;
static const int EVP_F_CAMELLIA_INIT_KEY;

static const int EVP_R_AES_KEY_SETUP_FAILED;
static const int EVP_R_BAD_DECRYPT;
static const int EVP_R_CIPHER_PARAMETER_ERROR;
static const int EVP_R_CTRL_NOT_IMPLEMENTED;
static const int EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED;
static const int EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH;
static const int EVP_R_DECODE_ERROR;
static const int EVP_R_DIFFERENT_KEY_TYPES;
static const int EVP_R_INITIALIZATION_ERROR;
static const int EVP_R_INPUT_NOT_INITIALIZED;
static const int EVP_R_INVALID_KEY_LENGTH;
static const int EVP_R_KEYGEN_FAILURE;
static const int EVP_R_MISSING_PARAMETERS;
static const int EVP_R_NO_CIPHER_SET;
static const int EVP_R_NO_DIGEST_SET;
static const int EVP_R_PUBLIC_KEY_NOT_RSA;
static const int EVP_R_UNKNOWN_PBE_ALGORITHM;
static const int EVP_R_UNSUPPORTED_CIPHER;
static const int EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION;
static const int EVP_R_UNSUPPORTED_KEYLENGTH;
static const int EVP_R_UNSUPPORTED_SALT_TYPE;
static const int EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM;
static const int EVP_R_WRONG_FINAL_BLOCK_LENGTH;
static const int EVP_R_CAMELLIA_KEY_SETUP_FAILED;

static const int EC_F_EC_GROUP_NEW_BY_CURVE_NAME;

static const int EC_R_UNKNOWN_GROUP;

static const int PEM_F_D2I_PKCS8PRIVATEKEY_BIO;
static const int PEM_F_D2I_PKCS8PRIVATEKEY_FP;
static const int PEM_F_DO_PK8PKEY;
static const int PEM_F_DO_PK8PKEY_FP;
static const int PEM_F_LOAD_IV;
static const int PEM_F_PEM_ASN1_READ;
static const int PEM_F_PEM_ASN1_READ_BIO;
static const int PEM_F_PEM_ASN1_WRITE;
static const int PEM_F_PEM_ASN1_WRITE_BIO;
static const int PEM_F_PEM_DEF_CALLBACK;
static const int PEM_F_PEM_DO_HEADER;
static const int PEM_F_PEM_GET_EVP_CIPHER_INFO;
static const int PEM_F_PEM_READ;
static const int PEM_F_PEM_READ_BIO;
static const int PEM_F_PEM_READ_BIO_PRIVATEKEY;
static const int PEM_F_PEM_READ_PRIVATEKEY;
static const int PEM_F_PEM_SIGNFINAL;
static const int PEM_F_PEM_WRITE;
static const int PEM_F_PEM_WRITE_BIO;
static const int PEM_F_PEM_X509_INFO_READ;
static const int PEM_F_PEM_X509_INFO_READ_BIO;
static const int PEM_F_PEM_X509_INFO_WRITE_BIO;

static const int PEM_R_BAD_BASE64_DECODE;
static const int PEM_R_BAD_DECRYPT;
static const int PEM_R_BAD_END_LINE;
static const int PEM_R_BAD_IV_CHARS;
static const int PEM_R_BAD_PASSWORD_READ;
static const int PEM_R_ERROR_CONVERTING_PRIVATE_KEY;
static const int PEM_R_NO_START_LINE;
static const int PEM_R_NOT_DEK_INFO;
static const int PEM_R_NOT_ENCRYPTED;
static const int PEM_R_NOT_PROC_TYPE;
static const int PEM_R_PROBLEMS_GETTING_PASSWORD;
static const int PEM_R_READ_KEY;
static const int PEM_R_SHORT_HEADER;
static const int PEM_R_UNSUPPORTED_CIPHER;
static const int PEM_R_UNSUPPORTED_ENCRYPTION;

static const int PKCS12_F_PKCS12_PBE_CRYPT;

static const int PKCS12_R_PKCS12_CIPHERFINAL_ERROR;

static const int RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE;
static const int RSA_R_DATA_TOO_LARGE_FOR_MODULUS;
static const int RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY;
static const int RSA_R_BLOCK_TYPE_IS_NOT_01;
static const int RSA_R_BLOCK_TYPE_IS_NOT_02;
static const int RSA_R_PKCS_DECODING_ERROR;
static const int RSA_R_OAEP_DECODING_ERROR;
static const int RSA_F_RSA_SIGN;

static const int SSL_TLSEXT_ERR_OK;
static const int SSL_TLSEXT_ERR_ALERT_WARNING;
static const int SSL_TLSEXT_ERR_ALERT_FATAL;
static const int SSL_TLSEXT_ERR_NOACK;

static const int SSL_AD_CLOSE_NOTIFY;
static const int SSL_AD_UNEXPECTED_MESSAGE;
static const int SSL_AD_BAD_RECORD_MAC;
static const int SSL_AD_RECORD_OVERFLOW;
static const int SSL_AD_DECOMPRESSION_FAILURE;
static const int SSL_AD_HANDSHAKE_FAILURE;
static const int SSL_AD_BAD_CERTIFICATE;
static const int SSL_AD_UNSUPPORTED_CERTIFICATE;
static const int SSL_AD_CERTIFICATE_REVOKED;
static const int SSL_AD_CERTIFICATE_EXPIRED;
static const int SSL_AD_CERTIFICATE_UNKNOWN;
static const int SSL_AD_ILLEGAL_PARAMETER;
static const int SSL_AD_UNKNOWN_CA;
static const int SSL_AD_ACCESS_DENIED;
static const int SSL_AD_DECODE_ERROR;
static const int SSL_AD_DECRYPT_ERROR;
static const int SSL_AD_PROTOCOL_VERSION;
static const int SSL_AD_INSUFFICIENT_SECURITY;
static const int SSL_AD_INTERNAL_ERROR;
static const int SSL_AD_USER_CANCELLED;
static const int SSL_AD_NO_RENEGOTIATION;

static const int SSL_AD_UNSUPPORTED_EXTENSION;
static const int SSL_AD_CERTIFICATE_UNOBTAINABLE;
static const int SSL_AD_UNRECOGNIZED_NAME;
static const int SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE;
static const int SSL_AD_BAD_CERTIFICATE_HASH_VALUE;
static const int SSL_AD_UNKNOWN_PSK_IDENTITY;

static const int X509_R_CERT_ALREADY_IN_HASH_TABLE;
"""

FUNCTIONS = """
char *ERR_error_string(unsigned long, char *);
void ERR_error_string_n(unsigned long, char *, size_t);
const char *ERR_lib_error_string(unsigned long);
const char *ERR_func_error_string(unsigned long);
const char *ERR_reason_error_string(unsigned long);
void ERR_print_errors(BIO *);
void ERR_print_errors_fp(FILE *);
unsigned long ERR_get_error(void);
unsigned long ERR_peek_error(void);
unsigned long ERR_peek_last_error(void);
unsigned long ERR_get_error_line(const char **, int *);
unsigned long ERR_peek_error_line(const char **, int *);
unsigned long ERR_peek_last_error_line(const char **, int *);
unsigned long ERR_get_error_line_data(const char **, int *,
                                      const char **, int *);
void ERR_clear_error(void);
unsigned long ERR_peek_error_line_data(const char **,
                                       int *, const char **, int *);
unsigned long ERR_peek_last_error_line_data(const char **,
                                            int *, const char **, int *);
void ERR_put_error(int, int, int, const char *, int);
void ERR_add_error_data(int, ...);
int ERR_get_next_error_library(void);
ERR_STATE *ERR_get_state(void);
/* ERR_free_strings became a macro in 1.1.0 */
void ERR_free_strings(void);

unsigned long ERR_PACK(int, int, int);
int ERR_GET_LIB(unsigned long);
int ERR_GET_FUNC(unsigned long);
int ERR_GET_REASON(unsigned long);

"""

CUSTOMIZATIONS = """
static const long Cryptography_HAS_EC_CODES = 1;

#ifdef RSA_R_PKCS_DECODING_ERROR
static const long Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR = 1;
#else
static const long Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR = 0;
static const long RSA_R_PKCS_DECODING_ERROR = 0;
#endif
"""
b0 82 d6 93 a5 e7 fc ed 67 5c f4 66 85 12 77 2c 0c bc 64 a7 42 c6 c6 30 f5 33 c8 cc 72 f6 2a e8 33 c4 0b f2 58 42 e9 84 bb 78 bd bf 97 c0 10 7d 55 bd b6 62 f5 c4 e0 fa b9 84 5c b5 14 8e f7 39 2d d3 aa ff 93 ae 1e 6b 66 7b b3 d4 24 76 16 d4 f5 ba 10 d4 cf d2 26 de 88 d3 9f 16 fb # Exponent: 01 00 01 # Private key # ----------- # Modulus: a8 b3 b2 84 af 8e b5 0b 38 70 34 a8 60 f1 46 c4 91 9f 31 87 63 cd 6c 55 98 c8 ae 48 11 a1 e0 ab c4 c7 e0 b0 82 d6 93 a5 e7 fc ed 67 5c f4 66 85 12 77 2c 0c bc 64 a7 42 c6 c6 30 f5 33 c8 cc 72 f6 2a e8 33 c4 0b f2 58 42 e9 84 bb 78 bd bf 97 c0 10 7d 55 bd b6 62 f5 c4 e0 fa b9 84 5c b5 14 8e f7 39 2d d3 aa ff 93 ae 1e 6b 66 7b b3 d4 24 76 16 d4 f5 ba 10 d4 cf d2 26 de 88 d3 9f 16 fb # Public exponent: 01 00 01 # Exponent: 53 33 9c fd b7 9f c8 46 6a 65 5c 73 16 ac a8 5c 55 fd 8f 6d d8 98 fd af 11 95 17 ef 4f 52 e8 fd 8e 25 8d f9 3f ee 18 0f a0 e4 ab 29 69 3c d8 3b 15 2a 55 3d 4a c4 d1 81 2b 8b 9f a5 af 0e 7f 55 fe 73 04 df 41 57 09 26 f3 31 1f 15 c4 d6 5a 73 2c 48 31 16 ee 3d 3d 2d 0a f3 54 9a d9 bf 7c bf b7 8a d8 84 f8 4d 5b eb 04 72 4d c7 36 9b 31 de f3 7d 0c f5 39 e9 cf cd d3 de 65 37 29 ea d5 d1 # Prime 1: d3 27 37 e7 26 7f fe 13 41 b2 d5 c0 d1 50 a8 1b 58 6f b3 13 2b ed 2f 8d 52 62 86 4a 9c b9 f3 0a f3 8b e4 48 59 8d 41 3a 17 2e fb 80 2c 21 ac f1 c1 1c 52 0c 2f 26 a4 71 dc ad 21 2e ac 7c a3 9d # Prime 2: cc 88 53 d1 d5 4d a6 30 fa c0 04 f4 71 f2 81 c7 b8 98 2d 82 24 a4 90 ed be b3 3d 3e 3d 5c c9 3c 47 65 70 3d 1d d7 91 64 2f 1f 11 6a 0d d8 52 be 24 19 b2 af 72 bf e9 a0 30 e8 60 b0 28 8b 5d 77 # Prime exponent 1: 0e 12 bf 17 18 e9 ce f5 59 9b a1 c3 88 2f e8 04 6a 90 87 4e ef ce 8f 2c cc 20 e4 f2 74 1f b0 a3 3a 38 48 ae c9 c9 30 5f be cb d2 d7 68 19 96 7d 46 71 ac c6 43 1e 40 37 96 8d b3 78 78 e6 95 c1 # Prime exponent 2: 95 29 7b 0f 95 a2 fa 67 d0 07 07 d6 09 df d4 fc 05 c8 9d af c2 ef 6d 6e a5 5b ec 77 1e a3 33 73 4d 92 51 e7 90 82 ec da 86 6e fe f1 3c 45 9e 1a 63 13 86 b7 e3 54 c8 99 f5 f1 12 ca 85 d7 15 83 # Coefficient: 4f 45 6c 50 24 93 bd c0 ed 2a b7 56 a3 a6 ed 4d 67 35 2a 69 7d 42 16 e9 32 12 b1 27 a6 3d 54 11 ce 6f a9 8d 5d be fd 73 26 3e 37 28 14 27 43 81 81 66 ed 7d d6 36 87 dd 2a 8c a1 d2 f4 fb d8 e1 # RSA-OAEP encryption of 6 random messages with random seeds # ----------------------------------------------------------- # OAEP Example 1.1 # ------------------ # Message: 66 28 19 4e 12 07 3d b0 3b a9 4c da 9e f9 53 23 97 d5 0d ba 79 b9 87 00 4a fe fe 34 # Seed: 18 b7 76 ea 21 06 9d 69 77 6a 33 e9 6b ad 48 e1 dd a0 a5 ef # Encryption: 35 4f e6 7b 4a 12 6d 5d 35 fe 36 c7 77 79 1a 3f 7b a1 3d ef 48 4e 2d 39 08 af f7 22 fa d4 68 fb 21 69 6d e9 5d 0b e9 11 c2 d3 17 4f 8a fc c2 01 03 5f 7b 6d 8e 69 40 2d e5 45 16 18 c2 1a 53 5f a9 d7 bf c5 b8 dd 9f c2 43 f8 cf 92 7d b3 13 22 d6 e8 81 ea a9 1a 99 61 70 e6 57 a0 5a 26 64 26 d9 8c 88 00 3f 84 77 c1 22 70 94 a0 d9 fa 1e 8c 40 24 30 9c e1 ec cc b5 21 00 35 d4 7a c7 2e 8a # OAEP Example 1.2 # ------------------ # Message: 75 0c 40 47 f5 47 e8 e4 14 11 85 65 23 29 8a c9 ba e2 45 ef af 13 97 fb e5 6f 9d d5 # Seed: 0c c7 42 ce 4a 9b 7f 32 f9 51 bc b2 51 ef d9 25 fe 4f e3 5f # Encryption: 64 0d b1 ac c5 8e 05 68 fe 54 07 e5 f9 b7 01 df f8 c3 c9 1e 71 6c 53 6f c7 fc ec 6c b5 b7 1c 11 65 98 8d 4a 27 9e 15 77 d7 30 fc 7a 29 93 2e 3f 00 c8 15 15 23 6d 8d 8e 31 01 7a 7a 09 df 43 52 d9 04 cd eb 79 aa 58 3a dc c3 1e a6 98 a4 c0 52 83 da ba 90 89 be 54 91 f6 7c 1a 4e e4 8d c7 4b bb e6 64 3a ef 84 66 79 b4 cb 39 5a 35 2d 5e d1 15 91 2d f6 96 ff e0 70 29 32 94 6d 71 49 2b 44 # ============================================= """).splitlines() vectors = load_pkcs1_vectors(vector_data) expected = [ ( { 'modulus': int( 'a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae481' '1a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6' 'c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb' '662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616' 'd4f5ba10d4cfd226de88d39f16fb', 16), 'public_exponent': int('10001', 16), 'private_exponent': int( '53339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4' 'f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b' '8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3' 'd3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d' '0cf539e9cfcdd3de653729ead5d1', 16), 'p': int( 'd32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9' 'cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dc' 'ad212eac7ca39d', 16), 'q': int( 'cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3' 'd5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030' 'e860b0288b5d77', 16), 'dmp1': int( '0e12bf1718e9cef5599ba1c3882fe8046a90874eefce8f2ccc20e4f27' '41fb0a33a3848aec9c9305fbecbd2d76819967d4671acc6431e403796' '8db37878e695c1', 16), 'dmq1': int( '95297b0f95a2fa67d00707d609dfd4fc05c89dafc2ef6d6ea55bec771' 'ea333734d9251e79082ecda866efef13c459e1a631386b7e354c899f5' 'f112ca85d71583', 16), 'iqmp': int( '4f456c502493bdc0ed2ab756a3a6ed4d67352a697d4216e93212b127a' '63d5411ce6fa98d5dbefd73263e3728142743818166ed7dd63687dd2a' '8ca1d2f4fbd8e1', 16), 'examples': [ { 'message': b'6628194e12073db03ba94cda9ef9532397d50dba7' b'9b987004afefe34', 'seed': b'18b776ea21069d69776a33e96bad48e1dda0a5ef', 'encryption': b'354fe67b4a126d5d35fe36c777791a3f7ba13d' b'ef484e2d3908aff722fad468fb21696de95d0b' b'e911c2d3174f8afcc201035f7b6d8e69402de5' b'451618c21a535fa9d7bfc5b8dd9fc243f8cf92' b'7db31322d6e881eaa91a996170e657a05a2664' b'26d98c88003f8477c1227094a0d9fa1e8c4024' b'309ce1ecccb5210035d47ac72e8a' }, { 'message': b'750c4047f547e8e41411856523298ac9bae245efa' b'f1397fbe56f9dd5', 'seed': b'0cc742ce4a9b7f32f951bcb251efd925fe4fe35f', 'encryption': b'640db1acc58e0568fe5407e5f9b701dff8c3c9' b'1e716c536fc7fcec6cb5b71c1165988d4a279e' b'1577d730fc7a29932e3f00c81515236d8d8e31' b'017a7a09df4352d904cdeb79aa583adcc31ea6' b'98a4c05283daba9089be5491f67c1a4ee48dc7' b'4bbbe6643aef846679b4cb395a352d5ed11591' b'2df696ffe0702932946d71492b44' } ] }, { 'modulus': int( 'a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae481' '1a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6' 'c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb' '662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616' 'd4f5ba10d4cfd226de88d39f16fb', 16), 'public_exponent': int('10001', 16), } ) ] assert vectors == expected def test_load_hotp_vectors(): vector_data = textwrap.dedent(""" # HOTP Test Vectors # RFC 4226 Appendix D COUNT = 0 COUNTER = 0 INTERMEDIATE = cc93cf18508d94934c64b65d8ba7667fb7cde4b0 TRUNCATED = 4c93cf18 HOTP = 755224 SECRET = 12345678901234567890 COUNT = 1 COUNTER = 1 INTERMEDIATE = 75a48a19d4cbe100644e8ac1397eea747a2d33ab TRUNCATED = 41397eea HOTP = 287082 SECRET = 12345678901234567890 COUNT = 2 COUNTER = 2 INTERMEDIATE = 0bacb7fa082fef30782211938bc1c5e70416ff44 TRUNCATED = 82fef30 HOTP = 359152 SECRET = 12345678901234567890 COUNT = 3 COUNTER = 3 INTERMEDIATE = 66c28227d03a2d5529262ff016a1e6ef76557ece TRUNCATED = 66ef7655 HOTP = 969429 SECRET = 12345678901234567890 """).splitlines() assert load_nist_vectors(vector_data) == [ { "counter": b"0", "intermediate": b"cc93cf18508d94934c64b65d8ba7667fb7cde4b0", "truncated": b"4c93cf18", "hotp": b"755224", "secret": b"12345678901234567890", }, { "counter": b"1", "intermediate": b"75a48a19d4cbe100644e8ac1397eea747a2d33ab", "truncated": b"41397eea", "hotp": b"287082", "secret": b"12345678901234567890", }, { "counter": b"2", "intermediate": b"0bacb7fa082fef30782211938bc1c5e70416ff44", "truncated": b"82fef30", "hotp": b"359152", "secret": b"12345678901234567890", }, { "counter": b"3", "intermediate": b"66c28227d03a2d5529262ff016a1e6ef76557ece", "truncated": b"66ef7655", "hotp": b"969429", "secret": b"12345678901234567890", }, ] def test_load_totp_vectors(): vector_data = textwrap.dedent(""" # TOTP Test Vectors # RFC 6238 Appendix B COUNT = 0 TIME = 59 TOTP = 94287082 MODE = SHA1 SECRET = 12345678901234567890 COUNT = 1 TIME = 59 TOTP = 46119246 MODE = SHA256 SECRET = 12345678901234567890 COUNT = 2 TIME = 59 TOTP = 90693936 MODE = SHA512 SECRET = 12345678901234567890 """).splitlines() assert load_nist_vectors(vector_data) == [ { "time": b"59", "totp": b"94287082", "mode": b"SHA1", "secret": b"12345678901234567890", }, { "time": b"59", "totp": b"46119246", "mode": b"SHA256", "secret": b"12345678901234567890", }, { "time": b"59", "totp": b"90693936", "mode": b"SHA512", "secret": b"12345678901234567890", }, ] def test_load_rsa_nist_vectors(): vector_data = textwrap.dedent(""" # CAVS 11.4 # "SigGen PKCS#1 RSASSA-PSS" information # Mod sizes selected: 1024 1536 2048 3072 4096 # SHA Algorithm selected:SHA1 SHA224 SHA256 SHA384 SHA512 # Salt len: 20 [mod = 1024] n = bcb47b2e0dafcba81ff2a2b5cb115ca7e757184c9d72bcdcda707a146b3b4e29989d e = 00000000000000000000000000000000000000000000000000000000000000000010001 SHAAlg = SHA1 Msg = 1248f62a4389f42f7b4bb131053d6c88a994db2075b912ccbe3ea7dc611714f14e S = 682cf53c1145d22a50caa9eb1a9ba70670c5915e0fdfde6457a765de2a8fe12de97 SHAAlg = SHA384 Msg = e511903c2f1bfba245467295ac95413ac4746c984c3750a728c388aa628b0ebf S = 9c748702bbcc1f9468864cd360c8c39d007b2d8aaee833606c70f7593cf0d1519 [mod = 1024] n = 1234567890 e = 0010001 SHAAlg = SHA512 Msg = 3456781293fab829 S = deadbeef0000 """).splitlines() vectors = load_rsa_nist_vectors(vector_data) assert vectors == [ { "modulus": int("bcb47b2e0dafcba81ff2a2b5cb115ca7e757184c9d72bcdcda" "707a146b3b4e29989d", 16), "public_exponent": 65537, "algorithm": "SHA1", "salt_length": 20, "msg": b"1248f62a4389f42f7b4bb131053d6c88a994db2075b912ccbe3ea7dc6" b"11714f14e", "s": b"682cf53c1145d22a50caa9eb1a9ba70670c5915e0fdfde6457a765de2a8" b"fe12de97", "fail": False }, { "modulus": int("bcb47b2e0dafcba81ff2a2b5cb115ca7e757184c9d72bcdcda" "707a146b3b4e29989d", 16), "public_exponent": 65537, "algorithm": "SHA384", "salt_length": 20, "msg": b"e511903c2f1bfba245467295ac95413ac4746c984c3750a728c388aa6" b"28b0ebf", "s": b"9c748702bbcc1f9468864cd360c8c39d007b2d8aaee833606c70f7593cf" b"0d1519", "fail": False }, { "modulus": 78187493520, "public_exponent": 65537, "algorithm": "SHA512", "salt_length": 20, "msg": b"3456781293fab829", "s": b"deadbeef0000", "fail": False }, ] def test_load_rsa_nist_pkcs1v15_verification_vectors(): vector_data = textwrap.dedent(""" # CAVS 11.0 # "SigVer PKCS#1 Ver 1.5" information # Mod sizes selected: 1024 1536 2048 3072 4096 # SHA Algorithm selected:SHA1 SHA224 SHA256 SHA384 SHA512 # Generated on Wed Mar 02 00:13:02 2011 [mod = 1024] n = be499b5e7f06c83fa0293e31465c8eb6b58af920bae52a7b5b9bfeb7aa72db126411 p = e7a80c5d211c06acb900939495f26d365fc2b4825b75e356f89003eaa5931e6be5c3 q = d248aa248000f720258742da67b711940c8f76e1ecd52b67a6ffe1e49354d66ff84f SHAAlg = SHA1 e = 00000000000000000000000000000000000000000000000000000000000000000011 d = 0d0f17362bdad181db4e1fe03e8de1a3208989914e14bf269558826bfa20faf4b68d Msg = 6b9cfac0ba1c7890b13e381ce752195cc1375237db2afcf6a9dcd1f95ec733a80c S = 562d87b5781c01d166fef3972669a0495c145b898a17df4743fbefb0a1582bd6ba9d SaltVal = 11223344555432167890 Result = F (3 - Signature changed ) SHAAlg = SHA1 e = 0000000000003 d = bfa20faf4b68d Msg = 2a67c70ff14f9b34ddb42e6f89d5971057a0da980fc9ae70c81a84da0c0ac42737 S = 2b91c6ae2b3c46ff18d5b7abe239634cb752d0acb53eea0ccd8ea8483036a50e8faf SaltVal = 11223344555432167890 Result = P """).splitlines() vectors = load_rsa_nist_vectors(vector_data) assert vectors == [ { "modulus": int("be499b5e7f06c83fa0293e31465c8eb6b58af920bae52a7b5b" "9bfeb7aa72db126411", 16), "p": int("e7a80c5d211c06acb900939495f26d365fc2b4825b75e356f89003ea" "a5931e6be5c3", 16), "q": int("d248aa248000f720258742da67b711940c8f76e1ecd52b67a6ffe1e4" "9354d66ff84f", 16), "public_exponent": 17, "algorithm": "SHA1", "private_exponent": int("0d0f17362bdad181db4e1fe03e8de1a3208989914" "e14bf269558826bfa20faf4b68d", 16), "msg": b"6b9cfac0ba1c7890b13e381ce752195cc1375237db2afcf6a9dcd1f95" b"ec733a80c", "s": b"562d87b5781c01d166fef3972669a0495c145b898a17df4743fbefb0a15" b"82bd6ba9d", "saltval": b"11223344555432167890", "fail": True }, { "modulus": int("be499b5e7f06c83fa0293e31465c8eb6b58af920bae52a7b5b" "9bfeb7aa72db126411", 16), "p": int("e7a80c5d211c06acb900939495f26d365fc2b4825b75e356f89003ea" "a5931e6be5c3", 16), "q": int("d248aa248000f720258742da67b711940c8f76e1ecd52b67a6ffe1e4" "9354d66ff84f", 16), "public_exponent": 3, "algorithm": "SHA1", "private_exponent": int("bfa20faf4b68d", 16), "msg": b"2a67c70ff14f9b34ddb42e6f89d5971057a0da980fc9ae70c81a84da0" b"c0ac42737", "s": b"2b91c6ae2b3c46ff18d5b7abe239634cb752d0acb53eea0ccd8ea848303" b"6a50e8faf", "saltval": b"11223344555432167890", "fail": False }, ] def test_load_rsa_nist_pss_verification_vectors(): vector_data = textwrap.dedent(""" # CAVS 11.0 # "SigVer PKCS#1 RSASSA-PSS" information # Mod sizes selected: 1024 1536 2048 3072 4096 # SHA Algorithm selected:SHA1 SHA224 SHA256 SHA384 SHA512 # Salt len: 10 # Generated on Wed Mar 02 00:25:22 2011 [mod = 1024] n = be499b5e7f06c83fa0293e31465c8eb6b5 p = e7a80c5d211c06acb900939495f26d365f q = d248aa248000f720258742da67b711940c SHAAlg = SHA1 e = 00000000000000011 d = c8e26a88239672cf49b3422a07c4d834ba Msg = 6b9cfac0ba1c7890b13e381ce752195c S = 562d87b5781c01d166fef3972669a0495c SaltVal = 11223344555432167890 Result = F (3 - Signature changed ) SHAAlg = SHA384 e = 000003 d = 0d0f17362bdad181db4e1fe03e8de1a320 Msg = 2a67c70ff14f9b34ddb42e6f89d59710 S = 2b91c6ae2b3c46ff18d5b7abe239634cb7 SaltVal = 11223344555432167890 Result = P """).splitlines() vectors = load_rsa_nist_vectors(vector_data) assert vectors == [ { "modulus": int("be499b5e7f06c83fa0293e31465c8eb6b5", 16), "p": int("e7a80c5d211c06acb900939495f26d365f", 16), "q": int("d248aa248000f720258742da67b711940c", 16), "public_exponent": 17, "algorithm": "SHA1", "private_exponent": int("c8e26a88239672cf49b3422a07c4d834ba", 16), "msg": b"6b9cfac0ba1c7890b13e381ce752195c", "s": b"562d87b5781c01d166fef3972669a0495c", "saltval": b"11223344555432167890", "salt_length": 10, "fail": True }, { "modulus": int("be499b5e7f06c83fa0293e31465c8eb6b5", 16), "p": int("e7a80c5d211c06acb900939495f26d365f", 16), "q": int("d248aa248000f720258742da67b711940c", 16), "public_exponent": 3, "algorithm": "SHA384", "private_exponent": int("0d0f17362bdad181db4e1fe03e8de1a320", 16), "msg": b"2a67c70ff14f9b34ddb42e6f89d59710", "s": b"2b91c6ae2b3c46ff18d5b7abe239634cb7", "saltval": b"11223344555432167890", "salt_length": 10, "fail": False }, ] def test_load_fips_dsa_key_pair_vectors(): vector_data = textwrap.dedent(""" # CAVS 11.1 # "KeyPair" information # Mod sizes selected: L=1024, N=160:: L=2048, N=224 :: L=2048, N=256 :: L =3072, N=256 # Generated on Wed May 04 08:50:52 2011 [mod = L=1024, N=160] P = d38311e2cd388c3ed698e82fdf88eb92b5a9a483dc88005d4b725ef341eabb47cf8a7a\ 8a41e792a156b7ce97206c4f9c5ce6fc5ae7912102b6b502e59050b5b21ce263dddb2044b65223\ 6f4d42ab4b5d6aa73189cef1ace778d7845a5c1c1c7147123188f8dc551054ee162b634d60f097\ f719076640e20980a0093113a8bd73 Q = 96c5390a8b612c0e422bb2b0ea194a3ec935a281 G = 06b7861abbd35cc89e79c52f68d20875389b127361ca66822138ce4991d2b862259d6b\ 4548a6495b195aa0e0b6137ca37eb23b94074d3c3d300042bdf15762812b6333ef7b07ceba7860\ 7610fcc9ee68491dbc1e34cd12615474e52b18bc934fb00c61d39e7da8902291c4434a4e2224c3\ f4fd9f93cd6f4f17fc076341a7e7d9 X = 8185fee9cc7c0e91fd85503274f1cd5a3fd15a49 Y = 6f26d98d41de7d871b6381851c9d91fa03942092ab6097e76422070edb71db44ff5682\ 80fdb1709f8fc3feab39f1f824adaeb2a298088156ac31af1aa04bf54f475bdcfdcf2f8a2dd973\ e922d83e76f016558617603129b21c70bf7d0e5dc9e68fe332e295b65876eb9a12fe6fca9f1a1c\ e80204646bf99b5771d249a6fea627 X = 85322d6ea73083064376099ca2f65f56e8522d9b Y = 21f8690f717c9f4dcb8f4b6971de2f15b9231fcf41b7eeb997d781f240bfdddfd2090d\ 22083c26cca39bf37c9caf1ec89518ea64845a50d747b49131ffff6a2fd11ea7bacbb93c7d0513\ 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\ 498acb0f4663c08b4484eace845f6fb17dac62c98e706af0fc74e4da1c6c2b3fbf5a1d58ff82fc\ 1a66f3e8b12252c40278fff9dd7f102eed2cb5b7323ebf1908c234d935414dded7f8d244e54561\ b0dca39b301de8c49da9fb23df33c6182e3f983208c560fb5119fbf78ebe3e6564ee235c6a15cb\ b9ac247baba5a423bc6582a1a9d8a2b4f0e9e3d9dbac122f750dd754325135257488b1f6ecabf2\ 1bff2947fe0d3b2cb7ffe67f4e7fcdf1214f6053e72a5bb0dd20a0e9fe6db2df0a908c36e95e60\ bf49ca4368b8b892b9c79f61ef91c47567c40e1f80ac5aa66ef7 Q = 8ec73f3761caf5fdfe6e4e82098bf10f898740dcb808204bf6b18f507192c19d G = e4c4eca88415b23ecf811c96e48cd24200fe916631a68a684e6ccb6b1913413d344d1d\ 8d84a333839d88eee431521f6e357c16e6a93be111a98076739cd401bab3b9d565bf4fb99e9d18\ 5b1e14d61c93700133f908bae03e28764d107dcd2ea7674217622074bb19efff482f5f5c1a86d5\ 551b2fc68d1c6e9d8011958ef4b9c2a3a55d0d3c882e6ad7f9f0f3c61568f78d0706b10a26f23b\ 4f197c322b825002284a0aca91807bba98ece912b80e10cdf180cf99a35f210c1655fbfdd74f13\ b1b5046591f8403873d12239834dd6c4eceb42bf7482e1794a1601357b629ddfa971f2ed273b14\ 6ec1ca06d0adf55dd91d65c37297bda78c6d210c0bc26e558302 X = 405772da6e90d809e77d5de796562a2dd4dfd10ef00a83a3aba6bd818a0348a1 Y = 6b32e31ab9031dc4dd0b5039a78d07826687ab087ae6de4736f5b0434e1253092e8a0b\ 231f9c87f3fc8a4cb5634eb194bf1b638b7a7889620ce6711567e36aa36cda4604cfaa601a4591\ 8371d4ccf68d8b10a50a0460eb1dc0fff62ef5e6ee4d473e18ea4a66c196fb7e677a49b48241a0\ b4a97128eff30fa437050501a584f8771e7280d26d5af30784039159c11ebfea10b692fd0a5821\ 5eeb18bff117e13f08db792ed4151a218e4bed8dddfb0793225bd1e9773505166f4bd8cedbb286\ ea28232972da7bae836ba97329ba6b0a36508e50a52a7675e476d4d4137eae13f22a9d2fefde70\ 8ba8f34bf336c6e76331761e4b0617633fe7ec3f23672fb19d27 X = 0e0b95e31fda3f888059c46c3002ef8f2d6be112d0209aeb9e9545da67aeea80 Y = 778082b77ddba6f56597cc74c3a612abf2ddbd85cc81430c99ab843c1f630b9db01399\ 65f563978164f9bf3a8397256be714625cd41cd7fa0067d94ea66d7e073f7125af692ad01371d4\ a17f4550590378f2b074030c20e36911598a1018772f61be3b24de4be5a388ccc09e15a92819c3\ 1dec50de9fde105b49eaa097b9d13d9219eeb33b628facfd1c78a7159c8430d0647c506e7e3de7\ 4763cb351eada72c00bef3c9641881e6254870c1e6599f8ca2f1bbb74f39a905e3a34e4544168e\ 6e50c9e3305fd09cab6ed4aff6fda6e0d5bf375c81ac9054406d9193b003c89272f1bd83d48250\ 134b65c77c2b6332d38d34d9016f0e8975536ad6c348a1faedb0 [mod = L=3072, N=256] P = f335666dd1339165af8b9a5e3835adfe15c158e4c3c7bd53132e7d5828c352f593a9a7\ 87760ce34b789879941f2f01f02319f6ae0b756f1a842ba54c85612ed632ee2d79ef17f06b77c6\ 41b7b080aff52a03fc2462e80abc64d223723c236deeb7d201078ec01ca1fbc1763139e25099a8\ 4ec389159c409792080736bd7caa816b92edf23f2c351f90074aa5ea2651b372f8b58a0a65554d\ b2561d706a63685000ac576b7e4562e262a14285a9c6370b290e4eb7757527d80b6c0fd5df831d\ 36f3d1d35f12ab060548de1605fd15f7c7aafed688b146a02c945156e284f5b71282045aba9844\ d48b5df2e9e7a5887121eae7d7b01db7cdf6ff917cd8eb50c6bf1d54f90cce1a491a9c74fea88f\ 7e7230b047d16b5a6027881d6f154818f06e513faf40c8814630e4e254f17a47bfe9cb519b9828\ 9935bf17673ae4c8033504a20a898d0032ee402b72d5986322f3bdfb27400561f7476cd715eaab\ b7338b854e51fc2fa026a5a579b6dcea1b1c0559c13d3c1136f303f4b4d25ad5b692229957 Q = d3eba6521240694015ef94412e08bf3cf8d635a455a398d6f210f6169041653b G = ce84b30ddf290a9f787a7c2f1ce92c1cbf4ef400e3cd7ce4978db2104d7394b493c183\ 32c64cec906a71c3778bd93341165dee8e6cd4ca6f13afff531191194ada55ecf01ff94d6cf7c4\ 768b82dd29cd131aaf202aefd40e564375285c01f3220af4d70b96f1395420d778228f1461f5d0\ b8e47357e87b1fe3286223b553e3fc9928f16ae3067ded6721bedf1d1a01bfd22b9ae85fce7782\ 0d88cdf50a6bde20668ad77a707d1c60fcc5d51c9de488610d0285eb8ff721ff141f93a9fb23c1\ d1f7654c07c46e58836d1652828f71057b8aff0b0778ef2ca934ea9d0f37daddade2d823a4d8e3\ 62721082e279d003b575ee59fd050d105dfd71cd63154efe431a0869178d9811f4f231dc5dcf3b\ 0ec0f2b0f9896c32ec6c7ee7d60aa97109e09224907328d4e6acd10117e45774406c4c947da802\ 0649c3168f690e0bd6e91ac67074d1d436b58ae374523deaf6c93c1e6920db4a080b744804bb07\ 3cecfe83fa9398cf150afa286dc7eb7949750cf5001ce104e9187f7e16859afa8fd0d775ae X = b2764c46113983777d3e7e97589f1303806d14ad9f2f1ef033097de954b17706 Y = 814824e435e1e6f38daa239aad6dad21033afce6a3ebd35c1359348a0f2418871968c2\ babfc2baf47742148828f8612183178f126504da73566b6bab33ba1f124c15aa461555c2451d86\ c94ee21c3e3fc24c55527e01b1f03adcdd8ec5cb08082803a7b6a829c3e99eeb332a2cf5c035b0\ ce0078d3d414d31fa47e9726be2989b8d06da2e6cd363f5a7d1515e3f4925e0b32adeae3025cc5\ a996f6fd27494ea408763de48f3bb39f6a06514b019899b312ec570851637b8865cff3a52bf5d5\ 4ad5a19e6e400a2d33251055d0a440b50d53f4791391dc754ad02b9eab74c46b4903f9d76f8243\ 39914db108057af7cde657d41766a99991ac8787694f4185d6f91d7627048f827b405ec67bf2fe\ 56141c4c581d8c317333624e073e5879a82437cb0c7b435c0ce434e15965db1315d64895991e6b\ be7dac040c42052408bbc53423fd31098248a58f8a67da3a39895cd0cc927515d044c1e3cb6a32\ 59c3d0da354cce89ea3552c59609db10ee989986527436af21d9485ddf25f90f7dff6d2bae X = 52e3e040efb30e1befd909a0bdbcfd140d005b1bff094af97186080262f1904d Y = a5ae6e8f9b7a68ab0516dad4d7b7d002126f811d5a52e3d35c6d387fcb43fd19bf7792\ 362f9c98f8348aa058bb62376685f3d0c366c520d697fcd8416947151d4bbb6f32b53528a01647\ 9e99d2cd48d1fc679027c15f0042f207984efe05c1796bca8eba678dfdd00b80418e3ea840557e\ 73b09e003882f9a68edba3431d351d1ca07a8150b018fdbdf6c2f1ab475792a3ccaa6594472a45\ f8dc777b60bf67de3e0f65c20d11b7d59faedf83fbce52617f500d9e514947c455274c6e900464\ 767fb56599b81344cf6d12c25cb2b7d038d7b166b6cf30534811c15d0e8ab880a2ac06786ae2dd\ de61329a78d526f65245380ce877e979c5b50de66c9c30d66382c8f254653d25a1eb1d3a4897d7\ 623399b473ce712a2184cf2da1861706c41466806aefe41b497db82aca6c31c8f4aa68c17d1d9e\ 380b57998917655783ec96e5234a131f7299398d36f1f5f84297a55ff292f1f060958c358fed34\ 6db2de45127ca728a9417b2c54203e33e53b9a061d924395b09afab8daf3e8dd7eedcec3ac """).splitlines() expected = [ {'g': int('06b7861abbd35cc89e79c52f68d20875389b127361ca66822138ce499' '1d2b862259d6b4548a6495b195aa0e0b6137ca37eb23b94074d3c3d3000' '42bdf15762812b6333ef7b07ceba78607610fcc9ee68491dbc1e34cd12' '615474e52b18bc934fb00c61d39e7da8902291c4434a4e2224c3f' '4fd9f93cd6f4f17fc076341a7e7d9', 16), 'p': int('d38311e2cd388c3ed698e82fdf88eb92b5a9a483dc88005d4b725e' 'f341eabb47cf8a7a8a41e792a156b7ce97206c4f9c5ce6fc5ae791210' '2b6b502e59050b5b21ce263dddb2044b652236f4d42ab4b5d6aa73189c' 'ef1ace778d7845a5c1c1c7147123188f8dc551054ee162b634d60f097f7' '19076640e20980a0093113a8bd73', 16), 'q': int('96c5390a8b612c0e422bb2b0ea194a3ec935a281', 16), 'x': int('8185fee9cc7c0e91fd85503274f1cd5a3fd15a49', 16), 'y': int('6f26d98d41de7d871b6381851c9d91fa03942092ab6097e76422' '070edb71db44ff568280fdb1709f8fc3feab39f1f824adaeb2a29808815' '6ac31af1aa04bf54f475bdcfdcf2f8a2dd973e922d83e76f01655861760' '3129b21c70bf7d0e5dc9e68fe332e295b65876eb9a12fe6fca9f1a1ce80' '204646bf99b5771d249a6fea627', 16)}, {'g': int('06b7861abbd35cc89e79c52f68d20875389b127361ca66822138ce4991d' '2b862259d6b4548a6495b195aa0e0b6137ca37eb23b94074d3c3d30004' '2bdf15762812b6333ef7b07ceba78607610fcc9ee68491dbc1e34cd126' '15474e52b18bc934fb00c61d39e7da8902291c4434a4e2224c3f4fd9' 'f93cd6f4f17fc076341a7e7d9', 16), 'p': int('d38311e2cd388c3ed698e82fdf88eb92b5a9a483dc88005d4b725ef341e' 'abb47cf8a7a8a41e792a156b7ce97206c4f9c5ce6fc5ae7912102b6b50' '2e59050b5b21ce263dddb2044b652236f4d42ab4b5d6aa73189cef1a' 'ce778d7845a5c1c1c7147123188f8dc551054ee162b634d6' '0f097f719076640e20980a0093113a8bd73', 16), 'q': int('96c5390a8b612c0e422bb2b0ea194a3ec935a281', 16), 'x': int('85322d6ea73083064376099ca2f65f56e8522d9b', 16), 'y': int('21f8690f717c9f4dcb8f4b6971de2f15b9231fcf41b7eeb997d781f240' 'bfdddfd2090d22083c26cca39bf37c9caf1ec89518ea64845a50d747b49' '131ffff6a2fd11ea7bacbb93c7d05137383a06365af82225dd3713c' 'a5a45006316f53bd12b0e260d5f79795e5a4c9f353f12867a1d3' '202394673ada8563b71555e53f415254', 16)}, {'g': int('e4c4eca88415b23ecf811c96e48cd24200fe916631a68a684e6ccb6b191' '3413d344d1d8d84a333839d88eee431521f6e357c16e6a93be111a9807' '6739cd401bab3b9d565bf4fb99e9d185b1e14d61c93700133f908bae0' '3e28764d107dcd2ea7674217622074bb19efff482f5f5c1a86d5551b2' 'fc68d1c6e9d8011958ef4b9c2a3a55d0d3c882e6ad7f9f0f3c61568f78' 'd0706b10a26f23b4f197c322b825002284a0aca91807bba98ece912' 'b80e10cdf180cf99a35f210c1655fbfdd74f13b1b5046591f8403873d' '12239834dd6c4eceb42bf7482e1794a1601357b629ddfa971f2ed273b1' '46ec1ca06d0adf55dd91d65c37297bda78c6d210c0bc26e558302', 16), 'p': int('ea1fb1af22881558ef93be8a5f8653c5a559434c49c8c2c12ace' '5e9c41434c9cf0a8e9498acb0f4663c08b4484eace845f6fb17d' 'ac62c98e706af0fc74e4da1c6c2b3fbf5a1d58ff82fc1a66f3e8b122' '52c40278fff9dd7f102eed2cb5b7323ebf1908c234d935414dded7f8d2' '44e54561b0dca39b301de8c49da9fb23df33c6182e3f983208c560fb5' '119fbf78ebe3e6564ee235c6a15cbb9ac247baba5a423bc6582a1a9d8a' '2b4f0e9e3d9dbac122f750dd754325135257488b1f6ecabf21bff2947' 'fe0d3b2cb7ffe67f4e7fcdf1214f6053e72a5bb0dd20a0e9fe6db2df0a' '908c36e95e60bf49ca4368b8b892b9c79f61ef91c47567c40e1f80ac' '5aa66ef7', 16), 'q': int('8ec73f3761caf5fdfe6e4e82098bf10f898740dcb808204bf6b1' '8f507192c19d', 16), 'x': int('405772da6e90d809e77d5de796562a2dd4dfd10ef00a83a3aba6' 'bd818a0348a1', 16), 'y': int('6b32e31ab9031dc4dd0b5039a78d07826687ab087ae6de4736f5' 'b0434e1253092e8a0b231f9c87f3fc8a4cb5634eb194bf1b638' 'b7a7889620ce6711567e36aa36cda4604cfaa601a45918371d' '4ccf68d8b10a50a0460eb1dc0fff62ef5e6ee4d473e18ea4a6' '6c196fb7e677a49b48241a0b4a97128eff30fa437050501a584' 'f8771e7280d26d5af30784039159c11ebfea10b692fd0a58215ee' 'b18bff117e13f08db792ed4151a218e4bed8dddfb0793225bd1e97' '73505166f4bd8cedbb286ea28232972da7bae836ba97329ba6b0a36508' 'e50a52a7675e476d4d4137eae13f22a9d2fefde708ba8f34bf336c6e7' '6331761e4b0617633fe7ec3f23672fb19d27', 16)}, {'g': int('e4c4eca88415b23ecf811c96e48cd24200fe916631a68a684e6ccb6b191' '3413d344d1d8d84a333839d88eee431521f6e357c16e6a93be111a9807' '6739cd401bab3b9d565bf4fb99e9d185b1e14d61c93700133f908bae0' '3e28764d107dcd2ea7674217622074bb19efff482f5f5c1a86d5551b2' 'fc68d1c6e9d8011958ef4b9c2a3a55d0d3c882e6ad7f9f0f3c61568f78' 'd0706b10a26f23b4f197c322b825002284a0aca91807bba98ece912' 'b80e10cdf180cf99a35f210c1655fbfdd74f13b1b5046591f8403873d' '12239834dd6c4eceb42bf7482e1794a1601357b629ddfa971f2ed273b1' '46ec1ca06d0adf55dd91d65c37297bda78c6d210c0bc26e558302', 16), 'p': int('ea1fb1af22881558ef93be8a5f8653c5a559434c49c8c2c12ace' '5e9c41434c9cf0a8e9498acb0f4663c08b4484eace845f6fb17d' 'ac62c98e706af0fc74e4da1c6c2b3fbf5a1d58ff82fc1a66f3e8b122' '52c40278fff9dd7f102eed2cb5b7323ebf1908c234d935414dded7f8d2' '44e54561b0dca39b301de8c49da9fb23df33c6182e3f983208c560fb5' '119fbf78ebe3e6564ee235c6a15cbb9ac247baba5a423bc6582a1a9d8a' '2b4f0e9e3d9dbac122f750dd754325135257488b1f6ecabf21bff2947' 'fe0d3b2cb7ffe67f4e7fcdf1214f6053e72a5bb0dd20a0e9fe6db2df0a' '908c36e95e60bf49ca4368b8b892b9c79f61ef91c47567c40e1f80ac' '5aa66ef7', 16), 'q': int('8ec73f3761caf5fdfe6e4e82098bf10f898740dcb808204bf6b1' '8f507192c19d', 16), 'x': int('0e0b95e31fda3f888059c46c3002ef8f2d6be112d0209aeb9e95' '45da67aeea80', 16), 'y': int('778082b77ddba6f56597cc74c3a612abf2ddbd85cc81430c99ab' '843c1f630b9db0139965f563978164f9bf3a8397256be714625' 'cd41cd7fa0067d94ea66d7e073f7125af692ad01371d4a17f45' '50590378f2b074030c20e36911598a1018772f61be3b24de4be' '5a388ccc09e15a92819c31dec50de9fde105b49eaa097b9d13d' '9219eeb33b628facfd1c78a7159c8430d0647c506e7e3de74763c' 'b351eada72c00bef3c9641881e6254870c1e6599f8ca2f1bbb74f' '39a905e3a34e4544168e6e50c9e3305fd09cab6ed4aff6fda6e0d' '5bf375c81ac9054406d9193b003c89272f1bd83d48250134b65c77' 'c2b6332d38d34d9016f0e8975536ad6c348a1faedb0', 16)}, {'g': int('ce84b30ddf290a9f787a7c2f1ce92c1cbf4ef400e3cd7ce4978d' 'b2104d7394b493c18332c64cec906a71c3778bd93341165dee8' 'e6cd4ca6f13afff531191194ada55ecf01ff94d6cf7c4768b82' 'dd29cd131aaf202aefd40e564375285c01f3220af4d70b96f1' '395420d778228f1461f5d0b8e47357e87b1fe3286223b553e3' 'fc9928f16ae3067ded6721bedf1d1a01bfd22b9ae85fce77820d88cdf' '50a6bde20668ad77a707d1c60fcc5d51c9de488610d0285eb8ff721f' 'f141f93a9fb23c1d1f7654c07c46e58836d1652828f71057b8aff0b077' '8ef2ca934ea9d0f37daddade2d823a4d8e362721082e279d003b575ee' '59fd050d105dfd71cd63154efe431a0869178d9811f4f231dc5dcf3b' '0ec0f2b0f9896c32ec6c7ee7d60aa97109e09224907328d4e6acd1011' '7e45774406c4c947da8020649c3168f690e0bd6e91ac67074d1d436b' '58ae374523deaf6c93c1e6920db4a080b744804bb073cecfe83fa939' '8cf150afa286dc7eb7949750cf5001ce104e9187f7e16859afa8fd0d' '775ae', 16), 'p': int('f335666dd1339165af8b9a5e3835adfe15c158e4c3c7bd53132e7d5828' 'c352f593a9a787760ce34b789879941f2f01f02319f6ae0b756f1a842' 'ba54c85612ed632ee2d79ef17f06b77c641b7b080aff52a03fc2462e8' '0abc64d223723c236deeb7d201078ec01ca1fbc1763139e25099a84ec' '389159c409792080736bd7caa816b92edf23f2c351f90074aa5ea2651' 'b372f8b58a0a65554db2561d706a63685000ac576b7e4562e262a1428' '5a9c6370b290e4eb7757527d80b6c0fd5df831d36f3d1d35f12ab0605' '48de1605fd15f7c7aafed688b146a02c945156e284f5b71282045aba9' '844d48b5df2e9e7a5887121eae7d7b01db7cdf6ff917cd8eb50c6bf1d' '54f90cce1a491a9c74fea88f7e7230b047d16b5a6027881d6f154818f' '06e513faf40c8814630e4e254f17a47bfe9cb519b98289935bf17673a' 'e4c8033504a20a898d0032ee402b72d5986322f3bdfb27400561f7476' 'cd715eaabb7338b854e51fc2fa026a5a579b6dcea1b1c0559c13d3c11' '36f303f4b4d25ad5b692229957', 16), 'q': int('d3eba6521240694015ef94412e08bf3cf8d635a455a398d6f210' 'f6169041653b', 16), 'x': int('b2764c46113983777d3e7e97589f1303806d14ad9f2f1ef03309' '7de954b17706', 16), 'y': int('814824e435e1e6f38daa239aad6dad21033afce6a3ebd35c1359348a0f2' '418871968c2babfc2baf47742148828f8612183178f126504da73566b6' 'bab33ba1f124c15aa461555c2451d86c94ee21c3e3fc24c55527e' '01b1f03adcdd8ec5cb08082803a7b6a829c3e99eeb332a2cf5c035b0c' 'e0078d3d414d31fa47e9726be2989b8d06da2e6cd363f5a7d1515e3f4' '925e0b32adeae3025cc5a996f6fd27494ea408763de48f3bb39f6a06' '514b019899b312ec570851637b8865cff3a52bf5d54ad5a19e6e400' 'a2d33251055d0a440b50d53f4791391dc754ad02b9eab74c46b4903' 'f9d76f824339914db108057af7cde657d41766a99991ac8787694f' '4185d6f91d7627048f827b405ec67bf2fe56141c4c581d8c317333' '624e073e5879a82437cb0c7b435c0ce434e15965db1315d648959' '91e6bbe7dac040c42052408bbc53423fd31098248a58f8a67da3a' '39895cd0cc927515d044c1e3cb6a3259c3d0da354cce89ea3552c' '59609db10ee989986527436af21d9485ddf25f90f7dff6d2bae', 16)}, {'g': int('ce84b30ddf290a9f787a7c2f1ce92c1cbf4ef400e3cd7ce4978d' 'b2104d7394b493c18332c64cec906a71c3778bd93341165dee8' 'e6cd4ca6f13afff531191194ada55ecf01ff94d6cf7c4768b82' 'dd29cd131aaf202aefd40e564375285c01f3220af4d70b96f1' '395420d778228f1461f5d0b8e47357e87b1fe3286223b553e3' 'fc9928f16ae3067ded6721bedf1d1a01bfd22b9ae85fce77820d88cdf' '50a6bde20668ad77a707d1c60fcc5d51c9de488610d0285eb8ff721f' 'f141f93a9fb23c1d1f7654c07c46e58836d1652828f71057b8aff0b077' '8ef2ca934ea9d0f37daddade2d823a4d8e362721082e279d003b575ee' '59fd050d105dfd71cd63154efe431a0869178d9811f4f231dc5dcf3b' '0ec0f2b0f9896c32ec6c7ee7d60aa97109e09224907328d4e6acd1011' '7e45774406c4c947da8020649c3168f690e0bd6e91ac67074d1d436b' '58ae374523deaf6c93c1e6920db4a080b744804bb073cecfe83fa939' '8cf150afa286dc7eb7949750cf5001ce104e9187f7e16859afa8fd0d' '775ae', 16), 'p': int('f335666dd1339165af8b9a5e3835adfe15c158e4c3c7bd53132e7d5828' 'c352f593a9a787760ce34b789879941f2f01f02319f6ae0b756f1a842' 'ba54c85612ed632ee2d79ef17f06b77c641b7b080aff52a03fc2462e8' '0abc64d223723c236deeb7d201078ec01ca1fbc1763139e25099a84ec' '389159c409792080736bd7caa816b92edf23f2c351f90074aa5ea2651' 'b372f8b58a0a65554db2561d706a63685000ac576b7e4562e262a1428' '5a9c6370b290e4eb7757527d80b6c0fd5df831d36f3d1d35f12ab0605' '48de1605fd15f7c7aafed688b146a02c945156e284f5b71282045aba9' '844d48b5df2e9e7a5887121eae7d7b01db7cdf6ff917cd8eb50c6bf1d' '54f90cce1a491a9c74fea88f7e7230b047d16b5a6027881d6f154818f' '06e513faf40c8814630e4e254f17a47bfe9cb519b98289935bf17673a' 'e4c8033504a20a898d0032ee402b72d5986322f3bdfb27400561f7476' 'cd715eaabb7338b854e51fc2fa026a5a579b6dcea1b1c0559c13d3c11' '36f303f4b4d25ad5b692229957', 16), 'q': int('d3eba6521240694015ef94412e08bf3cf8d635a455a398d6f210' 'f6169041653b', 16), 'x': int('52e3e040efb30e1befd909a0bdbcfd140d005b1bff094af97186' '080262f1904d', 16), 'y': int('a5ae6e8f9b7a68ab0516dad4d7b7d002126f811d5a52e3d35c6d' '387fcb43fd19bf7792362f9c98f8348aa058bb62376685f3d0c3' '66c520d697fcd8416947151d4bbb6f32b53528a016479e99d2cd' '48d1fc679027c15f0042f207984efe05c1796bca8eba678dfdd0' '0b80418e3ea840557e73b09e003882f9a68edba3431d351d1ca0' '7a8150b018fdbdf6c2f1ab475792a3ccaa6594472a45f8dc777b' '60bf67de3e0f65c20d11b7d59faedf83fbce52617f500d9e5149' '47c455274c6e900464767fb56599b81344cf6d12c25cb2b7d038' 'd7b166b6cf30534811c15d0e8ab880a2ac06786ae2ddde61329a' '78d526f65245380ce877e979c5b50de66c9c30d66382c8f25465' '3d25a1eb1d3a4897d7623399b473ce712a2184cf2da1861706c4' '1466806aefe41b497db82aca6c31c8f4aa68c17d1d9e380b5799' '8917655783ec96e5234a131f7299398d36f1f5f84297a55ff292' 'f1f060958c358fed346db2de45127ca728a9417b2c54203e33e5' '3b9a061d924395b09afab8daf3e8dd7eedcec3ac', 16)} ] assert expected == load_fips_dsa_key_pair_vectors(vector_data) def test_load_fips_dsa_sig_ver_vectors(): vector_data = textwrap.dedent(""" # CAVS 11.0 # "SigVer" information # Mod sizes selected: SHA-1 L=1024, N=160,SHA-384 L=2048, N=256 # Generated on Fri Apr 01 08:37:15 2011 [mod = L=1024, N=160, SHA-1] P = dc5bf3a88b2d99e4c95cdd7a0501cc38630d425cf5c390af3429cff1f35147b795cae\ a923f0d3577158f8a0c89dabd1962c2c453306b5d70cacfb01430aceb54e5a5fa6f93\ 40d3bd2da612fceeb76b0ec1ebfae635a56ab141b108e00dc76eefe2edd0c514c21c4\ 57457c39065dba9d0ecb7569c247172d8438ad2827b60435b Q = e956602b83d195dbe945b3ac702fc61f81571f1d G = d7eb9ca20a3c7a079606bafc4c9261ccaba303a5dc9fe9953f197dfe548c234895baa\ 77f441ee6a2d97b909cbbd26ff7b869d24cae51b5c6edb127a4b5d75cd8b46608bfa1\ 48249dffdb59807c5d7dde3fe3080ca3a2d28312142becb1fa8e24003e21c72871081\ 74b95d5bc711e1c8d9b1076784f5dc37a964a5e51390da713 Msg = 0fe1bfee500bdb76026099b1d37553f6bdfe48c82094ef98cb309dd777330bedfaa\ 2f94c823ef74ef4074b50d8706041ac0e371c7c22dcf70263b8d60e17a86c7c379c\ fda8f22469e0df9d49d59439fc99891873628fff25dda5fac5ac794e948babdde96\ 8143ba05f1128f34fdad5875edc4cd71c6c24ba2060ffbd439ce2b3 X = 1d93010c29ecfc432188942f46f19f44f0e1bb5d Y = 6240ea0647117c38fe705106d56db578f3e10130928452d4f3587881b8a2bc6873a8b\ efc3237f20914e2a91c7f07a928ee22adeed23d74ab7f82ea11f70497e578f7a9b4cb\ d6f10226222b0b4da2ea1e49813d6bb9882fbf675c0846bb80cc891857b89b0ef1beb\ 6cce3378a9aab5d66ad4cb9277cf447dfe1e64434749432fb R = b5af307867fb8b54390013cc67020ddf1f2c0b81 S = 620d3b22ab5031440c3e35eab6f481298f9e9f08 Result = P Msg = 97d50898025d2f9ba633866e968ca75e969d394edba6517204cb3dd537c2ba38778\ a2dc9dbc685a915e5676fcd43bc3726bc59ce3d7a9fae35565082a069c139fa37c9\ 0d922b126933db3fa6c5ef6b1edf00d174a51887bb76909c6a94fe994ecc7b7fc8f\ 26113b17f30f9d01693df99a125b4f17e184331c6b6e8ca00f54f3a X = 350e13534692a7e0c4b7d58836046c436fbb2322 Y = 69974de550fe6bd3099150faea1623ad3fb6d9bf23a07215093f319725ad0877accff\ d291b6da18eb0cbe51676ceb0977504eb97c27c0b191883f72fb2710a9fbd8bcf13be\ 0bf854410b32f42b33ec89d3cc1cf892bcd536c4195ca9ada302ad600c3408739935d\ 77dc247529ca47f844cc86f5016a2fe962c6e20ca7c4d4e8f R = b5d05faa7005764e8dae0327c5bf1972ff7681b9 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\ 25ee3c932fa3c2b6f637bdb6545bec526faa037e11f5578a4363b9fca5eba60d6a9cb\ aa2befd04141d989c7356285132c2eaf74f2d868521cdc0a17ae9a2546ef863027d3f\ 8cc7949631fd0e2971417a912c8b8c5c989730db6ea6e8baee0e667850429038093c8\ 51ccb6fb173bb081e0efe0bd7450e0946888f89f75e443ab93ef2da293a01622cf43c\ 6dd79625d41ba8f9ef7e3086ab39134283d8e96c89249488120fd061e4a87d34af410\ 69c0b4fd3934c31b589cbe85b68b912718d5dab859fda7082511fad1d152044905005\ 546e19b14aa96585a55269bf2b831 Q = 8e056ec9d4b7acb580087a6ed9ba3478711bb025d5b8d9c731ef9b38bd43db2f G = dc2bfb9776786ad310c8b0cdcbba3062402613c67e6959a8d8d1b05aab636528b7b1f\ e9cd33765f853d6dbe13d09f2681f8c7b1ed7886aaed70c7bd76dbe858ffb8bd86235\ ddf759244678f428c6519af593dc94eeadbd9852ba2b3d61664e8d58c29d2039af3c3\ d6d16f90988f6a8c824569f3d48050e30896a9e17cd0232ef01ab8790008f6973b84c\ 763a72f4ae8b485abfb7e8efeb86808fa2b281d3e5d65d28f5992a34c077c5aa8026c\ b2fbc34a45f7e9bd216b10e6f12ecb172e9a6eb8f2e91316905b6add1fd22e83bc2f0\ 89f1d5e6a6e6707c18ff55ddcb7954e8bceaf0efc4e8314910c03b0e51175f344faaf\ ee476a373ac95743cec712b72cf2e Msg = 6cd6ccfd66bcd832189c5f0c77994210e3bf2c43416f0fe77c4e92f31c5369538dc\ 2c003f146c5ac79df43194ccf3c44d470d9f1083bd15b99b5bcf88c32d8a9021f09\ ea2288d7b3bf345a12aef3949c1e121b9fb371a67c2d1377364206ac839dd784835\ 61426bda0303f285aa12e9c45d3cdfc6beae3549703b187deeb3296 X = 56c897b5938ad5b3d437d7e4826da586a6b3be15e893fa1aaa946f20a028b6b3 Y = 38ad44489e1a5778b9689f4dcf40e2acf23840fb954e987d6e8cb629106328ac64e1f\ 3c3eba48b21176ad4afe3b733bead382ee1597e1b83e4b43424f2daaba04e5bd79e14\ 36693ac2bddb79a298f026e57e200a252efd1e848a4a2e90be6e78f5242b468b9c0c6\ d2615047a5a40b9ae7e57a519114db55bf3bed65e580f894b094630ca9c217f6accd0\ 91e72d2f22da620044ff372d7273f9445017fad492959e59600b7494dbe766a03e401\ 25d4e6747c76f68a5b0cdc0e7d7cee12d08c6fb7d0fb049e420a33405075ed4463296\ 345ca695fb7feab7c1b5333ae519fcd4bb6a043f4555378969114743d4face96cad31\ c0e0089da4e3f61b6d7dabc088ab7 R = 3b85b17be240ed658beb3652c9d93e8e9eea160d35ee2459614305802963374e S = 726800a5174a53b56dce86064109c0273cd11fcfa3c92c5cd6aa910260c0e3c7 Result = F (1 - Message changed) Msg = 3ad6b0884f358dea09c31a9abc40c45a6000611fc2b907b30eac00413fd2819de70\ 15488a411609d46c499b8f7afa1b78b352ac7f8535bd805b8ff2a5eae557098c668\ f7ccd73af886d6823a6d456c29931ee864ed46d767382785728c2a83fcff5271007\ d2a67d06fa205fd7b9d1a42ea5d6dc76e5e18a9eb148cd1e8b262ae X = 2faf566a9f057960f1b50c69508f483d9966d6e35743591f3a677a9dc40e1555 Y = 926425d617babe87c442b03903e32ba5bbf0cd9d602b59c4df791a4d64a6d4333ca0c\ 0d370552539197d327dcd1bbf8c454f24b03fc7805f862db34c7b066ddfddbb11dbd0\ 10b27123062d028fe041cb56a2e77488348ae0ab6705d87aac4d4e9e6600e9e706326\ d9979982cffa839beb9eacc3963bcca455a507e80c1c37ad4e765b2c9c0477a075e9b\ c584feacdf3a35a9391d4711f14e197c54022282bfed9a191213d64127f17a9c5affe\ c26e0c71f15d3a5b16098fec118c45bf8bb2f3b1560df0949254c1c0aeb0a16d5a95a\ 40fab8521fbe8ea77c51169b587cc3360e5733e6a23b9fded8c40724ea1f9e93614b3\ a6c9b4f8dbbe915b794497227ba62 R = 343ea0a9e66277380f604d5880fca686bffab69ca97bfba015a102a7e23dce0e S = 6258488c770e0f5ad7b9da8bade5023fc0d17c6ec517bd08d53e6dc01ac5c2b3 Result = P """).splitlines() expected = [ { 'p': int('dc5bf3a88b2d99e4c95cdd7a0501cc38630d425cf5c390af3429cff1' 'f35147b795caea923f0d3577158f8a0c89dabd1962c2c453306b5d70' 'cacfb01430aceb54e5a5fa6f9340d3bd2da612fceeb76b0ec1ebfae6' '35a56ab141b108e00dc76eefe2edd0c514c21c457457c39065dba9d0' 'ecb7569c247172d8438ad2827b60435b', 16), 'q': int('e956602b83d195dbe945b3ac702fc61f81571f1d', 16), 'g': int('d7eb9ca20a3c7a079606bafc4c9261ccaba303a5dc9fe9953f197dfe' '548c234895baa77f441ee6a2d97b909cbbd26ff7b869d24cae51b5c6' 'edb127a4b5d75cd8b46608bfa148249dffdb59807c5d7dde3fe3080c' 'a3a2d28312142becb1fa8e24003e21c7287108174b95d5bc711e1c8d' '9b1076784f5dc37a964a5e51390da713', 16), 'digest_algorithm': 'SHA-1', 'msg': binascii.unhexlify( b'0fe1bfee500bdb76026099b1d37553f6bdfe48c82094ef98cb309dd77733' b'0bedfaa2f94c823ef74ef4074b50d8706041ac0e371c7c22dcf70263b8d6' b'0e17a86c7c379cfda8f22469e0df9d49d59439fc99891873628fff25dda5' b'fac5ac794e948babdde968143ba05f1128f34fdad5875edc4cd71c6c24ba' b'2060ffbd439ce2b3'), 'x': int('1d93010c29ecfc432188942f46f19f44f0e1bb5d', 16), 'y': int('6240ea0647117c38fe705106d56db578f3e10130928452d4f3587881' 'b8a2bc6873a8befc3237f20914e2a91c7f07a928ee22adeed23d74ab' '7f82ea11f70497e578f7a9b4cbd6f10226222b0b4da2ea1e49813d6b' 'b9882fbf675c0846bb80cc891857b89b0ef1beb6cce3378a9aab5d66' 'ad4cb9277cf447dfe1e64434749432fb', 16), 'r': int('b5af307867fb8b54390013cc67020ddf1f2c0b81', 16), 's': int('620d3b22ab5031440c3e35eab6f481298f9e9f08', 16), 'result': 'P'}, { 'p': int('dc5bf3a88b2d99e4c95cdd7a0501cc38630d425cf5c390af3429cff1' 'f35147b795caea923f0d3577158f8a0c89dabd1962c2c453306b5d70' 'cacfb01430aceb54e5a5fa6f9340d3bd2da612fceeb76b0ec1ebfae6' '35a56ab141b108e00dc76eefe2edd0c514c21c457457c39065dba9d0' 'ecb7569c247172d8438ad2827b60435b', 16), 'q': int('e956602b83d195dbe945b3ac702fc61f81571f1d', 16), 'g': int('d7eb9ca20a3c7a079606bafc4c9261ccaba303a5dc9fe9953f197dfe' '548c234895baa77f441ee6a2d97b909cbbd26ff7b869d24cae51b5c6' 'edb127a4b5d75cd8b46608bfa148249dffdb59807c5d7dde3fe3080c' 'a3a2d28312142becb1fa8e24003e21c7287108174b95d5bc711e1c8d' '9b1076784f5dc37a964a5e51390da713', 16), 'digest_algorithm': 'SHA-1', 'msg': binascii.unhexlify( b'97d50898025d2f9ba633866e968ca75e969d394edba6517204cb3dd537c2' b'ba38778a2dc9dbc685a915e5676fcd43bc3726bc59ce3d7a9fae35565082' b'a069c139fa37c90d922b126933db3fa6c5ef6b1edf00d174a51887bb7690' b'9c6a94fe994ecc7b7fc8f26113b17f30f9d01693df99a125b4f17e184331' b'c6b6e8ca00f54f3a'), 'x': int('350e13534692a7e0c4b7d58836046c436fbb2322', 16), 'y': int('69974de550fe6bd3099150faea1623ad3fb6d9bf23a07215093f3197' '25ad0877accffd291b6da18eb0cbe51676ceb0977504eb97c27c0b19' '1883f72fb2710a9fbd8bcf13be0bf854410b32f42b33ec89d3cc1cf8' '92bcd536c4195ca9ada302ad600c3408739935d77dc247529ca47f84' '4cc86f5016a2fe962c6e20ca7c4d4e8f', 16), 'r': int('b5d05faa7005764e8dae0327c5bf1972ff7681b9', 16), 's': int('18ea15bd9f00475b25204cbc23f8c23e01588015', 16), 'result': 'F'}, { 'p': int('e7c1c86125db9ef417da1ced7ea0861bdad629216a3f3c745df42a4' '6b989e59f4d98425ee3c932fa3c2b6f637bdb6545bec526faa037e1' '1f5578a4363b9fca5eba60d6a9cbaa2befd04141d989c7356285132' 'c2eaf74f2d868521cdc0a17ae9a2546ef863027d3f8cc7949631fd0' 'e2971417a912c8b8c5c989730db6ea6e8baee0e667850429038093c' '851ccb6fb173bb081e0efe0bd7450e0946888f89f75e443ab93ef2d' 'a293a01622cf43c6dd79625d41ba8f9ef7e3086ab39134283d8e96c' '89249488120fd061e4a87d34af41069c0b4fd3934c31b589cbe85b6' '8b912718d5dab859fda7082511fad1d152044905005546e19b14aa9' '6585a55269bf2b831', 16), 'q': int('8e056ec9d4b7acb580087a6ed9ba3478711bb025d5b8d9c731ef9b3' '8bd43db2f', 16), 'g': int('dc2bfb9776786ad310c8b0cdcbba3062402613c67e6959a8d8d1b05' 'aab636528b7b1fe9cd33765f853d6dbe13d09f2681f8c7b1ed7886a' 'aed70c7bd76dbe858ffb8bd86235ddf759244678f428c6519af593d' 'c94eeadbd9852ba2b3d61664e8d58c29d2039af3c3d6d16f90988f6' 'a8c824569f3d48050e30896a9e17cd0232ef01ab8790008f6973b84' 'c763a72f4ae8b485abfb7e8efeb86808fa2b281d3e5d65d28f5992a' '34c077c5aa8026cb2fbc34a45f7e9bd216b10e6f12ecb172e9a6eb8' 'f2e91316905b6add1fd22e83bc2f089f1d5e6a6e6707c18ff55ddcb' '7954e8bceaf0efc4e8314910c03b0e51175f344faafee476a373ac9' '5743cec712b72cf2e', 16), 'digest_algorithm': 'SHA-384', 'msg': binascii.unhexlify( b'6cd6ccfd66bcd832189c5f0c77994210e3bf2c43416f0fe77c4e92f31c5' b'369538dc2c003f146c5ac79df43194ccf3c44d470d9f1083bd15b99b5bc' b'f88c32d8a9021f09ea2288d7b3bf345a12aef3949c1e121b9fb371a67c2' b'd1377364206ac839dd78483561426bda0303f285aa12e9c45d3cdfc6bea' b'e3549703b187deeb3296'), 'x': int('56c897b5938ad5b3d437d7e4826da586a6b3be15e893fa1aaa946f2' '0a028b6b3', 16), 'y': int('38ad44489e1a5778b9689f4dcf40e2acf23840fb954e987d6e8cb62' '9106328ac64e1f3c3eba48b21176ad4afe3b733bead382ee1597e1b' '83e4b43424f2daaba04e5bd79e1436693ac2bddb79a298f026e57e2' '00a252efd1e848a4a2e90be6e78f5242b468b9c0c6d2615047a5a40' 'b9ae7e57a519114db55bf3bed65e580f894b094630ca9c217f6accd' '091e72d2f22da620044ff372d7273f9445017fad492959e59600b74' '94dbe766a03e40125d4e6747c76f68a5b0cdc0e7d7cee12d08c6fb7' 'd0fb049e420a33405075ed4463296345ca695fb7feab7c1b5333ae5' '19fcd4bb6a043f4555378969114743d4face96cad31c0e0089da4e3' 'f61b6d7dabc088ab7', 16), 'r': int('3b85b17be240ed658beb3652c9d93e8e9eea160d35ee24596143058' '02963374e', 16), 's': int('726800a5174a53b56dce86064109c0273cd11fcfa3c92c5cd6aa910' '260c0e3c7', 16), 'result': 'F'}, { 'p': int('e7c1c86125db9ef417da1ced7ea0861bdad629216a3f3c745df42a4' '6b989e59f4d98425ee3c932fa3c2b6f637bdb6545bec526faa037e1' '1f5578a4363b9fca5eba60d6a9cbaa2befd04141d989c7356285132' 'c2eaf74f2d868521cdc0a17ae9a2546ef863027d3f8cc7949631fd0' 'e2971417a912c8b8c5c989730db6ea6e8baee0e667850429038093c' '851ccb6fb173bb081e0efe0bd7450e0946888f89f75e443ab93ef2d' 'a293a01622cf43c6dd79625d41ba8f9ef7e3086ab39134283d8e96c' '89249488120fd061e4a87d34af41069c0b4fd3934c31b589cbe85b6' '8b912718d5dab859fda7082511fad1d152044905005546e19b14aa9' '6585a55269bf2b831', 16), 'q': int('8e056ec9d4b7acb580087a6ed9ba3478711bb025d5b8d9c731ef9b3' '8bd43db2f', 16), 'g': int('dc2bfb9776786ad310c8b0cdcbba3062402613c67e6959a8d8d1b05' 'aab636528b7b1fe9cd33765f853d6dbe13d09f2681f8c7b1ed7886a' 'aed70c7bd76dbe858ffb8bd86235ddf759244678f428c6519af593d' 'c94eeadbd9852ba2b3d61664e8d58c29d2039af3c3d6d16f90988f6' 'a8c824569f3d48050e30896a9e17cd0232ef01ab8790008f6973b84' 'c763a72f4ae8b485abfb7e8efeb86808fa2b281d3e5d65d28f5992a' '34c077c5aa8026cb2fbc34a45f7e9bd216b10e6f12ecb172e9a6eb8' 'f2e91316905b6add1fd22e83bc2f089f1d5e6a6e6707c18ff55ddcb' '7954e8bceaf0efc4e8314910c03b0e51175f344faafee476a373ac9' '5743cec712b72cf2e', 16), 'digest_algorithm': 'SHA-384', 'msg': binascii.unhexlify( b'3ad6b0884f358dea09c31a9abc40c45a6000611fc2b907b30eac00413fd' b'2819de7015488a411609d46c499b8f7afa1b78b352ac7f8535bd805b8ff' b'2a5eae557098c668f7ccd73af886d6823a6d456c29931ee864ed46d7673' b'82785728c2a83fcff5271007d2a67d06fa205fd7b9d1a42ea5d6dc76e5e' b'18a9eb148cd1e8b262ae'), 'x': int('2faf566a9f057960f1b50c69508f483d9966d6e35743591f3a677a9' 'dc40e1555', 16), 'y': int('926425d617babe87c442b03903e32ba5bbf0cd9d602b59c4df791a4d' '64a6d4333ca0c0d370552539197d327dcd1bbf8c454f24b03fc7805f' '862db34c7b066ddfddbb11dbd010b27123062d028fe041cb56a2e774' '88348ae0ab6705d87aac4d4e9e6600e9e706326d9979982cffa839be' 'b9eacc3963bcca455a507e80c1c37ad4e765b2c9c0477a075e9bc584' 'feacdf3a35a9391d4711f14e197c54022282bfed9a191213d64127f1' '7a9c5affec26e0c71f15d3a5b16098fec118c45bf8bb2f3b1560df09' '49254c1c0aeb0a16d5a95a40fab8521fbe8ea77c51169b587cc3360e' '5733e6a23b9fded8c40724ea1f9e93614b3a6c9b4f8dbbe915b79449' '7227ba62', 16), 'r': int('343ea0a9e66277380f604d5880fca686bffab69ca97bfba015a102a' '7e23dce0e', 16), 's': int('6258488c770e0f5ad7b9da8bade5023fc0d17c6ec517bd08d53e6dc' '01ac5c2b3', 16), 'result': 'P'} ] assert expected == load_fips_dsa_sig_vectors(vector_data) def test_load_fips_dsa_sig_gen_vectors(): vector_data = textwrap.dedent(""" # CAVS 11.2 # "SigGen" information for "dsa2_values" # Mod sizes selected: SHA-1 L=1024, N=160, SHA-256 L=2048, N=256 [mod = L=1024, N=160, SHA-1] P = a8f9cd201e5e35d892f85f80e4db2599a5676a3b1d4f190330ed3256b26d0e80a0e49\ a8fffaaad2a24f472d2573241d4d6d6c7480c80b4c67bb4479c15ada7ea8424d2502fa01472e7\ 60241713dab025ae1b02e1703a1435f62ddf4ee4c1b664066eb22f2e3bf28bb70a2a76e4fd5eb\ e2d1229681b5b06439ac9c7e9d8bde283 Q = f85f0f83ac4df7ea0cdf8f469bfeeaea14156495 G = 2b3152ff6c62f14622b8f48e59f8af46883b38e79b8c74deeae9df131f8b856e3ad6c\ 8455dab87cc0da8ac973417ce4f7878557d6cdf40b35b4a0ca3eb310c6a95d68ce284ad4e25ea\ 28591611ee08b8444bd64b25f3f7c572410ddfb39cc728b9c936f85f419129869929cdb909a6a\ 3a99bbe089216368171bd0ba81de4fe33 Msg = 3b46736d559bd4e0c2c1b2553a33ad3c6cf23cac998d3d0c0e8fa4b19bca06f2f38\ 6db2dcff9dca4f40ad8f561ffc308b46c5f31a7735b5fa7e0f9e6cb512e63d7eea05538d66a75\ cd0d4234b5ccf6c1715ccaaf9cdc0a2228135f716ee9bdee7fc13ec27a03a6d11c5c5b3685f51\ 900b1337153bc6c4e8f52920c33fa37f4e7 Y = 313fd9ebca91574e1c2eebe1517c57e0c21b0209872140c5328761bbb2450b33f1b18\ b409ce9ab7c4cd8fda3391e8e34868357c199e16a6b2eba06d6749def791d79e95d3a4d09b24c\ 392ad89dbf100995ae19c01062056bb14bce005e8731efde175f95b975089bdcdaea562b32786\ d96f5a31aedf75364008ad4fffebb970b R = 50ed0e810e3f1c7cb6ac62332058448bd8b284c0 S = c6aded17216b46b7e4b6f2a97c1ad7cc3da83fde Msg = d2bcb53b044b3e2e4b61ba2f91c0995fb83a6a97525e66441a3b489d9594238bc74\ 0bdeea0f718a769c977e2de003877b5d7dc25b182ae533db33e78f2c3ff0645f2137abc137d4e\ 7d93ccf24f60b18a820bc07c7b4b5fe08b4f9e7d21b256c18f3b9d49acc4f93e2ce6f3754c780\ 7757d2e1176042612cb32fc3f4f70700e25 Y = 29bdd759aaa62d4bf16b4861c81cf42eac2e1637b9ecba512bdbc13ac12a80ae8de25\ 26b899ae5e4a231aef884197c944c732693a634d7659abc6975a773f8d3cd5a361fe2492386a3\ c09aaef12e4a7e73ad7dfc3637f7b093f2c40d6223a195c136adf2ea3fbf8704a675aa7817aa7\ ec7f9adfb2854d4e05c3ce7f76560313b R = a26c00b5750a2d27fe7435b93476b35438b4d8ab S = 61c9bfcb2938755afa7dad1d1e07c6288617bf70 [mod = L=2048, N=256, SHA-256] P = a8adb6c0b4cf9588012e5deff1a871d383e0e2a85b5e8e03d814fe13a059705e66323\ 0a377bf7323a8fa117100200bfd5adf857393b0bbd67906c081e585410e38480ead51684dac3a\ 38f7b64c9eb109f19739a4517cd7d5d6291e8af20a3fbf17336c7bf80ee718ee087e322ee4104\ 7dabefbcc34d10b66b644ddb3160a28c0639563d71993a26543eadb7718f317bf5d9577a61565\ 61b082a10029cd44012b18de6844509fe058ba87980792285f2750969fe89c2cd6498db354563\ 8d5379d125dccf64e06c1af33a6190841d223da1513333a7c9d78462abaab31b9f96d5f34445c\ eb6309f2f6d2c8dde06441e87980d303ef9a1ff007e8be2f0be06cc15f Q = e71f8567447f42e75f5ef85ca20fe557ab0343d37ed09edc3f6e68604d6b9dfb G = 5ba24de9607b8998e66ce6c4f812a314c6935842f7ab54cd82b19fa104abfb5d84579\ a623b2574b37d22ccae9b3e415e48f5c0f9bcbdff8071d63b9bb956e547af3a8df99e5d306197\ 9652ff96b765cb3ee493643544c75dbe5bb39834531952a0fb4b0378b3fcbb4c8b5800a533039\ 2a2a04e700bb6ed7e0b85795ea38b1b962741b3f33b9dde2f4ec1354f09e2eb78e95f037a5804\ b6171659f88715ce1a9b0cc90c27f35ef2f10ff0c7c7a2bb0154d9b8ebe76a3d764aa879af372\ f4240de8347937e5a90cec9f41ff2f26b8da9a94a225d1a913717d73f10397d2183f1ba3b7b45\ a68f1ff1893caf69a827802f7b6a48d51da6fbefb64fd9a6c5b75c4561 Msg = 4e3a28bcf90d1d2e75f075d9fbe55b36c5529b17bc3a9ccaba6935c9e20548255b3\ dfae0f91db030c12f2c344b3a29c4151c5b209f5e319fdf1c23b190f64f1fe5b330cb7c8fa952\ f9d90f13aff1cb11d63181da9efc6f7e15bfed4862d1a62c7dcf3ba8bf1ff304b102b1ec3f149\ 7dddf09712cf323f5610a9d10c3d9132659 Y = 5a55dceddd1134ee5f11ed85deb4d634a3643f5f36dc3a70689256469a0b651ad2288\ 0f14ab85719434f9c0e407e60ea420e2a0cd29422c4899c416359dbb1e592456f2b3cce233259\ c117542fd05f31ea25b015d9121c890b90e0bad033be1368d229985aac7226d1c8c2eab325ef3\ b2cd59d3b9f7de7dbc94af1a9339eb430ca36c26c46ecfa6c5481711496f624e188ad7540ef5d\ f26f8efacb820bd17a1f618acb50c9bc197d4cb7ccac45d824a3bf795c234b556b06aeb929173\ 453252084003f69fe98045fe74002ba658f93475622f76791d9b2623d1b5fff2cc16844746efd\ 2d30a6a8134bfc4c8cc80a46107901fb973c28fc553130f3286c1489da R = 633055e055f237c38999d81c397848c38cce80a55b649d9e7905c298e2a51447 S = 2bbf68317660ec1e4b154915027b0bc00ee19cfc0bf75d01930504f2ce10a8b0 Msg = a733b3f588d5ac9b9d4fe2f804df8c256403a9f8eef6f191fc48e1267fb5b4d546b\ a11e77b667844e489bf0d5f72990aeb061d01ccd7949a23def74a803b7d92d51abfadeb4885ff\ d8ffd58ab87548a15c087a39b8993b2fa64c9d31a594eeb7512da16955834336a234435c5a9d0\ dd9b15a94e116154dea63fdc8dd7a512181 Y = 356ed47537fbf02cb30a8cee0537f300dff1d0c467399ce70b87a8758d5ec9dd25624\ 6fccaeb9dfe109f2a984f2ddaa87aad54ce0d31f907e504521baf4207d7073b0a4a9fc67d8ddd\ a99f87aed6e0367cec27f9c608af743bf1ee6e11d55a182d43b024ace534029b866f6422828bb\ 81a39aae9601ee81c7f81dd358e69f4e2edfa4654d8a65bc64311dc86aac4abc1fc7a3f651596\ 61a0d8e288eb8d665cb0adf5ac3d6ba8e9453facf7542393ae24fd50451d3828086558f7ec528\ e284935a53f67a1aa8e25d8ad5c4ad55d83aef883a4d9eeb6297e6a53f65049ba9e2c6b7953a7\ 60bc1dc46f78ceaaa2c02f5375dd82e708744aa40b15799eb81d7e5b1a R = bcd490568c0a89ba311bef88ea4f4b03d273e793722722327095a378dd6f3522 S = 74498fc43091fcdd2d1ef0775f8286945a01cd72b805256b0451f9cbd943cf82 """).splitlines() expected = [ { 'p': int('a8f9cd201e5e35d892f85f80e4db2599a5676a3b1d4f190330ed325' '6b26d0e80a0e49a8fffaaad2a24f472d2573241d4d6d6c7480c80b4' 'c67bb4479c15ada7ea8424d2502fa01472e760241713dab025ae1b0' '2e1703a1435f62ddf4ee4c1b664066eb22f2e3bf28bb70a2a76e4fd' '5ebe2d1229681b5b06439ac9c7e9d8bde283', 16), 'q': int('f85f0f83ac4df7ea0cdf8f469bfeeaea14156495', 16), 'g': int('2b3152ff6c62f14622b8f48e59f8af46883b38e79b8c74deeae9df1' '31f8b856e3ad6c8455dab87cc0da8ac973417ce4f7878557d6cdf40' 'b35b4a0ca3eb310c6a95d68ce284ad4e25ea28591611ee08b8444bd' '64b25f3f7c572410ddfb39cc728b9c936f85f419129869929cdb909' 'a6a3a99bbe089216368171bd0ba81de4fe33', 16), 'digest_algorithm': 'SHA-1', 'msg': binascii.unhexlify( b'3b46736d559bd4e0c2c1b2553a33ad3c6cf23cac998d3d0c0e8fa4b19bc' b'a06f2f386db2dcff9dca4f40ad8f561ffc308b46c5f31a7735b5fa7e0f9' b'e6cb512e63d7eea05538d66a75cd0d4234b5ccf6c1715ccaaf9cdc0a222' b'8135f716ee9bdee7fc13ec27a03a6d11c5c5b3685f51900b1337153bc6c' b'4e8f52920c33fa37f4e7'), 'y': int('313fd9ebca91574e1c2eebe1517c57e0c21b0209872140c5328761b' 'bb2450b33f1b18b409ce9ab7c4cd8fda3391e8e34868357c199e16a' '6b2eba06d6749def791d79e95d3a4d09b24c392ad89dbf100995ae1' '9c01062056bb14bce005e8731efde175f95b975089bdcdaea562b32' '786d96f5a31aedf75364008ad4fffebb970b', 16), 'r': int('50ed0e810e3f1c7cb6ac62332058448bd8b284c0', 16), 's': int('c6aded17216b46b7e4b6f2a97c1ad7cc3da83fde', 16)}, { 'p': int('a8f9cd201e5e35d892f85f80e4db2599a5676a3b1d4f190330ed325' '6b26d0e80a0e49a8fffaaad2a24f472d2573241d4d6d6c7480c80b4' 'c67bb4479c15ada7ea8424d2502fa01472e760241713dab025ae1b0' '2e1703a1435f62ddf4ee4c1b664066eb22f2e3bf28bb70a2a76e4fd' '5ebe2d1229681b5b06439ac9c7e9d8bde283', 16), 'q': int('f85f0f83ac4df7ea0cdf8f469bfeeaea14156495', 16), 'g': int('2b3152ff6c62f14622b8f48e59f8af46883b38e79b8c74deeae9df1' '31f8b856e3ad6c8455dab87cc0da8ac973417ce4f7878557d6cdf40' 'b35b4a0ca3eb310c6a95d68ce284ad4e25ea28591611ee08b8444bd' '64b25f3f7c572410ddfb39cc728b9c936f85f419129869929cdb909' 'a6a3a99bbe089216368171bd0ba81de4fe33', 16), 'digest_algorithm': 'SHA-1', 'msg': binascii.unhexlify( b'd2bcb53b044b3e2e4b61ba2f91c0995fb83a6a97525e66441a3b489d959' b'4238bc740bdeea0f718a769c977e2de003877b5d7dc25b182ae533db33e' b'78f2c3ff0645f2137abc137d4e7d93ccf24f60b18a820bc07c7b4b5fe08' b'b4f9e7d21b256c18f3b9d49acc4f93e2ce6f3754c7807757d2e11760426' b'12cb32fc3f4f70700e25'), 'y': int('29bdd759aaa62d4bf16b4861c81cf42eac2e1637b9ecba512bdbc13' 'ac12a80ae8de2526b899ae5e4a231aef884197c944c732693a634d7' '659abc6975a773f8d3cd5a361fe2492386a3c09aaef12e4a7e73ad7' 'dfc3637f7b093f2c40d6223a195c136adf2ea3fbf8704a675aa7817' 'aa7ec7f9adfb2854d4e05c3ce7f76560313b', 16), 'r': int('a26c00b5750a2d27fe7435b93476b35438b4d8ab', 16), 's': int('61c9bfcb2938755afa7dad1d1e07c6288617bf70', 16)}, { 'p': int('a8adb6c0b4cf9588012e5deff1a871d383e0e2a85b5e8e03d814fe1' '3a059705e663230a377bf7323a8fa117100200bfd5adf857393b0bb' 'd67906c081e585410e38480ead51684dac3a38f7b64c9eb109f1973' '9a4517cd7d5d6291e8af20a3fbf17336c7bf80ee718ee087e322ee4' '1047dabefbcc34d10b66b644ddb3160a28c0639563d71993a26543e' 'adb7718f317bf5d9577a6156561b082a10029cd44012b18de684450' '9fe058ba87980792285f2750969fe89c2cd6498db3545638d5379d1' '25dccf64e06c1af33a6190841d223da1513333a7c9d78462abaab31' 'b9f96d5f34445ceb6309f2f6d2c8dde06441e87980d303ef9a1ff00' '7e8be2f0be06cc15f', 16), 'q': int('e71f8567447f42e75f5ef85ca20fe557ab0343d37ed09edc3f6e686' '04d6b9dfb', 16), 'g': int('5ba24de9607b8998e66ce6c4f812a314c6935842f7ab54cd82b19fa' '104abfb5d84579a623b2574b37d22ccae9b3e415e48f5c0f9bcbdff' '8071d63b9bb956e547af3a8df99e5d3061979652ff96b765cb3ee49' '3643544c75dbe5bb39834531952a0fb4b0378b3fcbb4c8b5800a533' '0392a2a04e700bb6ed7e0b85795ea38b1b962741b3f33b9dde2f4ec' '1354f09e2eb78e95f037a5804b6171659f88715ce1a9b0cc90c27f3' '5ef2f10ff0c7c7a2bb0154d9b8ebe76a3d764aa879af372f4240de8' '347937e5a90cec9f41ff2f26b8da9a94a225d1a913717d73f10397d' '2183f1ba3b7b45a68f1ff1893caf69a827802f7b6a48d51da6fbefb' '64fd9a6c5b75c4561', 16), 'digest_algorithm': 'SHA-256', 'msg': binascii.unhexlify( b'4e3a28bcf90d1d2e75f075d9fbe55b36c5529b17bc3a9ccaba6935c9e20' b'548255b3dfae0f91db030c12f2c344b3a29c4151c5b209f5e319fdf1c23' b'b190f64f1fe5b330cb7c8fa952f9d90f13aff1cb11d63181da9efc6f7e1' b'5bfed4862d1a62c7dcf3ba8bf1ff304b102b1ec3f1497dddf09712cf323' b'f5610a9d10c3d9132659'), 'y': int('5a55dceddd1134ee5f11ed85deb4d634a3643f5f36dc3a706892564' '69a0b651ad22880f14ab85719434f9c0e407e60ea420e2a0cd29422' 'c4899c416359dbb1e592456f2b3cce233259c117542fd05f31ea25b' '015d9121c890b90e0bad033be1368d229985aac7226d1c8c2eab325' 'ef3b2cd59d3b9f7de7dbc94af1a9339eb430ca36c26c46ecfa6c548' '1711496f624e188ad7540ef5df26f8efacb820bd17a1f618acb50c9' 'bc197d4cb7ccac45d824a3bf795c234b556b06aeb92917345325208' '4003f69fe98045fe74002ba658f93475622f76791d9b2623d1b5fff' '2cc16844746efd2d30a6a8134bfc4c8cc80a46107901fb973c28fc5' '53130f3286c1489da', 16), 'r': int('633055e055f237c38999d81c397848c38cce80a55b649d9e7905c29' '8e2a51447', 16), 's': int('2bbf68317660ec1e4b154915027b0bc00ee19cfc0bf75d01930504f' '2ce10a8b0', 16)}, { 'p': int('a8adb6c0b4cf9588012e5deff1a871d383e0e2a85b5e8e03d814fe1' '3a059705e663230a377bf7323a8fa117100200bfd5adf857393b0bb' 'd67906c081e585410e38480ead51684dac3a38f7b64c9eb109f1973' '9a4517cd7d5d6291e8af20a3fbf17336c7bf80ee718ee087e322ee4' '1047dabefbcc34d10b66b644ddb3160a28c0639563d71993a26543e' 'adb7718f317bf5d9577a6156561b082a10029cd44012b18de684450' '9fe058ba87980792285f2750969fe89c2cd6498db3545638d5379d1' '25dccf64e06c1af33a6190841d223da1513333a7c9d78462abaab31' 'b9f96d5f34445ceb6309f2f6d2c8dde06441e87980d303ef9a1ff00' '7e8be2f0be06cc15f', 16), 'q': int('e71f8567447f42e75f5ef85ca20fe557ab0343d37ed09edc3f6e686' '04d6b9dfb', 16), 'g': int('5ba24de9607b8998e66ce6c4f812a314c6935842f7ab54cd82b19fa' '104abfb5d84579a623b2574b37d22ccae9b3e415e48f5c0f9bcbdff' '8071d63b9bb956e547af3a8df99e5d3061979652ff96b765cb3ee49' '3643544c75dbe5bb39834531952a0fb4b0378b3fcbb4c8b5800a533' '0392a2a04e700bb6ed7e0b85795ea38b1b962741b3f33b9dde2f4ec' '1354f09e2eb78e95f037a5804b6171659f88715ce1a9b0cc90c27f3' '5ef2f10ff0c7c7a2bb0154d9b8ebe76a3d764aa879af372f4240de8' '347937e5a90cec9f41ff2f26b8da9a94a225d1a913717d73f10397d' '2183f1ba3b7b45a68f1ff1893caf69a827802f7b6a48d51da6fbefb' '64fd9a6c5b75c4561', 16), 'digest_algorithm': 'SHA-256', 'msg': binascii.unhexlify( b'a733b3f588d5ac9b9d4fe2f804df8c256403a9f8eef6f191fc48e1267fb' b'5b4d546ba11e77b667844e489bf0d5f72990aeb061d01ccd7949a23def7' b'4a803b7d92d51abfadeb4885ffd8ffd58ab87548a15c087a39b8993b2fa' b'64c9d31a594eeb7512da16955834336a234435c5a9d0dd9b15a94e11615' b'4dea63fdc8dd7a512181'), 'y': int('356ed47537fbf02cb30a8cee0537f300dff1d0c467399ce70b87a87' '58d5ec9dd256246fccaeb9dfe109f2a984f2ddaa87aad54ce0d31f9' '07e504521baf4207d7073b0a4a9fc67d8ddda99f87aed6e0367cec2' '7f9c608af743bf1ee6e11d55a182d43b024ace534029b866f642282' '8bb81a39aae9601ee81c7f81dd358e69f4e2edfa4654d8a65bc6431' '1dc86aac4abc1fc7a3f65159661a0d8e288eb8d665cb0adf5ac3d6b' 'a8e9453facf7542393ae24fd50451d3828086558f7ec528e284935a' '53f67a1aa8e25d8ad5c4ad55d83aef883a4d9eeb6297e6a53f65049' 'ba9e2c6b7953a760bc1dc46f78ceaaa2c02f5375dd82e708744aa40' 'b15799eb81d7e5b1a', 16), 'r': int('bcd490568c0a89ba311bef88ea4f4b03d273e793722722327095a37' '8dd6f3522', 16), 's': int('74498fc43091fcdd2d1ef0775f8286945a01cd72b805256b0451f9c' 'bd943cf82', 16)} ] assert expected == load_fips_dsa_sig_vectors(vector_data) def test_load_fips_ecdsa_key_pair_vectors(): vector_data = textwrap.dedent(""" # CAVS 11.0 # "Key Pair" information # Curves selected: P-192 K-233 B-571 # Generated on Wed Mar 16 16:16:42 2011 [P-192] [B.4.2 Key Pair Generation by Testing Candidates] N = 2 d = e5ce89a34adddf25ff3bf1ffe6803f57d0220de3118798ea Qx = 8abf7b3ceb2b02438af19543d3e5b1d573fa9ac60085840f Qy = a87f80182dcd56a6a061f81f7da393e7cffd5e0738c6b245 d = 7d14435714ad13ff23341cb567cc91198ff8617cc39751b2 Qx = 39dc723b19527daa1e80425209c56463481b9b47c51f8cbd Qy = 432a3e84f2a16418834fabaf6b7d2341669512951f1672ad [K-233] [B.4.2 Key Pair Generation by Testing Candidates] N = 2 d = 01da7422b50e3ff051f2aaaed10acea6cbf6110c517da2f4eaca8b5b87 Qx = 01c7475da9a161e4b3f7d6b086494063543a979e34b8d7ac44204d47bf9f Qy = 0131cbd433f112871cc175943991b6a1350bf0cdd57ed8c831a2a7710c92 d = 530951158f7b1586978c196603c12d25607d2cb0557efadb23cd0ce8 Qx = d37500a0391d98d3070d493e2b392a2c79dc736c097ed24b7dd5ddec44 Qy = 01d996cc79f37d8dba143d4a8ad9a8a60ed7ea760aae1ddba34d883f65d9 [B-571] [B.4.2 Key Pair Generation by Testing Candidates] N = 2 d = 01443e93c7ef6802655f641ecbe95e75f1f15b02d2e172f49a32e22047d5c00ebe1b3f\ f0456374461360667dbf07bc67f7d6135ee0d1d46a226a530fefe8ebf3b926e9fbad8d57a6 Qx = 053e3710d8e7d4138db0a369c97e5332c1be38a20a4a84c36f5e55ea9fd6f34545b86\ 4ea64f319e74b5ee9e4e1fa1b7c5b2db0e52467518f8c45b658824871d5d4025a6320ca06f8 Qy = 03a22cfd370c4a449b936ae97ab97aab11c57686cca99d14ef184f9417fad8bedae4d\ f8357e3710bcda1833b30e297d4bf637938b995d231e557d13f062e81e830af5ab052208ead d = 03d2bd44ca9eeee8c860a4873ed55a54bdfdf5dab4060df7292877960b85d1fd496aa3\ 3c587347213d7f6bf208a6ab4b430546e7b6ffbc3135bd12f44a28517867ca3c83a821d6f8 Qx = 07a7af10f6617090bade18b2e092d0dfdc87cd616db7f2db133477a82bfe3ea421ebb\ 7d6289980819292a719eb247195529ea60ad62862de0a26c72bfc49ecc81c2f9ed704e3168f Qy = 0721496cf16f988b1aabef3368450441df8439a0ca794170f270ead56203d675b57f5\ a4090a3a2f602a77ff3bac1417f7e25a683f667b3b91f105016a47afad46a0367b18e2bdf0c """).splitlines() expected = [ { "curve": "secp192r1", "d": int("e5ce89a34adddf25ff3bf1ffe6803f57d0220de3118798ea", 16), "x": int("8abf7b3ceb2b02438af19543d3e5b1d573fa9ac60085840f", 16), "y": int("a87f80182dcd56a6a061f81f7da393e7cffd5e0738c6b245", 16) }, { "curve": "secp192r1", "d": int("7d14435714ad13ff23341cb567cc91198ff8617cc39751b2", 16), "x": int("39dc723b19527daa1e80425209c56463481b9b47c51f8cbd", 16), "y": int("432a3e84f2a16418834fabaf6b7d2341669512951f1672ad", 16), }, { "curve": "sect233k1", "d": int("1da7422b50e3ff051f2aaaed10acea6cbf6110c517da2f4e" "aca8b5b87", 16), "x": int("1c7475da9a161e4b3f7d6b086494063543a979e34b8d7ac4" "4204d47bf9f", 16), "y": int("131cbd433f112871cc175943991b6a1350bf0cdd57ed8c83" "1a2a7710c92", 16), }, { "curve": "sect233k1", "d": int("530951158f7b1586978c196603c12d25607d2cb0557efadb" "23cd0ce8", 16), "x": int("d37500a0391d98d3070d493e2b392a2c79dc736c097ed24b" "7dd5ddec44", 16), "y": int("1d996cc79f37d8dba143d4a8ad9a8a60ed7ea760aae1ddba" "34d883f65d9", 16), }, { "curve": "sect571r1", "d": int("1443e93c7ef6802655f641ecbe95e75f1f15b02d2e172f49" "a32e22047d5c00ebe1b3ff0456374461360667dbf07bc67f" "7d6135ee0d1d46a226a530fefe8ebf3b926e9fbad8d57a6", 16), "x": int("53e3710d8e7d4138db0a369c97e5332c1be38a20a4a84c36" "f5e55ea9fd6f34545b864ea64f319e74b5ee9e4e1fa1b7c5" "b2db0e52467518f8c45b658824871d5d4025a6320ca06f8", 16), "y": int("3a22cfd370c4a449b936ae97ab97aab11c57686cca99d14e" "f184f9417fad8bedae4df8357e3710bcda1833b30e297d4b" "f637938b995d231e557d13f062e81e830af5ab052208ead", 16), }, { "curve": "sect571r1", "d": int("3d2bd44ca9eeee8c860a4873ed55a54bdfdf5dab4060df72" "92877960b85d1fd496aa33c587347213d7f6bf208a6ab4b4" "30546e7b6ffbc3135bd12f44a28517867ca3c83a821d6f8", 16), "x": int("7a7af10f6617090bade18b2e092d0dfdc87cd616db7f2db1" "33477a82bfe3ea421ebb7d6289980819292a719eb2471955" "29ea60ad62862de0a26c72bfc49ecc81c2f9ed704e3168f", 16), "y": int("721496cf16f988b1aabef3368450441df8439a0ca794170f" "270ead56203d675b57f5a4090a3a2f602a77ff3bac1417f7" "e25a683f667b3b91f105016a47afad46a0367b18e2bdf0c", 16), }, ] assert expected == load_fips_ecdsa_key_pair_vectors(vector_data) def test_load_fips_ecdsa_signing_vectors(): vector_data = textwrap.dedent(""" # CAVS 11.2 # "SigVer" information for "ecdsa_values" # Curves/SHAs selected: P-192, B-571,SHA-512 # Generated on Tue Aug 16 15:27:42 2011 [P-192,SHA-1] Msg = ebf748d748ebbca7d29fb473698a6e6b4fb10c865d4af024cc39ae3df3464ba4f1d6\ d40f32bf9618a91bb5986fa1a2af048a0e14dc51e5267eb05e127d689d0ac6f1a7f156ce066316\ b971cc7a11d0fd7a2093e27cf2d08727a4e6748cc32fd59c7810c5b9019df21cdcc0bca432c0a3\ eed0785387508877114359cee4a071cf d = e14f37b3d1374ff8b03f41b9b3fdd2f0ebccf275d660d7f3 Qx = 07008ea40b08dbe76432096e80a2494c94982d2d5bcf98e6 Qy = 76fab681d00b414ea636ba215de26d98c41bd7f2e4d65477 k = cb0abc7043a10783684556fb12c4154d57bc31a289685f25 R = 6994d962bdd0d793ffddf855ec5bf2f91a9698b46258a63e S = 02ba6465a234903744ab02bc8521405b73cf5fc00e1a9f41 Result = F (3 - S changed) Msg = 0dcb3e96d77ee64e9d0a350d31563d525755fc675f0c833504e83fc69c030181b42f\ e80c378e86274a93922c570d54a7a358c05755ec3ae91928e02236e81b43e596e4ccbf6a910488\ 9c388072bec4e1faeae11fe4eb24fa4f9573560dcf2e3abc703c526d46d502c7a7222583431cc8\ 178354ae7dbb84e3479917707bce0968 d = 7a0235bea3d70445f14d56f9b7fb80ec8ff4eb2f76865244 Qx = 0ea3c1fa1f124f26530cbfddeb831eecc67df31e08889d1d Qy = 7215a0cce0501b47903bd8fe1179c2dfe07bd076f89f5225 k = 3c646b0f03f5575e5fd463d4319817ce8bd3022eaf551cef R = a3ba51c39c43991d87dff0f34d0bec7c883299e04f60f95e S = 8a7f9c59c6d65ad390e4c19636ba92b53be5d0f848b4e1f7 [B-571,SHA-512] Msg = 10d2e00ae57176c79cdfc746c0c887abe799ee445b151b008e3d9f81eb69be40298d\ df37b5c45a9b6e5ff83785d8c140cf11e6a4c3879a2845796872363da24b10f1f8d9cc48f8af20\ 681dceb60dd62095d6d3b1779a4a805de3d74e38983b24c0748618e2f92ef7cac257ff4bd1f411\ 13f2891eb13c47930e69ddbe91f270fb d = 03e1b03ffca4399d5b439fac8f87a5cb06930f00d304193d7daf83d5947d0c1e293f74\ aef8e56849f16147133c37a6b3d1b1883e5d61d6b871ea036c5291d9a74541f28878cb986 Qx = 3b236fc135d849d50140fdaae1045e6ae35ef61091e98f5059b30eb16acdd0deb2bc0\ d3544bc3a666e0014e50030134fe5466a9e4d3911ed580e28851f3747c0010888e819d3d1f Qy = 3a8b6627a587d289032bd76374d16771188d7ff281c39542c8977f6872fa932e5daa1\ 4e13792dea9ffe8e9f68d6b525ec99b81a5a60cfb0590cc6f297cfff8d7ba1a8bb81fe2e16 k = 2e56a94cfbbcd293e242f0c2a2e9df289a9480e6ba52e0f00fa19bcf2a7769bd155e6b\ 79ddbd6a8646b0e69c8baea27f8034a18796e8eb4fe6e0e2358c383521d9375d2b6b437f9 R = 2eb1c5c1fc93cf3c8babed12c031cf1504e094174fd335104cbe4a2abd210b5a14b1c3\ a455579f1ed0517c31822340e4dd3c1f967e1b4b9d071a1072afc1a199f8c548cd449a634 S = 22f97bb48641235826cf4e597fa8de849402d6bd6114ad2d7fbcf53a08247e5ee921f1\ bd5994dffee36eedff5592bb93b8bb148214da3b7baebffbd96b4f86c55b3f6bbac142442 Result = P (0 ) Msg = b61a0849a28672cb536fcf61ea2eb389d02ff7a09aa391744cae6597bd56703c40c5\ 0ca2dee5f7ee796acfd47322f03d8dbe4d99dc8eec588b4e5467f123075b2d74b2a0b0bbfd3ac5\ 487a905fad6d6ac1421c2e564c0cf15e1f0f10bc31c249b7b46edd2462a55f85560d99bde9d5b0\ 6b97817d1dbe0a67c701d6e6e7878272 d = 2e09ffd8b434bb7f67d1d3ccf482164f1653c6e4ec64dec2517aa21b7a93b2b21ea1ee\ bb54734882f29303e489f02e3b741a87287e2dcdf3858eb6d2ec668f8b5b26f442ce513a2 Qx = 36f1be8738dd7dae4486b86a08fe90424f3673e76b10e739442e15f3bfafaf841842a\ c98e490521b7e7bb94c127529f6ec6a42cc6f06fc80606f1210fe020ff508148f93301c9d3 Qy = 4d39666ebe99fe214336ad440d776c88eb916f2f4a3433548b87d2aebed840b424d15\ c8341b4a0a657bf6a234d4fe78631c8e07ac1f4dc7474cd6b4545d536b7b17c160db4562d9 k = 378e7801566d7b77db7a474717ab2195b02957cc264a9449d4126a7cc574728ed5a476\ 9abd5dde987ca66cfe3d45b5fc52ffd266acb8a8bb3fcb4b60f7febbf48aebe33bd3efbdd R = 3d8105f87fe3166046c08e80a28acc98a80b8b7a729623053c2a9e80afd06756edfe09\ bdcf3035f6829ede041b745955d219dc5d30ddd8b37f6ba0f6d2857504cdc68a1ed812a10 S = 34db9998dc53527114518a7ce3783d674ca8cced823fa05e2942e7a0a20b3cc583dcd9\ 30c43f9b93079c5ee18a1f5a66e7c3527c18610f9b47a4da7e245ef803e0662e4d2ad721c """).splitlines() expected = [ { "curve": "secp192r1", "digest_algorithm": "SHA-1", "message": binascii.unhexlify( b"ebf748d748ebbca7d29fb473698a6e6b4fb10c865d4af024cc39ae3df346" b"4ba4f1d6d40f32bf9618a91bb5986fa1a2af048a0e14dc51e5267eb05e12" b"7d689d0ac6f1a7f156ce066316b971cc7a11d0fd7a2093e27cf2d08727a4" b"e6748cc32fd59c7810c5b9019df21cdcc0bca432c0a3eed0785387508877" b"114359cee4a071cf" ), "d": int("e14f37b3d1374ff8b03f41b9b3fdd2f0ebccf275d660d7f3", 16), "x": int("7008ea40b08dbe76432096e80a2494c94982d2d5bcf98e6", 16), "y": int("76fab681d00b414ea636ba215de26d98c41bd7f2e4d65477", 16), "r": int("6994d962bdd0d793ffddf855ec5bf2f91a9698b46258a63e", 16), "s": int("02ba6465a234903744ab02bc8521405b73cf5fc00e1a9f41", 16), "fail": True }, { "curve": "secp192r1", "digest_algorithm": "SHA-1", "message": binascii.unhexlify( b"0dcb3e96d77ee64e9d0a350d31563d525755fc675f0c833504e83fc69c03" b"0181b42fe80c378e86274a93922c570d54a7a358c05755ec3ae91928e022" b"36e81b43e596e4ccbf6a9104889c388072bec4e1faeae11fe4eb24fa4f95" b"73560dcf2e3abc703c526d46d502c7a7222583431cc8178354ae7dbb84e3" b"479917707bce0968" ), "d": int("7a0235bea3d70445f14d56f9b7fb80ec8ff4eb2f76865244", 16), "x": int("ea3c1fa1f124f26530cbfddeb831eecc67df31e08889d1d", 16), "y": int("7215a0cce0501b47903bd8fe1179c2dfe07bd076f89f5225", 16), "r": int("a3ba51c39c43991d87dff0f34d0bec7c883299e04f60f95e", 16), "s": int("8a7f9c59c6d65ad390e4c19636ba92b53be5d0f848b4e1f7", 16), }, { "curve": "sect571r1", "digest_algorithm": "SHA-512", "message": binascii.unhexlify( b"10d2e00ae57176c79cdfc746c0c887abe799ee445b151b008e3d9f81eb69" b"be40298ddf37b5c45a9b6e5ff83785d8c140cf11e6a4c3879a2845796872" b"363da24b10f1f8d9cc48f8af20681dceb60dd62095d6d3b1779a4a805de3" b"d74e38983b24c0748618e2f92ef7cac257ff4bd1f41113f2891eb13c4793" b"0e69ddbe91f270fb" ), "d": int("3e1b03ffca4399d5b439fac8f87a5cb06930f00d304193d7daf83d59" "47d0c1e293f74aef8e56849f16147133c37a6b3d1b1883e5d61d6b87" "1ea036c5291d9a74541f28878cb986", 16), "x": int("3b236fc135d849d50140fdaae1045e6ae35ef61091e98f5059b30eb1" "6acdd0deb2bc0d3544bc3a666e0014e50030134fe5466a9e4d3911ed" "580e28851f3747c0010888e819d3d1f", 16), "y": int("3a8b6627a587d289032bd76374d16771188d7ff281c39542c8977f68" "72fa932e5daa14e13792dea9ffe8e9f68d6b525ec99b81a5a60cfb05" "90cc6f297cfff8d7ba1a8bb81fe2e16", 16), "r": int("2eb1c5c1fc93cf3c8babed12c031cf1504e094174fd335104cbe4a2a" "bd210b5a14b1c3a455579f1ed0517c31822340e4dd3c1f967e1b4b9d" "071a1072afc1a199f8c548cd449a634", 16), "s": int("22f97bb48641235826cf4e597fa8de849402d6bd6114ad2d7fbcf53a" "08247e5ee921f1bd5994dffee36eedff5592bb93b8bb148214da3b7b" "aebffbd96b4f86c55b3f6bbac142442", 16), "fail": False }, { "curve": "sect571r1", "digest_algorithm": "SHA-512", "message": binascii.unhexlify( b"b61a0849a28672cb536fcf61ea2eb389d02ff7a09aa391744cae6597bd56" b"703c40c50ca2dee5f7ee796acfd47322f03d8dbe4d99dc8eec588b4e5467" b"f123075b2d74b2a0b0bbfd3ac5487a905fad6d6ac1421c2e564c0cf15e1f" b"0f10bc31c249b7b46edd2462a55f85560d99bde9d5b06b97817d1dbe0a67" b"c701d6e6e7878272" ), "d": int("2e09ffd8b434bb7f67d1d3ccf482164f1653c6e4ec64dec2517aa21b" "7a93b2b21ea1eebb54734882f29303e489f02e3b741a87287e2dcdf3" "858eb6d2ec668f8b5b26f442ce513a2", 16), "x": int("36f1be8738dd7dae4486b86a08fe90424f3673e76b10e739442e15f3" "bfafaf841842ac98e490521b7e7bb94c127529f6ec6a42cc6f06fc80" "606f1210fe020ff508148f93301c9d3", 16), "y": int("4d39666ebe99fe214336ad440d776c88eb916f2f4a3433548b87d2ae" "bed840b424d15c8341b4a0a657bf6a234d4fe78631c8e07ac1f4dc74" "74cd6b4545d536b7b17c160db4562d9", 16), "r": int("3d8105f87fe3166046c08e80a28acc98a80b8b7a729623053c2a9e80" "afd06756edfe09bdcf3035f6829ede041b745955d219dc5d30ddd8b3" "7f6ba0f6d2857504cdc68a1ed812a10", 16), "s": int("34db9998dc53527114518a7ce3783d674ca8cced823fa05e2942e7a0" "a20b3cc583dcd930c43f9b93079c5ee18a1f5a66e7c3527c18610f9b" "47a4da7e245ef803e0662e4d2ad721c", 16) } ] assert expected == load_fips_ecdsa_signing_vectors(vector_data) def test_vector_version(): assert cryptography.__version__ == cryptography_vectors.__version__ def test_raises_unsupported_algorithm_wrong_type(): # Check that it raises if the wrong type of exception is raised. class TestException(Exception): pass with pytest.raises(TestException): with raises_unsupported_algorithm(None): raise TestException def test_raises_unsupported_algorithm_wrong_reason(): # Check that it fails if the wrong reason code is raised. with pytest.raises(AssertionError): with raises_unsupported_algorithm(None): raise UnsupportedAlgorithm("An error.", _Reasons.BACKEND_MISSING_INTERFACE) def test_raises_unsupported_no_exc(): # Check that it fails if no exception is raised. with pytest.raises(pytest.fail.Exception): with raises_unsupported_algorithm( _Reasons.BACKEND_MISSING_INTERFACE ): pass def test_raises_unsupported_algorithm(): # Check that it doesn't assert if the right things are raised. with raises_unsupported_algorithm( _Reasons.BACKEND_MISSING_INTERFACE ) as exc_info: raise UnsupportedAlgorithm("An error.", _Reasons.BACKEND_MISSING_INTERFACE) assert exc_info.type is UnsupportedAlgorithm