Skip to content

Commit 2323a5c

Browse files
committed
ARM32 ChaCha20, Poly1305: assembly code
Add assembly code for ChaCha20 and Poly1305 on ARM32 when no NEON available.
1 parent e26ac5e commit 2323a5c

14 files changed

Lines changed: 2177 additions & 109 deletions

src/include.am

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -924,8 +924,10 @@ if BUILD_ARMASM
924924
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-poly1305.c
925925
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-poly1305.c
926926
if BUILD_ARMASM_INLINE
927+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-poly1305-asm_c.c
927928
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-poly1305-asm_c.c
928929
else
930+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-poly1305-asm.S
929931
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-poly1305-asm.S
930932
endif !BUILD_ARMASM_INLINE
931933
endif
@@ -999,17 +1001,17 @@ endif
9991001

10001002
if BUILD_CHACHA
10011003
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/chacha.c
1002-
if BUILD_ARMASM_NEON
1003-
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-chacha.c
1004-
else
10051004
if BUILD_ARMASM
1005+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-chacha.c
10061006
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-chacha.c
10071007
if BUILD_ARMASM_INLINE
1008+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-chacha-asm_c.c
10081009
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-chacha-asm_c.c
10091010
else
1011+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-chacha-asm.S
10101012
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-chacha-asm.S
10111013
endif !BUILD_ARMASM_INLINE
1012-
endif BUILD_ARMASM
1014+
else
10131015
if BUILD_RISCV_ASM
10141016
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-chacha.c
10151017
endif BUILD_RISCV_ASM
@@ -1018,7 +1020,7 @@ if BUILD_INTELASM
10181020
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/chacha_asm.S
10191021
endif BUILD_INTELASM
10201022
endif !BUILD_X86_ASM
1021-
endif !BUILD_ARMASM_NEON
1023+
endif !BUILD_ARMASM
10221024
if BUILD_POLY1305
10231025
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/chacha20_poly1305.c
10241026
endif BUILD_POLY1305

wolfcrypt/src/chacha.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,7 @@ Public domain.
7272
#endif /* HAVE_CHACHA */
7373

7474

75-
#if defined(WOLFSSL_ARMASM) && (!defined(WOLFSSL_ARMASM_NO_NEON) || \
76-
defined(__thumb__))
75+
#if defined(WOLFSSL_ARMASM)
7776
/* implementation is located in wolfcrypt/src/port/arm/armv8-chacha.c */
7877

7978
#elif defined(WOLFSSL_RISCV_ASM)

wolfcrypt/src/poly1305.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ extern void poly1305_final_avx2(Poly1305* ctx, byte* mac);
232232
}
233233
#endif/* !WOLFSSL_ARMASM && !WOLFSSL_RISCV_ASM */
234234
/* if not 64 bit then use 32 bit */
235-
#elif !defined(WOLFSSL_ARMASM) || !defined(__thumb__)
235+
#elif !defined(WOLFSSL_ARMASM)
236236

237237
static word32 U8TO32(const byte *p)
238238
{
@@ -269,8 +269,7 @@ static WC_INLINE void u32tole64(const word32 inLe32, byte outLe64[8])
269269
}
270270

271271

272-
#if (!defined(WOLFSSL_ARMASM) || (!defined(__aarch64__) && \
273-
!defined(__thumb__))) && !defined(WOLFSSL_RISCV_ASM)
272+
#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_RISCV_ASM)
274273
/*
275274
This local function operates on a message with a given number of bytes
276275
with a given ctx pointer to a Poly1305 structure.
@@ -789,8 +788,7 @@ int wc_Poly1305Final(Poly1305* ctx, byte* mac)
789788

790789
return 0;
791790
}
792-
#endif /* (!WOLFSSL_ARMASM || (!__aarch64__ && !__thumb__)) &&
793-
* !WOLFSSL_RISCV_ASM */
791+
#endif /* !WOLFSSL_ARMASM && !WOLFSSL_RISCV_ASM */
794792

795793

796794
int wc_Poly1305Update(Poly1305* ctx, const byte* m, word32 bytes)
@@ -885,8 +883,7 @@ int wc_Poly1305Update(Poly1305* ctx, const byte* m, word32 bytes)
885883
/* process full blocks */
886884
if (bytes >= POLY1305_BLOCK_SIZE) {
887885
size_t want = ((size_t)bytes & ~((size_t)POLY1305_BLOCK_SIZE - 1));
888-
#if (!defined(WOLFSSL_ARMASM) || (!defined(__aarch64__) && \
889-
!defined(__thumb__))) && !defined(WOLFSSL_RISCV_ASM)
886+
#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_RISCV_ASM)
890887
int ret;
891888
ret = poly1305_blocks(ctx, m, want);
892889
if (ret != 0)

wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
411411
static const uint32_t L_AES_ARM32_rcon[] = {
412412
0x01000000, 0x02000000, 0x04000000, 0x08000000,
413413
0x10000000, 0x20000000, 0x40000000, 0x80000000,
414-
0x1b000000, 0x36000000,
414+
0x1b000000, 0x36000000,
415415
};
416416

417417
void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks);

0 commit comments

Comments
 (0)