| /* test_hmac_prng.c - TinyCrypt implementation of some HMAC-PRNG tests */ |
| |
| /* |
| * Copyright (C) 2015 by Intel Corporation, All Rights Reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * |
| * - Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the following disclaimer. |
| * |
| * - Redistributions in binary form 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. |
| * |
| * - Neither the name of Intel Corporation nor the names of its contributors |
| * may be used to endorse or promote products derived from this software |
| * without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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. |
| */ |
| |
| /* |
| * DESCRIPTION |
| * This module tests the following PRNG routines: |
| * |
| * Scenarios tested include: |
| * - HMAC-PRNG init |
| * - HMAC-PRNG reseed |
| * - HMAC-PRNG generate) |
| */ |
| |
| #include <tinycrypt/hmac_prng.h> |
| #include <tinycrypt/constants.h> |
| |
| #include <stdio.h> |
| #include <tc_util.h> |
| #include <drivers/system_timer.h> |
| #include <ztest.h> |
| |
| /* |
| * Main task to test AES |
| */ |
| |
| void test_hmac_prng(void) |
| { |
| /* Fake personalization and additional_input |
| * (replace by appropriate values) |
| * e.g.: hostname+timestamp |
| */ |
| u8_t additional_input[] = "additional input"; |
| u8_t personalization[] = "HOSTNAME"; |
| u32_t size = (1 << 15); |
| struct tc_hmac_prng_struct h; |
| u8_t random[size]; |
| u8_t seed[128]; |
| u32_t i; |
| |
| TC_START("Performing HMAC-PRNG tests:"); |
| TC_PRINT("HMAC-PRNG test#1 (init, reseed, generate):\n"); |
| |
| /* Fake seed (replace by a a truly random seed): */ |
| for (i = 0; i < (u32_t)sizeof(seed); ++i) { |
| seed[i] = i; |
| } |
| |
| TC_PRINT("HMAC-PRNG test#1 (init):\n"); |
| |
| /**TESTPOINT: Check HMAC-PRNG init*/ |
| zassert_true(tc_hmac_prng_init(&h, personalization, |
| sizeof(personalization)), "HMAC-PRNG initialization failed."); |
| |
| TC_PRINT("HMAC-PRNG test#1 (reseed):\n"); |
| |
| /**TESTPOINT: Check HMAC-PRNG reseed*/ |
| zassert_true(tc_hmac_prng_reseed(&h, seed, sizeof(seed), |
| additional_input, sizeof(additional_input)), |
| "HMAC-PRNG reseed failed."); |
| |
| TC_PRINT("HMAC-PRNG test#1 (generate):\n"); |
| |
| /**TESTPOINT: Check HMAC-PRNG generate*/ |
| zassert_false(tc_hmac_prng_generate(random, size, &h) < 1, |
| "HMAC-PRNG generate failed."); |
| |
| TC_PRINT("All HMAC tests succeeded!\n"); |
| } |