From 388c0bb327ef06a5cda4bb0d33791451a6d6b2bf Mon Sep 17 00:00:00 2001 From: areviu Date: Sun, 3 Dec 2017 11:17:37 +0000 Subject: added SHA in dma mode git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11115 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- test/crypto/configuration.xml | 279 ++++++++++++++++++++++ test/crypto/crypto_test.mk | 3 +- test/crypto/source/test/cry_test_root.c | 2 + test/crypto/source/test/cry_test_root.h | 1 + test/crypto/source/test/cry_test_sequence_007.c | 295 ++++++++++++++++++++++++ test/crypto/source/test/cry_test_sequence_007.h | 27 +++ 6 files changed, 606 insertions(+), 1 deletion(-) create mode 100644 test/crypto/source/test/cry_test_sequence_007.c create mode 100644 test/crypto/source/test/cry_test_sequence_007.h (limited to 'test') diff --git a/test/crypto/configuration.xml b/test/crypto/configuration.xml index 4d5edd304..1970465fe 100644 --- a/test/crypto/configuration.xml +++ b/test/crypto/configuration.xml @@ -2677,6 +2677,285 @@ for (int i = 0; i < 16; i++) { + + + + Internal Tests + + + SHA + + + SHA testing + + + + + + +#include "ref_sha.h" + +#define MAX_DIGEST_SIZE_INBYTE 64 +#define MAX_DIGEST_SIZE_INWORD (MAX_DIGEST_SIZE_INBYTE/4) +static uint32_t digest[MAX_DIGEST_SIZE_INWORD]; + +static const CRYConfig configSHA_DMA= +{ + TRANSFER_DMA, + 0, + 0 +}; + + ]]> + + + + + SHA1 DMA + + + testing SHA1 in DMA mode + + + + + + + + + + + + + + + + + + + + Digest + + + + + + + + + + + + + + + + + + + SHA256 DMA + + + testing SHA256 in DMA mode + + + + + + + + + + + + + + + + + + + + Digest + + + + + + + + + + + + + + + + + + SHA512 DMA + + + testing SHA512 in DMA mode + + + + + + + + + + + + + + + + + + + + Digest + + + + + + + + + + + + + + + + + diff --git a/test/crypto/crypto_test.mk b/test/crypto/crypto_test.mk index efd7faf88..0d7310271 100644 --- a/test/crypto/crypto_test.mk +++ b/test/crypto/crypto_test.mk @@ -8,7 +8,8 @@ TESTSRC += ${CHIBIOS}/test/crypto/source/test/cry_test_root.c \ ${CHIBIOS}/test/crypto/source/test/cry_test_sequence_003.c \ ${CHIBIOS}/test/crypto/source/test/cry_test_sequence_004.c \ ${CHIBIOS}/test/crypto/source/test/cry_test_sequence_005.c \ - ${CHIBIOS}/test/crypto/source/test/cry_test_sequence_006.c + ${CHIBIOS}/test/crypto/source/test/cry_test_sequence_006.c \ + ${CHIBIOS}/test/crypto/source/test/cry_test_sequence_007.c # Required include directories TESTINC += ${CHIBIOS}/test/crypto/source/testref \ ${CHIBIOS}/test/crypto/source/test diff --git a/test/crypto/source/test/cry_test_root.c b/test/crypto/source/test/cry_test_root.c index bd176b409..77d07a822 100644 --- a/test/crypto/source/test/cry_test_root.c +++ b/test/crypto/source/test/cry_test_root.c @@ -27,6 +27,7 @@ * - @subpage cry_test_sequence_004 * - @subpage cry_test_sequence_005 * - @subpage cry_test_sequence_006 + * - @subpage cry_test_sequence_007 * . */ @@ -54,6 +55,7 @@ const testsequence_t * const cry_test_suite_array[] = { &cry_test_sequence_004, &cry_test_sequence_005, &cry_test_sequence_006, + &cry_test_sequence_007, NULL }; diff --git a/test/crypto/source/test/cry_test_root.h b/test/crypto/source/test/cry_test_root.h index 24842646f..18fa28074 100644 --- a/test/crypto/source/test/cry_test_root.h +++ b/test/crypto/source/test/cry_test_root.h @@ -30,6 +30,7 @@ #include "cry_test_sequence_004.h" #include "cry_test_sequence_005.h" #include "cry_test_sequence_006.h" +#include "cry_test_sequence_007.h" #if !defined(__DOXYGEN__) diff --git a/test/crypto/source/test/cry_test_sequence_007.c b/test/crypto/source/test/cry_test_sequence_007.c new file mode 100644 index 000000000..af114650f --- /dev/null +++ b/test/crypto/source/test/cry_test_sequence_007.c @@ -0,0 +1,295 @@ +/* + ChibiOS - Copyright (C) 2006..2017 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. +*/ + +#include "hal.h" +#include "cry_test_root.h" + +/** + * @file cry_test_sequence_007.c + * @brief Test Sequence 007 code. + * + * @page cry_test_sequence_007 [7] SHA + * + * File: @ref cry_test_sequence_007.c + * + *

Description

+ * SHA testing. + * + *

Test Cases

+ * - @subpage cry_test_007_001 + * - @subpage cry_test_007_002 + * - @subpage cry_test_007_003 + * . + */ + +/**************************************************************************** + * Shared code. + ****************************************************************************/ + +#include +#include "ref_sha.h" + +#define MAX_DIGEST_SIZE_INBYTE 64 +#define MAX_DIGEST_SIZE_INWORD (MAX_DIGEST_SIZE_INBYTE/4) +static uint32_t digest[MAX_DIGEST_SIZE_INWORD]; + +static const CRYConfig configSHA_DMA= +{ + TRANSFER_DMA, + 0, + 0 +}; + + + +/**************************************************************************** + * Test cases. + ****************************************************************************/ + +/** + * @page cry_test_007_001 [7.1] SHA1 DMA + * + *

Description

+ * testing SHA1 in DMA mode. + * + *

Test Steps

+ * - [7.1.1] Digest. + * . + */ + +static void cry_test_007_001_setup(void) { + 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); + + +} + +static void cry_test_007_001_teardown(void) { + cryStop(&CRYD1); +} + +static void cry_test_007_001_execute(void) { + cryerror_t ret; + uint32_t *ref; + + /* [7.1.1] Digest.*/ + test_set_step(1); + { + //---- 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 + 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"); + } + + + } +} + +static const testcase_t cry_test_007_001 = { + "SHA1 DMA", + cry_test_007_001_setup, + cry_test_007_001_teardown, + cry_test_007_001_execute +}; + +/** + * @page cry_test_007_002 [7.2] SHA256 DMA + * + *

Description

+ * testing SHA256 in DMA mode. + * + *

Test Steps

+ * - [7.2.1] Digest. + * . + */ + +static void cry_test_007_002_setup(void) { + 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); + + +} + +static void cry_test_007_002_teardown(void) { + cryStop(&CRYD1); +} + +static void cry_test_007_002_execute(void) { + cryerror_t ret; + uint32_t *ref; + + /* [7.2.1] Digest.*/ + test_set_step(1); + { + + //---- 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 + 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 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 digest mismatch"); + } + + + } +} + +static const testcase_t cry_test_007_002 = { + "SHA256 DMA", + cry_test_007_002_setup, + cry_test_007_002_teardown, + cry_test_007_002_execute +}; + +/** + * @page cry_test_007_003 [7.3] SHA512 DMA + * + *

Description

+ * testing SHA512 in DMA mode. + * + *

Test Steps

+ * - [7.3.1] Digest. + * . + */ + +static void cry_test_007_003_setup(void) { + 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); + + +} + +static void cry_test_007_003_teardown(void) { + cryStop(&CRYD1); +} + +static void cry_test_007_003_execute(void) { + cryerror_t ret; + uint32_t *ref; + + /* [7.3.1] Digest.*/ + test_set_step(1); + { + //---- 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 + 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 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 digest mismatch"); + } + + + } +} + +static const testcase_t cry_test_007_003 = { + "SHA512 DMA", + cry_test_007_003_setup, + cry_test_007_003_teardown, + cry_test_007_003_execute +}; + +/**************************************************************************** + * Exported data. + ****************************************************************************/ + +/** + * @brief Array of test cases. + */ +const testcase_t * const cry_test_sequence_007_array[] = { + &cry_test_007_001, + &cry_test_007_002, + &cry_test_007_003, + NULL +}; + +/** + * @brief SHA. + */ +const testsequence_t cry_test_sequence_007 = { + "SHA", + cry_test_sequence_007_array +}; diff --git a/test/crypto/source/test/cry_test_sequence_007.h b/test/crypto/source/test/cry_test_sequence_007.h new file mode 100644 index 000000000..fc8471cc3 --- /dev/null +++ b/test/crypto/source/test/cry_test_sequence_007.h @@ -0,0 +1,27 @@ +/* + ChibiOS - Copyright (C) 2006..2017 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. +*/ + +/** + * @file cry_test_sequence_007.h + * @brief Test Sequence 007 header. + */ + +#ifndef CRY_TEST_SEQUENCE_007_H +#define CRY_TEST_SEQUENCE_007_H + +extern const testsequence_t cry_test_sequence_007; + +#endif /* CRY_TEST_SEQUENCE_007_H */ -- cgit v1.2.3