123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- /**
- * Copyright (c) 2017 - 2019, Nordic Semiconductor ASA
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form, except as embedded into a Nordic
- * Semiconductor ASA integrated circuit in a product or a software update for
- * such product, must reproduce the above copyright notice, this list of
- * conditions and the following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
- * contributors may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * 4. This software, with or without modification, must only be used with a
- * Nordic Semiconductor ASA integrated circuit.
- *
- * 5. Any software provided in binary form under this license must not be reverse
- * engineered, decompiled, modified and/or disassembled.
- *
- * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
- #include "ssi_pal_types.h"
- #include "ssi_pal_mem.h"
- #include "sns_silib.h"
- #include "crys_rnd_error.h"
- #include "integration_test_plat_defs.h"
- #include "integration_test_ssi_data.h"
- #include "integration_test_ssi_defs.h"
- /*RND test data vector*/
- extern rndDataStuct rndVectors[];
- /*RND global variables*/
- extern CRYS_RND_State_t* rndState_ptr;
- extern CRYS_RND_WorkBuff_t* rndWorkBuff_ptr;
- /*rnd_test - performs basic integration test for RND module*/
- int rnd_tests(void)
- {
- uint32_t ret = 0/*,MaxVectorSize = 0*/;
- int test_index = 0;
- /*Set additional input for rng seed*/
- ret = CRYS_RND_AddAdditionalInput(rndState_ptr,
- rndVectors[test_index].rndTest_AddInputData,
- rndVectors[test_index].rndTest_AddInputSize);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n CRYS_RND_AddAdditionalInput failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_AddAdditionalInput passed\n");
- /*Reseed rnd using added input (new seed will be generated using additional input)*/
- ret = CRYS_RND_Reseeding (rndState_ptr,
- rndWorkBuff_ptr);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n CRYS_RND_Reseeding failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_Reseeding passed\n");
- /*Generate random vector 1*/
- ret = CRYS_RND_GenerateVector(rndState_ptr,
- rndVectors[test_index].rndTest_RandomVectorSize,
- rndVectors[test_index].rndTest_RandomVectorData1);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVector for vector 1 failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVector for first vector passed\n");
- /*Generate rnadom vector 2*/
- ret = CRYS_RND_GenerateVector(rndState_ptr,
- rndVectors[test_index].rndTest_RandomVectorSize,
- rndVectors[test_index].rndTest_RandomVectorData2);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVector for vector 2 failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVector for second vector passed\n");
- /*Compare two generated vectors - should not be the same value*/
- ret = SaSi_PalMemCmp(rndVectors[test_index].rndTest_RandomVectorData1,
- rndVectors[test_index].rndTest_RandomVectorData2,
- rndVectors[test_index].rndTest_RandomVectorSize);
- if (ret == SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n Two random vectors should not are the same \n");
- return ret;
- }
- INTEG_TEST_PRINT("\n Two generated vectors are different as expected\n");
- /*Generate random vector in range when max value is NULL*/
- ret = CRYS_RND_GenerateVectorInRange(rndState_ptr, CRYS_RND_GenerateVector,
- rndVectors[test_index].rndTest_RandomVectorInRangeSize1,
- NULL,
- rndVectors[test_index].rndTest_RandomVectorInRangeData);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVectorInRange for vector with fixed size failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVectorInRange 1 passed\n");
- /*Generate random vector in range with max vector */
- ret = CRYS_RND_GenerateVectorInRange(rndState_ptr, CRYS_RND_GenerateVector,
- rndVectors[test_index].rndTest_RandomVectorInRangeSize2,
- rndVectors[test_index].rndTest_MaxVectorInRange2,
- rndVectors[test_index].rndTest_RandomVectorInRangeData2);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVectorInRange failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVectorInRange 2 passed\n");
- /*Perform UnInstantiation*/
- ret = CRYS_RND_UnInstantiation(rndState_ptr);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n CRYS_RND_UnInstantiation failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_UnInstantiation passed\n");
- /*Try to create random vector without instantiation - should fail*/
- ret = CRYS_RND_GenerateVector(rndState_ptr,
- rndVectors[test_index].rndTest_RandomVectorSize,
- rndVectors[test_index].rndTest_RandomVectorData2);
- if (ret != CRYS_RND_STATE_VALIDATION_TAG_ERROR){
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVector returned wrong error 0x%x,\n CRYS_RND_STATE_VALIDATION_TAG_ERROR should be returned\n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVector failed as expected\n");
- /*Set additional input for RND seed*/
- ret = CRYS_RND_AddAdditionalInput(rndState_ptr,
- rndVectors[test_index].rndTest_AddInputData,
- rndVectors[test_index].rndTest_AddInputSize);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n CRYS_RND_AddAdditionalInput failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_AddAdditionalInput passed\n");
- /*Perform instantiation for new seed*/
- ret = CRYS_RND_Instantiation(rndState_ptr,
- rndWorkBuff_ptr);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n CRYS_RND_Instantiation failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_Instantiation passed\n");
- /*Try to create two vectors and check that the vectors are different*/
- ret = CRYS_RND_GenerateVector(rndState_ptr,
- rndVectors[test_index].rndTest_RandomVectorSize,
- rndVectors[test_index].rndTest_RandomVectorData1);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVector for vector 1 failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVector 1 passed\n");
- ret = CRYS_RND_GenerateVector(rndState_ptr,
- rndVectors[test_index].rndTest_RandomVectorSize,
- rndVectors[test_index].rndTest_RandomVectorData2);
- if (ret != SA_SILIB_RET_OK){
- INTEG_TEST_PRINT(" CRYS_RND_GenerateVector for vector 2 failed with 0x%x \n",ret);
- return ret;
- }
- INTEG_TEST_PRINT("\n CRYS_RND_GenerateVector 2 passed\n");
- ret = SaSi_PalMemCmp(rndVectors[test_index].rndTest_RandomVectorData1,
- rndVectors[test_index].rndTest_RandomVectorData2,
- rndVectors[test_index].rndTest_RandomVectorSize);
- if (ret == SA_SILIB_RET_OK){
- INTEG_TEST_PRINT(" Two random vectors should not are the same \n");
- return ret;
- }
- INTEG_TEST_PRINT("\n Compare passed\n");
- INTEG_TEST_PRINT("\n All RND tests passed\n");
- INTEG_TEST_PRINT("\n==========================\n");
- ret = SA_SILIB_RET_OK;
- return ret;
- }
- int main(void)
- {
- int ret = 0;
- /*Perform memory mapping*/
- ret = integration_tests_setup();
- if (ret != 0)
- {
- INTEG_TEST_PRINT("integration_tests_setup failed\n");
- return ret;
- }
- /*Init SaSi library*/
- ret = SaSi_LibInit();
- if (ret != SA_SILIB_RET_OK) {
- INTEG_TEST_PRINT("Failed SaSi_LibInit - ret = 0x%x\n", ret);
- goto exit_1;
- }
- ret = CRYS_RndInit(rndState_ptr, rndWorkBuff_ptr);
- if (ret != SA_SILIB_RET_OK) {
- INTEG_TEST_PRINT("Failed CRYS_RndInit - ret = 0x%x\n", ret);
- goto exit_1;
- }
- /*Call ecc test*/
- ret = rnd_tests();
- if (ret != SA_SILIB_RET_OK) {
- INTEG_TEST_PRINT("Failure in rnd_test,ret = 0x%x\n", ret);
- goto exit_0;
- }
- INTEG_TEST_PRINT("All tests passed \n");
- exit_0:
- /*Finish SaSi library*/
- SaSi_LibFini();
- ret = CRYS_RND_UnInstantiation(rndState_ptr);
- if (ret) {
- INTEG_TEST_PRINT("Failure in CRYS_RND_UnInstantiation,ret = 0x%x\n", ret);
- }
- exit_1:
- /*Unmap memory*/
- integration_tests_clear();
- return ret;
- }
|