| /* |
| * Copyright 2020 NXP |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** @file |
| * |
| * test_Crypto.c: *The purpose and scope of this file* |
| * |
| * Project: SecureIoTMW-Debug@simw-top-eclipse_x86 |
| * |
| * $Date: March 03, 2020 $ |
| * $Author: ing05193 $ |
| * $Revision$ |
| */ |
| |
| /* ***************************************************************************************************************** |
| * Includes |
| * ***************************************************************************************************************** */ |
| |
| #include "test_Crypto.h" |
| |
| |
| /* ***************************************************************************************************************** |
| * Internal Definitions |
| * ***************************************************************************************************************** */ |
| |
| /* ***************************************************************************************************************** |
| * Type Definitions |
| * ***************************************************************************************************************** */ |
| #define AES_BLOCK_SIZE 16 |
| |
| /* ***************************************************************************************************************** |
| * Global and Static Variables |
| * ***************************************************************************************************************** */ |
| uint8_t AES_key[16] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; /*HELLOHELLOHELLO1*/ |
| |
| #define TEST_ROOT_FOLDER "." |
| |
| |
| /* Test Function */ |
| |
| typedef struct TestFunction |
| { |
| const char *name; |
| sss_status_t (*fpTestFunction)(struct userCtx *pUserCtx); |
| } TestFunction_t; |
| |
| /* ***************************************************************************************************************** |
| * Private Functions Prototypes |
| * ***************************************************************************************************************** */ |
| static sss_status_t test_session_open_host(userCtx_t *pUserCtx); |
| static sss_status_t test_Init_keyStore_keyObject(userCtx_t *pUserCtx); |
| static sss_status_t test_get_random_number(userCtx_t *pUserCtx); |
| static sss_status_t test_aes_cbc_encrypt_algo_TC1(userCtx_t *pUserCtx); |
| static sss_status_t test_aes_cbc_encrypt_algo_TC2(userCtx_t *pUserCtx); |
| static sss_status_t test_aes_cbc_decrypt_algo_TC1(userCtx_t *pUserCtx); |
| static sss_status_t test_aes_cbc_decrypt_algo_TC2(userCtx_t *pUserCtx); |
| static sss_status_t test_mac_one_go_algo(userCtx_t *pUserCtx); |
| |
| static sss_status_t test_cbc_encdec_algo(userCtx_t *pUserCtx, |
| const uint8_t* expectedData, |
| sss_mode_t mode, |
| const uint8_t* srcData, |
| size_t srcDataLen, |
| uint8_t* destData, |
| size_t destDataLen |
| ); |
| |
| extern sss_status_t test_mac_multiStep_algo_mmm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mmz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mmp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mmq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mzm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mzz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mzp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mzq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mpm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mpz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mpp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mpq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mqm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mqz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mqp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_mqq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zmm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zmz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zmp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zmq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zzm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zzz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zzp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zzq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zpm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zpz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zpp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zpq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zqm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zqz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zqp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_zqq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pmm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pmz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pmp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pmq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pzm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pzz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pzp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pzq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_ppm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_ppz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_ppp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_ppq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pqm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pqz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pqp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_pqq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qmm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qmz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qmp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qmq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qzm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qzz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qzp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qzq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qpm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qpz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qpp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qpq(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qqm(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qqz(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qqp(userCtx_t *pUserCtx); |
| extern sss_status_t test_mac_multiStep_algo_qqq(userCtx_t *pUserCtx); |
| |
| static sss_status_t test_session_close_host(userCtx_t *pUserCtx); |
| |
| const TestFunction_t test_functions[] = { |
| {"Open Host Session", &test_session_open_host}, |
| {"Init Key Store and Object", &test_Init_keyStore_keyObject}, |
| {"Get Random Number", &test_get_random_number}, |
| { "AES CBC Encrypt TC1", &test_aes_cbc_encrypt_algo_TC1 }, |
| {"AES CBC Encrypt TC2", &test_aes_cbc_encrypt_algo_TC2}, |
| {"AES CBC Decrypt TC1", &test_aes_cbc_decrypt_algo_TC1 }, |
| {"AES CBC Decrypt TC2", &test_aes_cbc_decrypt_algo_TC2}, |
| {"MAC One Go", &test_mac_one_go_algo}, |
| {"MAC Multi Step 1[mmm]", &test_mac_multiStep_algo_mmm}, |
| {"MAC Multi Step 2[mmz]", &test_mac_multiStep_algo_mmz}, |
| {"MAC Multi Step 3[mmp]", &test_mac_multiStep_algo_mmp}, |
| {"MAC Multi Step 4[mmq]", &test_mac_multiStep_algo_mmq}, |
| {"MAC Multi Step 5[mzm]", &test_mac_multiStep_algo_mzm}, |
| {"MAC Multi Step 6[mzz]", &test_mac_multiStep_algo_mzz}, |
| {"MAC Multi Step 7[mzp]", &test_mac_multiStep_algo_mzp}, |
| {"MAC Multi Step 8[mzq]", &test_mac_multiStep_algo_mzq}, |
| {"MAC Multi Step 9[mpm]", &test_mac_multiStep_algo_mpm}, |
| {"MAC Multi Step 10[mpz]", &test_mac_multiStep_algo_mpz}, |
| {"MAC Multi Step 11[mpp]", &test_mac_multiStep_algo_mpp}, |
| {"MAC Multi Step 12[mpq]", &test_mac_multiStep_algo_mpq}, |
| {"MAC Multi Step 13[mqm]", &test_mac_multiStep_algo_mqm}, |
| {"MAC Multi Step 14[mqz]", &test_mac_multiStep_algo_mqz}, |
| {"MAC Multi Step 15[mqp]", &test_mac_multiStep_algo_mqp}, |
| {"MAC Multi Step 16[mqq]", &test_mac_multiStep_algo_mqq}, |
| {"MAC Multi Step 17[zmm]", &test_mac_multiStep_algo_zmm}, |
| {"MAC Multi Step 18[zmz]", &test_mac_multiStep_algo_zmz}, |
| {"MAC Multi Step 19[zmp]", &test_mac_multiStep_algo_zmp}, |
| {"MAC Multi Step 20[zmq]", &test_mac_multiStep_algo_zmq}, |
| {"MAC Multi Step 21[zzm]", &test_mac_multiStep_algo_zzm}, |
| {"MAC Multi Step 22[zzz]", &test_mac_multiStep_algo_zzz}, |
| {"MAC Multi Step 23[zzp]", &test_mac_multiStep_algo_zzp}, |
| {"MAC Multi Step 24[zzq]", &test_mac_multiStep_algo_zzq}, |
| {"MAC Multi Step 25[zpm]", &test_mac_multiStep_algo_zpm}, |
| {"MAC Multi Step 26[zpz]", &test_mac_multiStep_algo_zpz}, |
| {"MAC Multi Step 27[zpp]", &test_mac_multiStep_algo_zpp}, |
| {"MAC Multi Step 28[zpq]", &test_mac_multiStep_algo_zpq}, |
| {"MAC Multi Step 29[zqm]", &test_mac_multiStep_algo_zqm}, |
| {"MAC Multi Step 30[zqz]", &test_mac_multiStep_algo_zqz}, |
| {"MAC Multi Step 31[zqp]", &test_mac_multiStep_algo_zqp}, |
| {"MAC Multi Step 32[zqq]", &test_mac_multiStep_algo_zqq}, |
| {"MAC Multi Step 33[pmm]", &test_mac_multiStep_algo_pmm}, |
| {"MAC Multi Step 34[pmz]", &test_mac_multiStep_algo_pmz}, |
| {"MAC Multi Step 35[pmp]", &test_mac_multiStep_algo_pmp}, |
| {"MAC Multi Step 36[pmq]", &test_mac_multiStep_algo_pmq}, |
| {"MAC Multi Step 37[pzm]", &test_mac_multiStep_algo_pzm}, |
| {"MAC Multi Step 38[pzz]", &test_mac_multiStep_algo_pzz}, |
| {"MAC Multi Step 39[pzp]", &test_mac_multiStep_algo_pzp}, |
| {"MAC Multi Step 40[pzq]", &test_mac_multiStep_algo_pzq}, |
| {"MAC Multi Step 41[ppm]", &test_mac_multiStep_algo_ppm}, |
| {"MAC Multi Step 42[ppz]", &test_mac_multiStep_algo_ppz}, |
| {"MAC Multi Step 43[ppp]", &test_mac_multiStep_algo_ppp}, |
| {"MAC Multi Step 44[ppq]", &test_mac_multiStep_algo_ppq}, |
| {"MAC Multi Step 45[pqm]", &test_mac_multiStep_algo_pqm}, |
| {"MAC Multi Step 46[pqz]", &test_mac_multiStep_algo_pqz}, |
| {"MAC Multi Step 47[pqp]", &test_mac_multiStep_algo_pqp}, |
| {"MAC Multi Step 48[pqq]", &test_mac_multiStep_algo_pqq}, |
| {"MAC Multi Step 49[qmm]", &test_mac_multiStep_algo_qmm}, |
| {"MAC Multi Step 50[qmz]", &test_mac_multiStep_algo_qmz}, |
| {"MAC Multi Step 51[qmp]", &test_mac_multiStep_algo_qmp}, |
| {"MAC Multi Step 52[qmq]", &test_mac_multiStep_algo_qmq}, |
| {"MAC Multi Step 53[qzm]", &test_mac_multiStep_algo_qzm}, |
| {"MAC Multi Step 54[qzz]", &test_mac_multiStep_algo_qzz}, |
| {"MAC Multi Step 55[qzp]", &test_mac_multiStep_algo_qzp}, |
| {"MAC Multi Step 56[qzq]", &test_mac_multiStep_algo_qzq}, |
| {"MAC Multi Step 57[qpm]", &test_mac_multiStep_algo_qpm}, |
| {"MAC Multi Step 58[qpz]", &test_mac_multiStep_algo_qpz}, |
| {"MAC Multi Step 59[qpp]", &test_mac_multiStep_algo_qpp}, |
| {"MAC Multi Step 60[qpq]", &test_mac_multiStep_algo_qpq}, |
| {"MAC Multi Step 61[qqm]", &test_mac_multiStep_algo_qqm}, |
| {"MAC Multi Step 62[qqz]", &test_mac_multiStep_algo_qqz}, |
| {"MAC Multi Step 63[qqp]", &test_mac_multiStep_algo_qqp}, |
| {"MAC Multi Step 64[qqq]", &test_mac_multiStep_algo_qqq}, |
| {"Close Host Session", &test_session_close_host}, |
| |
| {NULL, NULL}, |
| }; |
| |
| /* ***************************************************************************************************************** |
| * Public Functions |
| * ***************************************************************************************************************** */ |
| |
| int main(int argc, const char *argv[]) |
| { |
| int ret = 0; |
| sss_status_t status = kStatus_SSS_Fail; |
| const TestFunction_t *pTF = NULL; |
| userCtx_t userCtx; |
| userCtx_t *pUserCtx = &userCtx; |
| for (pTF = &test_functions[0]; pTF->name != NULL; pTF++) { |
| printf("\n"); |
| LOG_W("########################################################"); |
| LOG_W("# Running: %-43s #", pTF->name); |
| status = pTF->fpTestFunction(pUserCtx); |
| if (status != kStatus_SSS_Success) { |
| LOG_E("Failed."); |
| break; |
| } |
| else { |
| LOG_I("Success!"); |
| } |
| } |
| |
| return ret; |
| } |
| |
| |
| |
| /* ***************************************************************************************************************** |
| * Private Functions |
| * ***************************************************************************************************************** */ |
| static sss_status_t test_session_open_host(userCtx_t *pUserCtx) |
| { |
| sss_status_t status = kStatus_SSS_Fail; |
| sss_type_t subsystem; |
| |
| // Must be software only. |
| subsystem = kType_SSS_Software; |
| |
| status = sss_host_session_open(&pUserCtx->session, |
| subsystem, |
| 0, |
| kSSS_ConnectionType_Plain, |
| TEST_ROOT_FOLDER); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("User Session Open Failed!!!"); |
| } |
| |
| |
| return status; |
| } |
| |
| static sss_status_t test_session_close_host(userCtx_t *pUserCtx) |
| { |
| sss_status_t status = kStatus_SSS_Success; |
| sss_host_session_close(&pUserCtx->session); |
| return status; |
| } |
| |
| static sss_status_t test_Init_keyStore_keyObject(userCtx_t *pUserCtx) |
| { |
| sss_status_t status = kStatus_SSS_Fail; |
| |
| status = sss_host_key_store_context_init(&pUserCtx->ks, &pUserCtx->session); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("User key_store_context_init Failed!!!"); |
| goto exit; |
| } |
| status = sss_host_key_store_allocate(&pUserCtx->ks, __LINE__); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("User key_store_allocate Failed!!!"); |
| goto exit; |
| } |
| status = sss_host_key_object_init(&pUserCtx->key, &pUserCtx->ks); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("User key_object Failed!!!"); |
| goto exit; |
| } |
| exit: |
| sss_host_key_object_free(&pUserCtx->key); |
| sss_host_key_store_context_free(&pUserCtx->ks); |
| return status; |
| } |
| |
| static sss_status_t test_get_random_number(userCtx_t *pUserCtx) |
| { |
| sss_status_t status = kStatus_SSS_Fail; |
| uint8_t rndData[32] = { 0 }; |
| size_t rndDataLen = sizeof(rndData); |
| |
| status = sss_host_rng_context_init(&pUserCtx->rng, &pUserCtx->session); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("User rng_context_init Failed!!!"); |
| goto exit; |
| } |
| |
| status = sss_host_rng_get_random(&pUserCtx->rng, rndData, rndDataLen); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("User rng_get_random Failed!!!"); |
| goto exit; |
| } |
| LOG_AU8_I(rndData, rndDataLen); |
| sss_host_rng_context_free(&pUserCtx->rng); |
| |
| exit: |
| return status; |
| } |
| |
| static sss_status_t test_aes_cbc_encrypt_algo_TC1(userCtx_t *pUserCtx) |
| { |
| sss_status_t status = kStatus_SSS_Fail; |
| sss_mode_t mode = kMode_SSS_Encrypt; |
| /* clang-format off */ |
| const uint8_t srcData[16] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; /*HELLOHELLOHELLO1*/ |
| uint8_t expectedData[16] = { 0x32, 0xA6, 0x04, 0x88, 0xC5, 0xB3, 0xFF, 0x40, 0x50, 0xAF, 0x56, 0xA5, 0x68, 0xAE, 0xD1, 0x05 }; |
| /* clang-format on */ |
| uint8_t destData[16] = { 0, }; |
| size_t destDataLen = sizeof(destData); |
| size_t srcDataLen = sizeof(srcData); |
| status = test_cbc_encdec_algo(pUserCtx, |
| expectedData, |
| mode, |
| srcData, |
| srcDataLen, |
| destData, |
| destDataLen |
| ); |
| return status; |
| } |
| |
| static sss_status_t test_aes_cbc_encrypt_algo_TC2(userCtx_t *pUserCtx) |
| { |
| sss_status_t status = kStatus_SSS_Fail; |
| sss_mode_t mode = kMode_SSS_Encrypt; |
| /* clang-format off */ |
| const uint8_t srcData[] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31, |
| 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; |
| uint8_t expectedData[32] = { 0x32,0xA6,0x04,0x88,0xC5,0xB3,0xFF,0x40,0x50,0xAF,0x56,0xA5,0x68,0xAE,0xD1,0x05,0x90, |
| 0xCF,0x97,0xC3,0xCD,0x9E,0xC0,0x70,0x02,0xAD,0x9C,0x04,0x1B,0x90,0x3A,0x64 }; |
| /* clang-format on */ |
| size_t srcDataLen = sizeof(srcData); |
| uint8_t destData[32] = { 0, }; |
| size_t destDataLen = sizeof(destData); |
| status = test_cbc_encdec_algo(pUserCtx, |
| expectedData, |
| mode, |
| srcData, |
| srcDataLen, |
| destData, |
| destDataLen |
| ); |
| return status; |
| } |
| |
| static sss_status_t test_aes_cbc_decrypt_algo_TC1(userCtx_t *pUserCtx) |
| { |
| sss_status_t status = kStatus_SSS_Fail; |
| sss_mode_t mode = kMode_SSS_Decrypt; |
| /* clang-format off */ |
| const uint8_t srcData[16] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; /*HELLOHELLOHELLO1*/ |
| uint8_t expectedData[16] = { 0x33, 0x34, 0x9A, 0x07, 0xEA, 0x1C, 0xF6, 0xAC, 0x7F, 0x35, 0x00, 0x9A, 0x22, 0xBC, 0x8A, 0x16 }; |
| /* clang-format on */ |
| size_t srcDataLen = sizeof(srcData); |
| |
| uint8_t destData[16] = { 0, }; |
| size_t destDataLen = sizeof(destData); |
| |
| status = test_cbc_encdec_algo(pUserCtx, |
| expectedData, |
| mode, |
| srcData, |
| srcDataLen, |
| destData, |
| destDataLen |
| ); |
| return status; |
| |
| } |
| static sss_status_t test_aes_cbc_decrypt_algo_TC2(userCtx_t *pUserCtx) |
| { |
| sss_status_t status = kStatus_SSS_Fail; |
| sss_mode_t mode = kMode_SSS_Decrypt; |
| /* clang-format off */ |
| const uint8_t srcData[32] = { 0x48,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31, |
| 0x48,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; |
| uint8_t expectedData[32] = { 0x33,0x34,0x9A,0x07,0xEA,0x1C,0xF6,0xAC,0x7F,0x35,0x00,0x9A,0x22,0xBC,0x8A, |
| 0x16,0x7B,0x71,0xD6,0x4B,0xA5,0x54,0xB3,0xE0,0x33,0x7A,0x48,0xDF,0x6E,0xF0,0xC5,0x27 }; |
| /* clang-format on */ |
| size_t srcDataLen = sizeof(srcData); |
| |
| uint8_t destData[32] = { 0, }; |
| size_t destDataLen = sizeof(destData); |
| |
| status = test_cbc_encdec_algo(pUserCtx, |
| expectedData, |
| mode, |
| srcData, |
| srcDataLen, |
| destData, |
| destDataLen |
| ); |
| return status; |
| |
| } |
| |
| static sss_status_t test_cbc_encdec_algo(userCtx_t *pUserCtx, |
| const uint8_t* expectedData, |
| sss_mode_t mode, |
| const uint8_t* srcData, |
| size_t srcDataLen, |
| uint8_t* destData, |
| size_t destDataLen |
| ) |
| { |
| sss_status_t status = kStatus_SSS_Fail; |
| sss_algorithm_t algorithm = kAlgorithm_SSS_AES_CBC; |
| sss_key_part_t keyPart = kSSS_KeyPart_Default; |
| sss_cipher_type_t cipherType = kSSS_CipherType_AES; |
| |
| uint8_t iv[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; |
| size_t ivlen = sizeof(iv); |
| uint8_t count = 0; |
| |
| status = sss_host_key_object_allocate_handle(&pUserCtx->key, |
| __LINE__, |
| keyPart, |
| cipherType, |
| 16, |
| kKeyObject_Mode_Transient); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("Userkey_object_allocate_handle Failed!!!"); |
| goto exit; |
| } |
| |
| status = sss_host_key_store_set_key(&pUserCtx->ks, |
| &pUserCtx->key, |
| AES_key, |
| sizeof(AES_key), |
| sizeof(AES_key) * 8, |
| NULL, |
| 0); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("Userkey_set_key Failed!!!"); |
| goto exit; |
| } |
| |
| status = sss_host_symmetric_context_init( |
| &pUserCtx->symm, &pUserCtx->session, &pUserCtx->key, algorithm, mode); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("Userkey_symmetric_context_init Failed!!!"); |
| goto exit; |
| } |
| |
| status = sss_host_cipher_one_go( |
| &pUserCtx->symm, iv, ivlen, srcData, destData, destDataLen); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("Userkey_cipher_one_go Failed!!!"); |
| goto exit; |
| } |
| LOG_AU8_I(destData, destDataLen); |
| for (count = 0;count < destDataLen;count++) |
| { |
| if (destData[count] != expectedData[count]) |
| { |
| LOG_E("Crypto results are wrong cipher_one_go !!!"); |
| status = kStatus_SSS_Fail; |
| break; |
| } |
| } |
| |
| exit: |
| sss_host_key_object_free(&pUserCtx->key); |
| sss_host_symmetric_context_free(&pUserCtx->symm); |
| sss_host_key_store_context_free(&pUserCtx->ks); |
| return status; |
| |
| } |
| |
| |
| |
| sss_status_t test_mac_one_go_algo(userCtx_t *pUserCtx) |
| { |
| sss_status_t status = kStatus_SSS_Fail; |
| sss_key_part_t keyPart = kSSS_KeyPart_Default; |
| sss_cipher_type_t cipherType = kSSS_CipherType_AES; |
| sss_algorithm_t algorithm = kAlgorithm_SSS_CMAC_AES; |
| sss_mode_t mode = kMode_SSS_Mac; |
| /* clang-format off */ |
| const uint8_t srcData[] = { 0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a }; |
| const uint8_t keystring[] = { 0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c }; |
| const uint8_t expectedData[] = { 0x07,0x0a,0x16,0xb4,0x6b,0x4d,0x41,0x44,0xf7,0x9b,0xdd,0x9d,0xd0,0x4a,0x28,0x7c }; |
| uint8_t outdata[256]; |
| size_t outdatLen = sizeof(outdata); |
| uint8_t count = 0; |
| /* clang-format on */ |
| |
| status = sss_host_key_object_allocate_handle(&pUserCtx->key, |
| __LINE__, |
| keyPart, |
| cipherType, |
| 16, |
| kKeyObject_Mode_Transient); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("Userkey_key_object_alloc_mac_one_go Failed!!!"); |
| goto exit; |
| } |
| |
| status = sss_host_key_store_set_key(&pUserCtx->ks, |
| &pUserCtx->key, |
| keystring, |
| sizeof(keystring), |
| sizeof(keystring) * 8, |
| NULL, |
| 0); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("Userkey_set_key_mac_one_go Failed!!!"); |
| goto exit; |
| } |
| |
| status = sss_host_mac_context_init( |
| &pUserCtx->mac, &pUserCtx->session, &pUserCtx->key, algorithm, mode); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("Userkey_mac_init Failed !!!"); |
| goto exit; |
| } |
| |
| status = sss_host_mac_one_go( |
| &pUserCtx->mac, srcData, sizeof(srcData), outdata, &outdatLen); |
| if (status != kStatus_SSS_Success) |
| { |
| LOG_E("Userkey_mac_one_go Failed!!!"); |
| goto exit; |
| } |
| |
| LOG_AU8_I(outdata, outdatLen); |
| for (count = 0;count < outdatLen;count++) |
| { |
| if (outdata[count] != expectedData[count]) |
| { |
| LOG_E("Crypto results are wrong mac_one_go !!!"); |
| status = kStatus_SSS_Fail; |
| break; |
| } |
| } |
| |
| exit: |
| sss_host_key_object_free(&pUserCtx->key); |
| sss_host_mac_context_free(&pUserCtx->mac); |
| sss_host_key_store_context_free(&pUserCtx->ks); |
| return status; |
| |
| } |