mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-04 21:24:43 +02:00
Merge pull request #8590 from SparkiDev/arm32_no_assign_reg
ARM32/Thumb2 ASM: fix WOLFSSL_NO_VAR_ASSIGN_REG
This commit is contained in:
@@ -3850,13 +3850,13 @@ L_AES_ECB_decrypt_end:
|
|||||||
.type AES_CBC_decrypt, %function
|
.type AES_CBC_decrypt, %function
|
||||||
AES_CBC_decrypt:
|
AES_CBC_decrypt:
|
||||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||||
ldr r8, [sp, #36]
|
|
||||||
ldr r4, [sp, #40]
|
|
||||||
mov lr, r0
|
mov lr, r0
|
||||||
adr r0, L_AES_ARM32_td_ecb
|
adr r0, L_AES_ARM32_td_ecb
|
||||||
ldr r0, [r0]
|
ldr r0, [r0]
|
||||||
mov r12, r2
|
mov r12, r2
|
||||||
adr r2, L_AES_ARM32_td4
|
adr r2, L_AES_ARM32_td4
|
||||||
|
ldr r8, [sp, #36]
|
||||||
|
ldr r4, [sp, #40]
|
||||||
push {r3, r4}
|
push {r3, r4}
|
||||||
cmp r8, #10
|
cmp r8, #10
|
||||||
beq L_AES_CBC_decrypt_loop_block_128
|
beq L_AES_CBC_decrypt_loop_block_128
|
||||||
|
@@ -44,11 +44,17 @@
|
|||||||
#ifdef __IAR_SYSTEMS_ICC__
|
#ifdef __IAR_SYSTEMS_ICC__
|
||||||
#define __asm__ asm
|
#define __asm__ asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
#endif /* __IAR_SYSTEMS_ICC__ */
|
#endif /* __IAR_SYSTEMS_ICC__ */
|
||||||
#ifdef __KEIL__
|
#ifdef __KEIL__
|
||||||
#define __asm__ __asm
|
#define __asm__ __asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
#endif /* __KEIL__ */
|
#endif /* __KEIL__ */
|
||||||
|
#ifdef __ghs__
|
||||||
|
#define __asm__ __asm
|
||||||
|
#define __volatile__
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
#endif /* __ghs__ */
|
||||||
#ifndef NO_AES
|
#ifndef NO_AES
|
||||||
#include <wolfssl/wolfcrypt/aes.h>
|
#include <wolfssl/wolfcrypt/aes.h>
|
||||||
|
|
||||||
@@ -204,12 +210,23 @@ static const word32* L_AES_ARM32_te = L_AES_ARM32_te_data;
|
|||||||
* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
|
* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
|
||||||
#ifdef HAVE_AES_DECRYPT
|
#ifdef HAVE_AES_DECRYPT
|
||||||
void AES_invert_key(unsigned char* ks_p, word32 rounds_p);
|
void AES_invert_key(unsigned char* ks_p, word32 rounds_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
|
void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
|
||||||
|
#else
|
||||||
|
void AES_invert_key(unsigned char* ks, word32 rounds)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register unsigned char* ks asm ("r0") = (unsigned char*)ks_p;
|
register unsigned char* ks asm ("r0") = (unsigned char*)ks_p;
|
||||||
register word32 rounds asm ("r1") = (word32)rounds_p;
|
register word32 rounds asm ("r1") = (word32)rounds_p;
|
||||||
register word32* L_AES_ARM32_te_c asm ("r2") = (word32*)L_AES_ARM32_te;
|
register word32* L_AES_ARM32_te_c asm ("r2") = (word32*)L_AES_ARM32_te;
|
||||||
register word32* L_AES_ARM32_td_c asm ("r3") = (word32*)L_AES_ARM32_td;
|
register word32* L_AES_ARM32_td_c asm ("r3") = (word32*)L_AES_ARM32_td;
|
||||||
|
#else
|
||||||
|
register word32* L_AES_ARM32_te_c = (word32*)L_AES_ARM32_te;
|
||||||
|
|
||||||
|
register word32* L_AES_ARM32_td_c = (word32*)L_AES_ARM32_td;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"mov r12, %[L_AES_ARM32_te]\n\t"
|
"mov r12, %[L_AES_ARM32_te]\n\t"
|
||||||
@@ -405,10 +422,17 @@ void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
|
|||||||
"str r8, [%[ks]], #4\n\t"
|
"str r8, [%[ks]], #4\n\t"
|
||||||
"subs r11, r11, #1\n\t"
|
"subs r11, r11, #1\n\t"
|
||||||
"bne L_AES_invert_key_mix_loop_%=\n\t"
|
"bne L_AES_invert_key_mix_loop_%=\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [ks] "+r" (ks), [rounds] "+r" (rounds),
|
: [ks] "+r" (ks), [rounds] "+r" (rounds),
|
||||||
[L_AES_ARM32_te] "+r" (L_AES_ARM32_te_c),
|
[L_AES_ARM32_te] "+r" (L_AES_ARM32_te_c),
|
||||||
[L_AES_ARM32_td] "+r" (L_AES_ARM32_td_c)
|
[L_AES_ARM32_td] "+r" (L_AES_ARM32_td_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [ks] "r" (ks), [rounds] "r" (rounds),
|
||||||
|
[L_AES_ARM32_te] "r" (L_AES_ARM32_te_c),
|
||||||
|
[L_AES_ARM32_td] "r" (L_AES_ARM32_td_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
||||||
"r10", "r11"
|
"r10", "r11"
|
||||||
);
|
);
|
||||||
@@ -423,15 +447,27 @@ static const word32 L_AES_ARM32_rcon[] = {
|
|||||||
|
|
||||||
void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
|
void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
|
||||||
unsigned char* ks_p);
|
unsigned char* ks_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
|
void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
|
||||||
unsigned char* ks_p)
|
unsigned char* ks_p)
|
||||||
|
#else
|
||||||
|
void AES_set_encrypt_key(const unsigned char* key, word32 len,
|
||||||
|
unsigned char* ks)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register const unsigned char* key asm ("r0") = (const unsigned char*)key_p;
|
register const unsigned char* key asm ("r0") = (const unsigned char*)key_p;
|
||||||
register word32 len asm ("r1") = (word32)len_p;
|
register word32 len asm ("r1") = (word32)len_p;
|
||||||
register unsigned char* ks asm ("r2") = (unsigned char*)ks_p;
|
register unsigned char* ks asm ("r2") = (unsigned char*)ks_p;
|
||||||
register word32* L_AES_ARM32_te_c asm ("r3") = (word32*)L_AES_ARM32_te;
|
register word32* L_AES_ARM32_te_c asm ("r3") = (word32*)L_AES_ARM32_te;
|
||||||
register word32* L_AES_ARM32_rcon_c asm ("r4") =
|
register word32* L_AES_ARM32_rcon_c asm ("r4") =
|
||||||
(word32*)&L_AES_ARM32_rcon;
|
(word32*)&L_AES_ARM32_rcon;
|
||||||
|
#else
|
||||||
|
register word32* L_AES_ARM32_te_c = (word32*)L_AES_ARM32_te;
|
||||||
|
|
||||||
|
register word32* L_AES_ARM32_rcon_c = (word32*)&L_AES_ARM32_rcon;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"mov r8, %[L_AES_ARM32_te]\n\t"
|
"mov r8, %[L_AES_ARM32_te]\n\t"
|
||||||
@@ -929,23 +965,36 @@ void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
|
|||||||
"bne L_AES_set_encrypt_key_loop_128_%=\n\t"
|
"bne L_AES_set_encrypt_key_loop_128_%=\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_set_encrypt_key_end_%=: \n\t"
|
"L_AES_set_encrypt_key_end_%=: \n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks),
|
: [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks),
|
||||||
[L_AES_ARM32_te] "+r" (L_AES_ARM32_te_c),
|
[L_AES_ARM32_te] "+r" (L_AES_ARM32_te_c),
|
||||||
[L_AES_ARM32_rcon] "+r" (L_AES_ARM32_rcon_c)
|
[L_AES_ARM32_rcon] "+r" (L_AES_ARM32_rcon_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [key] "r" (key), [len] "r" (len), [ks] "r" (ks),
|
||||||
|
[L_AES_ARM32_te] "r" (L_AES_ARM32_te_c),
|
||||||
|
[L_AES_ARM32_rcon] "r" (L_AES_ARM32_rcon_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r5", "r6", "r7", "r8"
|
: "memory", "cc", "r12", "lr", "r5", "r6", "r7", "r8"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
|
void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
|
||||||
const word32* ks_p);
|
const word32* ks_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
|
void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
|
||||||
const word32* ks_p)
|
const word32* ks_p)
|
||||||
|
#else
|
||||||
|
void AES_encrypt_block(const word32* te, int nr, int len, const word32* ks)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register const word32* te asm ("r0") = (const word32*)te_p;
|
register const word32* te asm ("r0") = (const word32*)te_p;
|
||||||
register int nr asm ("r1") = (int)nr_p;
|
register int nr asm ("r1") = (int)nr_p;
|
||||||
register int len asm ("r2") = (int)len_p;
|
register int len asm ("r2") = (int)len_p;
|
||||||
register const word32* ks asm ("r3") = (const word32*)ks_p;
|
register const word32* ks asm ("r3") = (const word32*)ks_p;
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"\n"
|
"\n"
|
||||||
@@ -1584,8 +1633,13 @@ void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
|
|||||||
"eor r5, r5, r9\n\t"
|
"eor r5, r5, r9\n\t"
|
||||||
"eor r6, r6, r10\n\t"
|
"eor r6, r6, r10\n\t"
|
||||||
"eor r7, r7, r11\n\t"
|
"eor r7, r7, r11\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [te] "+r" (te), [nr] "+r" (nr), [len] "+r" (len), [ks] "+r" (ks)
|
: [te] "+r" (te), [nr] "+r" (nr), [len] "+r" (len), [ks] "+r" (ks)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [te] "r" (te), [nr] "r" (nr), [len] "r" (len), [ks] "r" (ks)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "lr"
|
: "memory", "cc", "lr"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1595,9 +1649,15 @@ void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
|
|||||||
static const word32* L_AES_ARM32_te_ecb = L_AES_ARM32_te_data;
|
static const word32* L_AES_ARM32_te_ecb = L_AES_ARM32_te_data;
|
||||||
void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p);
|
unsigned long len_p, const unsigned char* ks_p, int nr_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p)
|
unsigned long len_p, const unsigned char* ks_p, int nr_p)
|
||||||
|
#else
|
||||||
|
void AES_ECB_encrypt(const unsigned char* in, unsigned char* out,
|
||||||
|
unsigned long len, const unsigned char* ks, int nr)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
||||||
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
||||||
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
||||||
@@ -1605,11 +1665,19 @@ void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
register int nr asm ("r4") = (int)nr_p;
|
register int nr asm ("r4") = (int)nr_p;
|
||||||
register word32* L_AES_ARM32_te_ecb_c asm ("r5") =
|
register word32* L_AES_ARM32_te_ecb_c asm ("r5") =
|
||||||
(word32*)L_AES_ARM32_te_ecb;
|
(word32*)L_AES_ARM32_te_ecb;
|
||||||
|
#else
|
||||||
|
register word32* L_AES_ARM32_te_ecb_c = (word32*)L_AES_ARM32_te_ecb;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"mov lr, %[in]\n\t"
|
"mov lr, %[in]\n\t"
|
||||||
"mov r0, %[L_AES_ARM32_te_ecb]\n\t"
|
"mov r0, %[L_AES_ARM32_te_ecb]\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"mov r12, r4\n\t"
|
"mov r12, r4\n\t"
|
||||||
|
#else
|
||||||
|
"mov r12, %[nr]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"push {%[ks]}\n\t"
|
"push {%[ks]}\n\t"
|
||||||
"cmp r12, #10\n\t"
|
"cmp r12, #10\n\t"
|
||||||
"beq L_AES_ECB_encrypt_start_block_128_%=\n\t"
|
"beq L_AES_ECB_encrypt_start_block_128_%=\n\t"
|
||||||
@@ -1837,9 +1905,15 @@ void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
"\n"
|
"\n"
|
||||||
"L_AES_ECB_encrypt_end_%=: \n\t"
|
"L_AES_ECB_encrypt_end_%=: \n\t"
|
||||||
"pop {%[ks]}\n\t"
|
"pop {%[ks]}\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
||||||
[nr] "+r" (nr), [L_AES_ARM32_te_ecb] "+r" (L_AES_ARM32_te_ecb_c)
|
[nr] "+r" (nr), [L_AES_ARM32_te_ecb] "+r" (L_AES_ARM32_te_ecb_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
|
||||||
|
[nr] "r" (nr), [L_AES_ARM32_te_ecb] "r" (L_AES_ARM32_te_ecb_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r6", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "cc", "r12", "lr", "r6", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1851,10 +1925,16 @@ static const word32* L_AES_ARM32_te_cbc = L_AES_ARM32_te_data;
|
|||||||
void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
||||||
unsigned char* iv_p);
|
unsigned char* iv_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
||||||
unsigned char* iv_p)
|
unsigned char* iv_p)
|
||||||
|
#else
|
||||||
|
void AES_CBC_encrypt(const unsigned char* in, unsigned char* out,
|
||||||
|
unsigned long len, const unsigned char* ks, int nr, unsigned char* iv)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
||||||
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
||||||
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
||||||
@@ -1863,10 +1943,22 @@ void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
register unsigned char* iv asm ("r5") = (unsigned char*)iv_p;
|
register unsigned char* iv asm ("r5") = (unsigned char*)iv_p;
|
||||||
register word32* L_AES_ARM32_te_cbc_c asm ("r6") =
|
register word32* L_AES_ARM32_te_cbc_c asm ("r6") =
|
||||||
(word32*)L_AES_ARM32_te_cbc;
|
(word32*)L_AES_ARM32_te_cbc;
|
||||||
|
#else
|
||||||
|
register word32* L_AES_ARM32_te_cbc_c = (word32*)L_AES_ARM32_te_cbc;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"mov r8, r4\n\t"
|
"mov r8, r4\n\t"
|
||||||
|
#else
|
||||||
|
"mov r8, %[nr]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"mov r9, r5\n\t"
|
"mov r9, r5\n\t"
|
||||||
|
#else
|
||||||
|
"mov r9, %[iv]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"mov lr, %[in]\n\t"
|
"mov lr, %[in]\n\t"
|
||||||
"mov r0, %[L_AES_ARM32_te_cbc]\n\t"
|
"mov r0, %[L_AES_ARM32_te_cbc]\n\t"
|
||||||
"ldm r9, {r4, r5, r6, r7}\n\t"
|
"ldm r9, {r4, r5, r6, r7}\n\t"
|
||||||
@@ -2110,10 +2202,17 @@ void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
"L_AES_CBC_encrypt_end_%=: \n\t"
|
"L_AES_CBC_encrypt_end_%=: \n\t"
|
||||||
"pop {%[ks], r9}\n\t"
|
"pop {%[ks], r9}\n\t"
|
||||||
"stm r9, {r4, r5, r6, r7}\n\t"
|
"stm r9, {r4, r5, r6, r7}\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
||||||
[nr] "+r" (nr), [iv] "+r" (iv),
|
[nr] "+r" (nr), [iv] "+r" (iv),
|
||||||
[L_AES_ARM32_te_cbc] "+r" (L_AES_ARM32_te_cbc_c)
|
[L_AES_ARM32_te_cbc] "+r" (L_AES_ARM32_te_cbc_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
|
||||||
|
[nr] "r" (nr), [iv] "r" (iv),
|
||||||
|
[L_AES_ARM32_te_cbc] "r" (L_AES_ARM32_te_cbc_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -2124,10 +2223,16 @@ static const word32* L_AES_ARM32_te_ctr = L_AES_ARM32_te_data;
|
|||||||
void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
||||||
unsigned char* ctr_p);
|
unsigned char* ctr_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
||||||
unsigned char* ctr_p)
|
unsigned char* ctr_p)
|
||||||
|
#else
|
||||||
|
void AES_CTR_encrypt(const unsigned char* in, unsigned char* out,
|
||||||
|
unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
||||||
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
||||||
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
||||||
@@ -2136,10 +2241,22 @@ void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
register unsigned char* ctr asm ("r5") = (unsigned char*)ctr_p;
|
register unsigned char* ctr asm ("r5") = (unsigned char*)ctr_p;
|
||||||
register word32* L_AES_ARM32_te_ctr_c asm ("r6") =
|
register word32* L_AES_ARM32_te_ctr_c asm ("r6") =
|
||||||
(word32*)L_AES_ARM32_te_ctr;
|
(word32*)L_AES_ARM32_te_ctr;
|
||||||
|
#else
|
||||||
|
register word32* L_AES_ARM32_te_ctr_c = (word32*)L_AES_ARM32_te_ctr;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"mov r12, r4\n\t"
|
"mov r12, r4\n\t"
|
||||||
|
#else
|
||||||
|
"mov r12, %[nr]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"mov r8, r5\n\t"
|
"mov r8, r5\n\t"
|
||||||
|
#else
|
||||||
|
"mov r8, %[ctr]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"mov lr, %[in]\n\t"
|
"mov lr, %[in]\n\t"
|
||||||
"mov r0, %[L_AES_ARM32_te_ctr]\n\t"
|
"mov r0, %[L_AES_ARM32_te_ctr]\n\t"
|
||||||
"ldm r8, {r4, r5, r6, r7}\n\t"
|
"ldm r8, {r4, r5, r6, r7}\n\t"
|
||||||
@@ -2385,10 +2502,17 @@ void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
"rev r7, r7\n\t"
|
"rev r7, r7\n\t"
|
||||||
#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
|
#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
|
||||||
"stm r8, {r4, r5, r6, r7}\n\t"
|
"stm r8, {r4, r5, r6, r7}\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
||||||
[nr] "+r" (nr), [ctr] "+r" (ctr),
|
[nr] "+r" (nr), [ctr] "+r" (ctr),
|
||||||
[L_AES_ARM32_te_ctr] "+r" (L_AES_ARM32_te_ctr_c)
|
[L_AES_ARM32_te_ctr] "+r" (L_AES_ARM32_te_ctr_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
|
||||||
|
[nr] "r" (nr), [ctr] "r" (ctr),
|
||||||
|
[L_AES_ARM32_te_ctr] "r" (L_AES_ARM32_te_ctr_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -2398,11 +2522,17 @@ void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
|
#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
|
||||||
defined(HAVE_AES_CBC)
|
defined(HAVE_AES_CBC)
|
||||||
void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p);
|
void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p)
|
void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p)
|
||||||
|
#else
|
||||||
|
void AES_decrypt_block(const word32* td, int nr, const byte* td4)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register const word32* td asm ("r0") = (const word32*)td_p;
|
register const word32* td asm ("r0") = (const word32*)td_p;
|
||||||
register int nr asm ("r1") = (int)nr_p;
|
register int nr asm ("r1") = (int)nr_p;
|
||||||
register const byte* td4 asm ("r2") = (const byte*)td4_p;
|
register const byte* td4 asm ("r2") = (const byte*)td4_p;
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"\n"
|
"\n"
|
||||||
@@ -3041,8 +3171,13 @@ void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p)
|
|||||||
"eor r5, r5, r9\n\t"
|
"eor r5, r5, r9\n\t"
|
||||||
"eor r6, r6, r10\n\t"
|
"eor r6, r6, r10\n\t"
|
||||||
"eor r7, r7, r11\n\t"
|
"eor r7, r7, r11\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [td] "+r" (td), [nr] "+r" (nr), [td4] "+r" (td4)
|
: [td] "+r" (td), [nr] "+r" (nr), [td4] "+r" (td4)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [td] "r" (td), [nr] "r" (nr), [td4] "r" (td4)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "lr"
|
: "memory", "cc", "lr"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -3086,9 +3221,15 @@ static const byte L_AES_ARM32_td4[] = {
|
|||||||
#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
|
#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
|
||||||
void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p);
|
unsigned long len_p, const unsigned char* ks_p, int nr_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p)
|
unsigned long len_p, const unsigned char* ks_p, int nr_p)
|
||||||
|
#else
|
||||||
|
void AES_ECB_decrypt(const unsigned char* in, unsigned char* out,
|
||||||
|
unsigned long len, const unsigned char* ks, int nr)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
||||||
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
||||||
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
||||||
@@ -3097,9 +3238,19 @@ void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
register word32* L_AES_ARM32_td_ecb_c asm ("r5") =
|
register word32* L_AES_ARM32_td_ecb_c asm ("r5") =
|
||||||
(word32*)L_AES_ARM32_td_ecb;
|
(word32*)L_AES_ARM32_td_ecb;
|
||||||
register byte* L_AES_ARM32_td4_c asm ("r6") = (byte*)&L_AES_ARM32_td4;
|
register byte* L_AES_ARM32_td4_c asm ("r6") = (byte*)&L_AES_ARM32_td4;
|
||||||
|
#else
|
||||||
|
register word32* L_AES_ARM32_td_ecb_c = (word32*)L_AES_ARM32_td_ecb;
|
||||||
|
|
||||||
|
register byte* L_AES_ARM32_td4_c = (byte*)&L_AES_ARM32_td4;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"mov r8, r4\n\t"
|
"mov r8, r4\n\t"
|
||||||
|
#else
|
||||||
|
"mov r8, %[nr]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"mov lr, %[in]\n\t"
|
"mov lr, %[in]\n\t"
|
||||||
"mov r0, %[L_AES_ARM32_td_ecb]\n\t"
|
"mov r0, %[L_AES_ARM32_td_ecb]\n\t"
|
||||||
"mov r12, %[len]\n\t"
|
"mov r12, %[len]\n\t"
|
||||||
@@ -3326,10 +3477,17 @@ void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
"bne L_AES_ECB_decrypt_loop_block_128_%=\n\t"
|
"bne L_AES_ECB_decrypt_loop_block_128_%=\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_ECB_decrypt_end_%=: \n\t"
|
"L_AES_ECB_decrypt_end_%=: \n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
||||||
[nr] "+r" (nr), [L_AES_ARM32_td_ecb] "+r" (L_AES_ARM32_td_ecb_c),
|
[nr] "+r" (nr), [L_AES_ARM32_td_ecb] "+r" (L_AES_ARM32_td_ecb_c),
|
||||||
[L_AES_ARM32_td4] "+r" (L_AES_ARM32_td4_c)
|
[L_AES_ARM32_td4] "+r" (L_AES_ARM32_td4_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
|
||||||
|
[nr] "r" (nr), [L_AES_ARM32_td_ecb] "r" (L_AES_ARM32_td_ecb_c),
|
||||||
|
[L_AES_ARM32_td4] "r" (L_AES_ARM32_td4_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -3339,10 +3497,16 @@ void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
||||||
unsigned char* iv_p);
|
unsigned char* iv_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
||||||
unsigned char* iv_p)
|
unsigned char* iv_p)
|
||||||
|
#else
|
||||||
|
void AES_CBC_decrypt(const unsigned char* in, unsigned char* out,
|
||||||
|
unsigned long len, const unsigned char* ks, int nr, unsigned char* iv)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
||||||
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
||||||
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
||||||
@@ -3352,14 +3516,28 @@ void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
register word32* L_AES_ARM32_td_ecb_c asm ("r6") =
|
register word32* L_AES_ARM32_td_ecb_c asm ("r6") =
|
||||||
(word32*)L_AES_ARM32_td_ecb;
|
(word32*)L_AES_ARM32_td_ecb;
|
||||||
register byte* L_AES_ARM32_td4_c asm ("r7") = (byte*)&L_AES_ARM32_td4;
|
register byte* L_AES_ARM32_td4_c asm ("r7") = (byte*)&L_AES_ARM32_td4;
|
||||||
|
#else
|
||||||
|
register word32* L_AES_ARM32_td_ecb_c = (word32*)L_AES_ARM32_td_ecb;
|
||||||
|
|
||||||
|
register byte* L_AES_ARM32_td4_c = (byte*)&L_AES_ARM32_td4;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"mov r8, r4\n\t"
|
|
||||||
"mov r4, r5\n\t"
|
|
||||||
"mov lr, %[in]\n\t"
|
"mov lr, %[in]\n\t"
|
||||||
"mov r0, %[L_AES_ARM32_td_ecb]\n\t"
|
"mov r0, %[L_AES_ARM32_td_ecb]\n\t"
|
||||||
"mov r12, %[len]\n\t"
|
"mov r12, %[len]\n\t"
|
||||||
"mov r2, %[L_AES_ARM32_td4]\n\t"
|
"mov r2, %[L_AES_ARM32_td4]\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
"mov r8, r4\n\t"
|
||||||
|
#else
|
||||||
|
"mov r8, %[nr]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
"mov r4, r5\n\t"
|
||||||
|
#else
|
||||||
|
"mov r4, %[iv]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"push {%[ks]-r4}\n\t"
|
"push {%[ks]-r4}\n\t"
|
||||||
"cmp r8, #10\n\t"
|
"cmp r8, #10\n\t"
|
||||||
"beq L_AES_CBC_decrypt_loop_block_128_%=\n\t"
|
"beq L_AES_CBC_decrypt_loop_block_128_%=\n\t"
|
||||||
@@ -3961,11 +4139,19 @@ void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
"\n"
|
"\n"
|
||||||
"L_AES_CBC_decrypt_end_%=: \n\t"
|
"L_AES_CBC_decrypt_end_%=: \n\t"
|
||||||
"pop {%[ks]-r4}\n\t"
|
"pop {%[ks]-r4}\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
||||||
[nr] "+r" (nr), [iv] "+r" (iv),
|
[nr] "+r" (nr), [iv] "+r" (iv),
|
||||||
[L_AES_ARM32_td_ecb] "+r" (L_AES_ARM32_td_ecb_c),
|
[L_AES_ARM32_td_ecb] "+r" (L_AES_ARM32_td_ecb_c),
|
||||||
[L_AES_ARM32_td4] "+r" (L_AES_ARM32_td4_c)
|
[L_AES_ARM32_td4] "+r" (L_AES_ARM32_td4_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
|
||||||
|
[nr] "r" (nr), [iv] "r" (iv),
|
||||||
|
[L_AES_ARM32_td_ecb] "r" (L_AES_ARM32_td_ecb_c),
|
||||||
|
[L_AES_ARM32_td4] "r" (L_AES_ARM32_td4_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r8", "r9", "r10", "r11"
|
: "memory", "cc", "r12", "lr", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -3983,9 +4169,15 @@ static const word32 L_GCM_gmult_len_r[] = {
|
|||||||
|
|
||||||
void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
|
void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
|
||||||
const unsigned char* data_p, unsigned long len_p);
|
const unsigned char* data_p, unsigned long len_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
|
void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
|
||||||
const unsigned char* data_p, unsigned long len_p)
|
const unsigned char* data_p, unsigned long len_p)
|
||||||
|
#else
|
||||||
|
void GCM_gmult_len(unsigned char* x, const unsigned char** m,
|
||||||
|
const unsigned char* data, unsigned long len)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register unsigned char* x asm ("r0") = (unsigned char*)x_p;
|
register unsigned char* x asm ("r0") = (unsigned char*)x_p;
|
||||||
register const unsigned char** m asm ("r1") = (const unsigned char**)m_p;
|
register const unsigned char** m asm ("r1") = (const unsigned char**)m_p;
|
||||||
register const unsigned char* data asm ("r2") =
|
register const unsigned char* data asm ("r2") =
|
||||||
@@ -3993,6 +4185,10 @@ void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
|
|||||||
register unsigned long len asm ("r3") = (unsigned long)len_p;
|
register unsigned long len asm ("r3") = (unsigned long)len_p;
|
||||||
register word32* L_GCM_gmult_len_r_c asm ("r4") =
|
register word32* L_GCM_gmult_len_r_c asm ("r4") =
|
||||||
(word32*)&L_GCM_gmult_len_r;
|
(word32*)&L_GCM_gmult_len_r;
|
||||||
|
#else
|
||||||
|
register word32* L_GCM_gmult_len_r_c = (word32*)&L_GCM_gmult_len_r;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"mov lr, %[L_GCM_gmult_len_r]\n\t"
|
"mov lr, %[L_GCM_gmult_len_r]\n\t"
|
||||||
@@ -4566,9 +4762,15 @@ void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
|
|||||||
"subs %[len], %[len], #16\n\t"
|
"subs %[len], %[len], #16\n\t"
|
||||||
"add %[data], %[data], #16\n\t"
|
"add %[data], %[data], #16\n\t"
|
||||||
"bne L_GCM_gmult_len_start_block_%=\n\t"
|
"bne L_GCM_gmult_len_start_block_%=\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len),
|
: [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len),
|
||||||
[L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c)
|
[L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [x] "r" (x), [m] "r" (m), [data] "r" (data), [len] "r" (len),
|
||||||
|
[L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10",
|
: "memory", "cc", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10",
|
||||||
"r11"
|
"r11"
|
||||||
);
|
);
|
||||||
@@ -4578,10 +4780,16 @@ static const word32* L_AES_ARM32_te_gcm = L_AES_ARM32_te_data;
|
|||||||
void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
||||||
unsigned char* ctr_p);
|
unsigned char* ctr_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
||||||
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
unsigned long len_p, const unsigned char* ks_p, int nr_p,
|
||||||
unsigned char* ctr_p)
|
unsigned char* ctr_p)
|
||||||
|
#else
|
||||||
|
void AES_GCM_encrypt(const unsigned char* in, unsigned char* out,
|
||||||
|
unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
|
||||||
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
|
||||||
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
register unsigned long len asm ("r2") = (unsigned long)len_p;
|
||||||
@@ -4590,10 +4798,22 @@ void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
register unsigned char* ctr asm ("r5") = (unsigned char*)ctr_p;
|
register unsigned char* ctr asm ("r5") = (unsigned char*)ctr_p;
|
||||||
register word32* L_AES_ARM32_te_gcm_c asm ("r6") =
|
register word32* L_AES_ARM32_te_gcm_c asm ("r6") =
|
||||||
(word32*)L_AES_ARM32_te_gcm;
|
(word32*)L_AES_ARM32_te_gcm;
|
||||||
|
#else
|
||||||
|
register word32* L_AES_ARM32_te_gcm_c = (word32*)L_AES_ARM32_te_gcm;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"mov r12, r4\n\t"
|
"mov r12, r4\n\t"
|
||||||
|
#else
|
||||||
|
"mov r12, %[nr]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"mov r8, r5\n\t"
|
"mov r8, r5\n\t"
|
||||||
|
#else
|
||||||
|
"mov r8, %[ctr]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"mov lr, %[in]\n\t"
|
"mov lr, %[in]\n\t"
|
||||||
"mov r0, %[L_AES_ARM32_te_gcm]\n\t"
|
"mov r0, %[L_AES_ARM32_te_gcm]\n\t"
|
||||||
"ldm r8, {r4, r5, r6, r7}\n\t"
|
"ldm r8, {r4, r5, r6, r7}\n\t"
|
||||||
@@ -4830,10 +5050,17 @@ void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
|
|||||||
"rev r7, r7\n\t"
|
"rev r7, r7\n\t"
|
||||||
#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
|
#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
|
||||||
"stm r8, {r4, r5, r6, r7}\n\t"
|
"stm r8, {r4, r5, r6, r7}\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
|
||||||
[nr] "+r" (nr), [ctr] "+r" (ctr),
|
[nr] "+r" (nr), [ctr] "+r" (ctr),
|
||||||
[L_AES_ARM32_te_gcm] "+r" (L_AES_ARM32_te_gcm_c)
|
[L_AES_ARM32_te_gcm] "+r" (L_AES_ARM32_te_gcm_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
|
||||||
|
[nr] "r" (nr), [ctr] "r" (ctr),
|
||||||
|
[L_AES_ARM32_te_gcm] "r" (L_AES_ARM32_te_gcm_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -44,19 +44,31 @@
|
|||||||
#ifdef __IAR_SYSTEMS_ICC__
|
#ifdef __IAR_SYSTEMS_ICC__
|
||||||
#define __asm__ asm
|
#define __asm__ asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
#endif /* __IAR_SYSTEMS_ICC__ */
|
#endif /* __IAR_SYSTEMS_ICC__ */
|
||||||
#ifdef __KEIL__
|
#ifdef __KEIL__
|
||||||
#define __asm__ __asm
|
#define __asm__ __asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
#endif /* __KEIL__ */
|
#endif /* __KEIL__ */
|
||||||
|
#ifdef __ghs__
|
||||||
|
#define __asm__ __asm
|
||||||
|
#define __volatile__
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
#endif /* __ghs__ */
|
||||||
#ifdef HAVE_CHACHA
|
#ifdef HAVE_CHACHA
|
||||||
#include <wolfssl/wolfcrypt/chacha.h>
|
#include <wolfssl/wolfcrypt/chacha.h>
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void wc_chacha_setiv(word32* x_p, const byte* iv_p, word32 counter_p)
|
void wc_chacha_setiv(word32* x_p, const byte* iv_p, word32 counter_p)
|
||||||
|
#else
|
||||||
|
void wc_chacha_setiv(word32* x, const byte* iv, word32 counter)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register word32* x asm ("r0") = (word32*)x_p;
|
register word32* x asm ("r0") = (word32*)x_p;
|
||||||
register const byte* iv asm ("r1") = (const byte*)iv_p;
|
register const byte* iv asm ("r1") = (const byte*)iv_p;
|
||||||
register word32 counter asm ("r2") = (word32)counter_p;
|
register word32 counter asm ("r2") = (word32)counter_p;
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"add r3, %[x], #52\n\t"
|
"add r3, %[x], #52\n\t"
|
||||||
@@ -70,8 +82,13 @@ void wc_chacha_setiv(word32* x_p, const byte* iv_p, word32 counter_p)
|
|||||||
"rev lr, lr\n\t"
|
"rev lr, lr\n\t"
|
||||||
#endif /* BIG_ENDIAN_ORDER */
|
#endif /* BIG_ENDIAN_ORDER */
|
||||||
"stm r3, {r4, r12, lr}\n\t"
|
"stm r3, {r4, r12, lr}\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [x] "+r" (x), [iv] "+r" (iv), [counter] "+r" (counter)
|
: [x] "+r" (x), [iv] "+r" (iv), [counter] "+r" (counter)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [x] "r" (x), [iv] "r" (iv), [counter] "r" (counter)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r3", "r12", "lr", "r4"
|
: "memory", "cc", "r3", "r12", "lr", "r4"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -81,15 +98,26 @@ static const word32 L_chacha_arm32_constants[] = {
|
|||||||
0x61707865, 0x3320646e, 0x79622d32, 0x6b206574,
|
0x61707865, 0x3320646e, 0x79622d32, 0x6b206574,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void wc_chacha_setkey(word32* x_p, const byte* key_p, word32 keySz_p)
|
void wc_chacha_setkey(word32* x_p, const byte* key_p, word32 keySz_p)
|
||||||
|
#else
|
||||||
|
void wc_chacha_setkey(word32* x, const byte* key, word32 keySz)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register word32* x asm ("r0") = (word32*)x_p;
|
register word32* x asm ("r0") = (word32*)x_p;
|
||||||
register const byte* key asm ("r1") = (const byte*)key_p;
|
register const byte* key asm ("r1") = (const byte*)key_p;
|
||||||
register word32 keySz asm ("r2") = (word32)keySz_p;
|
register word32 keySz asm ("r2") = (word32)keySz_p;
|
||||||
register word32* L_chacha_arm32_constants_c asm ("r3") =
|
register word32* L_chacha_arm32_constants_c asm ("r3") =
|
||||||
(word32*)&L_chacha_arm32_constants;
|
(word32*)&L_chacha_arm32_constants;
|
||||||
|
#else
|
||||||
|
register word32* L_chacha_arm32_constants_c =
|
||||||
|
(word32*)&L_chacha_arm32_constants;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
"mov r3, %[L_chacha_arm32_constants]\n\t"
|
||||||
"subs %[keySz], %[keySz], #16\n\t"
|
"subs %[keySz], %[keySz], #16\n\t"
|
||||||
"add r3, r3, %[keySz]\n\t"
|
"add r3, r3, %[keySz]\n\t"
|
||||||
/* Start state with constants */
|
/* Start state with constants */
|
||||||
@@ -118,21 +146,33 @@ void wc_chacha_setkey(word32* x_p, const byte* key_p, word32 keySz_p)
|
|||||||
"\n"
|
"\n"
|
||||||
"L_chacha_arm32_setkey_same_keyb_ytes_%=: \n\t"
|
"L_chacha_arm32_setkey_same_keyb_ytes_%=: \n\t"
|
||||||
"stm %[x], {r4, r5, r12, lr}\n\t"
|
"stm %[x], {r4, r5, r12, lr}\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [x] "+r" (x), [key] "+r" (key), [keySz] "+r" (keySz),
|
: [x] "+r" (x), [key] "+r" (key), [keySz] "+r" (keySz),
|
||||||
[L_chacha_arm32_constants] "+r" (L_chacha_arm32_constants_c)
|
[L_chacha_arm32_constants] "+r" (L_chacha_arm32_constants_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [x] "r" (x), [key] "r" (key), [keySz] "r" (keySz),
|
||||||
|
[L_chacha_arm32_constants] "r" (L_chacha_arm32_constants_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r4", "r5"
|
: "memory", "cc", "r12", "lr", "r4", "r5"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_ARMASM_NO_NEON
|
#ifdef WOLFSSL_ARMASM_NO_NEON
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void wc_chacha_crypt_bytes(ChaCha* ctx_p, byte* c_p, const byte* m_p,
|
void wc_chacha_crypt_bytes(ChaCha* ctx_p, byte* c_p, const byte* m_p,
|
||||||
word32 len_p)
|
word32 len_p)
|
||||||
|
#else
|
||||||
|
void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register ChaCha* ctx asm ("r0") = (ChaCha*)ctx_p;
|
register ChaCha* ctx asm ("r0") = (ChaCha*)ctx_p;
|
||||||
register byte* c asm ("r1") = (byte*)c_p;
|
register byte* c asm ("r1") = (byte*)c_p;
|
||||||
register const byte* m asm ("r2") = (const byte*)m_p;
|
register const byte* m asm ("r2") = (const byte*)m_p;
|
||||||
register word32 len asm ("r3") = (word32)len_p;
|
register word32 len asm ("r3") = (word32)len_p;
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"sub sp, sp, #52\n\t"
|
"sub sp, sp, #52\n\t"
|
||||||
@@ -483,20 +523,31 @@ void wc_chacha_crypt_bytes(ChaCha* ctx_p, byte* c_p, const byte* m_p,
|
|||||||
"\n"
|
"\n"
|
||||||
"L_chacha_arm32_crypt_done_%=: \n\t"
|
"L_chacha_arm32_crypt_done_%=: \n\t"
|
||||||
"add sp, sp, #52\n\t"
|
"add sp, sp, #52\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [ctx] "+r" (ctx), [c] "+r" (c), [m] "+r" (m), [len] "+r" (len)
|
: [ctx] "+r" (ctx), [c] "+r" (c), [m] "+r" (m), [len] "+r" (len)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [ctx] "r" (ctx), [c] "r" (c), [m] "r" (m), [len] "r" (len)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
||||||
"r10", "r11"
|
"r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void wc_chacha_use_over(byte* over_p, byte* output_p, const byte* input_p,
|
void wc_chacha_use_over(byte* over_p, byte* output_p, const byte* input_p,
|
||||||
word32 len_p)
|
word32 len_p)
|
||||||
|
#else
|
||||||
|
void wc_chacha_use_over(byte* over, byte* output, const byte* input, word32 len)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register byte* over asm ("r0") = (byte*)over_p;
|
register byte* over asm ("r0") = (byte*)over_p;
|
||||||
register byte* output asm ("r1") = (byte*)output_p;
|
register byte* output asm ("r1") = (byte*)output_p;
|
||||||
register const byte* input asm ("r2") = (const byte*)input_p;
|
register const byte* input asm ("r2") = (const byte*)input_p;
|
||||||
register word32 len asm ("r3") = (word32)len_p;
|
register word32 len asm ("r3") = (word32)len_p;
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"\n"
|
"\n"
|
||||||
@@ -556,9 +607,15 @@ void wc_chacha_use_over(byte* over_p, byte* output_p, const byte* input_p,
|
|||||||
"b L_chacha_arm32_over_byte_loop_%=\n\t"
|
"b L_chacha_arm32_over_byte_loop_%=\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
"L_chacha_arm32_over_done_%=: \n\t"
|
"L_chacha_arm32_over_done_%=: \n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [over] "+r" (over), [output] "+r" (output), [input] "+r" (input),
|
: [over] "+r" (over), [output] "+r" (output), [input] "+r" (input),
|
||||||
[len] "+r" (len)
|
[len] "+r" (len)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [over] "r" (over), [output] "r" (output), [input] "r" (input),
|
||||||
|
[len] "r" (len)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9"
|
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -44,11 +44,17 @@
|
|||||||
#ifdef __IAR_SYSTEMS_ICC__
|
#ifdef __IAR_SYSTEMS_ICC__
|
||||||
#define __asm__ asm
|
#define __asm__ asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
#endif /* __IAR_SYSTEMS_ICC__ */
|
#endif /* __IAR_SYSTEMS_ICC__ */
|
||||||
#ifdef __KEIL__
|
#ifdef __KEIL__
|
||||||
#define __asm__ __asm
|
#define __asm__ __asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
#endif /* __KEIL__ */
|
#endif /* __KEIL__ */
|
||||||
|
#ifdef __ghs__
|
||||||
|
#define __asm__ __asm
|
||||||
|
#define __volatile__
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
#endif /* __ghs__ */
|
||||||
#include <wolfssl/wolfcrypt/wc_mlkem.h>
|
#include <wolfssl/wolfcrypt/wc_mlkem.h>
|
||||||
|
|
||||||
#ifdef WOLFSSL_WC_MLKEM
|
#ifdef WOLFSSL_WC_MLKEM
|
||||||
@@ -87,14 +93,25 @@ static const word16 L_mlkem_arm32_ntt_zetas[] = {
|
|||||||
0x03be, 0x074d, 0x05f2, 0x065c,
|
0x03be, 0x074d, 0x05f2, 0x065c,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void mlkem_arm32_ntt(sword16* r_p)
|
void mlkem_arm32_ntt(sword16* r_p)
|
||||||
|
#else
|
||||||
|
void mlkem_arm32_ntt(sword16* r)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register sword16* r asm ("r0") = (sword16*)r_p;
|
register sword16* r asm ("r0") = (sword16*)r_p;
|
||||||
register word16* L_mlkem_arm32_ntt_zetas_c asm ("r1") =
|
register word16* L_mlkem_arm32_ntt_zetas_c asm ("r1") =
|
||||||
(word16*)&L_mlkem_arm32_ntt_zetas;
|
(word16*)&L_mlkem_arm32_ntt_zetas;
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_arm32_ntt_zetas_c =
|
||||||
|
(word16*)&L_mlkem_arm32_ntt_zetas;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"sub sp, sp, #8\n\t"
|
"sub sp, sp, #8\n\t"
|
||||||
|
"mov r1, %[L_mlkem_arm32_ntt_zetas]\n\t"
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH >= 6)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH >= 6)
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
||||||
"mov r10, #0x1\n\t"
|
"mov r10, #0x1\n\t"
|
||||||
@@ -3080,9 +3097,15 @@ void mlkem_arm32_ntt(sword16* r_p)
|
|||||||
"add %[r], %[r], #32\n\t"
|
"add %[r], %[r], #32\n\t"
|
||||||
"bne L_mlkem_arm32_ntt_loop_567_%=\n\t"
|
"bne L_mlkem_arm32_ntt_loop_567_%=\n\t"
|
||||||
"add sp, sp, #8\n\t"
|
"add sp, sp, #8\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [r] "+r" (r),
|
: [r] "+r" (r),
|
||||||
[L_mlkem_arm32_ntt_zetas] "+r" (L_mlkem_arm32_ntt_zetas_c)
|
[L_mlkem_arm32_ntt_zetas] "+r" (L_mlkem_arm32_ntt_zetas_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [r] "r" (r),
|
||||||
|
[L_mlkem_arm32_ntt_zetas] "r" (L_mlkem_arm32_ntt_zetas_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
||||||
"r9", "r10", "r11"
|
"r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
@@ -3123,14 +3146,25 @@ static const word16 L_mlkem_invntt_zetas_inv[] = {
|
|||||||
0x05ed, 0x0167, 0x02f6, 0x05a1,
|
0x05ed, 0x0167, 0x02f6, 0x05a1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void mlkem_arm32_invntt(sword16* r_p)
|
void mlkem_arm32_invntt(sword16* r_p)
|
||||||
|
#else
|
||||||
|
void mlkem_arm32_invntt(sword16* r)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register sword16* r asm ("r0") = (sword16*)r_p;
|
register sword16* r asm ("r0") = (sword16*)r_p;
|
||||||
register word16* L_mlkem_invntt_zetas_inv_c asm ("r1") =
|
register word16* L_mlkem_invntt_zetas_inv_c asm ("r1") =
|
||||||
(word16*)&L_mlkem_invntt_zetas_inv;
|
(word16*)&L_mlkem_invntt_zetas_inv;
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_invntt_zetas_inv_c =
|
||||||
|
(word16*)&L_mlkem_invntt_zetas_inv;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"sub sp, sp, #8\n\t"
|
"sub sp, sp, #8\n\t"
|
||||||
|
"mov r1, %[L_mlkem_invntt_zetas_inv]\n\t"
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH >= 6)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH >= 6)
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
||||||
"mov r10, #0x1\n\t"
|
"mov r10, #0x1\n\t"
|
||||||
@@ -7510,9 +7544,15 @@ void mlkem_arm32_invntt(sword16* r_p)
|
|||||||
"add %[r], %[r], #4\n\t"
|
"add %[r], %[r], #4\n\t"
|
||||||
"bne L_mlkem_invntt_loop_321_%=\n\t"
|
"bne L_mlkem_invntt_loop_321_%=\n\t"
|
||||||
"add sp, sp, #8\n\t"
|
"add sp, sp, #8\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [r] "+r" (r),
|
: [r] "+r" (r),
|
||||||
[L_mlkem_invntt_zetas_inv] "+r" (L_mlkem_invntt_zetas_inv_c)
|
[L_mlkem_invntt_zetas_inv] "+r" (L_mlkem_invntt_zetas_inv_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [r] "r" (r),
|
||||||
|
[L_mlkem_invntt_zetas_inv] "r" (L_mlkem_invntt_zetas_inv_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
||||||
"r9", "r10", "r11"
|
"r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
@@ -7553,16 +7593,27 @@ static const word16 L_mlkem_basemul_mont_zetas[] = {
|
|||||||
0x03be, 0x074d, 0x05f2, 0x065c,
|
0x03be, 0x074d, 0x05f2, 0x065c,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void mlkem_arm32_basemul_mont(sword16* r_p, const sword16* a_p,
|
void mlkem_arm32_basemul_mont(sword16* r_p, const sword16* a_p,
|
||||||
const sword16* b_p)
|
const sword16* b_p)
|
||||||
|
#else
|
||||||
|
void mlkem_arm32_basemul_mont(sword16* r, const sword16* a, const sword16* b)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register sword16* r asm ("r0") = (sword16*)r_p;
|
register sword16* r asm ("r0") = (sword16*)r_p;
|
||||||
register const sword16* a asm ("r1") = (const sword16*)a_p;
|
register const sword16* a asm ("r1") = (const sword16*)a_p;
|
||||||
register const sword16* b asm ("r2") = (const sword16*)b_p;
|
register const sword16* b asm ("r2") = (const sword16*)b_p;
|
||||||
register word16* L_mlkem_basemul_mont_zetas_c asm ("r3") =
|
register word16* L_mlkem_basemul_mont_zetas_c asm ("r3") =
|
||||||
(word16*)&L_mlkem_basemul_mont_zetas;
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_basemul_mont_zetas_c =
|
||||||
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
"mov r3, %[L_mlkem_basemul_mont_zetas]\n\t"
|
||||||
"add r3, r3, #0x80\n\t"
|
"add r3, r3, #0x80\n\t"
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH >= 6)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH >= 6)
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
||||||
@@ -7833,24 +7884,42 @@ void mlkem_arm32_basemul_mont(sword16* r_p, const sword16* a_p,
|
|||||||
"stm %[r]!, {r4, r5}\n\t"
|
"stm %[r]!, {r4, r5}\n\t"
|
||||||
"pop {r8}\n\t"
|
"pop {r8}\n\t"
|
||||||
"bne L_mlkem_basemul_mont_loop_%=\n\t"
|
"bne L_mlkem_basemul_mont_loop_%=\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b),
|
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b),
|
||||||
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
|
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [r] "r" (r), [a] "r" (a), [b] "r" (b),
|
||||||
|
[L_mlkem_basemul_mont_zetas] "r" (L_mlkem_basemul_mont_zetas_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
||||||
"r10", "r11"
|
"r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void mlkem_arm32_basemul_mont_add(sword16* r_p, const sword16* a_p,
|
void mlkem_arm32_basemul_mont_add(sword16* r_p, const sword16* a_p,
|
||||||
const sword16* b_p)
|
const sword16* b_p)
|
||||||
|
#else
|
||||||
|
void mlkem_arm32_basemul_mont_add(sword16* r, const sword16* a,
|
||||||
|
const sword16* b)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register sword16* r asm ("r0") = (sword16*)r_p;
|
register sword16* r asm ("r0") = (sword16*)r_p;
|
||||||
register const sword16* a asm ("r1") = (const sword16*)a_p;
|
register const sword16* a asm ("r1") = (const sword16*)a_p;
|
||||||
register const sword16* b asm ("r2") = (const sword16*)b_p;
|
register const sword16* b asm ("r2") = (const sword16*)b_p;
|
||||||
register word16* L_mlkem_basemul_mont_zetas_c asm ("r3") =
|
register word16* L_mlkem_basemul_mont_zetas_c asm ("r3") =
|
||||||
(word16*)&L_mlkem_basemul_mont_zetas;
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_basemul_mont_zetas_c =
|
||||||
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
"mov r3, %[L_mlkem_basemul_mont_zetas]\n\t"
|
||||||
"add r3, r3, #0x80\n\t"
|
"add r3, r3, #0x80\n\t"
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH >= 6)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH >= 6)
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
||||||
@@ -8155,19 +8224,35 @@ void mlkem_arm32_basemul_mont_add(sword16* r_p, const sword16* a_p,
|
|||||||
"stm %[r]!, {r4, r5}\n\t"
|
"stm %[r]!, {r4, r5}\n\t"
|
||||||
"pop {r8}\n\t"
|
"pop {r8}\n\t"
|
||||||
"bne L_mlkem_arm32_basemul_mont_add_loop_%=\n\t"
|
"bne L_mlkem_arm32_basemul_mont_add_loop_%=\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b),
|
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b),
|
||||||
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
|
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [r] "r" (r), [a] "r" (a), [b] "r" (b),
|
||||||
|
[L_mlkem_basemul_mont_zetas] "r" (L_mlkem_basemul_mont_zetas_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
||||||
"r10", "r11"
|
"r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void mlkem_arm32_csubq(sword16* p_p)
|
void mlkem_arm32_csubq(sword16* p_p)
|
||||||
|
#else
|
||||||
|
void mlkem_arm32_csubq(sword16* p)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register sword16* p asm ("r0") = (sword16*)p_p;
|
register sword16* p asm ("r0") = (sword16*)p_p;
|
||||||
register word16* L_mlkem_basemul_mont_zetas_c asm ("r1") =
|
register word16* L_mlkem_basemul_mont_zetas_c asm ("r1") =
|
||||||
(word16*)&L_mlkem_basemul_mont_zetas;
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_basemul_mont_zetas_c =
|
||||||
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
||||||
@@ -8334,23 +8419,40 @@ void mlkem_arm32_csubq(sword16* p_p)
|
|||||||
"stm %[p]!, {r2, r3, r4, r5}\n\t"
|
"stm %[p]!, {r2, r3, r4, r5}\n\t"
|
||||||
"subs r1, r1, #8\n\t"
|
"subs r1, r1, #8\n\t"
|
||||||
"bne L_mlkem_arm32_csubq_loop_%=\n\t"
|
"bne L_mlkem_arm32_csubq_loop_%=\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [p] "+r" (p),
|
: [p] "+r" (p),
|
||||||
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
|
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [p] "r" (p),
|
||||||
|
[L_mlkem_basemul_mont_zetas] "r" (L_mlkem_basemul_mont_zetas_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
||||||
"r9", "r10", "r11"
|
"r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
unsigned int mlkem_arm32_rej_uniform(sword16* p_p, unsigned int len_p,
|
unsigned int mlkem_arm32_rej_uniform(sword16* p_p, unsigned int len_p,
|
||||||
const byte* r_p, unsigned int rLen_p)
|
const byte* r_p, unsigned int rLen_p)
|
||||||
|
#else
|
||||||
|
unsigned int mlkem_arm32_rej_uniform(sword16* p, unsigned int len,
|
||||||
|
const byte* r, unsigned int rLen)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register sword16* p asm ("r0") = (sword16*)p_p;
|
register sword16* p asm ("r0") = (sword16*)p_p;
|
||||||
register unsigned int len asm ("r1") = (unsigned int)len_p;
|
register unsigned int len asm ("r1") = (unsigned int)len_p;
|
||||||
register const byte* r asm ("r2") = (const byte*)r_p;
|
register const byte* r asm ("r2") = (const byte*)r_p;
|
||||||
register unsigned int rLen asm ("r3") = (unsigned int)rLen_p;
|
register unsigned int rLen asm ("r3") = (unsigned int)rLen_p;
|
||||||
register word16* L_mlkem_basemul_mont_zetas_c asm ("r4") =
|
register word16* L_mlkem_basemul_mont_zetas_c asm ("r4") =
|
||||||
(word16*)&L_mlkem_basemul_mont_zetas;
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_basemul_mont_zetas_c =
|
||||||
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
||||||
@@ -8606,9 +8708,15 @@ unsigned int mlkem_arm32_rej_uniform(sword16* p_p, unsigned int len_p,
|
|||||||
"\n"
|
"\n"
|
||||||
"L_mlkem_arm32_rej_uniform_done_%=: \n\t"
|
"L_mlkem_arm32_rej_uniform_done_%=: \n\t"
|
||||||
"lsr r0, r12, #1\n\t"
|
"lsr r0, r12, #1\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [p] "+r" (p), [len] "+r" (len), [r] "+r" (r), [rLen] "+r" (rLen),
|
: [p] "+r" (p), [len] "+r" (len), [r] "+r" (r), [rLen] "+r" (rLen),
|
||||||
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
|
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [p] "r" (p), [len] "r" (len), [r] "r" (r), [rLen] "r" (rLen),
|
||||||
|
[L_mlkem_basemul_mont_zetas] "r" (L_mlkem_basemul_mont_zetas_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r5", "r6", "r7", "r8"
|
: "memory", "cc", "r12", "lr", "r5", "r6", "r7", "r8"
|
||||||
);
|
);
|
||||||
return (word32)(size_t)p;
|
return (word32)(size_t)p;
|
||||||
|
@@ -44,22 +44,35 @@
|
|||||||
#ifdef __IAR_SYSTEMS_ICC__
|
#ifdef __IAR_SYSTEMS_ICC__
|
||||||
#define __asm__ asm
|
#define __asm__ asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
#endif /* __IAR_SYSTEMS_ICC__ */
|
#endif /* __IAR_SYSTEMS_ICC__ */
|
||||||
#ifdef __KEIL__
|
#ifdef __KEIL__
|
||||||
#define __asm__ __asm
|
#define __asm__ __asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
#endif /* __KEIL__ */
|
#endif /* __KEIL__ */
|
||||||
|
#ifdef __ghs__
|
||||||
|
#define __asm__ __asm
|
||||||
|
#define __volatile__
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
#endif /* __ghs__ */
|
||||||
#ifdef HAVE_POLY1305
|
#ifdef HAVE_POLY1305
|
||||||
#include <wolfssl/wolfcrypt/poly1305.h>
|
#include <wolfssl/wolfcrypt/poly1305.h>
|
||||||
|
|
||||||
#ifdef WOLFSSL_ARMASM_NO_NEON
|
#ifdef WOLFSSL_ARMASM_NO_NEON
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void poly1305_arm32_blocks_16(Poly1305* ctx_p, const byte* m_p, word32 len_p,
|
void poly1305_arm32_blocks_16(Poly1305* ctx_p, const byte* m_p, word32 len_p,
|
||||||
int notLast_p)
|
int notLast_p)
|
||||||
|
#else
|
||||||
|
void poly1305_arm32_blocks_16(Poly1305* ctx, const byte* m, word32 len,
|
||||||
|
int notLast)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
||||||
register const byte* m asm ("r1") = (const byte*)m_p;
|
register const byte* m asm ("r1") = (const byte*)m_p;
|
||||||
register word32 len asm ("r2") = (word32)len_p;
|
register word32 len asm ("r2") = (word32)len_p;
|
||||||
register int notLast asm ("r3") = (int)notLast_p;
|
register int notLast asm ("r3") = (int)notLast_p;
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"sub sp, sp, #28\n\t"
|
"sub sp, sp, #28\n\t"
|
||||||
@@ -270,9 +283,15 @@ void poly1305_arm32_blocks_16(Poly1305* ctx_p, const byte* m_p, word32 len_p,
|
|||||||
"\n"
|
"\n"
|
||||||
"L_poly1305_arm32_16_done_%=: \n\t"
|
"L_poly1305_arm32_16_done_%=: \n\t"
|
||||||
"add sp, sp, #28\n\t"
|
"add sp, sp, #28\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [ctx] "+r" (ctx), [m] "+r" (m), [len] "+r" (len),
|
: [ctx] "+r" (ctx), [m] "+r" (m), [len] "+r" (len),
|
||||||
[notLast] "+r" (notLast)
|
[notLast] "+r" (notLast)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [ctx] "r" (ctx), [m] "r" (m), [len] "r" (len),
|
||||||
|
[notLast] "r" (notLast)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
||||||
"r10", "r11"
|
"r10", "r11"
|
||||||
);
|
);
|
||||||
@@ -282,12 +301,22 @@ static const word32 L_poly1305_arm32_clamp[] = {
|
|||||||
0x0fffffff, 0x0ffffffc, 0x0ffffffc, 0x0ffffffc,
|
0x0fffffff, 0x0ffffffc, 0x0ffffffc, 0x0ffffffc,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void poly1305_set_key(Poly1305* ctx_p, const byte* key_p)
|
void poly1305_set_key(Poly1305* ctx_p, const byte* key_p)
|
||||||
|
#else
|
||||||
|
void poly1305_set_key(Poly1305* ctx, const byte* key)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
||||||
register const byte* key asm ("r1") = (const byte*)key_p;
|
register const byte* key asm ("r1") = (const byte*)key_p;
|
||||||
register word32* L_poly1305_arm32_clamp_c asm ("r2") =
|
register word32* L_poly1305_arm32_clamp_c asm ("r2") =
|
||||||
(word32*)&L_poly1305_arm32_clamp;
|
(word32*)&L_poly1305_arm32_clamp;
|
||||||
|
#else
|
||||||
|
register word32* L_poly1305_arm32_clamp_c =
|
||||||
|
(word32*)&L_poly1305_arm32_clamp;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
/* Load mask. */
|
/* Load mask. */
|
||||||
@@ -321,17 +350,29 @@ void poly1305_set_key(Poly1305* ctx_p, const byte* key_p)
|
|||||||
"stm lr, {r5, r6, r7, r8, r12}\n\t"
|
"stm lr, {r5, r6, r7, r8, r12}\n\t"
|
||||||
/* Zero leftover */
|
/* Zero leftover */
|
||||||
"str r5, [%[ctx], #52]\n\t"
|
"str r5, [%[ctx], #52]\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [ctx] "+r" (ctx), [key] "+r" (key),
|
: [ctx] "+r" (ctx), [key] "+r" (key),
|
||||||
[L_poly1305_arm32_clamp] "+r" (L_poly1305_arm32_clamp_c)
|
[L_poly1305_arm32_clamp] "+r" (L_poly1305_arm32_clamp_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [ctx] "r" (ctx), [key] "r" (key),
|
||||||
|
[L_poly1305_arm32_clamp] "r" (L_poly1305_arm32_clamp_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8"
|
: "memory", "cc", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void poly1305_final(Poly1305* ctx_p, byte* mac_p)
|
void poly1305_final(Poly1305* ctx_p, byte* mac_p)
|
||||||
|
#else
|
||||||
|
void poly1305_final(Poly1305* ctx, byte* mac)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
||||||
register byte* mac asm ("r1") = (byte*)mac_p;
|
register byte* mac asm ("r1") = (byte*)mac_p;
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"add r9, %[ctx], #16\n\t"
|
"add r9, %[ctx], #16\n\t"
|
||||||
@@ -377,21 +418,33 @@ void poly1305_final(Poly1305* ctx_p, byte* mac_p)
|
|||||||
/* Zero out padding. */
|
/* Zero out padding. */
|
||||||
"add r9, %[ctx], #36\n\t"
|
"add r9, %[ctx], #36\n\t"
|
||||||
"stm r9, {r4, r5, r6, r7}\n\t"
|
"stm r9, {r4, r5, r6, r7}\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [ctx] "+r" (ctx), [mac] "+r" (mac)
|
: [ctx] "+r" (ctx), [mac] "+r" (mac)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [ctx] "r" (ctx), [mac] "r" (mac)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
||||||
"r9"
|
"r9"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void poly1305_arm32_blocks_16(Poly1305* ctx_p, const byte* m_p, word32 len_p,
|
void poly1305_arm32_blocks_16(Poly1305* ctx_p, const byte* m_p, word32 len_p,
|
||||||
int notLast_p)
|
int notLast_p)
|
||||||
|
#else
|
||||||
|
void poly1305_arm32_blocks_16(Poly1305* ctx, const byte* m, word32 len,
|
||||||
|
int notLast)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
||||||
register const byte* m asm ("r1") = (const byte*)m_p;
|
register const byte* m asm ("r1") = (const byte*)m_p;
|
||||||
register word32 len asm ("r2") = (word32)len_p;
|
register word32 len asm ("r2") = (word32)len_p;
|
||||||
register int notLast asm ("r3") = (int)notLast_p;
|
register int notLast asm ("r3") = (int)notLast_p;
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"sub sp, sp, #28\n\t"
|
"sub sp, sp, #28\n\t"
|
||||||
@@ -602,20 +655,32 @@ void poly1305_arm32_blocks_16(Poly1305* ctx_p, const byte* m_p, word32 len_p,
|
|||||||
"\n"
|
"\n"
|
||||||
"L_poly1305_arm32_16_done_%=: \n\t"
|
"L_poly1305_arm32_16_done_%=: \n\t"
|
||||||
"add sp, sp, #28\n\t"
|
"add sp, sp, #28\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [ctx] "+r" (ctx), [m] "+r" (m), [len] "+r" (len),
|
: [ctx] "+r" (ctx), [m] "+r" (m), [len] "+r" (len),
|
||||||
[notLast] "+r" (notLast)
|
[notLast] "+r" (notLast)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [ctx] "r" (ctx), [m] "r" (m), [len] "r" (len),
|
||||||
|
[notLast] "r" (notLast)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
||||||
"r10", "r11"
|
"r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void poly1305_arm32_blocks(Poly1305* ctx_p, const unsigned char* m_p,
|
void poly1305_arm32_blocks(Poly1305* ctx_p, const unsigned char* m_p,
|
||||||
size_t bytes_p)
|
size_t bytes_p)
|
||||||
|
#else
|
||||||
|
void poly1305_arm32_blocks(Poly1305* ctx, const unsigned char* m, size_t bytes)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
||||||
register const unsigned char* m asm ("r1") = (const unsigned char*)m_p;
|
register const unsigned char* m asm ("r1") = (const unsigned char*)m_p;
|
||||||
register size_t bytes asm ("r2") = (size_t)bytes_p;
|
register size_t bytes asm ("r2") = (size_t)bytes_p;
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"cmp %[bytes], #16\n\t"
|
"cmp %[bytes], #16\n\t"
|
||||||
@@ -1060,8 +1125,13 @@ void poly1305_arm32_blocks(Poly1305* ctx_p, const unsigned char* m_p,
|
|||||||
"stm r12, {r7, r8, r9, r10, r11}\n\t"
|
"stm r12, {r7, r8, r9, r10, r11}\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
"L_poly1305_arm32_blocks_done_%=: \n\t"
|
"L_poly1305_arm32_blocks_done_%=: \n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [ctx] "+r" (ctx), [m] "+r" (m), [bytes] "+r" (bytes)
|
: [ctx] "+r" (ctx), [m] "+r" (m), [bytes] "+r" (bytes)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [ctx] "r" (ctx), [m] "r" (m), [bytes] "r" (bytes)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
: "memory", "cc", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
||||||
"r10", "r11", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8",
|
"r10", "r11", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8",
|
||||||
"d9", "d10", "d11", "d12", "d13", "d14", "d15", "d16", "d17", "d18",
|
"d9", "d10", "d11", "d12", "d13", "d14", "d15", "d16", "d17", "d18",
|
||||||
@@ -1074,12 +1144,22 @@ static const word32 L_poly1305_arm32_clamp[] = {
|
|||||||
0x0fffffff, 0x0ffffffc, 0x0ffffffc, 0x0ffffffc,
|
0x0fffffff, 0x0ffffffc, 0x0ffffffc, 0x0ffffffc,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void poly1305_set_key(Poly1305* ctx_p, const byte* key_p)
|
void poly1305_set_key(Poly1305* ctx_p, const byte* key_p)
|
||||||
|
#else
|
||||||
|
void poly1305_set_key(Poly1305* ctx, const byte* key)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
||||||
register const byte* key asm ("r1") = (const byte*)key_p;
|
register const byte* key asm ("r1") = (const byte*)key_p;
|
||||||
register word32* L_poly1305_arm32_clamp_c asm ("r2") =
|
register word32* L_poly1305_arm32_clamp_c asm ("r2") =
|
||||||
(word32*)&L_poly1305_arm32_clamp;
|
(word32*)&L_poly1305_arm32_clamp;
|
||||||
|
#else
|
||||||
|
register word32* L_poly1305_arm32_clamp_c =
|
||||||
|
(word32*)&L_poly1305_arm32_clamp;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
/* Load mask. */
|
/* Load mask. */
|
||||||
@@ -1290,9 +1370,15 @@ void poly1305_set_key(Poly1305* ctx_p, const byte* key_p)
|
|||||||
"stm lr, {r4, r5, r6, r7, r8, r9}\n\t"
|
"stm lr, {r4, r5, r6, r7, r8, r9}\n\t"
|
||||||
/* Zero leftover */
|
/* Zero leftover */
|
||||||
"str r5, [%[ctx], #56]\n\t"
|
"str r5, [%[ctx], #56]\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [ctx] "+r" (ctx), [key] "+r" (key),
|
: [ctx] "+r" (ctx), [key] "+r" (key),
|
||||||
[L_poly1305_arm32_clamp] "+r" (L_poly1305_arm32_clamp_c)
|
[L_poly1305_arm32_clamp] "+r" (L_poly1305_arm32_clamp_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [ctx] "r" (ctx), [key] "r" (key),
|
||||||
|
[L_poly1305_arm32_clamp] "r" (L_poly1305_arm32_clamp_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
: "memory", "cc", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
|
||||||
"r10", "r11", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8",
|
"r10", "r11", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8",
|
||||||
"d9", "d10", "d11", "d12", "d13", "d14", "d15", "d16", "d17", "d18",
|
"d9", "d10", "d11", "d12", "d13", "d14", "d15", "d16", "d17", "d18",
|
||||||
@@ -1300,10 +1386,16 @@ void poly1305_set_key(Poly1305* ctx_p, const byte* key_p)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void poly1305_final(Poly1305* ctx_p, byte* mac_p)
|
void poly1305_final(Poly1305* ctx_p, byte* mac_p)
|
||||||
|
#else
|
||||||
|
void poly1305_final(Poly1305* ctx, byte* mac)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
|
||||||
register byte* mac asm ("r1") = (byte*)mac_p;
|
register byte* mac asm ("r1") = (byte*)mac_p;
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"add r9, %[ctx], #16\n\t"
|
"add r9, %[ctx], #16\n\t"
|
||||||
@@ -1349,8 +1441,13 @@ void poly1305_final(Poly1305* ctx_p, byte* mac_p)
|
|||||||
/* Zero out padding. */
|
/* Zero out padding. */
|
||||||
"add r9, %[ctx], #40\n\t"
|
"add r9, %[ctx], #40\n\t"
|
||||||
"stm r9, {r4, r5, r6, r7}\n\t"
|
"stm r9, {r4, r5, r6, r7}\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [ctx] "+r" (ctx), [mac] "+r" (mac)
|
: [ctx] "+r" (ctx), [mac] "+r" (mac)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [ctx] "r" (ctx), [mac] "r" (mac)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
||||||
"r9"
|
"r9"
|
||||||
);
|
);
|
||||||
|
@@ -44,11 +44,17 @@
|
|||||||
#ifdef __IAR_SYSTEMS_ICC__
|
#ifdef __IAR_SYSTEMS_ICC__
|
||||||
#define __asm__ asm
|
#define __asm__ asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
#endif /* __IAR_SYSTEMS_ICC__ */
|
#endif /* __IAR_SYSTEMS_ICC__ */
|
||||||
#ifdef __KEIL__
|
#ifdef __KEIL__
|
||||||
#define __asm__ __asm
|
#define __asm__ __asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
#endif /* __KEIL__ */
|
#endif /* __KEIL__ */
|
||||||
|
#ifdef __ghs__
|
||||||
|
#define __asm__ __asm
|
||||||
|
#define __volatile__
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
#endif /* __ghs__ */
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
#include <wolfssl/wolfcrypt/sha256.h>
|
#include <wolfssl/wolfcrypt/sha256.h>
|
||||||
|
|
||||||
@@ -74,16 +80,27 @@ static const word32 L_SHA256_transform_len_k[] = {
|
|||||||
|
|
||||||
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p,
|
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p,
|
||||||
word32 len_p);
|
word32 len_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
|
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
|
||||||
|
#else
|
||||||
|
void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register wc_Sha256* sha256 asm ("r0") = (wc_Sha256*)sha256_p;
|
register wc_Sha256* sha256 asm ("r0") = (wc_Sha256*)sha256_p;
|
||||||
register const byte* data asm ("r1") = (const byte*)data_p;
|
register const byte* data asm ("r1") = (const byte*)data_p;
|
||||||
register word32 len asm ("r2") = (word32)len_p;
|
register word32 len asm ("r2") = (word32)len_p;
|
||||||
register word32* L_SHA256_transform_len_k_c asm ("r3") =
|
register word32* L_SHA256_transform_len_k_c asm ("r3") =
|
||||||
(word32*)&L_SHA256_transform_len_k;
|
(word32*)&L_SHA256_transform_len_k;
|
||||||
|
#else
|
||||||
|
register word32* L_SHA256_transform_len_k_c =
|
||||||
|
(word32*)&L_SHA256_transform_len_k;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"sub sp, sp, #0xc0\n\t"
|
"sub sp, sp, #0xc0\n\t"
|
||||||
|
"mov r3, %[L_SHA256_transform_len_k]\n\t"
|
||||||
/* Copy digest to add in at end */
|
/* Copy digest to add in at end */
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
||||||
"ldm r0, {r4, r5}\n\t"
|
"ldm r0, {r4, r5}\n\t"
|
||||||
@@ -1727,9 +1744,15 @@ void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
|
|||||||
"add %[data], %[data], #0x40\n\t"
|
"add %[data], %[data], #0x40\n\t"
|
||||||
"bne L_SHA256_transform_len_begin_%=\n\t"
|
"bne L_SHA256_transform_len_begin_%=\n\t"
|
||||||
"add sp, sp, #0xc0\n\t"
|
"add sp, sp, #0xc0\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len),
|
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len),
|
||||||
[L_SHA256_transform_len_k] "+r" (L_SHA256_transform_len_k_c)
|
[L_SHA256_transform_len_k] "+r" (L_SHA256_transform_len_k_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [sha256] "r" (sha256), [data] "r" (data), [len] "r" (len),
|
||||||
|
[L_SHA256_transform_len_k] "r" (L_SHA256_transform_len_k_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
|
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
|
||||||
"r12"
|
"r12"
|
||||||
);
|
);
|
||||||
@@ -1760,13 +1783,23 @@ static const word32 L_SHA256_transform_neon_len_k[] = {
|
|||||||
|
|
||||||
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p,
|
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p,
|
||||||
word32 len_p);
|
word32 len_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
|
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
|
||||||
|
#else
|
||||||
|
void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register wc_Sha256* sha256 asm ("r0") = (wc_Sha256*)sha256_p;
|
register wc_Sha256* sha256 asm ("r0") = (wc_Sha256*)sha256_p;
|
||||||
register const byte* data asm ("r1") = (const byte*)data_p;
|
register const byte* data asm ("r1") = (const byte*)data_p;
|
||||||
register word32 len asm ("r2") = (word32)len_p;
|
register word32 len asm ("r2") = (word32)len_p;
|
||||||
register word32* L_SHA256_transform_neon_len_k_c asm ("r3") =
|
register word32* L_SHA256_transform_neon_len_k_c asm ("r3") =
|
||||||
(word32*)&L_SHA256_transform_neon_len_k;
|
(word32*)&L_SHA256_transform_neon_len_k;
|
||||||
|
#else
|
||||||
|
register word32* L_SHA256_transform_neon_len_k_c =
|
||||||
|
(word32*)&L_SHA256_transform_neon_len_k;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"sub sp, sp, #24\n\t"
|
"sub sp, sp, #24\n\t"
|
||||||
@@ -2789,9 +2822,15 @@ void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
|
|||||||
"str r10, [sp, #8]\n\t"
|
"str r10, [sp, #8]\n\t"
|
||||||
"bne L_SHA256_transform_neon_len_begin_%=\n\t"
|
"bne L_SHA256_transform_neon_len_begin_%=\n\t"
|
||||||
"add sp, sp, #24\n\t"
|
"add sp, sp, #24\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len),
|
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len),
|
||||||
[L_SHA256_transform_neon_len_k] "+r" (L_SHA256_transform_neon_len_k_c)
|
[L_SHA256_transform_neon_len_k] "+r" (L_SHA256_transform_neon_len_k_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [sha256] "r" (sha256), [data] "r" (data), [len] "r" (len),
|
||||||
|
[L_SHA256_transform_neon_len_k] "r" (L_SHA256_transform_neon_len_k_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r12", "lr",
|
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r12", "lr",
|
||||||
"r10", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9",
|
"r10", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9",
|
||||||
"d10", "d11"
|
"d10", "d11"
|
||||||
|
@@ -44,11 +44,17 @@
|
|||||||
#ifdef __IAR_SYSTEMS_ICC__
|
#ifdef __IAR_SYSTEMS_ICC__
|
||||||
#define __asm__ asm
|
#define __asm__ asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
#endif /* __IAR_SYSTEMS_ICC__ */
|
#endif /* __IAR_SYSTEMS_ICC__ */
|
||||||
#ifdef __KEIL__
|
#ifdef __KEIL__
|
||||||
#define __asm__ __asm
|
#define __asm__ __asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
#endif /* __KEIL__ */
|
#endif /* __KEIL__ */
|
||||||
|
#ifdef __ghs__
|
||||||
|
#define __asm__ __asm
|
||||||
|
#define __volatile__
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
#endif /* __ghs__ */
|
||||||
#ifdef WOLFSSL_SHA3
|
#ifdef WOLFSSL_SHA3
|
||||||
#ifndef WOLFSSL_ARMASM_NO_NEON
|
#ifndef WOLFSSL_ARMASM_NO_NEON
|
||||||
static const word64 L_sha3_arm2_neon_rt[] = {
|
static const word64 L_sha3_arm2_neon_rt[] = {
|
||||||
@@ -68,14 +74,24 @@ static const word64 L_sha3_arm2_neon_rt[] = {
|
|||||||
|
|
||||||
#include <wolfssl/wolfcrypt/sha3.h>
|
#include <wolfssl/wolfcrypt/sha3.h>
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void BlockSha3(word64* state_p)
|
void BlockSha3(word64* state_p)
|
||||||
|
#else
|
||||||
|
void BlockSha3(word64* state)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register word64* state asm ("r0") = (word64*)state_p;
|
register word64* state asm ("r0") = (word64*)state_p;
|
||||||
register word64* L_sha3_arm2_neon_rt_c asm ("r1") =
|
register word64* L_sha3_arm2_neon_rt_c asm ("r1") =
|
||||||
(word64*)&L_sha3_arm2_neon_rt;
|
(word64*)&L_sha3_arm2_neon_rt;
|
||||||
|
#else
|
||||||
|
register word64* L_sha3_arm2_neon_rt_c = (word64*)&L_sha3_arm2_neon_rt;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"sub sp, sp, #16\n\t"
|
"sub sp, sp, #16\n\t"
|
||||||
|
"mov r1, %[L_sha3_arm2_neon_rt]\n\t"
|
||||||
"mov r2, #24\n\t"
|
"mov r2, #24\n\t"
|
||||||
"mov r3, sp\n\t"
|
"mov r3, sp\n\t"
|
||||||
"vld1.8 {d0-d3}, [%[state]]!\n\t"
|
"vld1.8 {d0-d3}, [%[state]]!\n\t"
|
||||||
@@ -332,9 +348,15 @@ void BlockSha3(word64* state_p)
|
|||||||
"vst1.8 {d20-d23}, [%[state]]!\n\t"
|
"vst1.8 {d20-d23}, [%[state]]!\n\t"
|
||||||
"vst1.8 {d24}, [%[state]]\n\t"
|
"vst1.8 {d24}, [%[state]]\n\t"
|
||||||
"add sp, sp, #16\n\t"
|
"add sp, sp, #16\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [state] "+r" (state),
|
: [state] "+r" (state),
|
||||||
[L_sha3_arm2_neon_rt] "+r" (L_sha3_arm2_neon_rt_c)
|
[L_sha3_arm2_neon_rt] "+r" (L_sha3_arm2_neon_rt_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [state] "r" (state),
|
||||||
|
[L_sha3_arm2_neon_rt] "r" (L_sha3_arm2_neon_rt_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r2", "r3", "d0", "d1", "d2", "d3", "d4", "d5", "d6",
|
: "memory", "cc", "r2", "r3", "d0", "d1", "d2", "d3", "d4", "d5", "d6",
|
||||||
"d7", "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15", "d16",
|
"d7", "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15", "d16",
|
||||||
"d17", "d18", "d19", "d20", "d21", "d22", "d23", "d24", "d25",
|
"d17", "d18", "d19", "d20", "d21", "d22", "d23", "d24", "d25",
|
||||||
@@ -361,13 +383,23 @@ static const word64 L_sha3_arm2_rt[] = {
|
|||||||
|
|
||||||
#include <wolfssl/wolfcrypt/sha3.h>
|
#include <wolfssl/wolfcrypt/sha3.h>
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void BlockSha3(word64* state_p)
|
void BlockSha3(word64* state_p)
|
||||||
|
#else
|
||||||
|
void BlockSha3(word64* state)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register word64* state asm ("r0") = (word64*)state_p;
|
register word64* state asm ("r0") = (word64*)state_p;
|
||||||
register word64* L_sha3_arm2_rt_c asm ("r1") = (word64*)&L_sha3_arm2_rt;
|
register word64* L_sha3_arm2_rt_c asm ("r1") = (word64*)&L_sha3_arm2_rt;
|
||||||
|
#else
|
||||||
|
register word64* L_sha3_arm2_rt_c = (word64*)&L_sha3_arm2_rt;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"sub sp, sp, #0xcc\n\t"
|
"sub sp, sp, #0xcc\n\t"
|
||||||
|
"mov r1, %[L_sha3_arm2_rt]\n\t"
|
||||||
"mov r2, #12\n\t"
|
"mov r2, #12\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
"L_sha3_arm32_begin_%=: \n\t"
|
"L_sha3_arm32_begin_%=: \n\t"
|
||||||
@@ -2330,8 +2362,13 @@ void BlockSha3(word64* state_p)
|
|||||||
"subs r2, r2, #1\n\t"
|
"subs r2, r2, #1\n\t"
|
||||||
"bne L_sha3_arm32_begin_%=\n\t"
|
"bne L_sha3_arm32_begin_%=\n\t"
|
||||||
"add sp, sp, #0xcc\n\t"
|
"add sp, sp, #0xcc\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [state] "+r" (state), [L_sha3_arm2_rt] "+r" (L_sha3_arm2_rt_c)
|
: [state] "+r" (state), [L_sha3_arm2_rt] "+r" (L_sha3_arm2_rt_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [state] "r" (state), [L_sha3_arm2_rt] "r" (L_sha3_arm2_rt_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
: "memory", "cc", "r2", "r3", "r12", "lr", "r4", "r5", "r6", "r7", "r8",
|
||||||
"r9", "r10", "r11"
|
"r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
|
@@ -44,11 +44,17 @@
|
|||||||
#ifdef __IAR_SYSTEMS_ICC__
|
#ifdef __IAR_SYSTEMS_ICC__
|
||||||
#define __asm__ asm
|
#define __asm__ asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
#endif /* __IAR_SYSTEMS_ICC__ */
|
#endif /* __IAR_SYSTEMS_ICC__ */
|
||||||
#ifdef __KEIL__
|
#ifdef __KEIL__
|
||||||
#define __asm__ __asm
|
#define __asm__ __asm
|
||||||
#define __volatile__ volatile
|
#define __volatile__ volatile
|
||||||
#endif /* __KEIL__ */
|
#endif /* __KEIL__ */
|
||||||
|
#ifdef __ghs__
|
||||||
|
#define __asm__ __asm
|
||||||
|
#define __volatile__
|
||||||
|
#define WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
#endif /* __ghs__ */
|
||||||
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
|
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
|
||||||
#include <wolfssl/wolfcrypt/sha512.h>
|
#include <wolfssl/wolfcrypt/sha512.h>
|
||||||
|
|
||||||
@@ -98,16 +104,27 @@ static const word64 L_SHA512_transform_len_k[] = {
|
|||||||
|
|
||||||
void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p,
|
void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p,
|
||||||
word32 len_p);
|
word32 len_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p, word32 len_p)
|
void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p, word32 len_p)
|
||||||
|
#else
|
||||||
|
void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register wc_Sha512* sha512 asm ("r0") = (wc_Sha512*)sha512_p;
|
register wc_Sha512* sha512 asm ("r0") = (wc_Sha512*)sha512_p;
|
||||||
register const byte* data asm ("r1") = (const byte*)data_p;
|
register const byte* data asm ("r1") = (const byte*)data_p;
|
||||||
register word32 len asm ("r2") = (word32)len_p;
|
register word32 len asm ("r2") = (word32)len_p;
|
||||||
register word64* L_SHA512_transform_len_k_c asm ("r3") =
|
register word64* L_SHA512_transform_len_k_c asm ("r3") =
|
||||||
(word64*)&L_SHA512_transform_len_k;
|
(word64*)&L_SHA512_transform_len_k;
|
||||||
|
#else
|
||||||
|
register word64* L_SHA512_transform_len_k_c =
|
||||||
|
(word64*)&L_SHA512_transform_len_k;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"sub sp, sp, #0xc0\n\t"
|
"sub sp, sp, #0xc0\n\t"
|
||||||
|
"mov r3, %[L_SHA512_transform_len_k]\n\t"
|
||||||
/* Copy digest to add in at end */
|
/* Copy digest to add in at end */
|
||||||
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
|
||||||
"ldm r0, {r4, r5}\n\t"
|
"ldm r0, {r4, r5}\n\t"
|
||||||
@@ -7519,9 +7536,15 @@ void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p, word32 len_p)
|
|||||||
"bne L_SHA512_transform_len_begin_%=\n\t"
|
"bne L_SHA512_transform_len_begin_%=\n\t"
|
||||||
"eor r0, r0, r0\n\t"
|
"eor r0, r0, r0\n\t"
|
||||||
"add sp, sp, #0xc0\n\t"
|
"add sp, sp, #0xc0\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len),
|
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len),
|
||||||
[L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c)
|
[L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [sha512] "r" (sha512), [data] "r" (data), [len] "r" (len),
|
||||||
|
[L_SHA512_transform_len_k] "r" (L_SHA512_transform_len_k_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
|
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
|
||||||
"r12"
|
"r12"
|
||||||
);
|
);
|
||||||
@@ -7576,15 +7599,26 @@ static const word64 L_SHA512_transform_neon_len_k[] = {
|
|||||||
|
|
||||||
void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p,
|
void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p,
|
||||||
word32 len_p);
|
word32 len_p);
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p, word32 len_p)
|
void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p, word32 len_p)
|
||||||
|
#else
|
||||||
|
void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
{
|
{
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
register wc_Sha512* sha512 asm ("r0") = (wc_Sha512*)sha512_p;
|
register wc_Sha512* sha512 asm ("r0") = (wc_Sha512*)sha512_p;
|
||||||
register const byte* data asm ("r1") = (const byte*)data_p;
|
register const byte* data asm ("r1") = (const byte*)data_p;
|
||||||
register word32 len asm ("r2") = (word32)len_p;
|
register word32 len asm ("r2") = (word32)len_p;
|
||||||
register word64* L_SHA512_transform_neon_len_k_c asm ("r3") =
|
register word64* L_SHA512_transform_neon_len_k_c asm ("r3") =
|
||||||
(word64*)&L_SHA512_transform_neon_len_k;
|
(word64*)&L_SHA512_transform_neon_len_k;
|
||||||
|
#else
|
||||||
|
register word64* L_SHA512_transform_neon_len_k_c =
|
||||||
|
(word64*)&L_SHA512_transform_neon_len_k;
|
||||||
|
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
"mov r3, %[L_SHA512_transform_neon_len_k]\n\t"
|
||||||
/* Load digest into working vars */
|
/* Load digest into working vars */
|
||||||
"vldm.64 %[sha512], {d0-d7}\n\t"
|
"vldm.64 %[sha512], {d0-d7}\n\t"
|
||||||
/* Start of loop processing a block */
|
/* Start of loop processing a block */
|
||||||
@@ -9073,9 +9107,15 @@ void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p, word32 len_p)
|
|||||||
"subs %[len], %[len], #0x80\n\t"
|
"subs %[len], %[len], #0x80\n\t"
|
||||||
"sub r3, r3, #0x280\n\t"
|
"sub r3, r3, #0x280\n\t"
|
||||||
"bne L_SHA512_transform_neon_len_begin_%=\n\t"
|
"bne L_SHA512_transform_neon_len_begin_%=\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len),
|
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len),
|
||||||
[L_SHA512_transform_neon_len_k] "+r" (L_SHA512_transform_neon_len_k_c)
|
[L_SHA512_transform_neon_len_k] "+r" (L_SHA512_transform_neon_len_k_c)
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
:
|
||||||
|
: [sha512] "r" (sha512), [data] "r" (data), [len] "r" (len),
|
||||||
|
[L_SHA512_transform_neon_len_k] "r" (L_SHA512_transform_neon_len_k_c)
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "cc", "r12", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
|
: "memory", "cc", "r12", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
|
||||||
"d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15", "q8", "q9",
|
"d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15", "q8", "q9",
|
||||||
"q10", "q11", "q12", "q13", "q14", "q15"
|
"q10", "q11", "q12", "q13", "q14", "q15"
|
||||||
|
@@ -2290,12 +2290,12 @@ L_AES_ECB_decrypt_end:
|
|||||||
.type AES_CBC_decrypt, %function
|
.type AES_CBC_decrypt, %function
|
||||||
AES_CBC_decrypt:
|
AES_CBC_decrypt:
|
||||||
PUSH {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
PUSH {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||||
LDR r8, [sp, #36]
|
|
||||||
LDR r4, [sp, #40]
|
|
||||||
MOV lr, r0
|
MOV lr, r0
|
||||||
LDR r0, L_AES_Thumb2_td_ecb
|
LDR r0, L_AES_Thumb2_td_ecb
|
||||||
MOV r12, r2
|
MOV r12, r2
|
||||||
ADR r2, L_AES_Thumb2_td4
|
ADR r2, L_AES_Thumb2_td4
|
||||||
|
LDR r8, [sp, #36]
|
||||||
|
LDR r4, [sp, #40]
|
||||||
PUSH {r3, r4}
|
PUSH {r3, r4}
|
||||||
CMP r8, #0xa
|
CMP r8, #0xa
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
|
@@ -214,6 +214,11 @@ void AES_invert_key(unsigned char* ks, word32 rounds)
|
|||||||
register word32* L_AES_Thumb2_td_c __asm__ ("r3") =
|
register word32* L_AES_Thumb2_td_c __asm__ ("r3") =
|
||||||
(word32*)L_AES_Thumb2_td;
|
(word32*)L_AES_Thumb2_td;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word32* L_AES_Thumb2_te_c = (word32*)L_AES_Thumb2_te;
|
||||||
|
|
||||||
|
register word32* L_AES_Thumb2_td_c = (word32*)L_AES_Thumb2_td;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
@@ -359,6 +364,11 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len,
|
|||||||
register word32* L_AES_Thumb2_rcon_c __asm__ ("r4") =
|
register word32* L_AES_Thumb2_rcon_c __asm__ ("r4") =
|
||||||
(word32*)&L_AES_Thumb2_rcon;
|
(word32*)&L_AES_Thumb2_rcon;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word32* L_AES_Thumb2_te_c = (word32*)L_AES_Thumb2_te;
|
||||||
|
|
||||||
|
register word32* L_AES_Thumb2_rcon_c = (word32*)&L_AES_Thumb2_rcon;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
@@ -893,6 +903,9 @@ void AES_ECB_encrypt(const unsigned char* in, unsigned char* out,
|
|||||||
register word32* L_AES_Thumb2_te_ecb_c __asm__ ("r5") =
|
register word32* L_AES_Thumb2_te_ecb_c __asm__ ("r5") =
|
||||||
(word32*)L_AES_Thumb2_te_ecb;
|
(word32*)L_AES_Thumb2_te_ecb;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word32* L_AES_Thumb2_te_ecb_c = (word32*)L_AES_Thumb2_te_ecb;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
@@ -901,7 +914,7 @@ void AES_ECB_encrypt(const unsigned char* in, unsigned char* out,
|
|||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r12, r4\n\t"
|
"MOV r12, r4\n\t"
|
||||||
#else
|
#else
|
||||||
"LDR r12, [sp, #36]\n\t"
|
"MOV r12, %[nr]\n\t"
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"PUSH {%[ks]}\n\t"
|
"PUSH {%[ks]}\n\t"
|
||||||
"CMP r12, #0xa\n\t"
|
"CMP r12, #0xa\n\t"
|
||||||
@@ -1115,18 +1128,21 @@ void AES_CBC_encrypt(const unsigned char* in, unsigned char* out,
|
|||||||
register word32* L_AES_Thumb2_te_ecb_c __asm__ ("r6") =
|
register word32* L_AES_Thumb2_te_ecb_c __asm__ ("r6") =
|
||||||
(word32*)L_AES_Thumb2_te_ecb;
|
(word32*)L_AES_Thumb2_te_ecb;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word32* L_AES_Thumb2_te_ecb_c = (word32*)L_AES_Thumb2_te_ecb;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r8, r4\n\t"
|
"MOV r8, r4\n\t"
|
||||||
#else
|
#else
|
||||||
"LDR r8, [sp, #36]\n\t"
|
"MOV r8, %[nr]\n\t"
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r9, r5\n\t"
|
"MOV r9, r5\n\t"
|
||||||
#else
|
#else
|
||||||
"LDR r9, [sp, #40]\n\t"
|
"MOV r9, %[iv]\n\t"
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_te_ecb]\n\t"
|
"MOV r0, %[L_AES_Thumb2_te_ecb]\n\t"
|
||||||
@@ -1356,18 +1372,21 @@ void AES_CTR_encrypt(const unsigned char* in, unsigned char* out,
|
|||||||
register word32* L_AES_Thumb2_te_ecb_c __asm__ ("r6") =
|
register word32* L_AES_Thumb2_te_ecb_c __asm__ ("r6") =
|
||||||
(word32*)L_AES_Thumb2_te_ecb;
|
(word32*)L_AES_Thumb2_te_ecb;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word32* L_AES_Thumb2_te_ecb_c = (word32*)L_AES_Thumb2_te_ecb;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r12, r4\n\t"
|
"MOV r12, r4\n\t"
|
||||||
#else
|
#else
|
||||||
"LDR r12, [sp, #36]\n\t"
|
"MOV r12, %[nr]\n\t"
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r8, r5\n\t"
|
"MOV r8, r5\n\t"
|
||||||
#else
|
#else
|
||||||
"LDR r8, [sp, #40]\n\t"
|
"MOV r8, %[ctr]\n\t"
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_te_ecb]\n\t"
|
"MOV r0, %[L_AES_Thumb2_te_ecb]\n\t"
|
||||||
@@ -1889,8 +1908,12 @@ void AES_ECB_decrypt(const unsigned char* in, unsigned char* out,
|
|||||||
register word32* L_AES_Thumb2_td_ecb_c __asm__ ("r5") =
|
register word32* L_AES_Thumb2_td_ecb_c __asm__ ("r5") =
|
||||||
(word32*)L_AES_Thumb2_td_ecb;
|
(word32*)L_AES_Thumb2_td_ecb;
|
||||||
|
|
||||||
register byte* L_AES_Thumb2_td4_c __asm__ ("r6") =
|
register byte L_AES_Thumb2_td4_c __asm__ ("r6") = (byte)&L_AES_Thumb2_td4;
|
||||||
(byte*)&L_AES_Thumb2_td4;
|
|
||||||
|
#else
|
||||||
|
register word32* L_AES_Thumb2_td_ecb_c = (word32*)L_AES_Thumb2_td_ecb;
|
||||||
|
|
||||||
|
register byte L_AES_Thumb2_td4_c = (byte)&L_AES_Thumb2_td4;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
@@ -1898,7 +1921,7 @@ void AES_ECB_decrypt(const unsigned char* in, unsigned char* out,
|
|||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r8, r4\n\t"
|
"MOV r8, r4\n\t"
|
||||||
#else
|
#else
|
||||||
"LDR r8, [sp, #36]\n\t"
|
"MOV r8, %[nr]\n\t"
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_td_ecb]\n\t"
|
"MOV r0, %[L_AES_Thumb2_td_ecb]\n\t"
|
||||||
@@ -2111,26 +2134,30 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out,
|
|||||||
register word32* L_AES_Thumb2_td_ecb_c __asm__ ("r6") =
|
register word32* L_AES_Thumb2_td_ecb_c __asm__ ("r6") =
|
||||||
(word32*)L_AES_Thumb2_td_ecb;
|
(word32*)L_AES_Thumb2_td_ecb;
|
||||||
|
|
||||||
register byte* L_AES_Thumb2_td4_c __asm__ ("r7") =
|
register byte L_AES_Thumb2_td4_c __asm__ ("r7") = (byte)&L_AES_Thumb2_td4;
|
||||||
(byte*)&L_AES_Thumb2_td4;
|
|
||||||
|
#else
|
||||||
|
register word32* L_AES_Thumb2_td_ecb_c = (word32*)L_AES_Thumb2_td_ecb;
|
||||||
|
|
||||||
|
register byte L_AES_Thumb2_td4_c = (byte)&L_AES_Thumb2_td4;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
|
||||||
"MOV r8, r4\n\t"
|
|
||||||
#else
|
|
||||||
"LDR r8, [sp, #36]\n\t"
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
|
||||||
"MOV r4, r5\n\t"
|
|
||||||
#else
|
|
||||||
"LDR r4, [sp, #40]\n\t"
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_td_ecb]\n\t"
|
"MOV r0, %[L_AES_Thumb2_td_ecb]\n\t"
|
||||||
"MOV r12, %[len]\n\t"
|
"MOV r12, %[len]\n\t"
|
||||||
"MOV r2, %[L_AES_Thumb2_td4]\n\t"
|
"MOV r2, %[L_AES_Thumb2_td4]\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
"MOV r8, r4\n\t"
|
||||||
|
#else
|
||||||
|
"MOV r8, %[nr]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
|
"MOV r4, r5\n\t"
|
||||||
|
#else
|
||||||
|
"MOV r4, %[iv]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"PUSH {%[ks], r4}\n\t"
|
"PUSH {%[ks], r4}\n\t"
|
||||||
"CMP r8, #0xa\n\t"
|
"CMP r8, #0xa\n\t"
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
@@ -2524,6 +2551,9 @@ void GCM_gmult_len(unsigned char* x, const unsigned char** m,
|
|||||||
register word32* L_GCM_gmult_len_r_c __asm__ ("r4") =
|
register word32* L_GCM_gmult_len_r_c __asm__ ("r4") =
|
||||||
(word32*)&L_GCM_gmult_len_r;
|
(word32*)&L_GCM_gmult_len_r;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word32* L_GCM_gmult_len_r_c = (word32*)&L_GCM_gmult_len_r;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
@@ -3117,18 +3147,21 @@ void AES_GCM_encrypt(const unsigned char* in, unsigned char* out,
|
|||||||
register word32* L_AES_Thumb2_te_gcm_c __asm__ ("r6") =
|
register word32* L_AES_Thumb2_te_gcm_c __asm__ ("r6") =
|
||||||
(word32*)L_AES_Thumb2_te_gcm;
|
(word32*)L_AES_Thumb2_te_gcm;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word32* L_AES_Thumb2_te_gcm_c = (word32*)L_AES_Thumb2_te_gcm;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r12, r4\n\t"
|
"MOV r12, r4\n\t"
|
||||||
#else
|
#else
|
||||||
"LDR r12, [sp, #36]\n\t"
|
"MOV r12, %[nr]\n\t"
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r8, r5\n\t"
|
"MOV r8, r5\n\t"
|
||||||
#else
|
#else
|
||||||
"LDR r8, [sp, #40]\n\t"
|
"MOV r8, %[ctr]\n\t"
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_te_gcm]\n\t"
|
"MOV r0, %[L_AES_Thumb2_te_gcm]\n\t"
|
||||||
|
@@ -95,6 +95,10 @@ void wc_chacha_setkey(word32* x, const byte* key, word32 keySz)
|
|||||||
register word32* L_chacha_thumb2_constants_c __asm__ ("r3") =
|
register word32* L_chacha_thumb2_constants_c __asm__ ("r3") =
|
||||||
(word32*)&L_chacha_thumb2_constants;
|
(word32*)&L_chacha_thumb2_constants;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word32* L_chacha_thumb2_constants_c =
|
||||||
|
(word32*)&L_chacha_thumb2_constants;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
@@ -77,6 +77,10 @@ void mlkem_thumb2_ntt(sword16* r)
|
|||||||
register word16* L_mlkem_thumb2_ntt_zetas_c __asm__ ("r1") =
|
register word16* L_mlkem_thumb2_ntt_zetas_c __asm__ ("r1") =
|
||||||
(word16*)&L_mlkem_thumb2_ntt_zetas;
|
(word16*)&L_mlkem_thumb2_ntt_zetas;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_thumb2_ntt_zetas_c =
|
||||||
|
(word16*)&L_mlkem_thumb2_ntt_zetas;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
@@ -1396,6 +1400,10 @@ void mlkem_thumb2_invntt(sword16* r)
|
|||||||
register word16* L_mlkem_invntt_zetas_inv_c __asm__ ("r1") =
|
register word16* L_mlkem_invntt_zetas_inv_c __asm__ ("r1") =
|
||||||
(word16*)&L_mlkem_invntt_zetas_inv;
|
(word16*)&L_mlkem_invntt_zetas_inv;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_invntt_zetas_inv_c =
|
||||||
|
(word16*)&L_mlkem_invntt_zetas_inv;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
@@ -3085,6 +3093,10 @@ void mlkem_thumb2_basemul_mont(sword16* r, const sword16* a, const sword16* b)
|
|||||||
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r3") =
|
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r3") =
|
||||||
(word16*)&L_mlkem_basemul_mont_zetas;
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_basemul_mont_zetas_c =
|
||||||
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
@@ -3232,6 +3244,10 @@ void mlkem_thumb2_basemul_mont_add(sword16* r, const sword16* a,
|
|||||||
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r3") =
|
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r3") =
|
||||||
(word16*)&L_mlkem_basemul_mont_zetas;
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_basemul_mont_zetas_c =
|
||||||
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
@@ -3387,6 +3403,10 @@ void mlkem_thumb2_csubq(sword16* p)
|
|||||||
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r1") =
|
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r1") =
|
||||||
(word16*)&L_mlkem_basemul_mont_zetas;
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_basemul_mont_zetas_c =
|
||||||
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
@@ -3501,6 +3521,10 @@ unsigned int mlkem_thumb2_rej_uniform(sword16* p, unsigned int len,
|
|||||||
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r4") =
|
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r4") =
|
||||||
(word16*)&L_mlkem_basemul_mont_zetas;
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word16* L_mlkem_basemul_mont_zetas_c =
|
||||||
|
(word16*)&L_mlkem_basemul_mont_zetas;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
@@ -315,6 +315,10 @@ void poly1305_set_key(Poly1305* ctx, const byte* key)
|
|||||||
register word32* L_poly1305_thumb2_clamp_c __asm__ ("r2") =
|
register word32* L_poly1305_thumb2_clamp_c __asm__ ("r2") =
|
||||||
(word32*)&L_poly1305_thumb2_clamp;
|
(word32*)&L_poly1305_thumb2_clamp;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word32* L_poly1305_thumb2_clamp_c =
|
||||||
|
(word32*)&L_poly1305_thumb2_clamp;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
@@ -81,6 +81,10 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
|
|||||||
register word32* L_SHA256_transform_len_k_c __asm__ ("r3") =
|
register word32* L_SHA256_transform_len_k_c __asm__ ("r3") =
|
||||||
(word32*)&L_SHA256_transform_len_k;
|
(word32*)&L_SHA256_transform_len_k;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word32* L_SHA256_transform_len_k_c =
|
||||||
|
(word32*)&L_SHA256_transform_len_k;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
@@ -73,6 +73,9 @@ void BlockSha3(word64* state)
|
|||||||
register word64* L_sha3_thumb2_rt_c __asm__ ("r1") =
|
register word64* L_sha3_thumb2_rt_c __asm__ ("r1") =
|
||||||
(word64*)&L_sha3_thumb2_rt;
|
(word64*)&L_sha3_thumb2_rt;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word64* L_sha3_thumb2_rt_c = (word64*)&L_sha3_thumb2_rt;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
@@ -105,6 +105,10 @@ void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len)
|
|||||||
register word64* L_SHA512_transform_len_k_c __asm__ ("r3") =
|
register word64* L_SHA512_transform_len_k_c __asm__ ("r3") =
|
||||||
(word64*)&L_SHA512_transform_len_k;
|
(word64*)&L_SHA512_transform_len_k;
|
||||||
|
|
||||||
|
#else
|
||||||
|
register word64* L_SHA512_transform_len_k_c =
|
||||||
|
(word64*)&L_SHA512_transform_len_k;
|
||||||
|
|
||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
Reference in New Issue
Block a user