Skip to content

Commit a633d60

Browse files
Merge pull request #392 from billphipps/add_vaultic
Add CryptoCB support for Wisekey VaultIC420
2 parents 7d373b1 + 2ad6723 commit a633d60

15 files changed

Lines changed: 1994 additions & 106 deletions

File tree

.gitignore

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,5 +319,7 @@ tpm/evp_tpm
319319
/ESP32/**/*.sln
320320

321321
# auto-created CMake backups
322-
**/CMakeLists.txt.old
323-
322+
**/CMakeLists.txt.old
323+
324+
# MacOS
325+
.DS_Store

android/wolfssljni-ndk-gradle/app/CMakeLists.txt

Lines changed: 78 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,15 @@ if ("${WOLFSSL_PKG_TYPE}" MATCHES "normal")
6060
-DTFM_TIMING_RESISTANT -DECC_TIMING_RESISTANT
6161
-DHAVE_AESGCM -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8
6262

63+
# Defines added for debugging. These can be removed if debug logging is not needed
64+
# and will increase performance and reduce library footprint size if removed.
65+
-DEBUG_WOLFSSL
66+
6367
# Defines added for wolfCrypt test and benchmark only, may not be needed for your
6468
# own application.
6569
-DUSE_CERT_BUFFERS_2048 -DUSE_CERT_BUFFERS_256 -DNO_WRITE_TEMP_FILES
6670
-DNO_FILESYSTEM -DNO_MAIN_DRIVER
67-
68-
# Defines added for debugging. These can be removed if debug logging is not needed
69-
# and will increase performance and reduce library footprint size if removed.
70-
-DEBUG_WOLFSSL)
71+
)
7172

7273
elseif("${WOLFSSL_PKG_TYPE}" MATCHES "fipsready")
7374
# Add preprocessor defines to CFLAGS, these match those placed into
@@ -116,7 +117,8 @@ elseif("${WOLFSSL_PKG_TYPE}" MATCHES "fipsready")
116117
# Below options are added only for wolfCrypt test and benchmark applications.
117118
# These can be left off / removed when integrating into a real-world application.
118119
-DNO_FILESYSTEM -DUSE_CERT_BUFFERS_2048 -DUSE_CERT_BUFFERS_256
119-
-DNO_WRITE_TEMP_FILES -DNO_MAIN_DRIVER)
120+
-DNO_WRITE_TEMP_FILES -DNO_MAIN_DRIVER
121+
)
120122
endif()
121123

122124
if ("$WOLFSSL_MATH_LIB" MATCHES "fastmath")
@@ -150,6 +152,9 @@ aux_source_directory(${wolfssl_DIR}/src TLS_SOURCES)
150152
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/bio.c)
151153
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/conf.c)
152154
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/pk.c)
155+
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_bn.c)
156+
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_asn1.c)
157+
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_certman.c)
153158
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/ssl_misc.c)
154159
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/x509.c)
155160
list(REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR}/src/x509_str.c)
@@ -264,3 +269,71 @@ target_link_libraries(
264269
wolfssljni
265270
wolfssl
266271
)
272+
273+
# --------------------------- wolfCrypt CryptoCb Source Files --------------------------------------
274+
# set which cryptocb subsystem (if any) will be used
275+
set(WOLFSSL_CRYPTOCB_TYPE "")
276+
#set(WOLFSSL_CRYPTOCB_TYPE "ccb_vaultic")
277+
278+
# Support for ccb_vaultic
279+
if("${WOLFSSL_CRYPTOCB_TYPE}" MATCHES "ccb_vaultic")
280+
set(cryptocb_DIR ${CMAKE_SOURCE_DIR}/../../../ccb_vaultic)
281+
add_definitions (
282+
-DWOLF_CRYPTO_CB -DWOLF_CRYPTO_CB_CMD
283+
)
284+
include_directories(
285+
${cryptocb_DIR}
286+
)
287+
288+
add_library(ccbvaultic SHARED
289+
${cryptocb_DIR}/ccb_vaultic.c)
290+
291+
# TODO Add support for other architectures
292+
if("${ANDROID_ABI}" MATCHES "arm64-v8a")
293+
add_definitions(
294+
-DHAVE_CCBVAULTIC -DWC_USE_DEVID=0x56490420 -DBENCH_EMBEDDED
295+
#-DCCBVAULTIC_NO_AES
296+
#-DCCBVAULTIC_NO_RSA
297+
-DCCBVAULTIC_NO_SHA
298+
#-DCCBVAULTIC_DEBUG
299+
#-DCCBVAULTIC_DEBUG_TIMING
300+
)
301+
302+
set(VAULTIC_DIR ${cryptocb_DIR}/VaultIC-TLS_420/vaultic_tls-4xx)
303+
set(VAULTIC_CHIP 420)
304+
set(CHIP_TARGET TARGETCHIP_VAULTIC_${VAULTIC_CHIP})
305+
add_definitions ( -D${CHIP_TARGET} -DUSE_SPI )
306+
307+
set(VAULTIC_ELIB ${VAULTIC_DIR}/VaultIC-Elib_${VAULTIC_CHIP}/src )
308+
include_directories(
309+
${VAULTIC_ELIB}/common
310+
${VAULTIC_ELIB}/device/vaultic_4XX_family
311+
)
312+
SET(VAULTIC_TLS ${VAULTIC_DIR}/lib/VaultIC_420_TLS_Lib/target/raspberry/dist)
313+
include_directories(
314+
${VAULTIC_TLS}
315+
)
316+
317+
# Select whether to use the debug or release static hardware library
318+
#SET(VAULTIC_TLS_LIB ${VAULTIC_TLS}/VaultIC_420_TLS_Lib-SPI-Debug/libvaultic420_tls.a)
319+
SET(VAULTIC_TLS_LIB ${VAULTIC_TLS}/VaultIC_420_TLS_Lib-SPI-Release/libvaultic420_tls.a)
320+
321+
# Link ccbvaultic to static hardware library
322+
target_link_libraries(
323+
ccbvaultic
324+
PRIVATE ${VAULTIC_TLS_LIB}
325+
)
326+
endif() #arm64-v8a
327+
328+
# Link ccbvaultic to wolfssl and log
329+
target_link_libraries(
330+
ccbvaultic
331+
PUBLIC wolfssl
332+
PUBLIC ${lib-log}
333+
)
334+
# Link wolfssljni to ccbvaultic
335+
target_link_libraries(
336+
wolfssljni
337+
ccbvaultic
338+
)
339+
endif() #ccb_vaultic

android/wolfssljni-ndk-gradle/app/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ android {
55
defaultConfig {
66
applicationId "com.wolfssl.wolfssl_ndk_gradle"
77
minSdkVersion 30
8+
//noinspection ExpiredTargetSdkVersion
89
targetSdkVersion 30
910
versionCode 1
1011
versionName "1.0"
@@ -19,6 +20,7 @@ android {
1920
release {
2021
minifyEnabled false
2122
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23+
signingConfig signingConfigs.debug
2224
}
2325
}
2426
externalNativeBuild {

android/wolfssljni-ndk-gradle/app/src/main/cpp/NativeHelper.c

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,49 @@
2424
#include <wolfcrypt/test/test.h>
2525
#include <wolfcrypt/benchmark/benchmark.h>
2626

27-
JNIEXPORT jint JNICALL
28-
Java_com_wolfssl_wolfssljni_1ndk_1gradle_MainActivity_testWolfCrypt(JNIEnv *env, jobject thiz) {
29-
int ret;
27+
#if defined(WOLF_CRYPTO_CB)
28+
#if defined(HAVE_CCBVAULTIC) && defined(WOLF_CRYPTO_CB_CMD)
29+
#include "ccb_vaultic.h"
30+
#endif
31+
#endif
32+
33+
static int nativeStartup(void)
34+
{
35+
int ret = wolfCrypt_Init();
36+
37+
#ifdef WOLF_CRYPTO_CB
38+
{
39+
#ifdef WC_USE_DEVID
40+
int devId = WC_USE_DEVID;
41+
#else
42+
int devId = INVALID_DEVID;
43+
#endif
44+
45+
#if defined(HAVE_CCBVAULTIC) && defined(WOLF_CRYPTO_CB_CMD)
46+
if((ret == 0) && (devId == CCBVAULTIC420_DEVID)) {
47+
ret = wc_CryptoCb_RegisterDevice((int) devId,
48+
ccbVaultIc_CryptoCb, NULL);
49+
}
50+
#endif
51+
52+
}
53+
#endif /* WOLF_CRYPTO_CB */
3054

31-
ret = wolfCrypt_Init();
3255
#ifdef WC_RNG_SEED_CB
3356
wc_SetSeed_Cb(wc_GenerateSeed);
3457
#endif
58+
return ret;
59+
}
60+
61+
JNIEXPORT jint JNICALL
62+
Java_com_wolfssl_wolfssljni_1ndk_1gradle_MainActivity_testWolfCrypt(JNIEnv *env, jobject thiz) {
63+
(void)env;
64+
(void)thiz;
65+
66+
int ret = nativeStartup();
67+
3568
if (ret == 0) {
69+
/* test uses WC_USE_DEVID for hardware offload tests */
3670
ret = wolfcrypt_test(NULL);
3771
}
3872
wolfCrypt_Cleanup();
@@ -42,13 +76,13 @@ Java_com_wolfssl_wolfssljni_1ndk_1gradle_MainActivity_testWolfCrypt(JNIEnv *env,
4276

4377
JNIEXPORT jint JNICALL
4478
Java_com_wolfssl_wolfssljni_1ndk_1gradle_MainActivity_benchWolfCrypt(JNIEnv *env, jobject thiz) {
45-
int ret = 0;
79+
(void)env;
80+
(void)thiz;
81+
82+
int ret = nativeStartup();
4683

47-
ret = wolfCrypt_Init();
48-
#ifdef WC_RNG_SEED_CB
49-
wc_SetSeed_Cb(wc_GenerateSeed);
50-
#endif
5184
if (ret == 0) {
85+
/* benchmark uses WC_USE_DEVID for hardware offload tests */
5286
ret = benchmark_test(NULL);
5387
}
5488
wolfCrypt_Cleanup();

0 commit comments

Comments
 (0)