Browse Source

Checkin STARCORE project OE52_OE54_ACVP effort

kaleb-himes 10 months ago
parent
commit
f51d4c4c30
5 changed files with 1038 additions and 0 deletions
  1. 5 0
      IDE/STARCORE/README.txt
  2. 13 0
      IDE/STARCORE/include.am
  3. 379 0
      IDE/STARCORE/starcore_test.c
  4. 640 0
      IDE/STARCORE/user_settings.h
  5. 1 0
      IDE/include.am

+ 5 - 0
IDE/STARCORE/README.txt

@@ -0,0 +1,5 @@
+Please refer to the provided
+wolfssl-X.X.X-commercial-fips-432b-v2/v4.3.2b-SP-and-user-guide/*.pdf
+for FIPS validated build instructions.
+
+

+ 13 - 0
IDE/STARCORE/include.am

@@ -0,0 +1,13 @@
+# vim:ft=automake
+# included from Top Level Makefile.am
+# All paths should be given relative to the root
+#
+# NOTE: append_wolfssl_git_version.sh is not included as the
+#       distribution file set will not contain GitHub info
+#
+#
+
+EXTRA_DIST+= IDE/STARCORE/README.txt
+EXTRA_DIST+= IDE/STARCORE/starcore_test.c
+EXTRA_DIST+= IDE/STARCORE/user_settings.h
+

+ 379 - 0
IDE/STARCORE/starcore_test.c

@@ -0,0 +1,379 @@
+/* starcore_test.c
+ *
+ * Copyright (C) 2006-2023 wolfSSL Inc.
+ *
+ * This file is part of wolfSSL.
+ *
+ * wolfSSL is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * wolfSSL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
+ */
+
+
+#include <prototype.h> 
+
+#include <wolfssl/wolfcrypt/settings.h>
+#ifndef WOLFSSL_USER_SETTINGS
+    #error "USER SETTINGS not set"
+#endif
+#include <wolfcrypt/test/test.h>
+#include <wolfssl/wolfcrypt/wc_port.h>
+#include <wolfssl/wolfcrypt/error-crypt.h>
+#include <wolfssl/wolfcrypt/random.h>
+#include <wolfcrypt/benchmark/benchmark.h>
+#ifdef HAVE_FIPS
+    #include <wolfssl/wolfcrypt/fips_test.h>
+    /* #include <wolfacvp/wolfacvp.h> */
+  #if 1
+    #include <op_test.h>
+  #endif
+#endif
+
+typedef struct test_func_args {
+    int argc;
+    char** argv;
+    int return_code;
+} test_func_args;
+
+#ifdef HAVE_FIPS
+    static void appFipsCb(int ok, int err, const char* hash)
+    {
+        printf("in appFipsCb Fips callback, ok = %d, err = %d\n", ok, err);
+        fflush(stdout);
+        printf("message = %s\n", wc_GetErrorString(err));
+        fflush(stdout);
+        printf("hash = %s\n", hash);
+        fflush(stdout);
+
+        if (err == IN_CORE_FIPS_E) {
+            printf("In core integrity hash check failure, copy above hash\n");
+            fflush(stdout);
+            printf("into verifyCore[] in fips_test.c and rebuild\n");
+            fflush(stdout);
+        }
+        fflush(stdout);
+    }
+#endif
+
+int my_rng_generate_seed(unsigned char* output, int sz)
+{
+    unsigned int i;
+    long t;
+
+    time(&t); /* init */
+    srand(t); /* init */
+    for (i = 0; i < sz; i++) {
+        output[i] = (unsigned char) rand();
+    }
+    return 0;
+}
+
+#define SAMPLE_SIZE 32
+int simpleRngTest(void)
+{
+    WC_RNG rng;
+    int ret;
+    char block[SAMPLE_SIZE] = {0};
+
+    ret = wc_InitRng(&rng);
+    if (ret != 0) {
+        printf("Failed to init RNG with return %d\n", ret);
+        fflush(stdout);
+        return ret;
+    }
+
+    ret = wc_RNG_GenerateBlock(&rng, (byte*) block, SAMPLE_SIZE);
+    /* This should trigger FIPS callback if the hash needs updated */
+    printf("ret from wc_RNG_GenerateBlock was %d\n", ret);
+    fflush(stdout);
+    return ret;
+}
+
+#define FILE_PATH_LEN 160
+/* The directory used to hold the vector files, update accordingly */
+#define FIXED_PATH "../../../../fips/wolfACVP/wolfSSL-14699641-PRODUCTION/"
+
+void reset_path(char* fName) {
+    memset(fName, 0, FILE_PATH_LEN);
+    strncpy(fName, FIXED_PATH, strlen(FIXED_PATH));
+}
+
+#if 0
+/* Disable when not processing vector files */
+int process_a_file(char* fName)
+{
+    int ret = 0;
+    test_func_args args = {0};
+    char* argIn[3] = {0};
+    argIn[0] = "wolfacvp_client";
+    argIn[1] = "-i";
+    argIn[2] = fName;
+#if 0
+    argIn[3] = "-K"; /* Remove this when processing vectors from the lab,
+                              * we don't know the answers to those */
+    args.argc = 4; /* change to 3 when processing vectors from the lab */
+#else
+    args.argc = 3;
+#endif
+    args.argv = argIn;
+    printf("Case: START\n");
+    ret = wolfacvp_harness(args.argc, args.argv);
+    if (ret != 0) {
+        printf("Result of wolfCrypt harness is %d\n", ret); fflush(stdout);
+    } else {
+        printf("Case: END\n");
+    }
+    return ret;
+}
+#endif 
+
+void check_ret(int ret)
+{
+    if(ret != 0) {
+        exit(-1); 
+    }
+}
+
+int testharness_main()
+{
+    int ret = -1;
+    int* CpuidAddr=(int*) 0xFFF28028;
+
+    printf("The CPU ID is stored at 0xFFF28028 and it's value is %04x\n", *CpuidAddr);
+
+#ifdef HAVE_FIPS
+        wolfCrypt_SetCb_fips(appFipsCb);
+        /* fipsEntry(); */ /* Prior to Vortec Scheduler was called here, call is
+                            * now at the vortec Scheduler level during Core Init
+                            */
+#endif
+
+    ret = simpleRngTest();
+
+    if (ret == 0) {
+
+    /* uncomment to see performance */
+    #if 0 /* Benchmark */
+        printf("Kicking off the benchmark\n"); fflush(stdout);
+        ret = benchmark_test(NULL);
+        printf("Result of wolfCrypt benchmark is %d\n", ret); fflush(stdout);
+    #endif
+
+#if 0 /* File-based Harness */
+    #ifdef HAVE_FIPS
+        char* testFN = "grep-for-this-file.txt";
+        char* testStr = "This is my test string, hello from STARCORE!\n";
+        char path[FILE_PATH_LEN] = {0};
+        FILE* fstream = fopen(testFN, "wb");
+
+        strncpy(path, FIXED_PATH, strlen(FIXED_PATH));
+
+    #if 0 /* Crypto Tests */
+        printf("Running testwolfcrypt on starcore\n"); fflush(stdout);
+        wolfcrypt_test(NULL);
+    #endif
+
+        if (fstream == NULL) {
+            printf("Failed to open testFN\n");
+        } else {
+            ret = fwrite(testStr, 1, strlen(testStr), fstream);
+            printf("Wrote %d bytes to fstream\n", ret);
+            fclose(fstream);
+        }
+#if 0 /* PRODUCTION VECTORS */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19392-vectorSets-215826.json")); reset_path(path); /* AES-ECB */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19392-vectorSets-215827.json")); reset_path(path); /* AES-CBC */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19392-vectorSets-215828.json")); reset_path(path); /* AES-CTR */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19397-vectorSets-215833.json")); reset_path(path); /* ECDSA keyGen */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19397-vectorSets-215834.json")); reset_path(path); /* ECDSA keyVer */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19397-vectorSets-215835.json")); reset_path(path); /* ECDSA sigGen */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19397-vectorSets-215836.json")); reset_path(path); /* ECDSA sigVer */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19400-vectorSets-215845.json")); reset_path(path); /* HMAC-SHA1 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19400-vectorSets-215846.json")); reset_path(path); /* HMAC-SHA2-224 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19400-vectorSets-215847.json")); reset_path(path); /* HMAC-SHA2-256 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19400-vectorSets-215848.json")); reset_path(path); /* HMAC-SHA2-384 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19400-vectorSets-215849.json")); reset_path(path); /* HMAC-SHA2-512 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19400-vectorSets-215850.json")); reset_path(path); /* HMAC-SHA3-224 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19400-vectorSets-215851.json")); reset_path(path); /* HMAC-SHA3-256 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19400-vectorSets-215852.json")); reset_path(path); /* HMAC-SHA3-384 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19400-vectorSets-215853.json")); reset_path(path); /* HMAC-SHA3-512 */
+        process_a_file(strcat(path, "acvp-v1-testSessions-19404-vectorSets-215857.json")); reset_path(path); /* RSA keyGen */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19404-vectorSets-215858.json")); reset_path(path); /* RSA sigGen */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19404-vectorSets-215859.json")); reset_path(path); /* RSA sigVer */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19404-vectorSets-215860.json")); reset_path(path); /* RSA decPrim */
+        //process_a_file(strcat(path, "acvp-v1_testSessions_19395_vectorSets_215831.json")); reset_path(path); /* hashDRBG */
+        //process_a_file(strcat(path, "acvp-v1_testSessions_19396_vectorSets_215832.json")); reset_path(path); /* DSA */
+        //process_a_file(strcat(path, "acvp-v1_testSessions_19401_vectorSets_215854.json")); reset_path(path); /* KAS-ECC */
+        //process_a_file(strcat(path, "acvp-v1_testSessions_19402_vectorSets_215855.json")); reset_path(path); /* KAS-ECC-SSC */
+        //process_a_file(strcat(path, "acvp-v1_testSessions_19403_vectorSets_215856.json")); reset_path(path); /* KAS-FFC-SSC */
+        //process_a_file(strcat(path, "acvp-v1_testSessions_19407_vectorSets_215870.json")); reset_path(path); /* TDES */
+        //process_a_file(strcat(path, "acvp-v1_testSessions_19394_vectorSets_215830.json")); reset_path(path); /* CMAC_AES */
+        //process_a_file(strcat(path, "acvp-v1_testSessions_19393_vectorSets_215829.json")); reset_path(path); /* AES-CCM */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19398-vectorSets-215837.json")); reset_path(path); /* AES-GCM */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19398-vectorSets-215838.json")); reset_path(path); /* AES-GCM */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19398-vectorSets-215839.json")); reset_path(path); /* AES-GCM */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19398-vectorSets-215840.json")); reset_path(path); /* AES-GCM */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19399-vectorSets-215841.json")); reset_path(path); /* AES-GMAC */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19399-vectorSets-215842.json")); reset_path(path); /* AES-GMAC */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19399-vectorSets-215843.json")); reset_path(path); /* AES-GMAC */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19399-vectorSets-215844.json")); reset_path(path); /* AES-GMAC */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19405-vectorSets-215861.json")); reset_path(path); /* SHA-1 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19406-vectorSets-215866.json")); reset_path(path); /* SHA3-224 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19406-vectorSets-215867.json")); reset_path(path); /* SHA3-256 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19406-vectorSets-215868.json")); reset_path(path); /* SHA3-384 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19406-vectorSets-215869.json")); reset_path(path); /* SHA3-512 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19405-vectorSets-215862.json")); reset_path(path); /* SHA2-224*/
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19405-vectorSets-215863.json")); reset_path(path); /* SHA2-256 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19405-vectorSets-215864.json")); reset_path(path); /* SHA2-384 */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-19405-vectorSets-215865.json")); reset_path(path); /* SHA2-512 */
+#endif
+#if 0 /* DEMO VECTORS */
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365458-vectorSets-1479140.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365458-vectorSets-1479141.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365458-vectorSets-1479142.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365465-vectorSets-1479149.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365465-vectorSets-1479150.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365465-vectorSets-1479151.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365465-vectorSets-1479152.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365467-vectorSets-1479154.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365467-vectorSets-1479155.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365467-vectorSets-1479156.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365467-vectorSets-1479157.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365469-vectorSets-1479161.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365469-vectorSets-1479162.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365469-vectorSets-1479163.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365469-vectorSets-1479164.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365473-vectorSets-1479170.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365473-vectorSets-1479171.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365473-vectorSets-1479172.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365473-vectorSets-1479173.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365473-vectorSets-1479174.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365473-vectorSets-1479175.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365473-vectorSets-1479176.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365473-vectorSets-1479177.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365473-vectorSets-1479178.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365485-vectorSets-1479194.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365485-vectorSets-1479195.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365485-vectorSets-1479196.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365485-vectorSets-1479197.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365488-vectorSets-1479202.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365488-vectorSets-1479203.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365488-vectorSets-1479204.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365488-vectorSets-1479205.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365488-vectorSets-1479206.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365490-vectorSets-1479211.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365490-vectorSets-1479212.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365490-vectorSets-1479213.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1-testSessions-365490-vectorSets-1479214.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1_testSessions_365459_vectorSets_1479143.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1_testSessions_365461_vectorSets_1479145.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1_testSessions_365462_vectorSets_1479146.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1_testSessions_365463_vectorSets_1479147.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1_testSessions_365481_vectorSets_1479190.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1_testSessions_365483_vectorSets_1479192.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1_testSessions_365484_vectorSets_1479193.json")); reset_path(path);
+        //process_a_file(strcat(path, "acvp-v1_testSessions_365491_vectorSets_1479215.json")); reset_path(path);
+#endif
+
+#if 0 /* VECTORS that passed previously (sanity check before asking FIPS lab
+         to send vectors) */
+
+/* ------------------------------------------------------------------- */
+        process_a_file(strcat(path, "hashDRBG_47251.json"));// Success
+        process_a_file(strcat(path, "AES_CBC_47242.json")); // Failed to allocate buffer large enough for file, fixed by chopping into smaller sections
+        process_a_file(strcat(path, "AES_CCM_47247.json")); // Failed, increase stack/heap
+        process_a_file(strcat(path, "AES_CCM_47247-part1.json")); // Failed to write out the entire response (got 104 of 370 tgId's in the response)
+        process_a_file(strcat(path, "AES_CCM_47247-part2.json")); // Failed ot write out the entire response (started at 371 and got to 429 of 741 tgId's in the response) looks like alloc failures, increase HEAP
+        process_a_file(strcat(path, "DSA_keyGen_47253.json")); // Success
+        process_a_file(strcat(path, "RSA_DecPrim_47306.json")); // Success
+        process_a_file(strcat(path, "ECDSA_sigVer_47258.json")); // Success
+        process_a_file(strcat(path, "AES_CMAC_47249.json")); // Success
+        process_a_file(strcat(path, "AES_CTR_47243.json")); // Success
+        process_a_file(strcat(path, "AES_ECB_47241.json")); // Success
+        process_a_file(strcat(path, "AES_GCM_external_8_2_1_47263.json")); // Success
+        process_a_file(strcat(path, "AES_GCM_external_8_2_2_47265.json")); // Success
+        process_a_file(strcat(path, "AES_GCM_internal_8_2_1_47267.json")); // Success
+        process_a_file(strcat(path, "AES_GCM_internal_8_2_2_47269.json")); // Success
+        process_a_file(strcat(path, "AES_GMAC_external_8_2_1_47271.json")); // Failed to alloc response (passed but couldn't output), use smaller chunks
+        process_a_file(strcat(path, "AES_CMAC_47249.json")); // Success
+        process_a_file(strcat(path, "AES_CTR_47243.json")); // Success
+        process_a_file(strcat(path, "AES_CBC_47242.json")); // Success
+        process_a_file(strcat(path, "AES_CCM_47247.json")); // Success
+        process_a_file(strcat(path, "AES_CMAC_47249.json")); // Success
+        process_a_file(strcat(path, "AES_CTR_47243.json")); // Success
+        process_a_file(strcat(path, "AES_ECB_47241.json")); // Success
+        process_a_file(strcat(path, "AES_GCM_external_8_2_1_47263.json")); // Success
+        process_a_file(strcat(path, "AES_GCM_external_8_2_2_47265.json")); // Success
+        process_a_file(strcat(path, "AES_GCM_internal_8_2_1_47267.json")); // Success
+        process_a_file(strcat(path, "AES_GCM_internal_8_2_2_47269.json")); // Success
+        process_a_file(strcat(path, "AES_GMAC_external_8_2_1_47271.json")); // Success
+        process_a_file(strcat(path, "AES_GMAC_external_8_2_2_47273.json")); // Success
+        process_a_file(strcat(path, "AES_GMAC_internal_8_2_1_47275.json")); // Success
+        process_a_file(strcat(path, "AES_GMAC_internal_8_2_2_47277.json")); // Success
+        process_a_file(strcat(path, "ECDSA_keyGen_47255.json")); // Success
+        process_a_file(strcat(path, "ECDSA_keyVer_47256.json")); // Success
+        process_a_file(strcat(path, "ECDSA_sigGen_47257.json")); // Success
+        process_a_file(strcat(path, "HMAC_SHA1_47279.json")); // Success
+        process_a_file(strcat(path, "HMAC_SHA2_224_47280.json")); // Success
+        process_a_file(strcat(path, "HMAC_SHA2_256_47281.json")); // Success
+        process_a_file(strcat(path, "HMAC_SHA2_384_47282.json")); // Success
+        process_a_file(strcat(path, "HMAC_SHA2_512_47283.json")); // Success
+        process_a_file(strcat(path, "HMAC_SHA3_224_47284.json")); // Success
+        process_a_file(strcat(path, "HMAC_SHA3_256_47285.json")); // Success
+        process_a_file(strcat(path, "HMAC_SHA3_384_47286.json")); // Success
+        process_a_file(strcat(path, "HMAC_SHA3_512_47287.json")); // Success
+        process_a_file(strcat(path, "KAS_ECC_47299.json")); // Success
+        process_a_file(strcat(path, "KAS_ECC_CDH_Component_47297.json")); // Success
+        process_a_file(strcat(path, "KAS_ECC_SSC_652956.json")); // Success
+        process_a_file(strcat(path, "KAS_FFC_47301.json")); // Success
+        process_a_file(strcat(path, "KAS_FFC_SSC_652957.json")); // Success
+        process_a_file(strcat(path, "RSA_keyGen_47303.json")); // Success
+        process_a_file(strcat(path, "RSA_sigGen_47304.json")); // Success
+        process_a_file(strcat(path, "RSA_sigVer_47305.json")); // Success
+        process_a_file(strcat(path, "SHA1_47311.json")); // Success
+        process_a_file(strcat(path, "SHA2_224_47312.json")); // Success
+        process_a_file(strcat(path, "SHA2_256_47313.json")); // Success
+        process_a_file(strcat(path, "SHA2_384_47314.json")); // Success
+        process_a_file(strcat(path, "SHA2_512_47315.json")); // Success
+        process_a_file(strcat(path, "SHA3_224_47321.json")); // Success
+        process_a_file(strcat(path, "SHA3_256_47322.json")); // Success
+        process_a_file(strcat(path, "SHA3_384_47323.json")); // Success
+        process_a_file(strcat(path, "SHA3_512_47324.json")); // Success
+#endif
+
+    #endif /* HAVE_FIPS */
+#endif /* Harness if */
+
+    #if 1 /* optest */
+    #ifdef HAVE_FIPS
+#define VALUES_LEN 15
+        int i;
+
+        printf("Kicking off the operational test app\n"); fflush(stdout);
+        {
+            int values[VALUES_LEN] = { 0, -203, -204, -205, -206, -207, -208, -209, -210, -242, -256, -257,
+                                       -258, -259, 0 };
+            for (i = 0; i < VALUES_LEN; i++) {
+                ret = op_test(values[i], 0);
+                printf("ret from running case %d = %d\n", values[i], ret); fflush(stdout);
+            }
+        }
+    #endif /* HAVE_FIPS */
+    #endif /* optest if */
+    } else {
+        printf("Skipping test until hash is updated\n"); fflush(stdout);
+    }
+    wolfCrypt_Cleanup();
+    return 0;
+}
+

+ 640 - 0
IDE/STARCORE/user_settings.h

@@ -0,0 +1,640 @@
+/* user_settings.h
+*
+* Copyright (C) 2006-2023 wolfSSL Inc.
+*
+* This file is part of wolfSSL.
+*
+* wolfSSL is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* wolfSSL is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
+*/
+
+/* Custom wolfSSL user settings for Vortec Scheduler,
+ *                                  VxWorks 6.9 and VxWorks 7.0  */
+
+#ifndef WOLFSSL_USER_SETTINGS_H
+#define WOLFSSL_USER_SETTINGS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* Platform */
+/* ------------------------------------------------------------------------- */
+#undef WOLFSSL_GENERAL_ALIGNMENT
+#define WOLFSSL_GENERAL_ALIGNMENT 4
+
+/* Platform */
+#undef WOLFSSL_STARCORE
+#define WOLFSSL_STARCORE
+
+/* Endianess */
+#undef BIG_ENDIAN_ORDER
+#define BIG_ENDIAN_ORDER
+
+#undef WOLFSSL_SMALL_STACK
+#define WOLFSSL_SMALL_STACK
+
+#undef WOLFSSL_USER_IO
+/* #define WOLFSSL_USER_IO */
+
+#undef SINGLE_THREADED
+#define SINGLE_THREADED
+
+/* ------------------------------------------------------------------------- */
+/* Math Configuration */
+/* ------------------------------------------------------------------------- */
+#undef SIZEOF_LONG_LONG
+#define SIZEOF_LONG_LONG 8
+
+#undef SIZEOF_LONG
+#define SIZEOF_LONG 4
+
+#undef USE_FAST_MATH
+#if 1
+    #define USE_FAST_MATH
+
+    #undef TFM_TIMING_RESISTANT
+    #define TFM_TIMING_RESISTANT
+
+    /* Optimizations (footprint) */
+    #define WOLFCRYPT_ONLY
+    #define TFM_NO_ASM
+#endif
+
+#if 0
+    #define WOLFSSL_SP
+    #define WOLFSSL_SP_SMALL
+    #define WOLFSSL_HAVE_SP_RSA
+    #define WOLFSSL_HAVE_SP_DH
+    #define WOLFSSL_HAVE_SP_ECC
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* FIPS - Requires eval or license from wolfSSL */
+/* ------------------------------------------------------------------------- */
+#undef HAVE_FIPS
+#if 1
+    #define HAVE_FIPS
+
+    #undef HAVE_FIPS_VERSION
+    #define HAVE_FIPS_VERSION 2
+
+    #ifdef SINGLE_THREADED
+        #undef NO_THREAD_LS
+        #define NO_THREAD_LS
+    #endif
+
+    #if 1
+        #undef NO_ATTRIBUTE_CONSTRUCTOR
+        #define NO_ATTRIBUTE_CONSTRUCTOR
+    #endif
+#endif
+
+
+/* ------------------------------------------------------------------------- */
+/* Crypto */
+/* ------------------------------------------------------------------------- */
+/* RSA */
+#undef NO_RSA
+#if 1
+    #ifdef USE_FAST_MATH
+        /* Maximum math bits (Max RSA key bits * 2) */
+        #undef FP_MAX_BITS
+        #define FP_MAX_BITS 8192
+    #endif
+
+    /* half as much memory but twice as slow */
+    #undef RSA_LOW_MEM
+    #define RSA_LOW_MEM
+
+    /* Enables blinding mode, to prevent timing attacks */
+    #if 0
+        #undef WC_RSA_BLINDING
+        #define WC_RSA_BLINDING
+    #else
+        #undef WC_NO_HARDEN
+        #define WC_NO_HARDEN
+    #endif
+
+    /* RSA PSS Support */
+    #if 1
+        #define WC_RSA_PSS
+    #endif
+
+    #if 1
+        #define WC_RSA_NO_PADDING
+    #endif
+#else
+    #define NO_RSA
+#endif
+
+/* ECC */
+#undef HAVE_ECC
+#if 1
+    #define HAVE_ECC
+
+    /* Manually define enabled curves */
+    #undef ECC_USER_CURVES
+    #define ECC_USER_CURVES
+
+    #ifdef ECC_USER_CURVES
+    /* Manual Curve Selection */
+        #define HAVE_ECC192
+        #define HAVE_ECC224
+        #undef NO_ECC256
+        #define HAVE_ECC384
+        #define HAVE_ECC521
+    #endif
+
+    /* Fixed point cache (speeds repeated operations against same private key) */
+    #undef FP_ECC
+    /* #define FP_ECC */
+
+    #ifdef FP_ECC
+        /* Bits / Entries */
+        #undef FP_ENTRIES
+        #define FP_ENTRIES 2
+        #undef FP_LUT
+        #define FP_LUT 4
+    #endif
+
+    /* Optional ECC calculation method */
+    /* Note: doubles heap usage, but slightly faster */
+    #undef ECC_SHAMIR
+    /* #define ECC_SHAMIR */
+
+    /* Reduces heap usage, but slower */
+    #undef ECC_TIMING_RESISTANT
+    #define ECC_TIMING_RESISTANT
+
+    #ifdef HAVE_FIPS
+        #undef HAVE_ECC_CDH
+        #define HAVE_ECC_CDH /* Enable cofactor support */
+
+        #undef NO_STRICT_ECDSA_LEN
+        #define NO_STRICT_ECDSA_LEN /* Do not force fixed len w/ FIPS */
+
+        #undef WOLFSSL_VALIDATE_ECC_IMPORT
+        #define WOLFSSL_VALIDATE_ECC_IMPORT /* Validate import */
+    #endif
+
+    /* Compressed Key Support */
+    #undef HAVE_COMP_KEY
+    /* #define HAVE_COMP_KEY */
+
+    /* Use alternate ECC size for ECC math */
+    #ifdef USE_FAST_MATH
+        /* MAX ECC BITS = ROUND8(MAX ECC) * 2 */
+        #ifdef NO_RSA
+            /* Custom fastmath size if not using RSA */
+            #undef FP_MAX_BITS
+            #define FP_MAX_BITS (256 * 2)
+        #else
+            #undef ALT_ECC_SIZE
+            #define ALT_ECC_SIZE
+            /* wolfSSL will compute the FP_MAX_BITS_ECC, but it can be overriden */
+            /* #undef FP_MAX_BITS_ECC */
+            /* #define FP_MAX_BITS_ECC (256 * 2) */
+        #endif
+
+        /* Speedups specific to curve */
+        #ifndef NO_ECC256
+            #undef TFM_ECC256
+            #define TFM_ECC256
+        #endif
+    #endif
+#endif
+
+/* DH */
+#undef NO_DH
+#if 1
+    /* Use table for DH instead of -lm (math) lib dependency */
+    #if 1
+        #define WOLFSSL_DH_CONST
+        #define HAVE_FFDHE_2048
+        #define HAVE_FFDHE_3072
+        #define HAVE_FFDHE_4096
+        /* #define HAVE_FFDHE_6144 */
+        /* #define HAVE_FFDHE_8192 */
+    #endif
+
+    #ifdef HAVE_FIPS
+        #define WOLFSSL_VALIDATE_FFC_IMPORT
+        #define HAVE_FFDHE_Q
+    #endif
+#else
+    #define NO_DH
+#endif
+
+
+/* AES */
+#undef NO_AES
+#if 1
+    #undef HAVE_AES_CBC
+    #define HAVE_AES_CBC
+
+    #undef HAVE_AESGCM
+    #define HAVE_AESGCM
+
+    /* GCM Method: GCM_SMALL, GCM_WORD32 or GCM_TABLE */
+    /*  #define GCM_SMALL */
+    /*  #define GCM_WORD32 */
+    #define GCM_TABLE
+
+    #undef WOLFSSL_AES_DIRECT
+    #define WOLFSSL_AES_DIRECT
+
+    #undef HAVE_AES_ECB
+    #define HAVE_AES_ECB
+
+    #undef WOLFSSL_AES_COUNTER
+    #define WOLFSSL_AES_COUNTER
+
+    #undef HAVE_AESCCM
+    #define HAVE_AESCCM
+#else
+    #define NO_AES
+#endif
+
+
+/* DES3 */
+#undef NO_DES3
+#if 1
+    /* No change */
+#else
+    #define NO_DES3
+#endif
+
+/* ChaCha20 / Poly1305 */
+#undef HAVE_CHACHA
+#undef HAVE_POLY1305
+#if 0
+    #define HAVE_CHACHA
+    #define HAVE_POLY1305
+
+    /* Needed for Poly1305 */
+    #undef HAVE_ONE_TIME_AUTH
+    #define HAVE_ONE_TIME_AUTH
+#endif
+
+/* Ed25519 / Curve25519 */
+#undef HAVE_CURVE25519
+#undef HAVE_ED25519
+#if 0
+    #define HAVE_CURVE25519
+    #define HAVE_ED25519 /* ED25519 Requires SHA512 */
+
+    /* Optionally use small math (less flash usage, but much slower) */
+    #if 1
+        #define CURVED25519_SMALL
+    #endif
+#endif
+
+
+/* ------------------------------------------------------------------------- */
+/* Hashing */
+/* ------------------------------------------------------------------------- */
+/* Sha */
+#undef NO_SHA
+#if 1
+    /* 1k smaller, but 25% slower */
+    /* #define USE_SLOW_SHA */
+#else
+    #define NO_SHA
+#endif
+
+/* Sha256 */
+#undef NO_SHA256
+#if 1
+    /* not unrolled - ~2k smaller and ~25% slower */
+    /* #define USE_SLOW_SHA256 */
+
+    /* Sha224 */
+    #if 1
+        #define WOLFSSL_SHA224
+    #endif
+#else
+    #define NO_SHA256
+#endif
+
+/* Sha512 */
+#undef WOLFSSL_SHA512
+#if 1
+    #define WOLFSSL_SHA512
+
+    /* Sha384 */
+    #undef WOLFSSL_SHA384
+    #if 1
+        #define WOLFSSL_SHA384
+    #endif
+
+    /* over twice as small, but 50% slower */
+    /* #define USE_SLOW_SHA512 */
+#endif
+
+/* Sha3 */
+#undef WOLFSSL_SHA3
+#if 1
+    #define WOLFSSL_SHA3
+#endif
+
+/* MD5 */
+#undef NO_MD5
+#if 1
+    /* No change */
+#else
+    #define NO_MD5
+#endif
+
+/* HKDF */
+#undef HAVE_HKDF
+#if 1
+    #define HAVE_HKDF
+#endif
+
+/* CMAC */
+#undef WOLFSSL_CMAC
+#if 1
+    #define WOLFSSL_CMAC
+#endif
+
+
+/* ------------------------------------------------------------------------- */
+/* Benchmark / Test */
+/* ------------------------------------------------------------------------- */
+/* Use reduced benchmark / test sizes */
+#undef BENCH_EMBEDDED
+#define BENCH_EMBEDDED
+
+#undef USE_CERT_BUFFERS_2048
+#define USE_CERT_BUFFERS_2048
+
+#undef USE_CERT_BUFFERS_1024
+/* #define USE_CERT_BUFFERS_1024 */
+
+#undef USE_CERT_BUFFERS_256
+#define USE_CERT_BUFFERS_256
+
+#undef FORCE_BUFFER_TEST
+#define FORCE_BUFFER_TEST
+
+
+/* ------------------------------------------------------------------------- */
+/* Debugging */
+/* ------------------------------------------------------------------------- */
+
+#undef DEBUG_WOLFSSL
+#undef NO_ERROR_STRINGS
+#if 0
+    #define DEBUG_WOLFSSL
+#else
+    #if 1
+        #define NO_ERROR_STRINGS
+    #endif
+#endif
+
+
+/* ------------------------------------------------------------------------- */
+/* Memory */
+/* ------------------------------------------------------------------------- */
+
+/* Override Memory API's */
+#if 0
+    #undef XMALLOC_OVERRIDE
+    #define XMALLOC_OVERRIDE
+
+    /* prototypes for user heap override functions */
+    /* Note: Realloc only required for normal math */
+    #include <stddef.h> /* for size_t */
+    extern void *myMalloc(size_t n, void* heap, int type);
+    extern void myFree(void *p, void* heap, int type);
+    extern void *myRealloc(void *p, size_t n, void* heap, int type);
+
+    #define XMALLOC(n, h, t) myMalloc(n, h, t)
+    #define XFREE(p, h, t) myFree(p, h, t)
+    #define XREALLOC(p, n, h, t) myRealloc(p, n, h, t)
+#endif
+
+#if 0
+    /* Static memory requires fast math */
+    #define WOLFSSL_STATIC_MEMORY
+
+    /* Disable fallback malloc/free */
+    #define WOLFSSL_NO_MALLOC
+    #if 1
+    #define WOLFSSL_MALLOC_CHECK /* trap malloc failure */
+    #endif
+#endif
+
+/* Memory callbacks */
+#if 1
+    #undef USE_WOLFSSL_MEMORY
+    #define USE_WOLFSSL_MEMORY
+
+    /* Use this to measure / print heap usage */
+    #if 0
+        #undef WOLFSSL_TRACK_MEMORY
+        /*  #define WOLFSSL_TRACK_MEMORY */
+
+        #undef WOLFSSL_DEBUG_MEMORY
+        /* #define WOLFSSL_DEBUG_MEMORY */
+
+        #undef WOLFSSL_DEBUG_MEMORY_PRINT
+        /* #define WOLFSSL_DEBUG_MEMORY_PRINT */
+    #endif
+#else
+    #ifndef WOLFSSL_STATIC_MEMORY
+        #define NO_WOLFSSL_MEMORY
+        /* Otherwise we will use stdlib malloc, free and realloc */
+    #endif
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* RNG */
+/* ------------------------------------------------------------------------- */
+
+/* Seed Source */
+/* Seed Source */
+#if 1
+    extern int my_rng_generate_seed(unsigned char* output, int sz);
+    #undef CUSTOM_RAND_GENERATE_SEED
+    #define CUSTOM_RAND_GENERATE_SEED my_rng_generate_seed
+#endif
+
+/* NETOS */
+#if 0
+    extern unsigned char get_byte_from_pool(void);
+    #define CUSTOM_RAND_GENERATE  get_byte_from_pool
+    #define CUSTOM_RAND_TYPE      unsigned char
+#endif
+
+/* Choose RNG method */
+#if 1
+    /* Use built-in P-RNG (SHA256 based) with HW RNG */
+    /* P-RNG + HW RNG (P-RNG is ~8K) */
+    /* #define WOLFSSL_GENSEED_FORTEST */
+    #undef HAVE_HASHDRBG
+    #define HAVE_HASHDRBG
+#else
+    #undef WC_NO_HASHDRBG
+    #define WC_NO_HASHDRBG
+
+    /* Bypass P-RNG and use only HW RNG */
+    extern int my_rng_gen_block(unsigned char* output, unsigned int sz);
+    #undef CUSTOM_RAND_GENERATE_BLOCK
+    #define CUSTOM_RAND_GENERATE_BLOCK my_rng_gen_block
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* Enable Features */
+/* ------------------------------------------------------------------------- */
+#undef WOLFSSL_TLS13
+#if 0
+    #define WOLFSSL_TLS13
+#endif
+
+#undef WOLFSSL_KEY_GEN
+#if 1
+    #define WOLFSSL_KEY_GEN
+#endif
+
+#if defined(HAVE_FIPS) && !defined(WOLFSSL_KEY_GEN)
+    #define WOLFSSL_OLD_PRIME_CHECK
+#endif
+
+#undef KEEP_PEER_CERT
+/* #define KEEP_PEER_CERT */
+
+#undef HAVE_COMP_KEY
+/* #define HAVE_COMP_KEY */
+
+#undef HAVE_TLS_EXTENSIONS
+/* #define HAVE_TLS_EXTENSIONS */
+
+#undef HAVE_SUPPORTED_CURVES
+/* #define HAVE_SUPPORTED_CURVES */
+
+#undef WOLFSSL_BASE64_ENCODE
+#define WOLFSSL_BASE64_ENCODE
+
+/* TLS Session Cache */
+#if 0
+    #define SMALL_SESSION_CACHE
+#else
+    #define NO_SESSION_CACHE
+#endif
+
+
+/* ------------------------------------------------------------------------- */
+/* Disable Features */
+/* ------------------------------------------------------------------------- */
+#undef NO_WOLFSSL_SERVER
+/* #define NO_WOLFSSL_SERVER */
+
+#undef NO_WOLFSSL_CLIENT
+/* #define NO_WOLFSSL_CLIENT */
+
+#undef NO_CRYPT_TEST
+/* #define NO_CRYPT_TEST */
+
+#undef NO_CRYPT_BENCHMARK
+/* #define NO_CRYPT_BENCHMARK */
+
+/* In-lining of misc.c functions */
+/* If defined, must include wolfcrypt/src/misc.c in build */
+/* Slower, but about 1k smaller */
+#undef NO_INLINE
+/* #define NO_INLINE */
+
+#undef NO_FILESYSTEM
+/* #define NO_FILESYSTEM */
+    
+#undef NO_WRITE_TEMP_FILES
+#define NO_WRITE_TEMP_FILES
+
+#undef NO_WOLFSSL_DIR
+#define NO_WOLFSSL_DIR
+
+#undef NO_WRITEV
+#define NO_WRITEV
+    
+#undef WOLFSSL_NO_SOCK
+#define WOLFSSL_NO_SOCK
+
+#undef NO_MAIN_DRIVER
+#define NO_MAIN_DRIVER
+
+#undef NO_DEV_RANDOM
+/* #define NO_DEV_RANDOM */
+
+#undef NO_DSA
+#define NO_DSA
+
+#undef NO_RC4
+#define NO_RC4
+
+#undef NO_OLD_TLS
+#define NO_OLD_TLS
+
+#undef NO_PSK
+#define NO_PSK
+
+#undef NO_MD4
+#define NO_MD4
+    
+#undef WOLFSSL_NO_SHAKE128
+#define WOLFSSL_NO_SHAKE128
+    
+#undef WOLFSSL_NO_SHAKE256
+#define WOLFSSL_NO_SHAKE256
+
+#undef NO_PWDBASED
+/* #define NO_PWDBASED */
+
+#undef NO_CODING
+/* #define NO_CODING */
+
+#undef NO_ASN_TIME
+/* #define NO_ASN_TIME */
+
+#undef NO_CERTS
+/* #define NO_CERTS */
+
+#undef NO_SIG_WRAPPER
+/* #define NO_SIG_WRAPPER */
+
+/* ACVP Testing ONLY specific settings */
+#if 0
+    #define ACVP_NO_DIR_SUPPORT
+    /* #define DEBUG_ACVP_PRINTF */
+
+    #undef USE_UART_READ_LINE
+    /* #define USE_UART_READ_LINE */
+
+    #undef USE_SMALL_MONTE
+    /* #define USE_SMALL_MONTE */
+
+    #undef WOLFSSL_PUBLIC_MP
+    /* #define WOLFSSL_PUBLIC_MP */
+
+    #undef HAVE_FORCE_FIPS_FAILURE
+    #define HAVE_FORCE_FIPS_FAILURE
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WOLFSSL_USER_SETTINGS_H */

+ 1 - 0
IDE/include.am

@@ -52,6 +52,7 @@ include IDE/zephyr/include.am
 include IDE/AURIX/include.am
 include IDE/MCUEXPRESSO/include.am
 include IDE/Espressif/include.am
+include IDE/STARCORE/include.am
 
 EXTRA_DIST+= IDE/IAR-EWARM IDE/MDK-ARM IDE/MDK5-ARM IDE/MYSQL IDE/LPCXPRESSO IDE/HEXIWEAR IDE/Espressif
 EXTRA_DIST+= IDE/OPENSTM32/README.md