mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-29 18:27:29 +02:00
Merge pull request #2275 from SparkiDev/sha512_arm32
Add ARM32 NEON code for SHA-512/384
This commit is contained in:
@ -236,6 +236,7 @@ if BUILD_SHA512
|
||||
if BUILD_ARMASM
|
||||
src_libwolfssl_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha512.c
|
||||
src_libwolfssl_la_SOURCES += wolfcrypt/src/port/arm/armv8-sha512-asm.S
|
||||
src_libwolfssl_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha512-asm.S
|
||||
else
|
||||
src_libwolfssl_la_SOURCES += wolfcrypt/src/sha512.c
|
||||
if BUILD_INTELASM
|
||||
@ -387,7 +388,7 @@ if BUILD_INTELASM
|
||||
src_libwolfssl_la_SOURCES += wolfcrypt/src/fe_x25519_asm.S
|
||||
else
|
||||
if BUILD_ARMASM
|
||||
src_libwolfssl_la_SOURCES += wolfcrypt/src/port/arm/armv7-curve25519.S
|
||||
src_libwolfssl_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-curve25519.S
|
||||
src_libwolfssl_la_SOURCES += wolfcrypt/src/port/arm/armv8-curve25519.S
|
||||
else
|
||||
src_libwolfssl_la_SOURCES += wolfcrypt/src/fe_operations.c
|
||||
|
@ -52,8 +52,9 @@ EXTRA_DIST += wolfcrypt/src/port/ti/ti-aes.c \
|
||||
wolfcrypt/src/port/arm/armv8-sha256.c \
|
||||
wolfcrypt/src/port/arm/armv8-chacha.c \
|
||||
wolfcrypt/src/port/arm/armv8-curve25519.c \
|
||||
wolfcrypt/src/port/arm/armv7-curve25519.c \
|
||||
wolfcrypt/src/port/arm/armv8-32-curve25519.c \
|
||||
wolfcrypt/src/port/arm/armv8-sha512-asm.c \
|
||||
wolfcrypt/src/port/arm/armv8-32-sha512-asm.c \
|
||||
wolfcrypt/src/port/nxp/ksdk_port.c \
|
||||
wolfcrypt/src/port/atmel/README.md \
|
||||
wolfcrypt/src/port/xilinx/xil-sha3.c \
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
/* armv7-curve25519
|
||||
/* armv8-32-curve25519
|
||||
*
|
||||
* Copyright (C) 2006-2019 wolfSSL Inc.
|
||||
*
|
||||
@ -19,18 +19,22 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
/* Generated using (from wolfssl):
|
||||
* cd ../scripts
|
||||
* ruby ./x25519/x25519.rb arm32 ../wolfssl/wolfcrypt/src/port/arm/armv8-32-curve25519.S
|
||||
*/
|
||||
#ifndef __aarch64__
|
||||
.text
|
||||
.globl fe_init
|
||||
.type fe_init, %function
|
||||
.align 2
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_init
|
||||
.type fe_init, %function
|
||||
fe_init:
|
||||
bx lr
|
||||
.size fe_init,.-fe_init
|
||||
.text
|
||||
.globl fe_frombytes
|
||||
.type fe_frombytes, %function
|
||||
.align 2
|
||||
.size fe_init,.-fe_init
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_frombytes
|
||||
.type fe_frombytes, %function
|
||||
fe_frombytes:
|
||||
push {r4, r5, r6, r7, lr}
|
||||
ldrd r2, r3, [r1]
|
||||
@ -45,11 +49,11 @@ fe_frombytes:
|
||||
strd r4, r5, [r0, #16]
|
||||
strd r6, r7, [r0, #24]
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.size fe_frombytes,.-fe_frombytes
|
||||
.text
|
||||
.globl fe_tobytes
|
||||
.type fe_tobytes, %function
|
||||
.align 2
|
||||
.size fe_frombytes,.-fe_frombytes
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_tobytes
|
||||
.type fe_tobytes, %function
|
||||
fe_tobytes:
|
||||
push {r4, r5, r6, r7, r8, lr}
|
||||
ldrd r2, r3, [r1]
|
||||
@ -82,11 +86,11 @@ fe_tobytes:
|
||||
strd r4, r5, [r0, #16]
|
||||
strd r6, r7, [r0, #24]
|
||||
pop {r4, r5, r6, r7, r8, pc}
|
||||
.size fe_tobytes,.-fe_tobytes
|
||||
.text
|
||||
.globl fe_1
|
||||
.type fe_1, %function
|
||||
.align 2
|
||||
.size fe_tobytes,.-fe_tobytes
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_1
|
||||
.type fe_1, %function
|
||||
fe_1:
|
||||
# Set one
|
||||
mov r2, #1
|
||||
@ -100,11 +104,11 @@ fe_1:
|
||||
str r1, [r0, #24]
|
||||
str r1, [r0, #28]
|
||||
bx lr
|
||||
.size fe_1,.-fe_1
|
||||
.text
|
||||
.globl fe_0
|
||||
.type fe_0, %function
|
||||
.align 2
|
||||
.size fe_1,.-fe_1
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_0
|
||||
.type fe_0, %function
|
||||
fe_0:
|
||||
# Set zero
|
||||
mov r1, #0
|
||||
@ -117,11 +121,11 @@ fe_0:
|
||||
str r1, [r0, #24]
|
||||
str r1, [r0, #28]
|
||||
bx lr
|
||||
.size fe_0,.-fe_0
|
||||
.text
|
||||
.globl fe_copy
|
||||
.type fe_copy, %function
|
||||
.align 2
|
||||
.size fe_0,.-fe_0
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_copy
|
||||
.type fe_copy, %function
|
||||
fe_copy:
|
||||
push {lr}
|
||||
# Copy
|
||||
@ -138,11 +142,11 @@ fe_copy:
|
||||
str r12, [r0, #24]
|
||||
str lr, [r0, #28]
|
||||
pop {pc}
|
||||
.size fe_copy,.-fe_copy
|
||||
.text
|
||||
.globl fe_sub
|
||||
.type fe_sub, %function
|
||||
.align 2
|
||||
.size fe_copy,.-fe_copy
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_sub
|
||||
.type fe_sub, %function
|
||||
fe_sub:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
# Sub
|
||||
@ -189,11 +193,11 @@ fe_sub:
|
||||
strd r6, r7, [r0, #16]
|
||||
strd r8, r9, [r0, #24]
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_sub,.-fe_sub
|
||||
.text
|
||||
.globl fe_add
|
||||
.type fe_add, %function
|
||||
.align 2
|
||||
.size fe_sub,.-fe_sub
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_add
|
||||
.type fe_add, %function
|
||||
fe_add:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
# Add
|
||||
@ -240,11 +244,11 @@ fe_add:
|
||||
strd r6, r7, [r0, #16]
|
||||
strd r8, r9, [r0, #24]
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_add,.-fe_add
|
||||
.text
|
||||
.globl fe_neg
|
||||
.type fe_neg, %function
|
||||
.align 2
|
||||
.size fe_add,.-fe_add
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_neg
|
||||
.type fe_neg, %function
|
||||
fe_neg:
|
||||
push {r4, r5, lr}
|
||||
mov r5, #-1
|
||||
@ -271,11 +275,11 @@ fe_neg:
|
||||
str r12, [r0, #24]
|
||||
str lr, [r0, #28]
|
||||
pop {r4, r5, pc}
|
||||
.size fe_neg,.-fe_neg
|
||||
.text
|
||||
.globl fe_isnonzero
|
||||
.type fe_isnonzero, %function
|
||||
.align 2
|
||||
.size fe_neg,.-fe_neg
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_isnonzero
|
||||
.type fe_isnonzero, %function
|
||||
fe_isnonzero:
|
||||
push {r4, r5, r6, r7, r8, lr}
|
||||
ldrd r2, r3, [r0]
|
||||
@ -310,11 +314,11 @@ fe_isnonzero:
|
||||
orr r2, r2, r6
|
||||
orr r0, r2, r12
|
||||
pop {r4, r5, r6, r7, r8, pc}
|
||||
.size fe_isnonzero,.-fe_isnonzero
|
||||
.text
|
||||
.globl fe_isnegative
|
||||
.type fe_isnegative, %function
|
||||
.align 2
|
||||
.size fe_isnonzero,.-fe_isnonzero
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_isnegative
|
||||
.type fe_isnegative, %function
|
||||
fe_isnegative:
|
||||
push {lr}
|
||||
ldrd r2, r3, [r0]
|
||||
@ -336,11 +340,11 @@ fe_isnegative:
|
||||
lsr r1, r1, #31
|
||||
eor r0, r0, r1
|
||||
pop {pc}
|
||||
.size fe_isnegative,.-fe_isnegative
|
||||
.text
|
||||
.globl fe_cmov_table
|
||||
.type fe_cmov_table, %function
|
||||
.align 2
|
||||
.size fe_isnegative,.-fe_isnegative
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_cmov_table
|
||||
.type fe_cmov_table, %function
|
||||
fe_cmov_table:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sxtb r2, r2
|
||||
@ -1319,11 +1323,11 @@ fe_cmov_table:
|
||||
str r5, [r0, #88]
|
||||
str r6, [r0, #92]
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_cmov_table,.-fe_cmov_table
|
||||
.text
|
||||
.globl fe_mul
|
||||
.type fe_mul, %function
|
||||
.align 2
|
||||
.size fe_cmov_table,.-fe_cmov_table
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_mul
|
||||
.type fe_mul, %function
|
||||
fe_mul:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #0x40
|
||||
@ -1848,11 +1852,11 @@ fe_mul:
|
||||
strd r10, r11, [r0, #24]
|
||||
add sp, sp, #0x40
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_mul,.-fe_mul
|
||||
.text
|
||||
.globl fe_sq
|
||||
.type fe_sq, %function
|
||||
.align 2
|
||||
.size fe_mul,.-fe_mul
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_sq
|
||||
.type fe_sq, %function
|
||||
fe_sq:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #0x40
|
||||
@ -2269,11 +2273,11 @@ fe_sq:
|
||||
strd r10, r11, [r0, #24]
|
||||
add sp, sp, #0x40
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_sq,.-fe_sq
|
||||
.text
|
||||
.globl fe_mul121666
|
||||
.type fe_mul121666, %function
|
||||
.align 2
|
||||
.size fe_sq,.-fe_sq
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_mul121666
|
||||
.type fe_mul121666, %function
|
||||
fe_mul121666:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, lr}
|
||||
# Multiply by 121666
|
||||
@ -2323,11 +2327,11 @@ fe_mul121666:
|
||||
strd r6, r7, [r0, #16]
|
||||
strd r8, r9, [r0, #24]
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, pc}
|
||||
.size fe_mul121666,.-fe_mul121666
|
||||
.text
|
||||
.globl fe_sq2
|
||||
.type fe_sq2, %function
|
||||
.align 2
|
||||
.size fe_mul121666,.-fe_mul121666
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_sq2
|
||||
.type fe_sq2, %function
|
||||
fe_sq2:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #0x40
|
||||
@ -2759,11 +2763,11 @@ fe_sq2:
|
||||
strd r10, r11, [r0, #24]
|
||||
add sp, sp, #0x40
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_sq2,.-fe_sq2
|
||||
.text
|
||||
.globl fe_invert
|
||||
.type fe_invert, %function
|
||||
.align 2
|
||||
.size fe_sq2,.-fe_sq2
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_invert
|
||||
.type fe_invert, %function
|
||||
fe_invert:
|
||||
push {r4, lr}
|
||||
sub sp, sp, #0x88
|
||||
@ -2787,110 +2791,110 @@ fe_invert:
|
||||
mov r1, sp
|
||||
add r2, sp, #32
|
||||
bl fe_mul
|
||||
add r0, sp, #64
|
||||
add r0, sp, #0x40
|
||||
mov r1, sp
|
||||
bl fe_sq
|
||||
add r0, sp, #32
|
||||
add r1, sp, #32
|
||||
add r2, sp, #64
|
||||
add r2, sp, #0x40
|
||||
bl fe_mul
|
||||
add r0, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #32
|
||||
bl fe_sq
|
||||
mov r4, #4
|
||||
L_fe_invert1:
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_fe_invert1
|
||||
add r0, sp, #32
|
||||
add r1, sp, #64
|
||||
add r1, sp, #0x40
|
||||
add r2, sp, #32
|
||||
bl fe_mul
|
||||
add r0, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #32
|
||||
bl fe_sq
|
||||
mov r4, #9
|
||||
L_fe_invert2:
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_fe_invert2
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
add r2, sp, #32
|
||||
bl fe_mul
|
||||
add r0, sp, #96
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
mov r4, #19
|
||||
L_fe_invert3:
|
||||
add r0, sp, #96
|
||||
add r1, sp, #96
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x60
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_fe_invert3
|
||||
add r0, sp, #64
|
||||
add r1, sp, #96
|
||||
add r2, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x60
|
||||
add r2, sp, #0x40
|
||||
bl fe_mul
|
||||
mov r4, #10
|
||||
L_fe_invert4:
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_fe_invert4
|
||||
add r0, sp, #32
|
||||
add r1, sp, #64
|
||||
add r1, sp, #0x40
|
||||
add r2, sp, #32
|
||||
bl fe_mul
|
||||
add r0, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #32
|
||||
bl fe_sq
|
||||
mov r4, #0x31
|
||||
mov r4, #49
|
||||
L_fe_invert5:
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_fe_invert5
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
add r2, sp, #32
|
||||
bl fe_mul
|
||||
add r0, sp, #96
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
mov r4, #0x63
|
||||
L_fe_invert6:
|
||||
add r0, sp, #96
|
||||
add r1, sp, #96
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x60
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_fe_invert6
|
||||
add r0, sp, #64
|
||||
add r1, sp, #96
|
||||
add r2, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x60
|
||||
add r2, sp, #0x40
|
||||
bl fe_mul
|
||||
mov r4, #0x32
|
||||
mov r4, #50
|
||||
L_fe_invert7:
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_fe_invert7
|
||||
add r0, sp, #32
|
||||
add r1, sp, #64
|
||||
add r1, sp, #0x40
|
||||
add r2, sp, #32
|
||||
bl fe_mul
|
||||
mov r4, #5
|
||||
@ -2909,11 +2913,11 @@ L_fe_invert8:
|
||||
ldr r0, [sp, #128]
|
||||
add sp, sp, #0x88
|
||||
pop {r4, pc}
|
||||
.size fe_invert,.-fe_invert
|
||||
.text
|
||||
.globl curve25519
|
||||
.type curve25519, %function
|
||||
.align 2
|
||||
.size fe_invert,.-fe_invert
|
||||
.text
|
||||
.align 2
|
||||
.globl curve25519
|
||||
.type curve25519, %function
|
||||
curve25519:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #0xbc
|
||||
@ -3282,7 +3286,7 @@ L_curve25519_bits:
|
||||
strd r10, r11, [sp, #120]
|
||||
ldr r2, [sp, #160]
|
||||
add r1, sp, #0x60
|
||||
add r0, sp, #0x20
|
||||
add r0, sp, #32
|
||||
bl fe_mul
|
||||
add r2, sp, #0x80
|
||||
add r1, sp, #0
|
||||
@ -3529,7 +3533,7 @@ L_curve25519_bits:
|
||||
strd r10, r11, [sp, #120]
|
||||
add r2, sp, #0
|
||||
ldr r1, [sp, #168]
|
||||
add r0, sp, #0x20
|
||||
add r0, sp, #32
|
||||
bl fe_mul
|
||||
add r2, sp, #0x60
|
||||
add r1, sp, #0x80
|
||||
@ -3549,136 +3553,136 @@ L_curve25519_bits:
|
||||
add r0, sp, #32
|
||||
add r1, sp, #0
|
||||
bl fe_sq
|
||||
add r0, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #32
|
||||
bl fe_sq
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
add r0, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0
|
||||
add r2, sp, #64
|
||||
add r2, sp, #0x40
|
||||
bl fe_mul
|
||||
add r0, sp, #32
|
||||
add r1, sp, #32
|
||||
add r2, sp, #64
|
||||
add r2, sp, #0x40
|
||||
bl fe_mul
|
||||
add r0, sp, #96
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #32
|
||||
bl fe_sq
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r2, sp, #96
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
add r2, sp, #0x60
|
||||
bl fe_mul
|
||||
add r0, sp, #96
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
mov r4, #4
|
||||
L_curve25519_inv_1:
|
||||
add r0, sp, #96
|
||||
add r1, sp, #96
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x60
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_curve25519_inv_1
|
||||
add r0, sp, #64
|
||||
add r1, sp, #96
|
||||
add r2, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x60
|
||||
add r2, sp, #0x40
|
||||
bl fe_mul
|
||||
add r0, sp, #96
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
mov r4, #9
|
||||
L_curve25519_inv_2:
|
||||
add r0, sp, #96
|
||||
add r1, sp, #96
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x60
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_curve25519_inv_2
|
||||
add r0, sp, #96
|
||||
add r1, sp, #96
|
||||
add r2, sp, #64
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x60
|
||||
add r2, sp, #0x40
|
||||
bl fe_mul
|
||||
add r0, sp, #128
|
||||
add r1, sp, #96
|
||||
add r0, sp, #0x80
|
||||
add r1, sp, #0x60
|
||||
bl fe_sq
|
||||
mov r4, #19
|
||||
L_curve25519_inv_3:
|
||||
add r0, sp, #128
|
||||
add r1, sp, #128
|
||||
add r0, sp, #0x80
|
||||
add r1, sp, #0x80
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_curve25519_inv_3
|
||||
add r0, sp, #96
|
||||
add r1, sp, #128
|
||||
add r2, sp, #96
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x80
|
||||
add r2, sp, #0x60
|
||||
bl fe_mul
|
||||
mov r4, #10
|
||||
L_curve25519_inv_4:
|
||||
add r0, sp, #96
|
||||
add r1, sp, #96
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x60
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_curve25519_inv_4
|
||||
add r0, sp, #64
|
||||
add r1, sp, #96
|
||||
add r2, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x60
|
||||
add r2, sp, #0x40
|
||||
bl fe_mul
|
||||
add r0, sp, #96
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
mov r4, #0x31
|
||||
mov r4, #49
|
||||
L_curve25519_inv_5:
|
||||
add r0, sp, #96
|
||||
add r1, sp, #96
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x60
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_curve25519_inv_5
|
||||
add r0, sp, #96
|
||||
add r1, sp, #96
|
||||
add r2, sp, #64
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x60
|
||||
add r2, sp, #0x40
|
||||
bl fe_mul
|
||||
add r0, sp, #128
|
||||
add r1, sp, #96
|
||||
add r0, sp, #0x80
|
||||
add r1, sp, #0x60
|
||||
bl fe_sq
|
||||
mov r4, #0x63
|
||||
L_curve25519_inv_6:
|
||||
add r0, sp, #128
|
||||
add r1, sp, #128
|
||||
add r0, sp, #0x80
|
||||
add r1, sp, #0x80
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_curve25519_inv_6
|
||||
add r0, sp, #96
|
||||
add r1, sp, #128
|
||||
add r2, sp, #96
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x80
|
||||
add r2, sp, #0x60
|
||||
bl fe_mul
|
||||
mov r4, #0x32
|
||||
mov r4, #50
|
||||
L_curve25519_inv_7:
|
||||
add r0, sp, #96
|
||||
add r1, sp, #96
|
||||
add r0, sp, #0x60
|
||||
add r1, sp, #0x60
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_curve25519_inv_7
|
||||
add r0, sp, #64
|
||||
add r1, sp, #96
|
||||
add r2, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x60
|
||||
add r2, sp, #0x40
|
||||
bl fe_mul
|
||||
mov r4, #5
|
||||
L_curve25519_inv_8:
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_curve25519_inv_8
|
||||
add r0, sp, #0
|
||||
add r1, sp, #64
|
||||
add r1, sp, #0x40
|
||||
add r2, sp, #32
|
||||
bl fe_mul
|
||||
add r2, sp, #0
|
||||
@ -3688,11 +3692,11 @@ L_curve25519_inv_8:
|
||||
mov r0, #0
|
||||
add sp, sp, #0xbc
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size curve25519,.-curve25519
|
||||
.text
|
||||
.globl fe_pow22523
|
||||
.type fe_pow22523, %function
|
||||
.align 2
|
||||
.size curve25519,.-curve25519
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_pow22523
|
||||
.type fe_pow22523, %function
|
||||
fe_pow22523:
|
||||
push {r4, lr}
|
||||
sub sp, sp, #0x68
|
||||
@ -3753,19 +3757,19 @@ L_fe_pow22523_2:
|
||||
add r1, sp, #32
|
||||
mov r2, sp
|
||||
bl fe_mul
|
||||
add r0, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #32
|
||||
bl fe_sq
|
||||
mov r4, #19
|
||||
L_fe_pow22523_3:
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_fe_pow22523_3
|
||||
add r0, sp, #32
|
||||
add r1, sp, #64
|
||||
add r1, sp, #0x40
|
||||
add r2, sp, #32
|
||||
bl fe_mul
|
||||
mov r4, #10
|
||||
@ -3783,7 +3787,7 @@ L_fe_pow22523_4:
|
||||
add r0, sp, #32
|
||||
mov r1, sp
|
||||
bl fe_sq
|
||||
mov r4, #0x31
|
||||
mov r4, #49
|
||||
L_fe_pow22523_5:
|
||||
add r0, sp, #32
|
||||
add r1, sp, #32
|
||||
@ -3795,22 +3799,22 @@ L_fe_pow22523_5:
|
||||
add r1, sp, #32
|
||||
mov r2, sp
|
||||
bl fe_mul
|
||||
add r0, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #32
|
||||
bl fe_sq
|
||||
mov r4, #0x63
|
||||
L_fe_pow22523_6:
|
||||
add r0, sp, #64
|
||||
add r1, sp, #64
|
||||
add r0, sp, #0x40
|
||||
add r1, sp, #0x40
|
||||
bl fe_sq
|
||||
sub r4, r4, #1
|
||||
cmp r4, #0
|
||||
bne L_fe_pow22523_6
|
||||
add r0, sp, #32
|
||||
add r1, sp, #64
|
||||
add r1, sp, #0x40
|
||||
add r2, sp, #32
|
||||
bl fe_mul
|
||||
mov r4, #0x32
|
||||
mov r4, #50
|
||||
L_fe_pow22523_7:
|
||||
add r0, sp, #32
|
||||
add r1, sp, #32
|
||||
@ -3838,11 +3842,11 @@ L_fe_pow22523_8:
|
||||
ldr r0, [sp, #96]
|
||||
add sp, sp, #0x68
|
||||
pop {r4, pc}
|
||||
.size fe_pow22523,.-fe_pow22523
|
||||
.text
|
||||
.globl fe_ge_to_p2
|
||||
.type fe_ge_to_p2, %function
|
||||
.align 2
|
||||
.size fe_pow22523,.-fe_pow22523
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_ge_to_p2
|
||||
.type fe_ge_to_p2, %function
|
||||
fe_ge_to_p2:
|
||||
push {lr}
|
||||
sub sp, sp, #16
|
||||
@ -3864,11 +3868,11 @@ fe_ge_to_p2:
|
||||
bl fe_mul
|
||||
add sp, sp, #16
|
||||
pop {pc}
|
||||
.size fe_ge_to_p2,.-fe_ge_to_p2
|
||||
.text
|
||||
.globl fe_ge_to_p3
|
||||
.type fe_ge_to_p3, %function
|
||||
.align 2
|
||||
.size fe_ge_to_p2,.-fe_ge_to_p2
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_ge_to_p3
|
||||
.type fe_ge_to_p3, %function
|
||||
fe_ge_to_p3:
|
||||
push {lr}
|
||||
sub sp, sp, #16
|
||||
@ -3894,11 +3898,11 @@ fe_ge_to_p3:
|
||||
bl fe_mul
|
||||
add sp, sp, #16
|
||||
pop {pc}
|
||||
.size fe_ge_to_p3,.-fe_ge_to_p3
|
||||
.text
|
||||
.globl fe_ge_dbl
|
||||
.type fe_ge_dbl, %function
|
||||
.align 2
|
||||
.size fe_ge_to_p3,.-fe_ge_to_p3
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_ge_dbl
|
||||
.type fe_ge_dbl, %function
|
||||
fe_ge_dbl:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #16
|
||||
@ -4223,14 +4227,14 @@ fe_ge_dbl:
|
||||
str r10, [r0, #28]
|
||||
add sp, sp, #16
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_ge_dbl,.-fe_ge_dbl
|
||||
.text
|
||||
.globl fe_ge_madd
|
||||
.type fe_ge_madd, %function
|
||||
.align 2
|
||||
.size fe_ge_dbl,.-fe_ge_dbl
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_ge_madd
|
||||
.type fe_ge_madd, %function
|
||||
fe_ge_madd:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #0x20
|
||||
sub sp, sp, #32
|
||||
str r0, [sp]
|
||||
str r1, [sp, #4]
|
||||
str r2, [sp, #8]
|
||||
@ -4663,16 +4667,16 @@ fe_ge_madd:
|
||||
adc r10, r10, lr
|
||||
str r9, [r1, #24]
|
||||
str r10, [r1, #28]
|
||||
add sp, sp, #0x20
|
||||
add sp, sp, #32
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_ge_madd,.-fe_ge_madd
|
||||
.text
|
||||
.globl fe_ge_msub
|
||||
.type fe_ge_msub, %function
|
||||
.align 2
|
||||
.size fe_ge_madd,.-fe_ge_madd
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_ge_msub
|
||||
.type fe_ge_msub, %function
|
||||
fe_ge_msub:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #0x20
|
||||
sub sp, sp, #32
|
||||
str r0, [sp]
|
||||
str r1, [sp, #4]
|
||||
str r2, [sp, #8]
|
||||
@ -5105,13 +5109,13 @@ fe_ge_msub:
|
||||
adc r10, r10, lr
|
||||
str r9, [r1, #24]
|
||||
str r10, [r1, #28]
|
||||
add sp, sp, #0x20
|
||||
add sp, sp, #32
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_ge_msub,.-fe_ge_msub
|
||||
.text
|
||||
.globl fe_ge_add
|
||||
.type fe_ge_add, %function
|
||||
.align 2
|
||||
.size fe_ge_msub,.-fe_ge_msub
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_ge_add
|
||||
.type fe_ge_add, %function
|
||||
fe_ge_add:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #0x60
|
||||
@ -5554,11 +5558,11 @@ fe_ge_add:
|
||||
str r10, [r1, #28]
|
||||
add sp, sp, #0x60
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_ge_add,.-fe_ge_add
|
||||
.text
|
||||
.globl fe_ge_sub
|
||||
.type fe_ge_sub, %function
|
||||
.align 2
|
||||
.size fe_ge_add,.-fe_ge_add
|
||||
.text
|
||||
.align 2
|
||||
.globl fe_ge_sub
|
||||
.type fe_ge_sub, %function
|
||||
fe_ge_sub:
|
||||
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #0x60
|
||||
@ -6001,5 +6005,5 @@ fe_ge_sub:
|
||||
str r10, [r1, #28]
|
||||
add sp, sp, #0x60
|
||||
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
.size fe_ge_sub,.-fe_ge_sub
|
||||
#endif /* __aarch64__ */
|
||||
.size fe_ge_sub,.-fe_ge_sub
|
||||
#endif /* !__aarch64__ */
|
5576
wolfcrypt/src/port/arm/armv8-32-curve25519.c
Normal file
5576
wolfcrypt/src/port/arm/armv8-32-curve25519.c
Normal file
File diff suppressed because it is too large
Load Diff
5332
wolfcrypt/src/port/arm/armv8-32-sha512-asm.S
Normal file
5332
wolfcrypt/src/port/arm/armv8-32-sha512-asm.S
Normal file
File diff suppressed because it is too large
Load Diff
4773
wolfcrypt/src/port/arm/armv8-32-sha512-asm.c
Normal file
4773
wolfcrypt/src/port/arm/armv8-32-sha512-asm.c
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -93,7 +93,7 @@ int wc_InitSha512_ex(wc_Sha512* sha512, void* heap, int devId)
|
||||
|
||||
#endif /* WOLFSSL_SHA512 */
|
||||
|
||||
#if !defined(WOLFSSL_ARMASM) || !defined(__aarch64__)
|
||||
#ifndef WOLFSSL_ARMASM
|
||||
static const word64 K512[80] = {
|
||||
W64LIT(0x428a2f98d728ae22), W64LIT(0x7137449123ef65cd),
|
||||
W64LIT(0xb5c0fbcfec4d3b2f), W64LIT(0xe9b5dba58189dbbc),
|
||||
@ -177,7 +177,7 @@ static const word64 K512[80] = {
|
||||
h(i) += S0(a(i)) + Maj(a(i),b(i),c(i))
|
||||
|
||||
#define DATA sha512->buffer
|
||||
static int Transform_Sha512(wc_Sha512* sha512)
|
||||
static void Transform_Sha512(wc_Sha512* sha512)
|
||||
{
|
||||
const word64* K = K512;
|
||||
word32 j;
|
||||
@ -222,7 +222,7 @@ static int Transform_Sha512(wc_Sha512* sha512)
|
||||
#undef DATA
|
||||
|
||||
#define DATA ((word64*)data)
|
||||
static int Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len)
|
||||
static void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len)
|
||||
{
|
||||
const word64* K = K512;
|
||||
word32 j;
|
||||
@ -324,16 +324,13 @@ static WC_INLINE int Sha512Update(wc_Sha512* sha512, const byte* data, word32 le
|
||||
}
|
||||
|
||||
if (sha512->buffLen == WC_SHA512_BLOCK_SIZE) {
|
||||
#if !defined(WOLFSSL_ARMASM) || !defined(__aarch64__)
|
||||
ret = Transform_Sha512(sha512);
|
||||
#ifndef WOLFSSL_ARMASM
|
||||
Transform_Sha512(sha512);
|
||||
#else
|
||||
ret = Transform_Sha512_Len(sha512, (const byte*)sha512->buffer,
|
||||
Transform_Sha512_Len(sha512, (const byte*)sha512->buffer,
|
||||
WC_SHA512_BLOCK_SIZE);
|
||||
#endif
|
||||
if (ret == 0)
|
||||
sha512->buffLen = 0;
|
||||
else
|
||||
len = 0;
|
||||
sha512->buffLen = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -369,7 +366,6 @@ int wc_Sha512Update(wc_Sha512* sha512, const byte* data, word32 len)
|
||||
static WC_INLINE int Sha512Final(wc_Sha512* sha512)
|
||||
{
|
||||
byte* local = (byte*)sha512->buffer;
|
||||
int ret;
|
||||
|
||||
if (sha512 == NULL) {
|
||||
return BAD_FUNC_ARG;
|
||||
@ -382,14 +378,12 @@ static WC_INLINE int Sha512Final(wc_Sha512* sha512)
|
||||
XMEMSET(&local[sha512->buffLen], 0, WC_SHA512_BLOCK_SIZE -
|
||||
sha512->buffLen);
|
||||
sha512->buffLen += WC_SHA512_BLOCK_SIZE - sha512->buffLen;
|
||||
#if !defined(WOLFSSL_ARMASM) || !defined(__aarch64__)
|
||||
ret = Transform_Sha512(sha512);
|
||||
#ifndef WOLFSSL_ARMASM
|
||||
Transform_Sha512(sha512);
|
||||
#else
|
||||
ret = Transform_Sha512_Len(sha512, (const byte*)sha512->buffer,
|
||||
Transform_Sha512_Len(sha512, (const byte*)sha512->buffer,
|
||||
WC_SHA512_BLOCK_SIZE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
sha512->buffLen = 0;
|
||||
}
|
||||
@ -410,14 +404,12 @@ static WC_INLINE int Sha512Final(wc_Sha512* sha512)
|
||||
&(sha512->buffer[WC_SHA512_BLOCK_SIZE / sizeof(word64) - 2]),
|
||||
&(sha512->buffer[WC_SHA512_BLOCK_SIZE / sizeof(word64) - 2]),
|
||||
WC_SHA512_BLOCK_SIZE - WC_SHA512_PAD_SIZE);
|
||||
#if !defined(WOLFSSL_ARMASM) || !defined(__aarch64__)
|
||||
ret = Transform_Sha512(sha512);
|
||||
#ifndef WOLFSSL_ARMASM
|
||||
Transform_Sha512(sha512);
|
||||
#else
|
||||
ret = Transform_Sha512_Len(sha512, (const byte*)sha512->buffer,
|
||||
Transform_Sha512_Len(sha512, (const byte*)sha512->buffer,
|
||||
WC_SHA512_BLOCK_SIZE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
#ifdef LITTLE_ENDIAN_ORDER
|
||||
ByteReverseWords64(sha512->digest, sha512->digest, WC_SHA512_DIGEST_SIZE);
|
||||
|
@ -141,9 +141,9 @@ typedef struct wc_Sha512 {
|
||||
|
||||
#endif /* HAVE_FIPS */
|
||||
|
||||
#if defined(WOLFSSL_ARMASM) && defined(__aarch64__)
|
||||
WOLFSSL_LOCAL int Transform_Sha512_Len(wc_Sha512* sha512, const byte* data,
|
||||
word32 len);
|
||||
#ifdef WOLFSSL_ARMASM
|
||||
WOLFSSL_LOCAL void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data,
|
||||
word32 len);
|
||||
#endif
|
||||
|
||||
#ifdef WOLFSSL_SHA512
|
||||
|
Reference in New Issue
Block a user