Updates per PR, cleanups, and error handling.
parent
74ede69f3e
commit
77f58467b5
|
@ -45,7 +45,7 @@ static int nativeStartup(void)
|
||||||
#if defined(HAVE_CCBVAULTIC) && defined(WOLF_CRYPTO_CB_CMD)
|
#if defined(HAVE_CCBVAULTIC) && defined(WOLF_CRYPTO_CB_CMD)
|
||||||
if((ret == 0) && (devId == CCBVAULTIC420_DEVID)) {
|
if((ret == 0) && (devId == CCBVAULTIC420_DEVID)) {
|
||||||
ret = wc_CryptoCb_RegisterDevice((int) devId,
|
ret = wc_CryptoCb_RegisterDevice((int) devId,
|
||||||
ccbVaultIc_CryptoDevCb, NULL);
|
ccbVaultIc_CryptoCb, NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ LD=${NDK_LD}
|
||||||
WOLFSSL_DIR?=../../wolfssl
|
WOLFSSL_DIR?=../../wolfssl
|
||||||
|
|
||||||
# Relative path to VaultIC dev kit source
|
# Relative path to VaultIC dev kit source
|
||||||
VAULTIC_DIR?=VaultIC-TLS_420/vaultic_tls-4xx
|
VAULTIC_DIR?=./VaultIC-TLS_420/vaultic_tls-4xx
|
||||||
|
|
||||||
# Common settings and files
|
# Common settings and files
|
||||||
CFLAGS+=-I. -O2 -DHAVE_CCBVAULTIC
|
CFLAGS+=-I. -O2 -DHAVE_CCBVAULTIC
|
||||||
|
@ -19,7 +19,6 @@ OBJS=ccb_vaultic.o
|
||||||
CFLAGS+=-DCCBVAULTIC_DEBUG
|
CFLAGS+=-DCCBVAULTIC_DEBUG
|
||||||
CFLAGS+=-DCCBVAULTIC_DEBUG_TIMING
|
CFLAGS+=-DCCBVAULTIC_DEBUG_TIMING
|
||||||
#CFLAGS+=-DCCBVAULTIC_DEBUG_ALL
|
#CFLAGS+=-DCCBVAULTIC_DEBUG_ALL
|
||||||
#CFLAGS+=-DSPI_TRACE_ERRORS
|
|
||||||
|
|
||||||
# Optionally disable certain kinds of offload
|
# Optionally disable certain kinds of offload
|
||||||
#CFLAGS+=-DCCBVAULTIC_NO_AES
|
#CFLAGS+=-DCCBVAULTIC_NO_AES
|
||||||
|
@ -37,6 +36,7 @@ VAULTIC_CHIP=420
|
||||||
CHIP_TARGET=TARGETCHIP_VAULTIC_$(VAULTIC_CHIP)
|
CHIP_TARGET=TARGETCHIP_VAULTIC_$(VAULTIC_CHIP)
|
||||||
CFLAGS+= -D$(CHIP_TARGET)
|
CFLAGS+= -D$(CHIP_TARGET)
|
||||||
CFLAGS+= -DUSE_SPI
|
CFLAGS+= -DUSE_SPI
|
||||||
|
#CFLAGS+=-DSPI_TRACE_ERRORS
|
||||||
|
|
||||||
VAULTIC_ELIB?=$(VAULTIC_DIR)/VaultIC-Elib_$(VAULTIC_CHIP)/src
|
VAULTIC_ELIB?=$(VAULTIC_DIR)/VaultIC-Elib_$(VAULTIC_CHIP)/src
|
||||||
CFLAGS+=-I$(VAULTIC_ELIB)/common
|
CFLAGS+=-I$(VAULTIC_ELIB)/common
|
||||||
|
@ -52,7 +52,7 @@ CFLAGS+=-DWC_USE_DEVID=0x56490420 -DBENCH_EMBEDDED -DNO_MAIN_DRIVER
|
||||||
TEST_OBJS:=$(WOLFSSL_DIR)/wolfcrypt/test/test.o main-test.o
|
TEST_OBJS:=$(WOLFSSL_DIR)/wolfcrypt/test/test.o main-test.o
|
||||||
BENCH_OBJS:=$(WOLFSSL_DIR)/wolfcrypt/benchmark/benchmark.o main-bench.o
|
BENCH_OBJS:=$(WOLFSSL_DIR)/wolfcrypt/benchmark/benchmark.o main-bench.o
|
||||||
|
|
||||||
|
#Makefile rules
|
||||||
all: wolfcrypt-test wolfcrypt-benchmark
|
all: wolfcrypt-test wolfcrypt-benchmark
|
||||||
|
|
||||||
wolfcrypt-test: $(OBJS) $(TEST_OBJS)
|
wolfcrypt-test: $(OBJS) $(TEST_OBJS)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -21,14 +21,11 @@
|
||||||
#ifndef CCB_VAULTIC_H
|
#ifndef CCB_VAULTIC_H
|
||||||
#define CCB_VAULTIC_H
|
#define CCB_VAULTIC_H
|
||||||
|
|
||||||
#include "ccb_vaultic_defs.h"
|
/* VaultIC DevID MSBs are ASCII "VI" */
|
||||||
#include "wolfssl/options.h"
|
#define CCBVAULTIC_DEVID (0x56490000ul)
|
||||||
|
#define CCBVAULTIC420_DEVID (CCBVAULTIC_DEVID + 0x0420)
|
||||||
|
|
||||||
#if !defined(WOLF_CRYPTO_CB)
|
#ifdef HAVE_CCBVAULTIC
|
||||||
#error "Missing WOLF_CRYPTO_CB. Reconfigure wolfssl with --enable-cryptocb"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wolfssl/wolfcrypt/cryptocb.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Implementation of wolfCrypt cryptocb callbacks
|
* Implementation of wolfCrypt cryptocb callbacks
|
||||||
|
@ -53,6 +50,12 @@ typedef struct {
|
||||||
size_t aescbc_keylen;
|
size_t aescbc_keylen;
|
||||||
} ccbVaultIc_Context;
|
} ccbVaultIc_Context;
|
||||||
|
|
||||||
|
/* ccbVaultIc_Context static initializer */
|
||||||
|
#define CCBVAULTIC_CONTEXT_INITIALIZER \
|
||||||
|
{ \
|
||||||
|
.initialized = 0 \
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize the Wisekey VaultIC library and clear the context.
|
/* Initialize the Wisekey VaultIC library and clear the context.
|
||||||
* Returns: 0 on success
|
* Returns: 0 on success
|
||||||
* BAD_FUNC_ARGS with NULL context
|
* BAD_FUNC_ARGS with NULL context
|
||||||
|
@ -64,12 +67,15 @@ int ccbVaultIc_Init(ccbVaultIc_Context *c);
|
||||||
/* Close the Wisekey VaultIC library. */
|
/* Close the Wisekey VaultIC library. */
|
||||||
void ccbVaultIc_Cleanup(ccbVaultIc_Context *c);
|
void ccbVaultIc_Cleanup(ccbVaultIc_Context *c);
|
||||||
|
|
||||||
|
#ifdef WOLF_CRYPTO_CB
|
||||||
|
#include "wolfssl/wolfcrypt/cryptocb.h" /* For wc_CryptInfo */
|
||||||
|
|
||||||
/* Register this callback and associate with a context using:
|
/* Register this callback and associate with a context using:
|
||||||
* ccbVaultIc_Context ctx={0};
|
* ccbVaultIc_Context ctx=CCBVAULTIC_CONTEXT_INITIALIZER;
|
||||||
* ccbVaultIc_Init(&ctx);
|
* ccbVaultIc_Init(&ctx);
|
||||||
* wc_CryptoCb_RegisterDevice(
|
* wc_CryptoCb_RegisterDevice(
|
||||||
* CCBVAULTIC420_DEVID,
|
* CCBVAULTIC420_DEVID,
|
||||||
* ccbVaultIc_CryptoDevCb,
|
* ccbVaultIc_CryptoCb,
|
||||||
* &ctx);
|
* &ctx);
|
||||||
* wc_Aes aes={0};
|
* wc_Aes aes={0};
|
||||||
* wc_AesInit(&aes, NULL, CCBVAULTIC420_DEVID);
|
* wc_AesInit(&aes, NULL, CCBVAULTIC420_DEVID);
|
||||||
|
@ -77,8 +83,11 @@ void ccbVaultIc_Cleanup(ccbVaultIc_Context *c);
|
||||||
* CRYPTOCB_UNAVAILABLE if not initialized or not implemented
|
* CRYPTOCB_UNAVAILABLE if not initialized or not implemented
|
||||||
* MEMORY_E if memory allocation fails
|
* MEMORY_E if memory allocation fails
|
||||||
*/
|
*/
|
||||||
int ccbVaultIc_CryptoDevCb(int devId,
|
int ccbVaultIc_CryptoCb(int devId,
|
||||||
wc_CryptoInfo* info,
|
wc_CryptoInfo* info,
|
||||||
void* ctx);
|
void* ctx);
|
||||||
|
#endif /* WOLF_CRYPTO_CB */
|
||||||
|
|
||||||
|
#endif /* HAVE_CCBVAULTIC */
|
||||||
|
|
||||||
#endif /* CCB_VAULTIC_H_ */
|
#endif /* CCB_VAULTIC_H_ */
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
/*
|
|
||||||
* ccb_vaultic_defs.h
|
|
||||||
*
|
|
||||||
* Copyright (C) 2023 wolfSSL Inc.
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CCB_VAULTIC_DEFS_H
|
|
||||||
#define CCB_VAULTIC_DEFS_H
|
|
||||||
|
|
||||||
/* VaultIC DevID MSBs are ASCII "VI" */
|
|
||||||
#define CCBVAULTIC_DEVID (0x56490000ul)
|
|
||||||
#define CCBVAULTIC420_DEVID (CCBVAULTIC_DEVID + 0x0420)
|
|
||||||
|
|
||||||
/* Key/Group ID's to support temporary wolfSSL usage */
|
|
||||||
#define CCBVAULTIC_WOLFSSL_GRPID 0xBB
|
|
||||||
#define CCBVAULTIC_TMPAES_KEYID 0x01
|
|
||||||
#define CCBVAULTIC_TMPHMAC_KEYID 0x02
|
|
||||||
#define CCBVAULTIC_TMPRSA_KEYID 0x03
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -17,43 +17,98 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#ifndef WOLFSSL_USER_SETTINGS
|
||||||
|
#include "wolfssl/options.h"
|
||||||
|
#endif
|
||||||
|
#include "wolfssl/wolfcrypt/settings.h" /* For X-defines */
|
||||||
|
|
||||||
#include "wolfssl/options.h"
|
/* wolfCrypt includes */
|
||||||
#include "wolfssl/ssl.h"
|
#include "wolfssl/wolfcrypt/wc_port.h" /* For Init/Cleanup */
|
||||||
|
|
||||||
|
#ifdef WOLF_CRYPTO_CB
|
||||||
|
#include "wolfssl/wolfcrypt/cryptocb.h" /* For Register/Unregister */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CCBVAULTIC
|
||||||
|
#include "ccb_vaultic.h" /* For devId and cryptocb */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Local include */
|
||||||
#include "wolfcrypt/benchmark/benchmark.h"
|
#include "wolfcrypt/benchmark/benchmark.h"
|
||||||
|
|
||||||
#include "ccb_vaultic.h"
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
(void)argc; (void)argv;
|
(void)argc;
|
||||||
|
(void)argv;
|
||||||
|
|
||||||
int rc=0;
|
int rc = 0;
|
||||||
|
|
||||||
/* Initialize wolfSSL and wolfCrypt */
|
/* Initialize wolfCrypt */
|
||||||
rc=wolfSSL_Init();
|
rc = wolfCrypt_Init();
|
||||||
if(rc!=WOLFSSL_SUCCESS) {
|
if (rc == 0) {
|
||||||
fprintf(stderr, "Failed to initialize wolfSSL: %d\n", rc);
|
|
||||||
return(rc);
|
#ifdef WOLF_CRYPTO_CB
|
||||||
|
/* Allocate/initialize context */
|
||||||
|
void* ctx = NULL;
|
||||||
|
#ifndef WOLF_CRYPTO_CB_CMD
|
||||||
|
/* External allocation/initialization of hardware context */
|
||||||
|
#ifdef HAVE_CCBVAULTIC
|
||||||
|
static ccbVaultIc_Context ctx_storage = CCBVAULTIC_CONTEXT_INITIALIZER;
|
||||||
|
ctx = &ctx_storage;
|
||||||
|
rc = ccbVaultIc_Init(ctx);
|
||||||
|
#else
|
||||||
|
/* Add other elif hardware here */
|
||||||
|
#endif
|
||||||
|
#endif /* WOLF_CRYPTO_CB_CMD */
|
||||||
|
|
||||||
|
if (rc == 0) {
|
||||||
|
/* Setup callback and devId */
|
||||||
|
int devId = INVALID_DEVID;
|
||||||
|
CryptoDevCallbackFunc ccb = NULL;
|
||||||
|
#ifdef HAVE_CCBVAULTIC
|
||||||
|
devId = CCBVAULTIC420_DEVID;
|
||||||
|
ccb = ccbVaultIc_CryptoCb;
|
||||||
|
#else
|
||||||
|
/* Add other elif hardware here */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Register cryptocb */
|
||||||
|
rc = wc_CryptoCb_RegisterDevice(
|
||||||
|
devId,
|
||||||
|
ccb,
|
||||||
|
ctx);
|
||||||
|
#endif /* WOLF_CRYPTO_CB */
|
||||||
|
|
||||||
|
if (rc == 0) {
|
||||||
|
/* Run benchmarks */
|
||||||
|
rc = benchmark_test(NULL);
|
||||||
|
|
||||||
|
#ifdef WOLF_CRYPTO_CB
|
||||||
|
/* Unregister the callback */
|
||||||
|
wc_CryptoCb_UnRegisterDevice(devId);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
printf("Failed to register cryptocb:%d (%x) "\
|
||||||
|
" with devId:%x ccb:%p\n",
|
||||||
|
rc, rc, devId, ccb);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef WOLF_CRYPTO_CB
|
||||||
|
#ifndef WOLF_CRYPTO_CB_CMD
|
||||||
|
/* External deallocation of hardware context */
|
||||||
|
#ifdef HAVE_CCBVAULTIC
|
||||||
|
ccbVaultIc_Cleanup(ctx);
|
||||||
|
#else
|
||||||
|
/* Add other hardware cleanup here */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
printf(" Failed to initialize hardware: %d (%x)\n", rc, rc);
|
||||||
|
}
|
||||||
|
wolfCrypt_Cleanup();
|
||||||
|
}else {
|
||||||
|
printf("Failed to initialize wolfCrypt: %d (%x)\n", rc, rc);
|
||||||
}
|
}
|
||||||
|
return rc;
|
||||||
/* Register VaultIC as cryptocb */
|
|
||||||
rc = wc_CryptoCb_RegisterDevice(CCBVAULTIC420_DEVID,
|
|
||||||
ccbVaultIc_CryptoDevCb, NULL);
|
|
||||||
if(rc) {
|
|
||||||
fprintf(stderr, "Failed to register cryptocb: %d\n", rc);
|
|
||||||
wolfSSL_Cleanup();
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Run benchmarks */
|
|
||||||
benchmark_test(NULL);
|
|
||||||
|
|
||||||
wc_CryptoCb_UnRegisterDevice(CCBVAULTIC420_DEVID);
|
|
||||||
wolfSSL_Cleanup();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,41 +17,98 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "wolfssl/options.h"
|
#ifndef WOLFSSL_USER_SETTINGS
|
||||||
|
#include "wolfssl/options.h"
|
||||||
|
#endif
|
||||||
|
#include "wolfssl/wolfcrypt/settings.h" /* For X-defines */
|
||||||
|
|
||||||
#include "wolfssl/ssl.h"
|
/* wolfCrypt includes */
|
||||||
|
#include "wolfssl/wolfcrypt/wc_port.h" /* For Init/Cleanup */
|
||||||
|
|
||||||
|
#ifdef WOLF_CRYPTO_CB
|
||||||
|
#include "wolfssl/wolfcrypt/cryptocb.h" /* For Register/Unregister */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CCBVAULTIC
|
||||||
|
#include "ccb_vaultic.h" /* For devId and cryptocb */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Local include */
|
||||||
#include "wolfcrypt/test/test.h"
|
#include "wolfcrypt/test/test.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "ccb_vaultic.h"
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
(void)argc; (void)argv;
|
(void)argc;
|
||||||
|
(void)argv;
|
||||||
|
|
||||||
int rc=0;
|
int rc = 0;
|
||||||
|
|
||||||
/* Initialize wolfSSL and wolfCrypt */
|
/* Initialize wolfCrypt */
|
||||||
rc=wolfSSL_Init();
|
rc = wolfCrypt_Init();
|
||||||
if(rc!=WOLFSSL_SUCCESS) {
|
if (rc == 0) {
|
||||||
fprintf(stderr, "Failed to initialize wolfSSL: %d\n", rc);
|
|
||||||
return(rc);
|
#ifdef WOLF_CRYPTO_CB
|
||||||
|
/* Allocate/initialize context */
|
||||||
|
void* ctx = NULL;
|
||||||
|
#ifndef WOLF_CRYPTO_CB_CMD
|
||||||
|
/* External allocation/initialization of hardware context */
|
||||||
|
#ifdef HAVE_CCBVAULTIC
|
||||||
|
static ccbVaultIc_Context ctx_storage = CCBVAULTIC_CONTEXT_INITIALIZER;
|
||||||
|
ctx = &ctx_storage;
|
||||||
|
rc = ccbVaultIc_Init(ctx);
|
||||||
|
#else
|
||||||
|
/* Add other elif hardware here */
|
||||||
|
#endif
|
||||||
|
#endif /* WOLF_CRYPTO_CB_CMD */
|
||||||
|
|
||||||
|
if (rc == 0) {
|
||||||
|
/* Setup callback and devId */
|
||||||
|
int devId = INVALID_DEVID;
|
||||||
|
CryptoDevCallbackFunc ccb = NULL;
|
||||||
|
#ifdef HAVE_CCBVAULTIC
|
||||||
|
devId = CCBVAULTIC420_DEVID;
|
||||||
|
ccb = ccbVaultIc_CryptoCb;
|
||||||
|
#else
|
||||||
|
/* Add other elif hardware here */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Register cryptocb */
|
||||||
|
rc = wc_CryptoCb_RegisterDevice(
|
||||||
|
devId,
|
||||||
|
ccb,
|
||||||
|
ctx);
|
||||||
|
#endif /* WOLF_CRYPTO_CB */
|
||||||
|
|
||||||
|
if (rc == 0) {
|
||||||
|
/* Run tests */
|
||||||
|
rc = wolfcrypt_test(NULL);
|
||||||
|
|
||||||
|
#ifdef WOLF_CRYPTO_CB
|
||||||
|
/* Unregister the callback */
|
||||||
|
wc_CryptoCb_UnRegisterDevice(devId);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
printf("Failed to register cryptocb:%d (%x) "\
|
||||||
|
" with devId:%x ccb:%p\n",
|
||||||
|
rc, rc, devId, ccb);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef WOLF_CRYPTO_CB
|
||||||
|
#ifndef WOLF_CRYPTO_CB_CMD
|
||||||
|
/* External deallocation of hardware context */
|
||||||
|
#ifdef HAVE_CCBVAULTIC
|
||||||
|
ccbVaultIc_Cleanup(ctx);
|
||||||
|
#else
|
||||||
|
/* Add other hardware cleanup here */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
printf(" Failed to initialize hardware: %d (%x)\n", rc, rc);
|
||||||
|
}
|
||||||
|
wolfCrypt_Cleanup();
|
||||||
|
}else {
|
||||||
|
printf("Failed to initialize wolfCrypt: %d (%x)\n", rc, rc);
|
||||||
}
|
}
|
||||||
/* Register VaultIC as cryptocb */
|
return rc;
|
||||||
rc = wc_CryptoCb_RegisterDevice(CCBVAULTIC420_DEVID,
|
|
||||||
ccbVaultIc_CryptoDevCb, NULL);
|
|
||||||
if(rc) {
|
|
||||||
fprintf(stderr, "Failed to register cryptocb: %d\n", rc);
|
|
||||||
wolfSSL_Cleanup();
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
wolfcrypt_test(NULL);
|
|
||||||
|
|
||||||
wc_CryptoCb_UnRegisterDevice(CCBVAULTIC420_DEVID);
|
|
||||||
wolfSSL_Cleanup();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue