Skip to content

Commit 01ba609

Browse files
authored
Merge pull request wolfSSL#9702 from danielinux/ta100_2025
[Microchip TA-100] Fix port + update to cryptoauthlib v3.6.0
2 parents 9f759fa + ae0d09c commit 01ba609

19 files changed

Lines changed: 1823 additions & 210 deletions

File tree

.github/workflows/atecc608-sim.yml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ concurrency:
1919
#
2020
# The simulator's own Dockerfile.wolfcrypt clones a pinned wolfSSL release.
2121
# We patch it to COPY the PR checkout instead so CI reflects the PR's source.
22-
# We also strip the inline test.c patch RUN block: those guard fixes now live
23-
# upstream in this tree, so re-applying them would fail with "patch target not
24-
# found". The remaining sed-based patches in the Dockerfile (atmel.c XMEMSET
25-
# swap and atmel_set_slot_allocator visibility) are no-ops on pre-patched
26-
# source and their grep validations still pass, so we leave them alone.
22+
# We also strip the inline test.c patch RUN block and the older atmel.c config
23+
# copy hotfix: both now live upstream in this tree, so re-applying them would
24+
# fail with "patch target not found". The atmel_set_slot_allocator visibility
25+
# patch remains because the simulator harness still depends on that exported
26+
# symbol.
2727

2828
env:
2929
SIMULATORS_REF: 773fe70
@@ -48,7 +48,7 @@ jobs:
4848
- name: Stage PR wolfSSL into simulator build context
4949
run: mv wolfssl-src simulators/ATECC608Sim/wolfssl
5050

51-
- name: Patch Dockerfile to use PR wolfSSL and drop redundant test.c patches
51+
- name: Patch Dockerfile to use PR wolfSSL and drop redundant source patches
5252
working-directory: simulators/ATECC608Sim
5353
run: |
5454
# Replace the (multi-line) `RUN git clone ... wolfssl.git /app/wolfssl`
@@ -60,11 +60,19 @@ jobs:
6060
grep -q '^ *COPY wolfssl /app/wolfssl$' Dockerfile.wolfcrypt
6161
! grep -q 'git clone .*wolfssl\.git' Dockerfile.wolfcrypt
6262
63+
sed -i "/^# wolfSSL's wolfCrypt_ATECC_SetConfig only copies I2C-specific fields from$/,/^ grep -q 'XMEMCPY(&cfg_ateccx08a_i2c_pi, cfg' \\/app\\/wolfssl\\/wolfcrypt\\/src\\/port\\/atmel\\/atmel\\.c$/d" Dockerfile.wolfcrypt
64+
! grep -q "cfg_ateccx08a_i2c_pi" Dockerfile.wolfcrypt
65+
6366
# Strip the inline test.c patch RUN block -- those guard fixes now
6467
# live upstream in this tree.
6568
sed -i "/^RUN python3 - <<'PY'$/,/^PY$/d" Dockerfile.wolfcrypt
6669
! grep -q "RUN python3 - <<'PY'" Dockerfile.wolfcrypt
6770
71+
# The simulator Dockerfile predates the new configure contract where
72+
# --with-cryptoauthlib must be paired with --enable-microchip=<dev>.
73+
sed -i 's/--with-cryptoauthlib=\/usr \\/--enable-microchip=608 \\\n --with-cryptoauthlib=\/usr \\/' Dockerfile.wolfcrypt
74+
grep -q -- '--enable-microchip=608' Dockerfile.wolfcrypt
75+
6876
- uses: docker/setup-buildx-action@v3
6977

7078
- name: Build wolfCrypt-ATECC608 test image

.wolfssl_known_macro_extras

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ ARDUINO_UNOR4_WIFI
3030
ASN_DUMP_OID
3131
ASN_TEMPLATE_SKIP_ISCA_CHECK
3232
ATCAPRINTF
33+
ATCA_HAL_I2C
3334
ATCA_ENABLE_DEPRECATED
35+
ATCA_TFLEX_SUPPORT
36+
ATECC_DEV_TYPE
3437
AVR
3538
BASE64_NO_TABLE
3639
BLAKE2B_SELFTEST
@@ -580,6 +583,7 @@ STSAFE_I2C_BUS
580583
STSE_CONF_ECC_BRAINPOOL_P_256
581584
STSE_CONF_ECC_BRAINPOOL_P_384
582585
SYS_CLOCK_REALTIME
586+
TA100_ECC_TRACE
583587
TASK_EXTRA_STACK_SIZE
584588
TCP_NODELAY
585589
TFM_ALREADY_SET
@@ -813,8 +817,10 @@ WOLFSSL_LMS_ROOT_LEVELS
813817
WOLFSSL_LPC43xx
814818
WOLFSSL_MAKE_SYSTEM_NAME_LINUX
815819
WOLFSSL_MAKE_SYSTEM_NAME_WSL
820+
WOLFSSL_MANUALLY_SELECT_DEVICE_CONFIG
816821
WOLFSSL_MDK5
817822
WOLFSSL_MEM_FAIL_COUNT
823+
WOLFSSL_MICROCHIP_AESGCM
818824
WOLFSSL_MLKEM_INVNTT_UNROLL
819825
WOLFSSL_MLKEM_NO_MALLOC
820826
WOLFSSL_MLKEM_NTT_UNROLL
@@ -834,6 +840,7 @@ WOLFSSL_NO_CRL_NEXT_DATE
834840
WOLFSSL_NO_CT_MAX_MIN
835841
WOLFSSL_NO_DEBUG_CERTS
836842
WOLFSSL_NO_DECODE_EXTRA
843+
WOLFSSL_NO_DEL_HANDLE
837844
WOLFSSL_NO_DER_TO_PEM
838845
WOLFSSL_NO_DH186
839846
WOLFSSL_NO_DTLS_SIZE_CHECK

configure.ac

Lines changed: 139 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2975,48 +2975,158 @@ AC_ARG_WITH([maxq10xx],
29752975
]
29762976
)
29772977

2978+
AC_ARG_ENABLE([microchip],
2979+
[AS_HELP_STRING([--enable-microchip],[Enable wolfSSL support for microchip/atmel 508/608/100 (default: disabled)])],
2980+
[ ENABLED_ATMEL=$enableval ],
2981+
[ ENABLED_ATMEL=no ]
2982+
)
2983+
2984+
if test "$ENABLED_ATMEL" != "no"
2985+
then
2986+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_MICROCHIP"
2987+
2988+
for v in `echo $ENABLED_ATMEL | tr "," " "`
2989+
do
2990+
case $v in
2991+
508)
2992+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ATECC508A"
2993+
;;
2994+
2995+
608)
2996+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ATECC608A"
2997+
;;
2998+
2999+
100)
3000+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_MICROCHIP_TA100 -DMICROCHIP_DEV_TYPE=TA100"
3001+
;;
3002+
esac
3003+
done
3004+
fi
3005+
3006+
29783007
# Microchip/Atmel CryptoAuthLib
29793008
ENABLED_CRYPTOAUTHLIB="no"
2980-
trylibatcadir=""
29813009
AC_ARG_WITH([cryptoauthlib],
2982-
[AS_HELP_STRING([--with-cryptoauthlib=PATH],[PATH to CryptoAuthLib install (default /usr/)])],
2983-
[
2984-
AC_MSG_CHECKING([for cryptoauthlib])
2985-
CPPFLAGS="$CPPFLAGS -DWOLFSSL_ATECC508A"
2986-
LIBS="$LIBS -lcryptoauth"
3010+
[AS_HELP_STRING([--with-cryptoauthlib=PATH],
3011+
[PATH to CryptoAuthLib install (default: system paths)])],
3012+
[with_cryptoauthlib=$withval],
3013+
[with_cryptoauthlib=no])
3014+
3015+
AS_IF([test "x$with_cryptoauthlib" != "xno"], [
3016+
AS_IF([test "x$ENABLED_ATMEL" = "xno"], [
3017+
AC_MSG_ERROR([--with-cryptoauthlib requires --enable-microchip=<devices>.])
3018+
])
3019+
AC_MSG_CHECKING([for CryptoAuthLib])
3020+
3021+
libdir=""
3022+
incdir=""
3023+
cryptoauthlib_found="no"
3024+
3025+
saved_LIBS="$LIBS"
3026+
saved_LDFLAGS="$LDFLAGS"
3027+
saved_CPPFLAGS="$CPPFLAGS"
3028+
saved_CFLAGS="$CFLAGS"
3029+
3030+
# Method 1: Try pkg-config first (most reliable)
3031+
m4_ifdef([PKG_CHECK_MODULES], [
3032+
PKG_CHECK_MODULES([CRYPTOAUTHLIB], [cryptoauthlib], [
3033+
CPPFLAGS="$CRYPTOAUTHLIB_CFLAGS $CPPFLAGS"
3034+
CFLAGS="$CRYPTOAUTHLIB_CFLAGS $CFLAGS"
3035+
LIBS="$CRYPTOAUTHLIB_LIBS $LIBS"
3036+
cryptoauthlib_found="pkg-config"
3037+
], [:])
3038+
])
29873039
2988-
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <cryptoauthlib.h>]], [[ atcab_init(0); ]])],[ libatca_linked=yes ],[ libatca_linked=no ])
3040+
# Method 2: Manual search if pkg-config failed
3041+
AS_IF([test "x$cryptoauthlib_found" = "xno"], [
3042+
AS_IF([test "x$with_cryptoauthlib" = "xyes"], [
3043+
search_dirs="/usr /usr/local"
3044+
], [
3045+
search_dirs="$with_cryptoauthlib"
3046+
])
29893047
2990-
if test "x$libatca_linked" = "xno" ; then
2991-
if test "x$withval" != "xno" ; then
2992-
trylibatcadir=$withval
2993-
fi
2994-
if test "x$withval" = "xyes" ; then
2995-
trylibatcadir="/usr"
3048+
for trylibatcadir in $search_dirs; do
3049+
for try_libdir in "$trylibatcadir/lib" "$trylibatcadir/lib64"; do
3050+
if test -f "$try_libdir/libcryptoauth.so" || test -f "$try_libdir/libcryptoauth.a"; then
3051+
libdir="$try_libdir"
3052+
break
3053+
fi
3054+
done
3055+
3056+
if test -z "$libdir"; then
3057+
if test -x /usr/bin/dpkg-architecture; then
3058+
DEB_HOST_MULTIARCH=`dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null`
3059+
if test -n "$DEB_HOST_MULTIARCH"; then
3060+
try_libdir="$trylibatcadir/lib/$DEB_HOST_MULTIARCH"
3061+
if test -f "$try_libdir/libcryptoauth.so" || test -f "$try_libdir/libcryptoauth.a"; then
3062+
libdir="$try_libdir"
3063+
fi
3064+
fi
3065+
fi
29963066
fi
29973067
2998-
LDFLAGS="$LDFLAGS -L$trylibatcadir/lib"
2999-
CPPFLAGS="$CPPFLAGS -I$trylibatcadir/lib"
3000-
3001-
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <cryptoauthlib.h>]], [[ atcab_init(0); ]])],[ libatca_linked=yes ],[ libatca_linked=no ])
3068+
for try_incdir in "$trylibatcadir/include/cryptoauthlib" "$trylibatcadir/include"; do
3069+
if test -f "$try_incdir/cryptoauthlib.h"; then
3070+
incdir="$try_incdir"
3071+
break
3072+
fi
3073+
done
30023074
3003-
if test "x$libatca_linked" = "xno" ; then
3004-
AC_MSG_ERROR([cryptoauthlib isn't found.
3005-
If it's already installed, specify its path using --with-cryptoauthlib=/dir/])
3075+
if test -n "$libdir" && test -n "$incdir"; then
3076+
break
30063077
fi
3078+
libdir=""
3079+
incdir=""
3080+
done
30073081
3008-
AM_LDFLAGS="$AM_LDFLAGS -L$trylibatcadir/lib"
3009-
AM_CFLAGS="$AM_CFLAGS -I$trylibatcadir/lib"
3010-
AC_MSG_RESULT([yes])
3011-
else
3012-
AC_MSG_RESULT([yes])
3082+
if test -n "$libdir" && test -n "$incdir"; then
3083+
CPPFLAGS="-I$incdir $CPPFLAGS"
3084+
CFLAGS="-I$incdir $CFLAGS"
3085+
LDFLAGS="-L$libdir $LDFLAGS"
3086+
LIBS="-lcryptoauth $LIBS"
3087+
cryptoauthlib_found="$libdir"
30133088
fi
3089+
])
30143090
3015-
ENABLED_CRYPTOAUTHLIB="yes"
3016-
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ATECC508A"
3017-
]
3018-
)
3091+
AS_IF([test "x$cryptoauthlib_found" != "xno"], [
3092+
wolfssl_include=""
3093+
AS_IF([test -f "${srcdir}/wolfssl/wolfcrypt/types.h"], [
3094+
wolfssl_include="-I${srcdir}"
3095+
], [test -f "${srcdir}/wolfssl.h"], [
3096+
wolfssl_include="-I${srcdir}"
3097+
])
30193098
3099+
test_CPPFLAGS="$wolfssl_include $CPPFLAGS"
3100+
test_CFLAGS="$wolfssl_include $CFLAGS"
3101+
3102+
saved_test_CPPFLAGS="$CPPFLAGS"
3103+
saved_test_CFLAGS="$CFLAGS"
3104+
CPPFLAGS="$test_CPPFLAGS"
3105+
CFLAGS="$test_CFLAGS"
3106+
3107+
AC_LINK_IFELSE([AC_LANG_PROGRAM(
3108+
[[#include <cryptoauthlib.h>]],
3109+
[[atcab_init(0); return 0;]])],
3110+
[
3111+
ENABLED_CRYPTOAUTHLIB="yes"
3112+
AC_MSG_RESULT([yes ($cryptoauthlib_found)])
3113+
AC_DEFINE([HAVE_CRYPTOAUTHLIB], [1], [CryptoAuthLib support])
3114+
CPPFLAGS="$saved_test_CPPFLAGS"
3115+
CFLAGS="$saved_test_CFLAGS"
3116+
],
3117+
[
3118+
LIBS="$saved_LIBS"
3119+
LDFLAGS="$saved_LDFLAGS"
3120+
CPPFLAGS="$saved_CPPFLAGS"
3121+
CFLAGS="$saved_CFLAGS"
3122+
AC_MSG_RESULT([no - compilation failed])
3123+
AC_MSG_ERROR([CryptoAuthLib found but compilation check failed. Check config.log for details.])
3124+
])
3125+
], [
3126+
AC_MSG_RESULT([no - library not found])
3127+
AC_MSG_ERROR([CryptoAuthLib not found. Install it or specify path with --with-cryptoauthlib=/path])
3128+
])
3129+
])
30203130

30213131
# TropicSquare TROPIC01
30223132
# Example: "./configure --with-tropic01=/home/pi/libtropic"

tests/api/test_ecc.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,7 +1422,8 @@ int test_wc_ecc_pointFns(void)
14221422
EXPECT_DECLS;
14231423
#if defined(HAVE_ECC) && defined(HAVE_ECC_KEY_EXPORT) && \
14241424
!defined(WC_NO_RNG) && !defined(WOLFSSL_ATECC508A) && \
1425-
!defined(WOLFSSL_ATECC608A) && !defined(WOLF_CRYPTO_CB_ONLY_ECC)
1425+
!defined(WOLFSSL_ATECC608A) && !defined(WOLF_CRYPTO_CB_ONLY_ECC) && \
1426+
!defined(WOLFSSL_MICROCHIP_TA100)
14261427
ecc_key key;
14271428
WC_RNG rng;
14281429
int ret;
@@ -1525,7 +1526,8 @@ int test_wc_ecc_shared_secret_ssh(void)
15251526
#if defined(HAVE_ECC) && defined(HAVE_ECC_DHE) && \
15261527
!defined(WC_NO_RNG) && !defined(WOLFSSL_ATECC508A) && \
15271528
!defined(WOLFSSL_ATECC608A) && !defined(PLUTON_CRYPTO_ECC) && \
1528-
!defined(WOLFSSL_CRYPTOCELL) && !defined(WOLF_CRYPTO_CB_ONLY_ECC)
1529+
!defined(WOLFSSL_CRYPTOCELL) && !defined(WOLF_CRYPTO_CB_ONLY_ECC) && \
1530+
!defined(WOLFSSL_MICROCHIP_TA100)
15291531
ecc_key key;
15301532
ecc_key key2;
15311533
WC_RNG rng;
@@ -1605,7 +1607,8 @@ int test_wc_ecc_verify_hash_ex(void)
16051607
EXPECT_DECLS;
16061608
#if defined(HAVE_ECC) && defined(HAVE_ECC_SIGN) && defined(WOLFSSL_PUBLIC_MP) \
16071609
&& !defined(WC_NO_RNG) && !defined(WOLFSSL_ATECC508A) && \
1608-
!defined(WOLFSSL_ATECC608A) && !defined(WOLFSSL_KCAPI_ECC)
1610+
!defined(WOLFSSL_ATECC608A) && !defined(WOLFSSL_KCAPI_ECC) && \
1611+
!defined(WOLFSSL_MICROCHIP_TA100)
16091612
ecc_key key;
16101613
WC_RNG rng;
16111614
int ret;
@@ -1699,6 +1702,7 @@ int test_wc_ecc_mulmod(void)
16991702
EXPECT_DECLS;
17001703
#if defined(HAVE_ECC) && !defined(WC_NO_RNG) && \
17011704
!(defined(WOLFSSL_ATECC508A) || defined(WOLFSSL_ATECC608A) || \
1705+
defined(WOLFSSL_MICROCHIP_TA100) || \
17021706
defined(WOLFSSL_VALIDATE_ECC_IMPORT)) && \
17031707
!defined(WOLF_CRYPTO_CB_ONLY_ECC)
17041708
ecc_key key1;

tests/api/test_ossl_ec.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ int test_wolfSSL_EC_POINT(void)
429429
X, Y, ctx), 0);
430430

431431
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
432+
!defined(WOLFSSL_MICROCHIP_TA100) && \
432433
!defined(HAVE_SELFTEST) && !defined(WOLFSSL_SP_MATH) && \
433434
!defined(WOLF_CRYPTO_CB_ONLY_ECC)
434435
ExpectIntEQ(EC_POINT_add(NULL, NULL, NULL, NULL, ctx), 0);
@@ -520,6 +521,7 @@ int test_wolfSSL_EC_POINT(void)
520521
ExpectIntEQ(EC_POINT_invert(group, new_point, ctx), 1);
521522

522523
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
524+
!defined(WOLFSSL_MICROCHIP_TA100) && \
523525
!defined(HAVE_SELFTEST) && !defined(WOLFSSL_SP_MATH) && \
524526
!defined(WOLF_CRYPTO_CB_ONLY_ECC)
525527
{
@@ -801,6 +803,7 @@ int test_wolfSSL_SPAKE(void)
801803

802804
#if defined(OPENSSL_EXTRA) && defined(HAVE_ECC) && !defined(WOLFSSL_ATECC508A) \
803805
&& !defined(WOLFSSL_ATECC608A) && !defined(HAVE_SELFTEST) && \
806+
!defined(WOLFSSL_MICROCHIP_TA100) && \
804807
!defined(WOLFSSL_SP_MATH) && !defined(WOLF_CRYPTO_CB_ONLY_ECC)
805808
BIGNUM* x = NULL; /* kdc priv */
806809
BIGNUM* y = NULL; /* client priv */

0 commit comments

Comments
 (0)