QMK/lib/chibios/test/crypto/configuration.xml

3922 lines
111 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<SPC5-Config version="1.0.0">
<application name="Crypto Test Suite" version="1.0.0" standalone="true" locked="false">
<description>Test Specification for Hal Crypto </description>
<component id="org.chibios.spc5.components.portable.generic_startup">
<component id="org.chibios.spc5.components.portable.chibios_unitary_tests_engine" />
</component>
<instances>
<instance locked="false" id="org.chibios.spc5.components.portable.generic_startup" />
<instance locked="false" id="org.chibios.spc5.components.portable.chibios_unitary_tests_engine">
<description>
<brief>
<value>Chibios Hal Crypto Test Suite.</value>
</brief>
<copyright>
<value><![CDATA[/*
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
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.
*/]]></value>
</copyright>
<introduction>
<value>Test suite for ChibiOS Crypto Hal. The purpose of this suite is to perform unit tests on the Hal Crypto and to converge to 100% code coverage through successive improvements.</value>
</introduction>
</description>
<global_data_and_code>
<code_prefix>
<value>cry_</value>
</code_prefix>
<global_definitions>
<value><![CDATA[
extern void cryptoTest_setStream(BaseSequentialStream * s);
extern void cryptoTest_printArray32(bool isLE,const uint32_t *a,size_t len);
#ifdef LOG_CRYPTO_DATA
#define SHOW_ENCRYPDATA(w) cryptoTest_printArray32(true,msg_encrypted,w)
#define SHOW_DECRYPDATA(w) cryptoTest_printArray32(true,msg_decrypted,w)
#define SHOW_DATA(d,w) cryptoTest_printArray32(true,d,w)
#else
#define SHOW_ENCRYPDATA(w)
#define SHOW_DECRYPDATA(w)
#define SHOW_DATA(d,w)
#endif
#define TEST_DATA_BYTE_LEN 640
#define TEST_DATA_WORD_LEN (TEST_DATA_BYTE_LEN / 4)
#define TEST_MSG_DATA_BYTE_LEN 640
#define TEST_MSG_DATA_WORD_LEN (TEST_MSG_DATA_BYTE_LEN / 4)
#define SHA_LEN_0 3
#define SHA_LEN_1 56
#define SHA_LEN_2 64
#define SHA_LEN_3 128
#define TEST_GCM_KEY1_LEN 32
#define TEST_P_LEN 60
#define TEST_A_LEN 20
#define TEST_IV1_LEN 12
#define TEST_CL_LEN 60
#define TEST_TL_LEN 16
extern const char test_plain_data[TEST_DATA_BYTE_LEN];
extern uint32_t msg_clear[TEST_MSG_DATA_WORD_LEN];
extern uint32_t msg_encrypted[TEST_MSG_DATA_WORD_LEN];
extern uint32_t msg_decrypted[TEST_MSG_DATA_WORD_LEN];
extern const uint32_t test_keys[8];
extern const uint32_t test_vectors[4];
extern const uint8_t sha_msg0[SHA_LEN_0];
extern const uint8_t sha_msg1[SHA_LEN_1];
extern const uint8_t sha_msg2[SHA_LEN_2];
extern const uint8_t sha_msg3[SHA_LEN_3];
]]></value>
</global_definitions>
<global_code>
<value><![CDATA[
#if CRYPTO_LOG_LEVEL == 1
#include "chprintf.h"
#endif
const uint32_t test_keys[8]=
{
0x01234567, //KEY 1 low part
0x89ABCDEF, //KEY 1 hi part
0x76543210, //KEY 2 low part
0xFEDCBA98, //KEY 2 hi part
0x55AA55AA,
0xAA55AA55,
0x0000FFFF,
0xFFFF0000
};
const uint32_t test_vectors[4]=
{
0x11223344, //VECTOR 1 low part
0x55667788, //VECTOR 1 hi part
0x11112222,
0x33334444
};
const char test_plain_data[TEST_DATA_BYTE_LEN] ="\
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesen\
t et pellentesque risus. Sed id gravida elit. Proin eget accumsa\
n mi. Aliquam vitae dui porta, euismod velit viverra, elementum \
lacus. Nunc turpis orci, venenatis vel vulputate nec, luctus sit\
amet urna. Ut et nunc purus. Aliquam erat volutpat. Vestibulum n\
ulla dolor, cursus vitae cursus eget, dapibus eget sapien. Integ\
er justo eros, commodo ut massa eu, bibendum elementum tellus. N\
am quis dolor in libero placerat congue. Sed sodales urna sceler\
isque dui faucibus, vitae malesuada dui fermentum. Proin ultrici\
es sit amet justo at ornare. Suspendisse efficitur purus nullam.";
const uint8_t sha_msg0[SHA_LEN_0] = "abc";
const uint8_t sha_msg1[SHA_LEN_1] = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
const uint8_t sha_msg2[SHA_LEN_2] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
const uint8_t sha_msg3[SHA_LEN_3] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
ALIGNED_VAR(4) uint32_t msg_clear[TEST_MSG_DATA_WORD_LEN];
ALIGNED_VAR(4) uint32_t msg_encrypted[TEST_MSG_DATA_WORD_LEN];
ALIGNED_VAR(4) uint32_t msg_decrypted[TEST_MSG_DATA_WORD_LEN];
BaseSequentialStream * ts;
#if CRYPTO_LOG_LEVEL == 1
static uint32_t toBigEndian(uint32_t v)
{
return (v & 0x000000ff) << 24u |
( (v & 0x0000ff00) << 8u ) |
( (v & 0x00ff0000) >> 8u ) |
( (v & 0xff000000) >> 24u );
}
#endif
void cryptoTest_setStream(BaseSequentialStream * s)
{
ts = s;
}
void cryptoTest_printArray(const uint8_t *a,size_t len)
{
#if CRYPTO_LOG_LEVEL == 1
for(size_t i=0;i<len;i++)
{
chprintf(ts,"%02X",a[i]);
}
chprintf(ts,"\r\n");
#else
(void)a;
(void)len;
#endif
}
void cryptoTest_printArray32(bool isLE,const uint32_t *a,size_t len)
{
#if CRYPTO_LOG_LEVEL == 1
uint32_t data;
for(size_t i=0;i<len;i++)
{
if (isLE)
data = toBigEndian(a[i]);
else
data = a[i];
chprintf(ts,"%08X ",data);
}
chprintf(ts,"\r\n");
#else
(void)isLE;
(void)a;
(void)len;
#endif
}
]]></value>
</global_code>
</global_data_and_code>
<sequences>
<sequence>
<type index="0">
<value>Internal Tests</value>
</type>
<brief>
<value>AES ECB</value>
</brief>
<description>
<value>AES ECB</value>
</description>
<condition>
<value />
</condition>
<shared_code>
<value><![CDATA[
#include <string.h>
#include "ref_aes.h"
static const CRYConfig config_Polling = {
TRANSFER_POLLING,
AES_CFBS_128 //cfbs
};
static const CRYConfig config_DMA = {
TRANSFER_DMA,
AES_CFBS_128 //cfbs
};
]]></value>
</shared_code>
<cases>
<case>
<brief>
<value>AES ECB Polling</value>
</brief>
<description>
<value>testing AES ECB with various Keys</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &config_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 16 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,16, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_ECB_128)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 24 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,24, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_ECB_192)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 32 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,32, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_ECB_256)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>AES ECB DMA</value>
</brief>
<description>
<value>testing AES ECB with various Keys</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &config_DMA);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 16 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,16, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_ECB_128)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 24 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,24, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_ECB_192)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 32 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,32, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_ECB_256)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
</cases>
</sequence>
<sequence>
<type index="0">
<value>Internal Tests</value>
</type>
<brief>
<value>AES CFB</value>
</brief>
<description>
<value>AES CFB</value>
</description>
<condition>
<value />
</condition>
<shared_code>
<value><![CDATA[
#include <string.h>
#include "ref_aes.h"
static const CRYConfig config_Polling = {
TRANSFER_POLLING,
AES_CFBS_128 //cfbs
};
static const CRYConfig config_DMA = {
TRANSFER_DMA,
AES_CFBS_128 //cfbs
};
]]></value>
</shared_code>
<cases>
<case>
<brief>
<value>AES CFB Polling</value>
</brief>
<description>
<value>testing AES CFB with various Keys</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &config_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 16 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,16, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CFB_128)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 24 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,24, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CFB_192)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 32 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,32, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CFB_256)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>AES CFB DMA</value>
</brief>
<description>
<value>testing AES CFB with various Keys</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &config_DMA);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 16 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,16, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CFB_128)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 24 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,24, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CFB_192)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 32 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,32, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CFB_256)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CFB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
</cases>
</sequence>
<sequence>
<type index="0">
<value>Internal Tests</value>
</type>
<brief>
<value>AES CBC</value>
</brief>
<description>
<value>AES CBC</value>
</description>
<condition>
<value />
</condition>
<shared_code>
<value><![CDATA[
#include <string.h>
#include "ref_aes.h"
static const CRYConfig config_Polling = {
TRANSFER_POLLING,
AES_CFBS_128 //cfbs
};
static const CRYConfig config_DMA = {
TRANSFER_DMA,
AES_CFBS_128 //cfbs
};
]]></value>
</shared_code>
<cases>
<case>
<brief>
<value>AES CBC Polling</value>
</brief>
<description>
<value>testing AES CBC with various Keys</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &config_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 16 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,16, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CBC_128)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 24 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,24, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CBC_192)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 32 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,32, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CBC_256)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>AES CBC DMA</value>
</brief>
<description>
<value>testing AES CBC with various Keys</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &config_DMA);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 16 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,16, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CBC_128)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 24 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,24, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CBC_192)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 32 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,32, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refAES_CBC_256)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptAES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
</cases>
</sequence>
<sequence>
<type index="0">
<value>Internal Tests</value>
</type>
<brief>
<value>(T)DES</value>
</brief>
<description>
<value>(T)DES testing</value>
</description>
<condition>
<value />
</condition>
<shared_code>
<value><![CDATA[
#include <string.h>
#include "ref_des.h"
static const CRYConfig configDES_Polling=
{
TRANSFER_POLLING,
0
};
static const CRYConfig configDES_DMA=
{
TRANSFER_DMA,
0
};
]]></value>
</shared_code>
<cases>
<case>
<brief>
<value>DES Polling</value>
</brief>
<description>
<value>testing DES in polled mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &configDES_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 8 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_des,8, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptDES(&CRYD1, 0, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(2);
for (int i = 0; i < 2; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refDES_ECB_8)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptDES(&CRYD1, 0, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(2);
for (int i = 0; i < 2; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>TDES CBC Polling</value>
</brief>
<description>
<value>testing TDES CBC in polled mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &configDES_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 16 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_des,16, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptDES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refTDES_CBC_16)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptDES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 24 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_des,24, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptDES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refTDES_CBC_24)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptDES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>TDES ECB Polling</value>
</brief>
<description>
<value>testing TDES ECB in polling mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &configDES_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 16 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_des,16, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptDES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refTDES_ECB_16)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptDES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 24 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_des,24, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptDES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refTDES_ECB_24)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptDES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>TDES CBC DMA</value>
</brief>
<description>
<value>testing TDES CBC in polled mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &configDES_DMA);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 16 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_des,16, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptDES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refTDES_CBC_16)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptDES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 24 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_des,24, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptDES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refTDES_CBC_24)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptDES_CBC(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted,(uint8_t*)test_vectors);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>TDES ECB DMA</value>
</brief>
<description>
<value>testing TDES ECB in DMA mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memcpy((char*) msg_clear, test_plain_data, TEST_DATA_BYTE_LEN);
memset(msg_encrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(msg_decrypted, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &configDES_DMA);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key with 16 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_des,16, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptDES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refTDES_ECB_16)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptDES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>loading the key with 24 byte size</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_des,24, (uint8_t *) test_keys);
test_assert(ret == CRY_NOERROR, "failed load transient key");
]]></value>
</code>
</step>
<step>
<description>
<value>Encrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryEncryptDES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_clear, (uint8_t*) msg_encrypted);
test_assert(ret == CRY_NOERROR, "encrypt failed");
SHOW_ENCRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_encrypted[i] == ((uint32_t*) refTDES_ECB_24)[i], "encrypt mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>Decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
ret = cryDecryptDES_ECB(&CRYD1, 0,TEST_DATA_BYTE_LEN, (uint8_t*) msg_encrypted, (uint8_t*) msg_decrypted);
test_assert(ret == CRY_NOERROR, "decrypt failed");
SHOW_DECRYPDATA(TEST_DATA_WORD_LEN);
for (int i = 0; i < TEST_DATA_WORD_LEN; i++) {
test_assert(msg_decrypted[i] == msg_clear[i], "decrypt mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
</cases>
</sequence>
<sequence>
<type index="0">
<value>Internal Tests</value>
</type>
<brief>
<value>TRNG</value>
</brief>
<description>
<value>TRNG testing</value>
</description>
<condition>
<value />
</condition>
<shared_code>
<value><![CDATA[
#include <string.h>
static const CRYConfig configTRNG_Polling=
{
TRANSFER_POLLING,
0
};
]]></value>
</shared_code>
<cases>
<case>
<brief>
<value>TRNG Polling</value>
</brief>
<description>
<value>testing TRNG in polled mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
cryStart(&CRYD1, &configTRNG_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>Random generation and test</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
uint32_t random[4];
int i;
ret = cryTRNG(&CRYD1,(uint8_t*)&random);
test_assert(ret == CRY_NOERROR , "failed random");
SHOW_DATA(&random[0],4);
for (i=0;i<4;i++) {
test_assert(random[i] != 0 , "failed random generation (zero)");
}
for (i=1;i<4;i++)
{
test_assert(random[i-1] != random[i] , "failed random generation");
}
]]></value>
</code>
</step>
</steps>
</case>
</cases>
</sequence>
<sequence>
<type index="0">
<value>Internal Tests</value>
</type>
<brief>
<value>SHA</value>
</brief>
<description>
<value>SHA testing</value>
</description>
<condition>
<value />
</condition>
<shared_code>
<value><![CDATA[
#include <string.h>
#include "ref_sha.h"
/* Buffer size for each SHA transfer, size should be multiple of block size
(block size: 64 for SHA_1/SHA_256/SHA_224, 128 for SHA_384/SHA_512) */
#define MAX_SHA_BLOCK_SIZE TEST_MSG_DATA_BYTE_LEN
#define MAX_SHA_BLOCK_SIZE_INWORD (MAX_SHA_BLOCK_SIZE/4)
#define shabuffer msg_decrypted
#define MAX_DIGEST_SIZE_INBYTE TEST_MSG_DATA_BYTE_LEN
#define MAX_DIGEST_SIZE_INWORD (MAX_DIGEST_SIZE_INBYTE/4)
#define digest msg_encrypted
static const CRYConfig configSHA_Polling=
{
TRANSFER_POLLING,
0
};
static cryerror_t crySHA1(CRYDriver *cryp, size_t size,const uint8_t *in, uint8_t *out) {
cryerror_t ret;
SHA1Context shactxp;
shactxp.sha.sha_buffer = (uint8_t*)&shabuffer[0];
shactxp.sha.sha_buffer_size = MAX_SHA_BLOCK_SIZE;
ret = crySHA1Init(cryp,&shactxp);
ret = crySHA1Update(cryp,&shactxp,size,in);
ret = crySHA1Final(cryp,&shactxp,out);
return ret;
}
static cryerror_t crySHA256(CRYDriver *cryp, size_t size,const uint8_t *in, uint8_t *out) {
cryerror_t ret;
SHA256Context shactxp;
shactxp.sha.sha_buffer = (uint8_t*)&shabuffer[0];
shactxp.sha.sha_buffer_size = MAX_SHA_BLOCK_SIZE;
ret = crySHA256Init(cryp,&shactxp);
ret = crySHA256Update(cryp,&shactxp,size,in);
ret = crySHA256Final(cryp,&shactxp,out);
return ret;
}
static cryerror_t crySHA512(CRYDriver *cryp, size_t size,const uint8_t *in, uint8_t *out) {
cryerror_t ret;
SHA512Context shactxp;
shactxp.sha.sha_buffer = (uint8_t*)&shabuffer[0];
shactxp.sha.sha_buffer_size = MAX_SHA_BLOCK_SIZE;
ret = crySHA512Init(cryp,&shactxp);
ret = crySHA512Update(cryp,&shactxp,size,in);
ret = crySHA512Final(cryp,&shactxp,out);
return ret;
}
]]></value>
</shared_code>
<cases>
<case>
<brief>
<value>SHA1 Polling</value>
</brief>
<description>
<value>testing SHA1 in polled mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memset(digest, 0, MAX_DIGEST_SIZE_INWORD);
memcpy((char*) msg_clear, sha_msg0, SHA_LEN_0);
cryStart(&CRYD1, &configSHA_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
uint32_t *ref;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>Digest</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
//---- Empty Block Test
ret = crySHA1(&CRYD1,0,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha1 failed");
SHOW_DATA(digest,5);
ref = (uint32_t*)refSHA_SHA1_EMPTY;
for (int i = 0; i < 5; i++) {
test_assert(digest[i] == ref[i], "sha1 digest mismatch");
}
//---- One Block Test
ret = crySHA1(&CRYD1,SHA_LEN_0,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha1 failed");
SHOW_DATA(digest,5);
ref = (uint32_t*)refSHA_SHA1_3;
for (int i = 0; i < 5; i++) {
test_assert(digest[i] == ref[i], "sha1 digest mismatch");
}
//---- Multi Block Test 56 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg1, SHA_LEN_1);
ret = crySHA1(&CRYD1,SHA_LEN_1,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha1 failed");
SHOW_DATA(digest,5);
ref = (uint32_t*)refSHA_SHA1_56;
for (int i = 0; i < 5; i++) {
test_assert(digest[i] == ref[i], "sha1 digest mismatch");
}
//---- Multi Block Test 64 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg2, SHA_LEN_2);
ret = crySHA1(&CRYD1,SHA_LEN_2,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha1 failed");
SHOW_DATA(digest,5);
ref = (uint32_t*)refSHA_SHA1_64;
for (int i = 0; i < 5; i++) {
test_assert(digest[i] == ref[i], "sha1 digest mismatch");
}
//---- Multi Block Test 128 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg3, SHA_LEN_3);
ret = crySHA1(&CRYD1,SHA_LEN_3,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha1 failed");
SHOW_DATA(digest,5);
ref = (uint32_t*)refSHA_SHA1_128;
for (int i = 0; i < 5; i++) {
test_assert(digest[i] == ref[i], "sha1 digest mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>SHA256 Polling</value>
</brief>
<description>
<value>testing SHA256 in polled mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memset(digest, 0, MAX_DIGEST_SIZE_INWORD);
memcpy((char*) msg_clear, sha_msg0, SHA_LEN_0);
cryStart(&CRYD1, &configSHA_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
uint32_t *ref;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>Digest</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
//---- One Block Test
ret = crySHA256(&CRYD1,SHA_LEN_0,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha256 failed");
SHOW_DATA(digest,8);
ref = (uint32_t*)refSHA_SHA256_3;
for (int i = 0; i < 8; i++) {
test_assert(digest[i] == ref[i], "sha256 digest mismatch");
}
//---- Multi Block Test 56 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg1, SHA_LEN_1);
ret = crySHA256(&CRYD1,SHA_LEN_1,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha256 56 byte failed");
SHOW_DATA(digest,8);
ref = (uint32_t*)refSHA_SHA256_56;
for (int i = 0; i < 8; i++) {
test_assert(digest[i] == ref[i], "sha256 56 byte digest mismatch");
}
//---- Multi Block Test 64 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg2, SHA_LEN_2);
ret = crySHA256(&CRYD1,SHA_LEN_2,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha256 64 byte failed");
SHOW_DATA(digest,8);
ref = (uint32_t*)refSHA_SHA256_64;
for (int i = 0; i < 8; i++) {
test_assert(digest[i] == ref[i], "sha256 64 byte digest mismatch");
}
//---- Multi Block Test 128 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg3, SHA_LEN_3);
ret = crySHA256(&CRYD1,SHA_LEN_3,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha256 128 byte failed");
SHOW_DATA(digest,8);
ref = (uint32_t*)refSHA_SHA256_128;
for (int i = 0; i < 8; i++) {
test_assert(digest[i] == ref[i], "sha256 128 byte digest mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>SHA512 Polling</value>
</brief>
<description>
<value>testing SHA512 in polled mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memset(digest, 0, MAX_DIGEST_SIZE_INWORD);
memcpy((char*) msg_clear, sha_msg0, SHA_LEN_0);
cryStart(&CRYD1, &configSHA_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
uint32_t *ref;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>Digest</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
//---- One Block Test
ret = crySHA512(&CRYD1,SHA_LEN_0,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha512 failed");
SHOW_DATA(digest,16);
ref = (uint32_t*)refSHA_SHA512_3;
for (int i = 0; i < 16; i++) {
test_assert(digest[i] == ref[i], "sha512 digest mismatch");
}
//---- Multi Block Test 56 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg1, SHA_LEN_1);
ret = crySHA512(&CRYD1,SHA_LEN_1,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha512 56 byte failed");
SHOW_DATA(digest,16);
ref = (uint32_t*)refSHA_SHA512_56;
for (int i = 0; i < 16; i++) {
test_assert(digest[i] == ref[i], "sha512 56 byte digest mismatch");
}
//---- Multi Block Test 64 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg2, SHA_LEN_2);
ret = crySHA512(&CRYD1,SHA_LEN_2,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha512 64 byte failed");
SHOW_DATA(digest,16);
ref = (uint32_t*)refSHA_SHA512_64;
for (int i = 0; i < 16; i++) {
test_assert(digest[i] == ref[i], "sha512 64 byte digest mismatch");
}
//---- Multi Block Test 128 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg3, SHA_LEN_3);
ret = crySHA512(&CRYD1,SHA_LEN_3,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha512 128 byte failed");
SHOW_DATA(digest,16);
ref = (uint32_t*)refSHA_SHA512_128;
for (int i = 0; i < 16; i++) {
test_assert(digest[i] == ref[i], "sha512 128 byte digest mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
</cases>
</sequence>
<sequence>
<type index="0">
<value>Internal Tests</value>
</type>
<brief>
<value>SHA</value>
</brief>
<description>
<value>SHA testing</value>
</description>
<condition>
<value />
</condition>
<shared_code>
<value><![CDATA[
#include <string.h>
#include "ref_sha.h"
/* Buffer size for each SHA transfer, size should be multiple of block size
(block size: 64 for SHA_1/SHA_256/SHA_224, 128 for SHA_384/SHA_512) */
#define MAX_SHA_BLOCK_SIZE TEST_MSG_DATA_BYTE_LEN
#define MAX_SHA_BLOCK_SIZE_INWORD (MAX_SHA_BLOCK_SIZE/4)
#define shabuffer msg_decrypted
#define MAX_DIGEST_SIZE_INBYTE TEST_MSG_DATA_BYTE_LEN
#define MAX_DIGEST_SIZE_INWORD (MAX_DIGEST_SIZE_INBYTE/4)
#define digest msg_encrypted
static const CRYConfig configSHA_DMA=
{
TRANSFER_DMA,
0
};
static cryerror_t crySHA1(CRYDriver *cryp, size_t size,const uint8_t *in, uint8_t *out) {
cryerror_t ret;
SHA1Context shactxp;
shactxp.sha.sha_buffer = (uint8_t*)&shabuffer[0];
shactxp.sha.sha_buffer_size = MAX_SHA_BLOCK_SIZE;
ret = crySHA1Init(cryp,&shactxp);
ret = crySHA1Update(cryp,&shactxp,size,in);
ret = crySHA1Final(cryp,&shactxp,out);
return ret;
}
static cryerror_t crySHA256(CRYDriver *cryp, size_t size,const uint8_t *in, uint8_t *out) {
cryerror_t ret;
SHA256Context shactxp;
shactxp.sha.sha_buffer = (uint8_t*)&shabuffer[0];
shactxp.sha.sha_buffer_size = MAX_SHA_BLOCK_SIZE;
ret = crySHA256Init(cryp,&shactxp);
ret = crySHA256Update(cryp,&shactxp,size,in);
ret = crySHA256Final(cryp,&shactxp,out);
return ret;
}
static cryerror_t crySHA512(CRYDriver *cryp, size_t size,const uint8_t *in, uint8_t *out) {
cryerror_t ret;
SHA512Context shactxp;
shactxp.sha.sha_buffer = (uint8_t*)&shabuffer[0];
shactxp.sha.sha_buffer_size = MAX_SHA_BLOCK_SIZE;
ret = crySHA512Init(cryp,&shactxp);
ret = crySHA512Update(cryp,&shactxp,size,in);
ret = crySHA512Final(cryp,&shactxp,out);
return ret;
}
]]></value>
</shared_code>
<cases>
<case>
<brief>
<value>SHA1 DMA</value>
</brief>
<description>
<value>testing SHA1 in DMA mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memset(digest, 0, MAX_DIGEST_SIZE_INWORD);
memcpy((char*) msg_clear, sha_msg0, SHA_LEN_0);
cryStart(&CRYD1, &configSHA_DMA);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
uint32_t *ref;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>Digest</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
//---- Empty Block Test
ret = crySHA1(&CRYD1,0,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha1 failed");
SHOW_DATA(digest,5);
ref = (uint32_t*)refSHA_SHA1_EMPTY;
for (int i = 0; i < 5; i++) {
test_assert(digest[i] == ref[i], "sha1 digest mismatch");
}
//---- One Block Test
ret = crySHA1(&CRYD1,SHA_LEN_0,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha1 failed");
SHOW_DATA(digest,5);
ref = (uint32_t*)refSHA_SHA1_3;
for (int i = 0; i < 5; i++) {
test_assert(digest[i] == ref[i], "sha1 digest mismatch");
}
//---- Multi Block Test 56 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg1, SHA_LEN_1);
ret = crySHA1(&CRYD1,SHA_LEN_1,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha1 failed");
SHOW_DATA(digest,5);
ref = (uint32_t*)refSHA_SHA1_56;
for (int i = 0; i < 5; i++) {
test_assert(digest[i] == ref[i], "sha1 digest mismatch");
}
//---- Multi Block Test 64 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg2, SHA_LEN_2);
ret = crySHA1(&CRYD1,SHA_LEN_2,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha1 failed");
SHOW_DATA(digest,5);
ref = (uint32_t*)refSHA_SHA1_64;
for (int i = 0; i < 5; i++) {
test_assert(digest[i] == ref[i], "sha1 digest mismatch");
}
//---- Multi Block Test 128 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg3, SHA_LEN_3);
ret = crySHA1(&CRYD1,SHA_LEN_3,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha1 failed");
SHOW_DATA(digest,5);
ref = (uint32_t*)refSHA_SHA1_128;
for (int i = 0; i < 5; i++) {
test_assert(digest[i] == ref[i], "sha1 digest mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>SHA256 DMA</value>
</brief>
<description>
<value>testing SHA256 in DMA mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memset(digest, 0, MAX_DIGEST_SIZE_INWORD);
memcpy((char*) msg_clear, sha_msg0, SHA_LEN_0);
cryStart(&CRYD1, &configSHA_DMA);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
uint32_t *ref;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>Digest</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
//---- One Block Test
ret = crySHA256(&CRYD1,SHA_LEN_0,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha256 failed");
SHOW_DATA(digest,8);
ref = (uint32_t*)refSHA_SHA256_3;
for (int i = 0; i < 8; i++) {
test_assert(digest[i] == ref[i], "sha256 digest mismatch");
}
//---- Multi Block Test 56 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg1, SHA_LEN_1);
ret = crySHA256(&CRYD1,SHA_LEN_1,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha256 56 byte failed");
SHOW_DATA(digest,8);
ref = (uint32_t*)refSHA_SHA256_56;
for (int i = 0; i < 8; i++) {
test_assert(digest[i] == ref[i], "sha256 56 byte digest mismatch");
}
//---- Multi Block Test 64 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg2, SHA_LEN_2);
ret = crySHA256(&CRYD1,SHA_LEN_2,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha256 64 byte failed");
SHOW_DATA(digest,8);
ref = (uint32_t*)refSHA_SHA256_64;
for (int i = 0; i < 8; i++) {
test_assert(digest[i] == ref[i], "sha256 64 byte digest mismatch");
}
//---- Multi Block Test 128 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg3, SHA_LEN_3);
ret = crySHA256(&CRYD1,SHA_LEN_3,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha256 128 byte failed");
SHOW_DATA(digest,8);
ref = (uint32_t*)refSHA_SHA256_128;
for (int i = 0; i < 8; i++) {
test_assert(digest[i] == ref[i], "sha256 128 byte digest mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>SHA512 DMA</value>
</brief>
<description>
<value>testing SHA512 in DMA mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memset(digest, 0, MAX_DIGEST_SIZE_INWORD);
memcpy((char*) msg_clear, sha_msg0, SHA_LEN_0);
cryStart(&CRYD1, &configSHA_DMA);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
uint32_t *ref;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>Digest</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
//---- One Block Test
ret = crySHA512(&CRYD1,SHA_LEN_0,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha512 failed");
SHOW_DATA(digest,16);
ref = (uint32_t*)refSHA_SHA512_3;
for (int i = 0; i < 16; i++) {
test_assert(digest[i] == ref[i], "sha512 digest mismatch");
}
//---- Multi Block Test 56 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg1, SHA_LEN_1);
ret = crySHA512(&CRYD1,SHA_LEN_1,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha512 56 byte failed");
SHOW_DATA(digest,16);
ref = (uint32_t*)refSHA_SHA512_56;
for (int i = 0; i < 16; i++) {
test_assert(digest[i] == ref[i], "sha512 56 byte digest mismatch");
}
//---- Multi Block Test 64 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg2, SHA_LEN_2);
ret = crySHA512(&CRYD1,SHA_LEN_2,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha512 64 byte failed");
SHOW_DATA(digest,16);
ref = (uint32_t*)refSHA_SHA512_64;
for (int i = 0; i < 16; i++) {
test_assert(digest[i] == ref[i], "sha512 64 byte digest mismatch");
}
//---- Multi Block Test 128 Byte
memset(msg_clear, 0, TEST_MSG_DATA_BYTE_LEN);
memcpy((char*) msg_clear, sha_msg3, SHA_LEN_3);
ret = crySHA512(&CRYD1,SHA_LEN_3,(uint8_t*)msg_clear,(uint8_t*)digest);
test_assert(ret == CRY_NOERROR, "sha512 128 byte failed");
SHOW_DATA(digest,16);
ref = (uint32_t*)refSHA_SHA512_128;
for (int i = 0; i < 16; i++) {
test_assert(digest[i] == ref[i], "sha512 128 byte digest mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
</cases>
</sequence>
<sequence>
<type index="0">
<value>Internal Tests</value>
</type>
<brief>
<value>GCM</value>
</brief>
<description>
<value>GCM testing</value>
</description>
<condition>
<value />
</condition>
<shared_code>
<value><![CDATA[
#include <string.h>
#include "ref_gcm.h"
#define plaintext msg_clear
#define cypher msg_encrypted
#define authtag msg_decrypted
static const CRYConfig config_Polling=
{
TRANSFER_POLLING,
0
};
static const CRYConfig config_DMA=
{
TRANSFER_DMA,
0
};
struct test_el_t
{
uint32_t size;
const uint8_t * data;
};
struct test_gcm_t
{
struct test_el_t key;
struct test_el_t p;
struct test_el_t iv;
struct test_el_t aad;
struct test_el_t c;
struct test_el_t t;
};
#define TEST_GCM_LEN 3
const struct test_gcm_t test_gcm_k[TEST_GCM_LEN]={
{ {K3_LEN,K3},{P3_LEN,P3},{IV3_LEN,IV3},{AAD3_LEN,A3},{C3_LEN,C3},{T3_LEN,T3} },
{ {K4_LEN,K4},{P4_LEN,P4},{IV4_LEN,IV4},{AAD4_LEN,A4},{C4_LEN,C4},{T4_LEN,T4} },
{ {K5_LEN,K5},{P5_LEN,P5},{IV5_LEN,IV5},{AAD5_LEN,A5},{C5_LEN,C5},{T5_LEN,T5} }
};
]]></value>
</shared_code>
<cases>
<case>
<brief>
<value>GCM Polling</value>
</brief>
<description>
<value>testing GCM in polled mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memset(cypher, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(authtag, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &config_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
uint32_t *ref;
uint8_t i,len1,len2;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key, encrypt and decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
for (i = 0;i<TEST_GCM_LEN;i++) {
test_print("gcm test : ");
test_printn(i);
test_println("");
/* loading the key .*/
{
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,test_gcm_k[i].key.size, (uint8_t *) test_gcm_k[i].key.data);
test_assert(ret == CRY_NOERROR, "failed load transient key");
}
/* Encrypt.*/
{
ret = cryEncryptAES_GCM(&CRYD1,
0,
test_gcm_k[i].p.size,
test_gcm_k[i].p.data,
(uint8_t*)cypher,
test_gcm_k[i].iv.data,
test_gcm_k[i].aad.size,
test_gcm_k[i].aad.data,
(uint8_t*)authtag);
test_assert(ret == CRY_NOERROR, "failed encryption");
len1 = test_gcm_k[i].c.size/4;
len2 = test_gcm_k[i].t.size/4;
SHOW_DATA(cypher,len1);
SHOW_DATA(authtag,len2);
ref = (uint32_t*)test_gcm_k[i].c.data;
for (uint8_t i = 0; i < len1; i++) {
test_assert(ref[i] == cypher[i], "c mismatch");
}
ref = (uint32_t*)test_gcm_k[i].t.data;
for (uint8_t i = 0; i < len2; i++) {
test_assert(ref[i] == authtag[i], "t mismatch");
}
}
/* Decrypt.*/
{
memset(plaintext, 0, test_gcm_k[i].p.size);
ret = cryDecryptAES_GCM(&CRYD1,
0,
test_gcm_k[i].c.size,
(uint8_t*)cypher,
(uint8_t*)plaintext,
test_gcm_k[i].iv.data,
test_gcm_k[i].aad.size,
test_gcm_k[i].aad.data,
(uint8_t*)authtag);
test_assert(ret == CRY_NOERROR, "failed decryption");
len1 = test_gcm_k[i].p.size/4;
SHOW_DATA(plaintext,len1);
ref = (uint32_t*)test_gcm_k[i].p.data;
for (uint8_t i = 0; i < len1; i++) {
test_assert(ref[i] == plaintext[i], "decrypt plain mismatch");
}
}
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>GCM DMA</value>
</brief>
<description>
<value>testing GCM in DMA mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memset(cypher, 0xff, TEST_MSG_DATA_BYTE_LEN);
memset(authtag, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &config_DMA);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
cryerror_t ret;
uint32_t *ref;
uint8_t i,len1,len2;
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>loading the key, encrypt and decrypt</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
for (i = 0;i<TEST_GCM_LEN;i++) {
test_print("gcm test : ");
test_printn(i);
test_println("");
/* loading the key .*/
{
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_aes,test_gcm_k[i].key.size, (uint8_t *) test_gcm_k[i].key.data);
test_assert(ret == CRY_NOERROR, "failed load transient key");
}
/* Encrypt.*/
{
ret = cryEncryptAES_GCM(&CRYD1,
0,
test_gcm_k[i].p.size,
test_gcm_k[i].p.data,
(uint8_t*)cypher,
test_gcm_k[i].iv.data,
test_gcm_k[i].aad.size,
test_gcm_k[i].aad.data,
(uint8_t*)authtag);
test_assert(ret == CRY_NOERROR, "failed encryption");
len1 = test_gcm_k[i].c.size/4;
len2 = test_gcm_k[i].t.size/4;
SHOW_DATA(cypher,len1);
SHOW_DATA(authtag,len2);
ref = (uint32_t*)test_gcm_k[i].c.data;
for (uint8_t i = 0; i < len1; i++) {
test_assert(ref[i] == cypher[i], "c mismatch");
}
ref = (uint32_t*)test_gcm_k[i].t.data;
for (uint8_t i = 0; i < len2; i++) {
test_assert(ref[i] == authtag[i], "t mismatch");
}
}
/* Decrypt.*/
{
memset(plaintext, 0, test_gcm_k[i].p.size);
ret = cryDecryptAES_GCM(&CRYD1,
0,
test_gcm_k[i].c.size,
(uint8_t*)cypher,
(uint8_t*)plaintext,
test_gcm_k[i].iv.data,
test_gcm_k[i].aad.size,
test_gcm_k[i].aad.data,
(uint8_t*)authtag);
test_assert(ret == CRY_NOERROR, "failed decryption");
len1 = test_gcm_k[i].p.size/4;
SHOW_DATA(plaintext,len1);
ref = (uint32_t*)test_gcm_k[i].p.data;
for (uint8_t i = 0; i < len1; i++) {
test_assert(ref[i] == plaintext[i], "decrypt plain mismatch");
}
}
}
]]></value>
</code>
</step>
</steps>
</case>
</cases>
</sequence>
<sequence>
<type index="0">
<value>Internal Tests</value>
</type>
<brief>
<value>HMAC</value>
</brief>
<description>
<value>HMAC testing</value>
</description>
<condition>
<value />
</condition>
<shared_code>
<value><![CDATA[
#include <string.h>
#include "ref_hmac.h"
#define plaintext msg_clear
#define HMACOUT msg_encrypted
#define shabuffer msg_decrypted
#define MAX_SHA_BLOCK_SIZE TEST_MSG_DATA_BYTE_LEN
#define MAX_SHA_BLOCK_SIZE_INWORD (MAX_SHA_BLOCK_SIZE/4)
static const CRYConfig config_Polling=
{
TRANSFER_POLLING,
0
};
static const CRYConfig config_DMA=
{
TRANSFER_DMA,
0
};
static const int hmackeys_size[]=
{
20,
4,
20
};
static const uint8_t hmackey_1[]=
{
0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,
0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,
};
// "Hi There",
static const uint8_t hmacmsg1[8]= "Hi There";
static const size_t hmacmsg_size[]=
{
8,
};
static void cryHMAC256(CRYDriver *cryp) {
cryerror_t ret;
HMACSHA256Context hmacshactxp;
uint8_t *keyp;
hmacshactxp.shacontext.sha.sha_buffer = (uint8_t*)&shabuffer[0];
hmacshactxp.shacontext.sha.sha_buffer_size = MAX_SHA_BLOCK_SIZE;
keyp =(uint8_t *)hmackey_1;
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_hmac,hmackeys_size[0], keyp);
test_assert(ret == CRY_NOERROR, "failed load transient key");
ret = cryHMACSHA256Init(cryp,&hmacshactxp);
test_assert(ret == CRY_NOERROR, "failed init HMACSHA256");
ret = cryHMACSHA256Update(cryp,&hmacshactxp,hmacmsg_size[0],(const uint8_t *)&hmacmsg1);
test_assert(ret == CRY_NOERROR, "failed update HMACSHA256");
ret = cryHMACSHA256Final(cryp,&hmacshactxp,(uint8_t *)HMACOUT);
test_assert(ret == CRY_NOERROR, "failed final HMACSHA256");
SHOW_DATA(HMACOUT,8);
}
static void cryHMAC512(CRYDriver *cryp) {
cryerror_t ret;
HMACSHA512Context hmacshactxp;
uint8_t *keyp;
hmacshactxp.shacontext.sha.sha_buffer = (uint8_t*)&shabuffer[0];
hmacshactxp.shacontext.sha.sha_buffer_size = MAX_SHA_BLOCK_SIZE;
keyp =(uint8_t *)hmackey_1;
ret = cryLoadTransientKey(&CRYD1, (cryalgorithm_t) cry_algo_hmac,hmackeys_size[0], keyp);
test_assert(ret == CRY_NOERROR, "failed load transient key");
ret = cryHMACSHA512Init(cryp,&hmacshactxp);
test_assert(ret == CRY_NOERROR, "failed init HMACSHA512");
ret = cryHMACSHA512Update(cryp,&hmacshactxp,hmacmsg_size[0],(const uint8_t *)&hmacmsg1);
test_assert(ret == CRY_NOERROR, "failed update HMACSHA512");
ret = cryHMACSHA512Final(cryp,&hmacshactxp,(uint8_t *)HMACOUT);
test_assert(ret == CRY_NOERROR, "failed final HMACSHA512");
SHOW_DATA(HMACOUT,16);
}
]]></value>
</shared_code>
<cases>
<case>
<brief>
<value>HMAC Polling</value>
</brief>
<description>
<value>testing HMAC in polled mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memset(HMACOUT, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &config_Polling);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>hmac 256</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
cryHMAC256(&CRYD1);
for (int i = 0; i < 8; i++) {
test_assert(HMACOUT[i] == ((uint32_t*) refHMAC_HMAC256_1)[i], "hmac mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>hmac 512</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
cryHMAC512(&CRYD1);
for (int i = 0; i < 16; i++) {
test_assert(HMACOUT[i] == ((uint32_t*) refHMAC_HMAC512_1)[i], "hmac mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
<case>
<brief>
<value>HMAC DMA</value>
</brief>
<description>
<value>testing HMAC in DMA mode</value>
</description>
<condition>
<value />
</condition>
<various_code>
<setup_code>
<value><![CDATA[
memset(HMACOUT, 0xff, TEST_MSG_DATA_BYTE_LEN);
cryStart(&CRYD1, &config_DMA);
]]></value>
</setup_code>
<teardown_code>
<value><![CDATA[cryStop(&CRYD1);]]></value>
</teardown_code>
<local_variables>
<value><![CDATA[
]]></value>
</local_variables>
</various_code>
<steps>
<step>
<description>
<value>hmac 256</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
cryHMAC256(&CRYD1);
for (int i = 0; i < 8; i++) {
test_assert(HMACOUT[i] == ((uint32_t*) refHMAC_HMAC256_1)[i], "hmac mismatch");
}
]]></value>
</code>
</step>
<step>
<description>
<value>hmac 512</value>
</description>
<tags>
<value />
</tags>
<code>
<value><![CDATA[
cryHMAC512(&CRYD1);
for (int i = 0; i < 16; i++) {
test_assert(HMACOUT[i] == ((uint32_t*) refHMAC_HMAC512_1)[i], "hmac mismatch");
}
]]></value>
</code>
</step>
</steps>
</case>
</cases>
</sequence>
</sequences>
</instance>
</instances>
<exportedFeatures />
</application>
</SPC5-Config>