From 2de0824f026172dafe9f83564c66df12d5f1da64 Mon Sep 17 00:00:00 2001 From: Paul Selkirk Date: Tue, 21 Apr 2015 12:36:44 -0400 Subject: Unify eim and i2c memory map, unify apps, build libraries. --- i2c/sw/trng_tester_i2c.c | 321 ----------------------------------------------- 1 file changed, 321 deletions(-) delete mode 100644 i2c/sw/trng_tester_i2c.c (limited to 'i2c/sw/trng_tester_i2c.c') diff --git a/i2c/sw/trng_tester_i2c.c b/i2c/sw/trng_tester_i2c.c deleted file mode 100644 index 92b2c94..0000000 --- a/i2c/sw/trng_tester_i2c.c +++ /dev/null @@ -1,321 +0,0 @@ -/* - * trng_tester.c - * -------------- - * This program sends several commands to the TRNG subsystem - * in order to verify the avalanche_entropy, rosc_entropy, and csprng cores. - * - * Note: This version of the program talks to the FPGA over an I2C bus. - * - * - * Author: Paul Selkirk - * Copyright (c) 2014-2015, NORDUnet A/S 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 the NORDUnet 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 - * HOLDER 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 -#include -#include -#include -#include -#include -#include - -#include "tc_i2c.h" -#include "cryptech_memory_map.h" - -char *usage = "Usage: %s [-h] [-d] [-q] [-w] [-n #] tc...\n"; - -int debug = 0; -int quiet = 0; -int num_words = 10; -int wait_stats = 0; - -/* ---------------- sanity test case ---------------- */ - -int TC0() -{ - uint8_t board_name0[4] = "PVT1"; - uint8_t board_name1[4] = " "; - uint8_t board_version[4] = "0.10"; - - uint8_t comm_name0[4] = "i2c "; - uint8_t comm_name1[4] = " "; - uint8_t comm_version[4] = "0.10"; - - uint8_t t[4]; - - if (!quiet) - printf("TC0-1: Reading board type, version, and dummy reg from global registers.\n"); - - /* write current time into dummy register, then try to read it back - * to make sure that we can actually write something into EIM - */ - (void)time((time_t *)t); - if (tc_write(BOARD_ADDR_DUMMY, t, 4) != 0) - return 1; - - if (tc_expected(BOARD_ADDR_NAME0, board_name0, 4) || - tc_expected(BOARD_ADDR_NAME1, board_name1, 4) || - tc_expected(BOARD_ADDR_VERSION, board_version, 4) || - tc_expected(BOARD_ADDR_DUMMY, t, 4)) - return 1; - - if (!quiet) - printf("TC0-2: Reading name and version words from communications core.\n"); - - return - tc_expected(COMM_ADDR_NAME0, comm_name0, 4) || - tc_expected(COMM_ADDR_NAME1, comm_name1, 4) || - tc_expected(COMM_ADDR_VERSION, comm_version, 4); -} - -/* ---------------- trng test cases ---------------- */ - -/* TC1: Read name and version from trng core. */ -int TC1(void) -{ - uint8_t name0[4] = "trng"; - uint8_t name1[4] = " "; - uint8_t version[4] = "0.01"; - - if (!quiet) - printf("TC1: Reading name and version words from trng core.\n"); - - return - tc_expected(TRNG_ADDR_NAME0, name0, 4) || - tc_expected(TRNG_ADDR_NAME1, name1, 4) || - tc_expected(TRNG_ADDR_VERSION, version, 4); -} - -/* XXX test cases for setting blinkenlights? */ -/* XXX set 'discard' control bit, see if we read the same value */ - -/* ---------------- avalanche_entropy test cases ---------------- */ - -/* TC2: Read name and version from avalanche_entropy core. */ -int TC2(void) -{ - uint8_t name0[4] = "extn"; - uint8_t name1[4] = "oise"; - uint8_t version[4] = "0.10"; - - if (!quiet) - printf("TC2: Reading name and version words from avalanche_entropy core.\n"); - - return - tc_expected(ENTROPY1_ADDR_NAME0, name0, 4) || - tc_expected(ENTROPY1_ADDR_NAME1, name1, 4) || - tc_expected(ENTROPY1_ADDR_VERSION, version, 4); -} - -/* XXX clear 'enable' control bit, see if we read the same value */ - -/* TC3: Read random data from avalanche_entropy. */ -int TC3(void) -{ - int i, n; - uint32_t entropy; - - if (!quiet) - printf("TC3: Read random data from avalanche_entropy.\n"); - - for (i = 0; i < num_words; ++i) { - /* check status */ - n = 10; - if (tc_wait(ENTROPY1_ADDR_STATUS, ENTROPY1_STATUS_VALID, &n) != 0) - return 1; - /* read entropy data */ - if (tc_read(ENTROPY1_ADDR_ENTROPY, (uint8_t *)&entropy, 4) != 0) - return 1; - /* display entropy data */ - if (!debug) { - if (wait_stats) - printf("%08x %d\n", entropy, n); - else - printf("%08x\n", entropy); - } - } - - return 0; -} - -/* ---------------- rosc_entropy test cases ---------------- */ - -/* TC4: Read name and version from rosc_entropy core. */ -int TC4(void) -{ - uint8_t name0[4] = "rosc"; - uint8_t name1[4] = " ent"; - uint8_t version[4] = "0.10"; - - if (!quiet) - printf("TC4: Reading name and version words from rosc_entropy core.\n"); - - return - tc_expected(ENTROPY2_ADDR_NAME0, name0, 4) || - tc_expected(ENTROPY2_ADDR_NAME1, name1, 4) || - tc_expected(ENTROPY2_ADDR_VERSION, version, 4); -} - -/* XXX clear 'enable' control bit, see if we read the same value */ - -/* TC5: Read random data from rosc_entropy. */ -int TC5(void) -{ - int i, n; - uint32_t entropy; - - if (!quiet) - printf("TC5: Read random data from rosc_entropy.\n"); - - for (i = 0; i < num_words; ++i) { - /* check status */ - n = 10; - if (tc_wait(ENTROPY2_ADDR_STATUS, ENTROPY2_STATUS_VALID, &n) != 0) - return 1; - /* read entropy data */ - if (tc_read(ENTROPY2_ADDR_ENTROPY, (uint8_t *)&entropy, 4) != 0) - return 1; - /* display entropy data */ - if (!debug) { - if (wait_stats) - printf("%08x %d\n", entropy, n); - else - printf("%08x\n", entropy); - } - } - - return 0; -} - -/* ---------------- trng_csprng test cases ---------------- */ - -/* TC6: Read name and version from trng_csprng core. */ -int TC6(void) -{ - /* XXX csprng core currently doesn't have name/version registers */ - return 0; -} - -/* XXX clear 'enable' control bit, see if we read the same value */ -/* XXX set 'seed' control bit, see if we read the same value */ - -/* TC7: Read random data from trng_csprng. */ -int TC7(void) -{ - int i, n; - uint32_t random; - - if (!quiet) - printf("TC7: Read random data from trng_csprng.\n"); - - for (i = 0; i < num_words; ++i) { - /* check status */ - n = 10; - if (tc_wait(CSPRNG_ADDR_STATUS, CSPRNG_STATUS_VALID, &n) != 0) - return 1; - /* read random data */ - if (tc_read(CSPRNG_ADDR_RANDOM, (uint8_t *)&random, 4) != 0) - return 1; - /* display random data */ - if (!debug) { - if (wait_stats) - printf("%08x %d\n", random, n); - else - printf("%08x\n", random); - } - } - - return 0; -} - -/* ---------------- main ---------------- */ - -int main(int argc, char *argv[]) -{ - typedef int (*tcfp)(void); - tcfp all_tests[] = { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 }; - int i, j, opt; - - while ((opt = getopt(argc, argv, "h?dqn:w")) != -1) { - switch (opt) { - case 'h': - case '?': - printf(usage, argv[0]); - return EXIT_SUCCESS; - case 'd': - debug = 1; - break; - case 'q': - quiet = 1; - break; - case 'n': - num_words = atoi(optarg); - if (num_words <= 0) { - fprintf(stderr, "-n requires a positive integer argument\n"); - return EXIT_FAILURE; - } - break; - case 'w': - wait_stats = 1; - break; - default: - fprintf(stderr, usage, argv[0]); - return EXIT_FAILURE; - } - } - - /* no args == run all tests */ - if (optind >= argc) { - for (j = 0; j < sizeof(all_tests)/sizeof(all_tests[0]); ++j) - if (all_tests[j]() != 0) - return EXIT_FAILURE; - return EXIT_SUCCESS; - } - - /* run one or more tests (by number) or groups of tests (by name) */ - for (i = optind; i < argc; ++i) { - if (strcmp(argv[i], "all") == 0) { - for (j = 0; j < sizeof(all_tests)/sizeof(all_tests[0]); ++j) - if (all_tests[j]() != 0) - return EXIT_FAILURE; - } - else if (isdigit(argv[i][0]) && - (((j = atoi(argv[i])) >= 0) && - (j < sizeof(all_tests)/sizeof(all_tests[0])))) { - if (all_tests[j]() != 0) - return EXIT_FAILURE; - } - else { - fprintf(stderr, "unknown test case %s\n", argv[i]); - return EXIT_FAILURE; - } - } - - return EXIT_SUCCESS; -} -- cgit v1.2.3