Skip to content

Commit 0352b38

Browse files
Merge pull request #6731 from SparkiDev/aes_arm32_thumb2
AES ARM32 and Thumb2 ASM: fixup ARM32 and add Thumb2
2 parents cd02d51 + 196f154 commit 0352b38

22 files changed

Lines changed: 6806 additions & 953 deletions

configure.ac

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2275,7 +2275,7 @@ AC_ARG_ENABLE([aescbc],
22752275
if test "$ENABLED_AESCBC" = "no"
22762276
then
22772277
AM_CFLAGS="$AM_CFLAGS -DNO_AES_CBC"
2278-
AM_CCASFLAGS="$AM_CCASFLAGS -DHAVE_AES_CBC"
2278+
AM_CCASFLAGS="$AM_CCASFLAGS -DNO_AES_CBC"
22792279
fi
22802280

22812281
# AES-CBC length checks (checks that input lengths are multiples of block size)
@@ -2589,7 +2589,7 @@ then
25892589
AC_MSG_NOTICE([64bit ARMv8 found, setting mcpu to generic+crypto])
25902590
;;
25912591
armv7a*)
2592-
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv7-a -mfpu=neon -DWOLFSSL_ARM_ARCH=7"
2592+
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv7-a -mfpu=neon -DWOLFSSL_ARM_ARCH=7 -marm"
25932593
# Include options.h
25942594
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
25952595
ENABLED_ARMASM_CRYPTO=no

src/include.am

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,16 +157,26 @@ endif
157157

158158
if BUILD_AES
159159
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/aes.c
160-
if BUILD_ARMASM_NEON
160+
if BUILD_ARMASM
161161
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-aes.c
162+
endif BUILD_ARMASM
163+
if BUILD_ARMASM_NEON
162164
if !BUILD_ARMASM_CRYPTO
163165
if BUILD_ARMASM_INLINE
164166
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c
165167
else
166168
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-aes-asm.S
167169
endif !BUILD_ARMASM_INLINE
168170
endif !BUILD_ARMASM_CRYPTO
169-
endif BUILD_ARMASM_NEON
171+
else
172+
if BUILD_ARMASM
173+
if BUILD_ARMASM_INLINE
174+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-aes-asm_c.c
175+
else
176+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-aes-asm.S
177+
endif !BUILD_ARMASM_INLINE
178+
endif BUILD_ARMASM
179+
endif !BUILD_ARMASM_NEON
170180
endif BUILD_AES
171181

172182
if BUILD_AESNI
@@ -401,16 +411,28 @@ endif
401411
if !BUILD_FIPS_CURRENT
402412
if BUILD_AES
403413
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/aes.c
404-
if BUILD_ARMASM_NEON
414+
if BUILD_ARMASM
405415
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-aes.c
416+
endif BUILD_ARMASM
417+
if BUILD_ARMASM_NEON
406418
if !BUILD_ARMASM_CRYPTO
407419
if BUILD_ARMASM_INLINE
408420
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c
421+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-aes-asm_c.c
409422
else
410423
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-aes-asm.S
424+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-aes-asm.S
411425
endif !BUILD_ARMASM_INLINE
412426
endif !BUILD_ARMASM_CRYPTO
413-
endif BUILD_ARMASM_NEON
427+
else
428+
if BUILD_ARMASM
429+
if BUILD_ARMASM_INLINE
430+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-aes-asm_c.c
431+
else
432+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-aes-asm.S
433+
endif !BUILD_ARMASM_INLINE
434+
endif BUILD_ARMASM
435+
endif !BUILD_ARMASM_NEON
414436
if BUILD_AFALG
415437
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/af_alg/afalg_aes.c
416438
endif BUILD_AFALG

wolfcrypt/src/aes.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
9797
#include <wolfcrypt/src/misc.c>
9898
#endif
9999

100-
#if !defined(WOLFSSL_ARMASM) || defined(WOLFSSL_ARMASM_NO_NEON)
100+
#ifndef WOLFSSL_ARMASM
101101

102102
#ifdef WOLFSSL_IMX6_CAAM_BLOB
103103
/* case of possibly not using hardware acceleration for AES but using key
@@ -4573,7 +4573,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
45734573
#endif /* NEED_AES_CTR_SOFT */
45744574

45754575
#endif /* WOLFSSL_AES_COUNTER */
4576-
#endif /* !WOLFSSL_ARMASM || WOLFSSL_ARMASM_NO_NEON */
4576+
#endif /* !WOLFSSL_ARMASM */
45774577

45784578

45794579
/*
@@ -4620,7 +4620,7 @@ static WC_INLINE void IncCtr(byte* ctr, word32 ctrSz)
46204620

46214621
#endif
46224622

4623-
#if defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_ARMASM_NO_NEON)
4623+
#ifdef WOLFSSL_ARMASM
46244624
/* implementation is located in wolfcrypt/src/port/arm/armv8-aes.c */
46254625

46264626
#elif defined(WOLFSSL_AFALG)
@@ -8851,7 +8851,7 @@ int wc_AesCcmCheckTagSize(int sz)
88518851
return 0;
88528852
}
88538853

8854-
#if defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_ARMASM_NO_NEON)
8854+
#ifdef WOLFSSL_ARMASM
88558855
/* implementation located in wolfcrypt/src/port/arm/armv8-aes.c */
88568856

88578857
#elif defined(HAVE_COLDFIRE_SEC)

wolfcrypt/src/curve25519.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,13 @@ const curve25519_set_type curve25519_sets[] = {
5858
}
5959
};
6060

61-
static const unsigned char kCurve25519BasePoint[CURVE25519_KEYSIZE] = {9};
61+
static const word32 kCurve25519BasePoint[CURVE25519_KEYSIZE/sizeof(word32)] = {
62+
#ifdef BIG_ENDIAN_ORDER
63+
0x09000000
64+
#else
65+
9
66+
#endif
67+
};
6268

6369
/* Curve25519 private key must be less than order */
6470
/* These functions clamp private k and check it */
@@ -133,7 +139,7 @@ int wc_curve25519_make_pub(int public_size, byte* pub, int private_size,
133139

134140
SAVE_VECTOR_REGISTERS(return _svr_ret;);
135141

136-
ret = curve25519(pub, priv, kCurve25519BasePoint);
142+
ret = curve25519(pub, priv, (byte*)kCurve25519BasePoint);
137143

138144
RESTORE_VECTOR_REGISTERS();
139145
#endif

wolfcrypt/src/ge_operations.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -921,10 +921,14 @@ int ge_compress_key(byte* out, const byte* xIn, const byte* yIn, word32 keySz)
921921
{
922922
ge_p2 g;
923923
byte bArray[ED25519_KEY_SIZE];
924+
byte x[ED25519_KEY_SIZE];
925+
byte y[ED25519_KEY_SIZE];
924926
word32 i;
925927

926-
fe_frombytes(g.X, xIn);
927-
fe_frombytes(g.Y, yIn);
928+
XMEMCPY(x, xIn, ED25519_KEY_SIZE);
929+
XMEMCPY(y, yIn, ED25519_KEY_SIZE);
930+
fe_frombytes(g.X, x);
931+
fe_frombytes(g.Y, y);
928932
fe_1(g.Z);
929933

930934
ge_tobytes(bArray, &g);

0 commit comments

Comments
 (0)