corecrypto/ccansikdf/crypto_test/crypto_test_ansikdf.c

117 lines
3.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* Copyright (c) (2014,2015,2016,2018,2019) Apple Inc. All rights reserved.
*
* corecrypto is licensed under Apple Inc.s Internal Use License Agreement (which
* is contained in the License.txt file distributed with corecrypto) and only to
* people who accept that license. IMPORTANT: Any license rights granted to you by
* Apple Inc. (if any) are limited to internal use within your organization only on
* devices and computers you own or control, for the sole purpose of verifying the
* security characteristics and correct functioning of the Apple Software. You may
* not, directly or indirectly, redistribute the Apple Software or any portions thereof.
*/
#include "testmore.h"
#include "testbyteBuffer.h"
#include <corecrypto/cc_runtime_config.h>
#if (CCANSIKDF == 0)
entryPoint(ccansikdf_tests,"ccansikdf")
#else
#include "crypto_test_ansikdf.h"
static const int kTestTestCount = 209;
#include <corecrypto/ccsha1.h>
#include <corecrypto/ccsha2.h>
#define di_SHA1 &ccsha1_eay_di
#define di_SHA224 &ccsha224_ltc_di
#define di_SHA256 &ccsha256_ltc_di
#define di_SHA384 &ccsha384_ltc_di
#define di_SHA512 &ccsha512_ltc_di
const struct ccansi_kdf_vector kdf_vectors_x963_sha1[]=
{
#include "../test_vectors/ansx963_cavs_sha1.inc"
};
const struct ccansi_kdf_vector kdf_vectors_x963_sha224[]=
{
#include "../test_vectors/ansx963_cavs_sha224.inc"
};
const struct ccansi_kdf_vector kdf_vectors_x963_sha256[]=
{
#include "../test_vectors/ansx963_cavs_sha256.inc"
};
const struct ccansi_kdf_vector kdf_vectors_x963_sha384[]=
{
#include "../test_vectors/ansx963_cavs_sha384.inc"
};
const struct ccansi_kdf_vector kdf_vectors_x963_sha512[]=
{
#include "../test_vectors/ansx963_cavs_sha512.inc"
};
const uint32_t magic=0xFACE;
// Process one vector
static int ccansikdf_x963_vector(const struct ccansi_kdf_vector *test)
{
size_t output_len=(CC_BITLEN_TO_BYTELEN(test->key_data_length));
uint8_t output[output_len+sizeof(magic)];
cc_clear(sizeof(output),output);
memcpy(&output[output_len],&magic,sizeof(magic));
byteBuffer Z_data = hexStringToBytes(test->Z);
byteBuffer SharedInfo_data = hexStringToBytes(test->SharedInfo);
byteBuffer ExpectedKeyData_data = hexStringToBytes(test->key_data);
assert(Z_data->len==CC_BITLEN_TO_BYTELEN(test->shared_secret_length));
assert(SharedInfo_data->len==CC_BITLEN_TO_BYTELEN(test->SharedInfo_length));
assert(ExpectedKeyData_data->len==output_len);
ccansikdf_x963(test->di,
Z_data->len, Z_data->bytes,
SharedInfo_data->len,SharedInfo_data->bytes,
output_len,output);
ok_memcmp_or_fail(output,ExpectedKeyData_data->bytes,ExpectedKeyData_data->len,
"Known answer test KDF x963");
ok_memcmp_or_fail(&output[output_len],&magic,sizeof(magic),
"Output overflow KDF x963");
free(Z_data);
free(SharedInfo_data);
free(ExpectedKeyData_data);
return 1; // Pass
}
// Loop through all vectors
static int ccansikdf_x963_test(const struct ccansi_kdf_vector *test)
{
size_t test_counter=0;
int test_status=1;
const struct ccansi_kdf_vector * current_test=&test[test_counter++];
while (current_test->di!=NULL && test_status)
{
test_status=ccansikdf_x963_vector(current_test);
current_test=&test[test_counter++];
}
return test_status;
}
int ccansikdf_tests(TM_UNUSED int argc, TM_UNUSED char *const *argv)
{
plan_tests(kTestTestCount);
ok_status(ccansikdf_x963_test(kdf_vectors_x963_sha1)!=1,"x9.63 SHA1");
ok_status(ccansikdf_x963_test(kdf_vectors_x963_sha224)!=1,"x9.63 SHA224");
ok_status(ccansikdf_x963_test(kdf_vectors_x963_sha256)!=1,"x9.63 SHA256");
ok_status(ccansikdf_x963_test(kdf_vectors_x963_sha384)!=1,"x9.63 SHA384");
ok_status(ccansikdf_x963_test(kdf_vectors_x963_sha512)!=1,"x9.63 SHA512");
return 0;
}
#endif