Skip to content

Commit 88ad5ce

Browse files
authored
Merge pull request #6607 from SparkiDev/curve25519_thumb2
Thumb2 ASM, Curve25519
2 parents 32a07a7 + 36b92a4 commit 88ad5ce

45 files changed

Lines changed: 51497 additions & 38073 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

configure.ac

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2559,6 +2559,7 @@ then
25592559
# Include options.h
25602560
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
25612561
ENABLED_ARMASM_CRYPTO=yes
2562+
ENABLED_ARMASM_NEON=yes
25622563

25632564
# Check for and set -mstrict-align compiler flag
25642565
# Used to set assumption that Aarch64 systems will not handle
@@ -2578,18 +2579,30 @@ then
25782579
AC_MSG_NOTICE([64bit ARMv8 found, setting mcpu to generic+crypto])
25792580
;;
25802581
armv7a*)
2581-
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv7-a -mfpu=neon -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARM_ARCH=7"
2582+
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv7-a -mfpu=neon -DWOLFSSL_ARM_ARCH=7"
25822583
# Include options.h
25832584
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
25842585
ENABLED_ARMASM_CRYPTO=no
25852586
ENABLED_AESGCM_STREAM=no # not yet implemented
2587+
ENABLED_ARMASM_NEON=yes
25862588
AC_MSG_NOTICE([32bit ARMv7-a found, setting mfpu to neon])
25872589
;;
2590+
armv7m*)
2591+
# QEMU doesn't work with armv7-m
2592+
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv7-r -D__thumb__ -fomit-frame-pointer -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARM_ARCH=7"
2593+
# Include options.h
2594+
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
2595+
ENABLED_ARMASM_CRYPTO=no
2596+
ENABLED_AESGCM_STREAM=no # not yet implemented
2597+
ENABLED_ARMASM_NEON=no
2598+
AC_MSG_NOTICE([32bit ARMv7-m found])
2599+
;;
25882600
*)
2589-
AM_CPPFLAGS="$AM_CPPFLAGS -mfpu=crypto-neon-fp-armv8"
2601+
AM_CPPFLAGS="$AM_CPPFLAGS -mfpu=crypto-neon-fp-armv8 -marm"
25902602
# Include options.h
25912603
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
25922604
ENABLED_ARMASM_CRYPTO=yes
2605+
ENABLED_ARMASM_NEON=yes
25932606
AC_MSG_NOTICE([32bit ARMv8 found, setting mfpu to crypto-neon-fp-armv8])
25942607
;;
25952608
esac
@@ -2606,6 +2619,17 @@ fi
26062619
if test "$ENABLED_ARMASM_SM4" = "yes"; then
26072620
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ARMASM_CRYPTO_SM4"
26082621
fi
2622+
if test "$ENABLED_ARMASM_CRYPTO" = "no"; then
2623+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ARMASM_NO_HW_CRYPTO"
2624+
fi
2625+
if test "$ENABLED_ARMASM_NEON" = "no"; then
2626+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ARMASM_NO_NEON"
2627+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_ARMASM_NO_NEON"
2628+
fi
2629+
2630+
if test "$ENABLED_ARMASM_INLINE" = "yes"; then
2631+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ARMASM_INLINE"
2632+
fi
26092633

26102634
# Xilinx hardened crypto
26112635
AC_ARG_ENABLE([xilinx],
@@ -3598,6 +3622,7 @@ then
35983622
fi
35993623

36003624
AM_CFLAGS="$AM_CFLAGS -DHAVE_CURVE25519"
3625+
AM_CCASFLAGS="$AM_CCASFLAGS -DHAVE_CURVE25519"
36013626
ENABLED_FEMATH=yes
36023627
fi
36033628

@@ -8379,6 +8404,8 @@ AS_IF([test "x$ENABLED_CERTEXT" = "xyes"],
83798404

83808405
AS_IF([test "x$ENABLED_ED25519" = "xyes" && test "x$ENABLED_32BIT" = "xno"],
83818406
[AM_CFLAGS="$AM_CFLAGS -DHAVE_ED25519"])
8407+
AS_IF([test "x$ENABLED_ED25519" = "xyes" && test "x$ENABLED_32BIT" = "xno"],
8408+
[AM_CCASFLAGS="$AM_CCASFLAGS -DHAVE_ED25519"])
83828409

83838410
AS_IF([test "x$ENABLED_ED25519_SMALL" = "xyes"],
83848411
[AM_CFLAGS="$AM_CFLAGS -DED25519_SMALL"])
@@ -8841,6 +8868,7 @@ AM_CONDITIONAL([BUILD_AESCCM],[test "x$ENABLED_AESCCM" = "xyes" || test "x$ENABL
88418868
AM_CONDITIONAL([BUILD_ARMASM],[test "x$ENABLED_ARMASM" = "xyes"])
88428869
AM_CONDITIONAL([BUILD_ARMASM_INLINE],[test "x$ENABLED_ARMASM_INLINE" = "xyes"])
88438870
AM_CONDITIONAL([BUILD_ARMASM_CRYPTO],[test "x$ENABLED_ARMASM_CRYPTO" = "xyes"])
8871+
AM_CONDITIONAL([BUILD_ARMASM_NEON],[test "x$ENABLED_ARMASM_NEON" = "xyes"])
88448872
AM_CONDITIONAL([BUILD_XILINX],[test "x$ENABLED_XILINX" = "xyes"])
88458873
AM_CONDITIONAL([BUILD_AESNI],[test "x$ENABLED_AESNI" = "xyes"])
88468874
AM_CONDITIONAL([BUILD_INTELASM],[test "x$ENABLED_INTELASM" = "xyes"])

src/include.am

Lines changed: 101 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -157,13 +157,17 @@ endif
157157

158158
if BUILD_AES
159159
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/aes.c
160-
if BUILD_ARMASM
160+
if BUILD_ARMASM_NEON
161161
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-aes.c
162162
if !BUILD_ARMASM_CRYPTO
163+
if BUILD_ARMASM_INLINE
164+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c
165+
else
163166
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-aes-asm.S
164-
endif
165-
endif
166-
endif
167+
endif !BUILD_ARMASM_INLINE
168+
endif !BUILD_ARMASM_CRYPTO
169+
endif BUILD_ARMASM_NEON
170+
endif BUILD_AES
167171

168172
if BUILD_AESNI
169173
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/aes_asm.S
@@ -178,47 +182,65 @@ if BUILD_SHA
178182
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha.c
179183
endif
180184

181-
if BUILD_ARMASM
185+
if BUILD_ARMASM_NEON
182186
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha256.c
183187
if BUILD_ARMASM_INLINE
184188
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha256-asm_c.c
185189
else
186190
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha256-asm.S
187-
endif
191+
endif !BUILD_ARMASM_INLINE
192+
else
193+
if BUILD_ARMASM
194+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha256.c
195+
if BUILD_ARMASM_INLINE
196+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha256-asm_c.c
197+
else
198+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha256-asm.S
199+
endif !BUILD_ARMASM_INLINE
188200
else
189201
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha256.c
190202
if BUILD_INTELASM
191203
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha256_asm.S
192-
endif
193-
endif
204+
endif BUILD_INTELASM
205+
endif !BUILD_ARMASM
206+
endif !BUILD_ARMASM_NEON
194207

195208
if BUILD_SHA512
196-
if BUILD_ARMASM
209+
if BUILD_ARMASM_NEON
197210
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha512.c
198211
if BUILD_ARMASM_INLINE
199212
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha512-asm_c.c
200213
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha512-asm_c.c
201214
else
202215
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha512-asm.S
203216
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha512-asm.S
204-
endif
217+
endif !BUILD_ARMASM_INLINE
218+
else
219+
if BUILD_ARMASM
220+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha512.c
221+
if BUILD_ARMASM_INLINE
222+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha512-asm_c.c
223+
else
224+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha512-asm.S
225+
endif !BUILD_ARMASM_INLINE
205226
else
206227
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha512.c
207228
if BUILD_INTELASM
208229
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha512_asm.S
209-
endif
210-
endif
211-
endif
230+
endif BUILD_INTELASM
231+
endif !BUILD_ARMASM
232+
endif !BUILD_ARMASM_NEON
233+
endif BUILD_SHA512
212234

213235
if BUILD_SHA3
214236
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha3.c
215-
if BUILD_ARMASM
237+
if BUILD_ARMASM_NEON
216238
if BUILD_ARMASM_INLINE
217239
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha3-asm_c.c
218240
else
219241
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha3-asm.S
220-
endif
221-
endif
242+
endif !BUILD_ARMASM_INLINE
243+
endif BUILD_ARMASM_NEON
222244
if BUILD_INTELASM
223245
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha3_asm.S
224246
endif
@@ -283,18 +305,27 @@ endif !BUILD_FIPS_CURRENT
283305

284306
if !BUILD_FIPS_CURRENT
285307
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha256.c
286-
if BUILD_ARMASM
308+
if BUILD_ARMASM_NEON
287309
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha256.c
288310
if BUILD_ARMASM_INLINE
289311
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha256-asm_c.c
290312
else
291313
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha256-asm.S
292-
endif
314+
endif !BUILD_ARMASM_INLINE
315+
else
316+
if BUILD_ARMASM
317+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha256.c
318+
if BUILD_ARMASM_INLINE
319+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha256-asm_c.c
320+
else
321+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha256-asm.S
322+
endif !BUILD_ARMASM_INLINE
293323
else
294324
if BUILD_INTELASM
295325
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha256_asm.S
296-
endif
297-
endif
326+
endif BUILD_INTELASM
327+
endif !BUILD_ARMASM
328+
endif !BUILD_ARMASM_NEON
298329
endif !BUILD_FIPS_CURRENT
299330

300331
if BUILD_AFALG
@@ -370,15 +401,19 @@ endif
370401
if !BUILD_FIPS_CURRENT
371402
if BUILD_AES
372403
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/aes.c
373-
if BUILD_ARMASM
404+
if BUILD_ARMASM_NEON
374405
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-aes.c
375406
if !BUILD_ARMASM_CRYPTO
407+
if BUILD_ARMASM_INLINE
408+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c
409+
else
376410
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-aes-asm.S
411+
endif !BUILD_ARMASM_INLINE
377412
endif !BUILD_ARMASM_CRYPTO
378-
endif BUILD_ARMASM
413+
endif BUILD_ARMASM_NEON
379414
if BUILD_AFALG
380415
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/af_alg/afalg_aes.c
381-
endif
416+
endif BUILD_AFALG
382417
endif BUILD_AES
383418
endif !BUILD_FIPS_CURRENT
384419

@@ -402,34 +437,43 @@ endif !BUILD_FIPS_CURRENT
402437

403438
if !BUILD_FIPS_CURRENT
404439
if BUILD_SHA512
405-
if BUILD_ARMASM
440+
if BUILD_ARMASM_NEON
406441
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha512.c
407442
if BUILD_ARMASM_INLINE
408443
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha512-asm_c.c
409444
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha512-asm_c.c
410445
else
411446
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha512-asm.S
412447
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha512-asm.S
413-
endif
448+
endif !BUILD_ARMASM_INLINE
449+
else
450+
if BUILD_ARMASM
451+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha512.c
452+
if BUILD_ARMASM_INLINE
453+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha512-asm_c.c
454+
else
455+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha512-asm.S
456+
endif !BUILD_ARMASM_INLINE
414457
else
415458
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha512.c
416459
if BUILD_INTELASM
417460
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha512_asm.S
418-
endif
419-
endif
420-
endif
461+
endif BUILD_INTELASM
462+
endif !BUILD_ARMASM
463+
endif !BUILD_ARMASM_NEON
464+
endif BUILD_SHA512
421465
endif !BUILD_FIPS_CURRENT
422466

423467
if !BUILD_FIPS_CURRENT
424468
if BUILD_SHA3
425469
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha3.c
426-
if BUILD_ARMASM
470+
if BUILD_ARMASM_NEON
427471
if BUILD_ARMASM_INLINE
428472
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha3-asm_c.c
429473
else
430474
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha3-asm.S
431-
endif
432-
endif
475+
endif !BUILD_ARMASM_INLINE
476+
endif BUILD_ARMASM_NEON
433477
if BUILD_INTELASM
434478
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha3_asm.S
435479
endif
@@ -569,7 +613,7 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/blake2s.c
569613
endif
570614

571615
if BUILD_CHACHA
572-
if BUILD_ARMASM
616+
if BUILD_ARMASM_NEON
573617
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-chacha.c
574618
else
575619
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/chacha.c
@@ -637,19 +681,29 @@ if BUILD_INTELASM
637681
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/fe_x25519_asm.S
638682
else
639683
if BUILD_ARMASM
684+
if BUILD_ARMASM_NEON
640685
if BUILD_ARMASM_INLINE
641686
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-curve25519_c.c
642687
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-curve25519_c.c
643688
else
644689
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-curve25519.S
645690
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-curve25519.S
646-
endif
691+
endif !BUILD_ARMASM_INLINE
692+
else
693+
if BUILD_ARMASM_INLINE
694+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-curve25519_c.c
695+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-curve25519_c.c
696+
else
697+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-curve25519.S
698+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-curve25519.S
699+
endif !BUILD_ARMASM_INLINE
700+
endif !BUILD_ARMASM_NEON
647701
else
648702
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/fe_operations.c
649-
endif
650-
endif
651-
endif
652-
endif
703+
endif !BUILD_ARMASM
704+
endif !BUILD_INTELASM
705+
endif !BUILD_CURVE25519_SMALL
706+
endif BUILD_FEMATH
653707

654708
if BUILD_GEMATH
655709
if BUILD_ED25519_SMALL
@@ -661,12 +715,22 @@ if BUILD_INTELASM
661715
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/fe_x25519_asm.S
662716
else
663717
if BUILD_ARMASM
718+
if BUILD_ARMASM_NEON
664719
if BUILD_ARMASM_INLINE
665720
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-curve25519_c.c
666721
else
667722
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-curve25519.S
668723
endif
669724
else
725+
if BUILD_ARMASM_INLINE
726+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-curve25519_c.c
727+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-curve25519_c.c
728+
else
729+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-curve25519.S
730+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-curve25519.S
731+
endif
732+
endif
733+
else
670734
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/fe_operations.c
671735
endif
672736
endif

0 commit comments

Comments
 (0)