Compare commits
1 Commits
WCv5.2.3-A
...
WCv5.2.3-R
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
064aace824 |
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
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
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,22 @@
|
||||
/* armv8-sha256.c
|
||||
*
|
||||
* Copyright (C) 2006-2023 wolfSSL Inc. All rights reserved.
|
||||
* Copyright (C) 2006-2021 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* Contact licensing@wolfssl.com with any questions or comments.
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* https://www.wolfssl.com
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
|
||||
@@ -34,15 +44,7 @@
|
||||
#include <wolfcrypt/src/misc.c>
|
||||
#endif
|
||||
|
||||
#if defined(FREESCALE_MMCAU_SHA)
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
#include "cau_api.h"
|
||||
#else
|
||||
#include "fsl_mmcau.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef WOLFSSL_ARMASM_NO_HW_CRYPTO
|
||||
static const ALIGN32 word32 K[64] = {
|
||||
0x428A2F98L, 0x71374491L, 0xB5C0FBCFL, 0xE9B5DBA5L, 0x3956C25BL,
|
||||
0x59F111F1L, 0x923F82A4L, 0xAB1C5ED5L, 0xD807AA98L, 0x12835B01L,
|
||||
@@ -58,7 +60,6 @@ static const ALIGN32 word32 K[64] = {
|
||||
0x682E6FF3L, 0x748F82EEL, 0x78A5636FL, 0x84C87814L, 0x8CC70208L,
|
||||
0x90BEFFFAL, 0xA4506CEBL, 0xBEF9A3F7L, 0xC67178F2L
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
static int InitSha256(wc_Sha256* sha256)
|
||||
@@ -69,17 +70,6 @@ static int InitSha256(wc_Sha256* sha256)
|
||||
return BAD_FUNC_ARG;
|
||||
}
|
||||
|
||||
#ifdef FREESCALE_MMCAU_SHA
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret == 0) {
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
cau_sha256_initialize_output(sha256->digest);
|
||||
#else
|
||||
MMCAU_SHA256_InitializeOutput((uint32_t*)sha256->digest);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
#else
|
||||
sha256->digest[0] = 0x6A09E667L;
|
||||
sha256->digest[1] = 0xBB67AE85L;
|
||||
sha256->digest[2] = 0x3C6EF372L;
|
||||
@@ -88,16 +78,11 @@ static int InitSha256(wc_Sha256* sha256)
|
||||
sha256->digest[5] = 0x9B05688CL;
|
||||
sha256->digest[6] = 0x1F83D9ABL;
|
||||
sha256->digest[7] = 0x5BE0CD19L;
|
||||
#endif
|
||||
|
||||
sha256->buffLen = 0;
|
||||
sha256->loLen = 0;
|
||||
sha256->hiLen = 0;
|
||||
|
||||
#ifdef WOLFSSL_HASH_FLAGS
|
||||
sha256->flags = 0;
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -109,8 +94,6 @@ static WC_INLINE void AddLength(wc_Sha256* sha256, word32 len)
|
||||
}
|
||||
|
||||
|
||||
#ifndef WOLFSSL_ARMASM_NO_HW_CRYPTO
|
||||
|
||||
#ifdef __aarch64__
|
||||
|
||||
/* First block is in sha256->buffer and rest in data. */
|
||||
@@ -339,7 +322,6 @@ static WC_INLINE int Sha256Update(wc_Sha256* sha256, const byte* data, word32 le
|
||||
static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
|
||||
{
|
||||
byte* local;
|
||||
const word32* k;
|
||||
|
||||
local = (byte*)sha256->buffer;
|
||||
AddLength(sha256, sha256->buffLen); /* before adding pads */
|
||||
@@ -351,7 +333,6 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
|
||||
|
||||
XMEMSET(&local[sha256->buffLen], 0, WC_SHA256_BLOCK_SIZE - sha256->buffLen);
|
||||
sha256->buffLen += WC_SHA256_BLOCK_SIZE - sha256->buffLen;
|
||||
k = K;
|
||||
__asm__ volatile (
|
||||
"LD1 {v4.2d-v7.2d}, %[buffer] \n"
|
||||
"MOV v0.16b, v4.16b \n"
|
||||
@@ -493,8 +474,8 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
|
||||
"ADD v17.4s, v17.4s, v21.4s \n"
|
||||
"STP q16, q17, %[out] \n"
|
||||
|
||||
: [out] "=m" (sha256->digest), [k] "+r" (k)
|
||||
: [digest] "m" (sha256->digest),
|
||||
: [out] "=m" (sha256->digest)
|
||||
: [k] "r" (K), [digest] "m" (sha256->digest),
|
||||
[buffer] "m" (sha256->buffer)
|
||||
: "cc", "memory", "v0", "v1", "v2", "v3", "v8", "v9", "v10", "v11"
|
||||
, "v12", "v13", "v14", "v15", "v16", "v17", "v18"
|
||||
@@ -529,7 +510,6 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
|
||||
XMEMCPY(&local[WC_SHA256_PAD_SIZE + sizeof(word32)], &sha256->loLen,
|
||||
sizeof(word32));
|
||||
|
||||
k = K;
|
||||
__asm__ volatile (
|
||||
"#load in message and schedule updates \n"
|
||||
"LD1 {v4.2d-v7.2d}, %[buffer] \n"
|
||||
@@ -672,8 +652,8 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
|
||||
"REV32 v17.16b, v17.16b \n"
|
||||
#endif
|
||||
"ST1 {v17.16b}, [%[hashOut]] \n"
|
||||
: [hashOut] "=r" (hash), [k] "+r" (k)
|
||||
: [digest] "m" (sha256->digest),
|
||||
: [hashOut] "=r" (hash)
|
||||
: [k] "r" (K), [digest] "m" (sha256->digest),
|
||||
[buffer] "m" (sha256->buffer),
|
||||
"0" (hash)
|
||||
: "cc", "memory", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
|
||||
@@ -1326,157 +1306,6 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
|
||||
|
||||
#endif /* __aarch64__ */
|
||||
|
||||
#else /* WOLFSSL_ARMASM_NO_HW_CRYPTO */
|
||||
|
||||
#if defined(FREESCALE_MMCAU_SHA)
|
||||
|
||||
#ifndef WC_HASH_DATA_ALIGNMENT
|
||||
/* these hardware API's require 4 byte (word32) alignment */
|
||||
#define WC_HASH_DATA_ALIGNMENT 4
|
||||
#endif
|
||||
|
||||
static int Transform_Sha256_Len(wc_Sha256* sha256, const byte* data,
|
||||
word32 len)
|
||||
{
|
||||
int ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret == 0) {
|
||||
#if defined(WC_HASH_DATA_ALIGNMENT) && WC_HASH_DATA_ALIGNMENT > 0
|
||||
if ((wc_ptr_t)data % WC_HASH_DATA_ALIGNMENT) {
|
||||
/* data pointer is NOT aligned,
|
||||
* so copy and perform one block at a time */
|
||||
byte* local = (byte*)sha256->buffer;
|
||||
while (len >= WC_SHA256_BLOCK_SIZE) {
|
||||
XMEMCPY(local, data, WC_SHA256_BLOCK_SIZE);
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
cau_sha256_hash_n(local, 1, sha256->digest);
|
||||
#else
|
||||
MMCAU_SHA256_HashN(local, 1, (uint32_t*)sha256->digest);
|
||||
#endif
|
||||
data += WC_SHA256_BLOCK_SIZE;
|
||||
len -= WC_SHA256_BLOCK_SIZE;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
cau_sha256_hash_n((byte*)data, len/WC_SHA256_BLOCK_SIZE,
|
||||
sha256->digest);
|
||||
#else
|
||||
MMCAU_SHA256_HashN((byte*)data, len/WC_SHA256_BLOCK_SIZE,
|
||||
(uint32_t*)sha256->digest);
|
||||
#endif
|
||||
}
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#else /* */
|
||||
|
||||
extern void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data,
|
||||
word32 len);
|
||||
|
||||
#endif
|
||||
|
||||
/* ARMv8 hardware acceleration Aarch32 and Thumb2 */
|
||||
static WC_INLINE int Sha256Update(wc_Sha256* sha256, const byte* data, word32 len)
|
||||
{
|
||||
int ret = 0;
|
||||
/* do block size increments */
|
||||
byte* local = (byte*)sha256->buffer;
|
||||
word32 blocksLen;
|
||||
|
||||
/* check that internal buffLen is valid */
|
||||
if (sha256->buffLen >= WC_SHA256_BLOCK_SIZE)
|
||||
return BUFFER_E;
|
||||
|
||||
AddLength(sha256, len);
|
||||
|
||||
if (sha256->buffLen > 0) {
|
||||
word32 add = min(len, WC_SHA256_BLOCK_SIZE - sha256->buffLen);
|
||||
if (add > 0) {
|
||||
XMEMCPY(&local[sha256->buffLen], data, add);
|
||||
|
||||
sha256->buffLen += add;
|
||||
data += add;
|
||||
len -= add;
|
||||
}
|
||||
|
||||
if (sha256->buffLen == WC_SHA256_BLOCK_SIZE) {
|
||||
Transform_Sha256_Len(sha256, (const byte*)sha256->buffer,
|
||||
WC_SHA256_BLOCK_SIZE);
|
||||
sha256->buffLen = 0;
|
||||
}
|
||||
}
|
||||
|
||||
blocksLen = len & ~(WC_SHA256_BLOCK_SIZE-1);
|
||||
if (blocksLen > 0) {
|
||||
/* Byte reversal performed in function if required. */
|
||||
Transform_Sha256_Len(sha256, data, blocksLen);
|
||||
data += blocksLen;
|
||||
len -= blocksLen;
|
||||
}
|
||||
|
||||
if (len > 0) {
|
||||
XMEMCPY(local, data, len);
|
||||
sha256->buffLen = len;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
|
||||
{
|
||||
byte* local = (byte*)sha256->buffer;
|
||||
|
||||
if (sha256 == NULL) {
|
||||
return BAD_FUNC_ARG;
|
||||
}
|
||||
|
||||
local[sha256->buffLen++] = 0x80; /* add 1 */
|
||||
|
||||
/* pad with zeros */
|
||||
if (sha256->buffLen > WC_SHA256_PAD_SIZE) {
|
||||
XMEMSET(&local[sha256->buffLen], 0, WC_SHA256_BLOCK_SIZE -
|
||||
sha256->buffLen);
|
||||
sha256->buffLen += WC_SHA256_BLOCK_SIZE - sha256->buffLen;
|
||||
Transform_Sha256_Len(sha256, (const byte*)sha256->buffer,
|
||||
WC_SHA256_BLOCK_SIZE);
|
||||
|
||||
sha256->buffLen = 0;
|
||||
}
|
||||
XMEMSET(&local[sha256->buffLen], 0, WC_SHA256_PAD_SIZE - sha256->buffLen);
|
||||
|
||||
/* put lengths in bits */
|
||||
sha256->hiLen = (sha256->loLen >> (8 * sizeof(sha256->loLen) - 3)) +
|
||||
(sha256->hiLen << 3);
|
||||
sha256->loLen = sha256->loLen << 3;
|
||||
|
||||
/* store lengths */
|
||||
/* ! length ordering dependent on digest endian type ! */
|
||||
|
||||
sha256->buffer[WC_SHA256_BLOCK_SIZE / sizeof(word32) - 2] = sha256->hiLen;
|
||||
sha256->buffer[WC_SHA256_BLOCK_SIZE / sizeof(word32) - 1] = sha256->loLen;
|
||||
|
||||
ByteReverseWords(
|
||||
&(sha256->buffer[WC_SHA256_BLOCK_SIZE / sizeof(word32) - 2]),
|
||||
&(sha256->buffer[WC_SHA256_BLOCK_SIZE / sizeof(word32) - 2]),
|
||||
WC_SHA256_BLOCK_SIZE - WC_SHA256_PAD_SIZE);
|
||||
Transform_Sha256_Len(sha256, (const byte*)sha256->buffer,
|
||||
WC_SHA256_BLOCK_SIZE);
|
||||
|
||||
#ifdef LITTLE_ENDIAN_ORDER
|
||||
ByteReverseWords((word32*)hash, sha256->digest, WC_SHA256_DIGEST_SIZE);
|
||||
#else
|
||||
XMEMCPY(hash, sha256->digest, WC_SHA256_DIGEST_SIZE);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* !WOLFSSL_ARMASM_NO_HW_CRYPTO */
|
||||
|
||||
|
||||
#ifndef NO_SHA256
|
||||
|
||||
@@ -1486,9 +1315,6 @@ int wc_InitSha256_ex(wc_Sha256* sha256, void* heap, int devId)
|
||||
return BAD_FUNC_ARG;
|
||||
|
||||
sha256->heap = heap;
|
||||
#ifdef WOLF_CRYPTO_CB
|
||||
sha256->devId = devId;
|
||||
#endif
|
||||
(void)devId;
|
||||
|
||||
return InitSha256(sha256);
|
||||
@@ -1604,11 +1430,7 @@ int wc_Sha256Transform(wc_Sha256* sha256, const unsigned char* data)
|
||||
#else
|
||||
XMEMCPY(sha256->buffer, data, WC_SHA256_BLOCK_SIZE);
|
||||
#endif
|
||||
#ifndef WOLFSSL_ARMASM_NO_HW_CRYPTO
|
||||
Sha256Transform(sha256, data, 1);
|
||||
#else
|
||||
Transform_Sha256_Len(sha256, data, WC_SHA256_BLOCK_SIZE);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -1639,9 +1461,6 @@ int wc_Sha256Transform(wc_Sha256* sha256, const unsigned char* data)
|
||||
sha224->loLen = 0;
|
||||
sha224->hiLen = 0;
|
||||
|
||||
#ifdef WOLFSSL_HASH_FLAGS
|
||||
sha224->flags = 0;
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,207 +0,0 @@
|
||||
/* armv8-sha3-asm
|
||||
*
|
||||
* Copyright (C) 2006-2023 wolfSSL Inc. All rights reserved.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* Contact licensing@wolfssl.com with any questions or comments.
|
||||
*
|
||||
* https://www.wolfssl.com
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif /* HAVE_CONFIG_H */
|
||||
#include <wolfssl/wolfcrypt/settings.h>
|
||||
|
||||
/* Generated using (from wolfssl):
|
||||
* cd ../scripts
|
||||
* ruby ./sha3/sha3.rb arm64 ../wolfssl/wolfcrypt/src/port/arm/armv8-sha3-asm.S
|
||||
*/
|
||||
#ifdef WOLFSSL_ARMASM
|
||||
#ifdef __aarch64__
|
||||
#ifndef WOLFSSL_ARMASM_INLINE
|
||||
#ifdef WOLFSSL_SHA3
|
||||
#ifdef WOLFSSL_ARMASM_CRYPTO_SHA3
|
||||
#ifndef __APPLE__
|
||||
.text
|
||||
.type L_SHA3_transform_crypto_r, %object
|
||||
.section .rodata
|
||||
.size L_SHA3_transform_crypto_r, 192
|
||||
#else
|
||||
.section __DATA,__data
|
||||
#endif /* __APPLE__ */
|
||||
#ifndef __APPLE__
|
||||
.align 3
|
||||
#else
|
||||
.p2align 3
|
||||
#endif /* __APPLE__ */
|
||||
L_SHA3_transform_crypto_r:
|
||||
.xword 0x1
|
||||
.xword 0x8082
|
||||
.xword 0x800000000000808a
|
||||
.xword 0x8000000080008000
|
||||
.xword 0x808b
|
||||
.xword 0x80000001
|
||||
.xword 0x8000000080008081
|
||||
.xword 0x8000000000008009
|
||||
.xword 0x8a
|
||||
.xword 0x88
|
||||
.xword 0x80008009
|
||||
.xword 0x8000000a
|
||||
.xword 0x8000808b
|
||||
.xword 0x800000000000008b
|
||||
.xword 0x8000000000008089
|
||||
.xword 0x8000000000008003
|
||||
.xword 0x8000000000008002
|
||||
.xword 0x8000000000000080
|
||||
.xword 0x800a
|
||||
.xword 0x800000008000000a
|
||||
.xword 0x8000000080008081
|
||||
.xword 0x8000000000008080
|
||||
.xword 0x80000001
|
||||
.xword 0x8000000080008008
|
||||
#ifndef __APPLE__
|
||||
.text
|
||||
.globl BlockSha3
|
||||
.type BlockSha3,@function
|
||||
.align 2
|
||||
BlockSha3:
|
||||
#else
|
||||
.section __TEXT,__text
|
||||
.globl _BlockSha3
|
||||
.p2align 2
|
||||
_BlockSha3:
|
||||
#endif /* __APPLE__ */
|
||||
stp x29, x30, [sp, #-80]!
|
||||
add x29, sp, #0
|
||||
stp d8, d9, [x29, #16]
|
||||
stp d10, d11, [x29, #32]
|
||||
stp d12, d13, [x29, #48]
|
||||
stp d14, d15, [x29, #64]
|
||||
#ifdef __APPLE__
|
||||
.arch_extension sha3
|
||||
#endif /* __APPLE__ */
|
||||
#ifndef __APPLE__
|
||||
adrp x1, L_SHA3_transform_crypto_r
|
||||
add x1, x1, :lo12:L_SHA3_transform_crypto_r
|
||||
#else
|
||||
adrp x1, L_SHA3_transform_crypto_r@PAGE
|
||||
add x1, x1, :lo12:L_SHA3_transform_crypto_r@PAGEOFF
|
||||
#endif /* __APPLE__ */
|
||||
ld4 {v0.d, v1.d, v2.d, v3.d}[0], [x0], #32
|
||||
ld4 {v4.d, v5.d, v6.d, v7.d}[0], [x0], #32
|
||||
ld4 {v8.d, v9.d, v10.d, v11.d}[0], [x0], #32
|
||||
ld4 {v12.d, v13.d, v14.d, v15.d}[0], [x0], #32
|
||||
ld4 {v16.d, v17.d, v18.d, v19.d}[0], [x0], #32
|
||||
ld4 {v20.d, v21.d, v22.d, v23.d}[0], [x0], #32
|
||||
ld1 {v24.1d}, [x0]
|
||||
sub x0, x0, #0xc0
|
||||
mov x2, #24
|
||||
# Start of 24 rounds
|
||||
L_sha3_crypto_begin:
|
||||
# Col Mix
|
||||
eor3 v31.16b, v0.16b, v5.16b, v10.16b
|
||||
eor3 v27.16b, v1.16b, v6.16b, v11.16b
|
||||
eor3 v28.16b, v2.16b, v7.16b, v12.16b
|
||||
eor3 v29.16b, v3.16b, v8.16b, v13.16b
|
||||
eor3 v30.16b, v4.16b, v9.16b, v14.16b
|
||||
eor3 v31.16b, v31.16b, v15.16b, v20.16b
|
||||
eor3 v27.16b, v27.16b, v16.16b, v21.16b
|
||||
eor3 v28.16b, v28.16b, v17.16b, v22.16b
|
||||
eor3 v29.16b, v29.16b, v18.16b, v23.16b
|
||||
eor3 v30.16b, v30.16b, v19.16b, v24.16b
|
||||
rax1 v25.2d, v30.2d, v27.2d
|
||||
rax1 v26.2d, v31.2d, v28.2d
|
||||
rax1 v27.2d, v27.2d, v29.2d
|
||||
rax1 v28.2d, v28.2d, v30.2d
|
||||
rax1 v29.2d, v29.2d, v31.2d
|
||||
eor v0.16b, v0.16b, v25.16b
|
||||
xar v30.2d, v1.2d, v26.2d, #63
|
||||
xar v1.2d, v6.2d, v26.2d, #20
|
||||
xar v6.2d, v9.2d, v29.2d, #44
|
||||
xar v9.2d, v22.2d, v27.2d, #3
|
||||
xar v22.2d, v14.2d, v29.2d, #25
|
||||
xar v14.2d, v20.2d, v25.2d, #46
|
||||
xar v20.2d, v2.2d, v27.2d, #2
|
||||
xar v2.2d, v12.2d, v27.2d, #21
|
||||
xar v12.2d, v13.2d, v28.2d, #39
|
||||
xar v13.2d, v19.2d, v29.2d, #56
|
||||
xar v19.2d, v23.2d, v28.2d, #8
|
||||
xar v23.2d, v15.2d, v25.2d, #23
|
||||
xar v15.2d, v4.2d, v29.2d, #37
|
||||
xar v4.2d, v24.2d, v29.2d, #50
|
||||
xar v24.2d, v21.2d, v26.2d, #62
|
||||
xar v21.2d, v8.2d, v28.2d, #9
|
||||
xar v8.2d, v16.2d, v26.2d, #19
|
||||
xar v16.2d, v5.2d, v25.2d, #28
|
||||
xar v5.2d, v3.2d, v28.2d, #36
|
||||
xar v3.2d, v18.2d, v28.2d, #43
|
||||
xar v18.2d, v17.2d, v27.2d, #49
|
||||
xar v17.2d, v11.2d, v26.2d, #54
|
||||
xar v11.2d, v7.2d, v27.2d, #58
|
||||
xar v7.2d, v10.2d, v25.2d, #61
|
||||
# Row Mix
|
||||
mov v25.16b, v0.16b
|
||||
mov v26.16b, v1.16b
|
||||
bcax v0.16b, v25.16b, v2.16b, v26.16b
|
||||
bcax v1.16b, v26.16b, v3.16b, v2.16b
|
||||
bcax v2.16b, v2.16b, v4.16b, v3.16b
|
||||
bcax v3.16b, v3.16b, v25.16b, v4.16b
|
||||
bcax v4.16b, v4.16b, v26.16b, v25.16b
|
||||
mov v25.16b, v5.16b
|
||||
mov v26.16b, v6.16b
|
||||
bcax v5.16b, v25.16b, v7.16b, v26.16b
|
||||
bcax v6.16b, v26.16b, v8.16b, v7.16b
|
||||
bcax v7.16b, v7.16b, v9.16b, v8.16b
|
||||
bcax v8.16b, v8.16b, v25.16b, v9.16b
|
||||
bcax v9.16b, v9.16b, v26.16b, v25.16b
|
||||
mov v26.16b, v11.16b
|
||||
bcax v10.16b, v30.16b, v12.16b, v26.16b
|
||||
bcax v11.16b, v26.16b, v13.16b, v12.16b
|
||||
bcax v12.16b, v12.16b, v14.16b, v13.16b
|
||||
bcax v13.16b, v13.16b, v30.16b, v14.16b
|
||||
bcax v14.16b, v14.16b, v26.16b, v30.16b
|
||||
mov v25.16b, v15.16b
|
||||
mov v26.16b, v16.16b
|
||||
bcax v15.16b, v25.16b, v17.16b, v26.16b
|
||||
bcax v16.16b, v26.16b, v18.16b, v17.16b
|
||||
bcax v17.16b, v17.16b, v19.16b, v18.16b
|
||||
bcax v18.16b, v18.16b, v25.16b, v19.16b
|
||||
bcax v19.16b, v19.16b, v26.16b, v25.16b
|
||||
mov v25.16b, v20.16b
|
||||
mov v26.16b, v21.16b
|
||||
bcax v20.16b, v25.16b, v22.16b, v26.16b
|
||||
bcax v21.16b, v26.16b, v23.16b, v22.16b
|
||||
bcax v22.16b, v22.16b, v24.16b, v23.16b
|
||||
bcax v23.16b, v23.16b, v25.16b, v24.16b
|
||||
bcax v24.16b, v24.16b, v26.16b, v25.16b
|
||||
ld1r {v30.2d}, [x1], #8
|
||||
subs x2, x2, #1
|
||||
eor v0.16b, v0.16b, v30.16b
|
||||
bne L_sha3_crypto_begin
|
||||
st4 {v0.d, v1.d, v2.d, v3.d}[0], [x0], #32
|
||||
st4 {v4.d, v5.d, v6.d, v7.d}[0], [x0], #32
|
||||
st4 {v8.d, v9.d, v10.d, v11.d}[0], [x0], #32
|
||||
st4 {v12.d, v13.d, v14.d, v15.d}[0], [x0], #32
|
||||
st4 {v16.d, v17.d, v18.d, v19.d}[0], [x0], #32
|
||||
st4 {v20.d, v21.d, v22.d, v23.d}[0], [x0], #32
|
||||
st1 {v24.1d}, [x0]
|
||||
ldp d8, d9, [x29, #16]
|
||||
ldp d10, d11, [x29, #32]
|
||||
ldp d12, d13, [x29, #48]
|
||||
ldp d14, d15, [x29, #64]
|
||||
ldp x29, x30, [sp], #0x50
|
||||
ret
|
||||
#ifndef __APPLE__
|
||||
.size BlockSha3,.-BlockSha3
|
||||
#endif /* __APPLE__ */
|
||||
#endif /* WOLFSSL_ARMASM_CRYPTO_SHA3 */
|
||||
#endif /* WOLFSSL_SHA3 */
|
||||
#endif /* __aarch64__ */
|
||||
#endif /* WOLFSSL_ARMASM */
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
#endif
|
||||
#endif /* !WOLFSSL_ARMASM_INLINE */
|
||||
@@ -1,178 +0,0 @@
|
||||
/* armv8-sha3-asm
|
||||
*
|
||||
* Copyright (C) 2006-2023 wolfSSL Inc. All rights reserved.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* Contact licensing@wolfssl.com with any questions or comments.
|
||||
*
|
||||
* https://www.wolfssl.com
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif /* HAVE_CONFIG_H */
|
||||
#include <wolfssl/wolfcrypt/settings.h>
|
||||
#include <wolfssl/wolfcrypt/error-crypt.h>
|
||||
|
||||
/* Generated using (from wolfssl):
|
||||
* cd ../scripts
|
||||
* ruby ./sha3/sha3.rb arm64 ../wolfssl/wolfcrypt/src/port/arm/armv8-sha3-asm.c
|
||||
*/
|
||||
#ifdef WOLFSSL_ARMASM
|
||||
#ifdef __aarch64__
|
||||
#ifdef WOLFSSL_ARMASM_INLINE
|
||||
#include <wolfssl/wolfcrypt/sha3.h>
|
||||
|
||||
#ifdef WOLFSSL_SHA3
|
||||
#ifdef WOLFSSL_ARMASM_CRYPTO_SHA3
|
||||
static const uint64_t L_SHA3_transform_crypto_r[] = {
|
||||
0x1UL,
|
||||
0x8082UL,
|
||||
0x800000000000808aUL,
|
||||
0x8000000080008000UL,
|
||||
0x808bUL,
|
||||
0x80000001UL,
|
||||
0x8000000080008081UL,
|
||||
0x8000000000008009UL,
|
||||
0x8aUL,
|
||||
0x88UL,
|
||||
0x80008009UL,
|
||||
0x8000000aUL,
|
||||
0x8000808bUL,
|
||||
0x800000000000008bUL,
|
||||
0x8000000000008089UL,
|
||||
0x8000000000008003UL,
|
||||
0x8000000000008002UL,
|
||||
0x8000000000000080UL,
|
||||
0x800aUL,
|
||||
0x800000008000000aUL,
|
||||
0x8000000080008081UL,
|
||||
0x8000000000008080UL,
|
||||
0x80000001UL,
|
||||
0x8000000080008008UL,
|
||||
};
|
||||
|
||||
void BlockSha3(unsigned long* state)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
#ifdef __APPLE__
|
||||
".arch_extension sha3\n\t"
|
||||
#endif /* __APPLE__ */
|
||||
#ifndef __APPLE__
|
||||
"adrp x1, %[L_SHA3_transform_crypto_r]\n\t"
|
||||
"add x1, x1, :lo12:%[L_SHA3_transform_crypto_r]\n\t"
|
||||
#else
|
||||
"adrp x1, %[L_SHA3_transform_crypto_r]@PAGE\n\t"
|
||||
"add x1, x1, %[L_SHA3_transform_crypto_r]@PAGEOFF\n\t"
|
||||
#endif /* __APPLE__ */
|
||||
"ld4 {v0.d, v1.d, v2.d, v3.d}[0], [%x[state]], #32\n\t"
|
||||
"ld4 {v4.d, v5.d, v6.d, v7.d}[0], [%x[state]], #32\n\t"
|
||||
"ld4 {v8.d, v9.d, v10.d, v11.d}[0], [%x[state]], #32\n\t"
|
||||
"ld4 {v12.d, v13.d, v14.d, v15.d}[0], [%x[state]], #32\n\t"
|
||||
"ld4 {v16.d, v17.d, v18.d, v19.d}[0], [%x[state]], #32\n\t"
|
||||
"ld4 {v20.d, v21.d, v22.d, v23.d}[0], [%x[state]], #32\n\t"
|
||||
"ld1 {v24.1d}, [%x[state]]\n\t"
|
||||
"sub %x[state], %x[state], #0xc0\n\t"
|
||||
"mov x2, #24\n\t"
|
||||
/* Start of 24 rounds */
|
||||
"\n"
|
||||
"L_sha3_crypto_begin_%=: \n\t"
|
||||
/* Col Mix */
|
||||
"eor3 v31.16b, v0.16b, v5.16b, v10.16b\n\t"
|
||||
"eor3 v27.16b, v1.16b, v6.16b, v11.16b\n\t"
|
||||
"eor3 v28.16b, v2.16b, v7.16b, v12.16b\n\t"
|
||||
"eor3 v29.16b, v3.16b, v8.16b, v13.16b\n\t"
|
||||
"eor3 v30.16b, v4.16b, v9.16b, v14.16b\n\t"
|
||||
"eor3 v31.16b, v31.16b, v15.16b, v20.16b\n\t"
|
||||
"eor3 v27.16b, v27.16b, v16.16b, v21.16b\n\t"
|
||||
"eor3 v28.16b, v28.16b, v17.16b, v22.16b\n\t"
|
||||
"eor3 v29.16b, v29.16b, v18.16b, v23.16b\n\t"
|
||||
"eor3 v30.16b, v30.16b, v19.16b, v24.16b\n\t"
|
||||
"rax1 v25.2d, v30.2d, v27.2d\n\t"
|
||||
"rax1 v26.2d, v31.2d, v28.2d\n\t"
|
||||
"rax1 v27.2d, v27.2d, v29.2d\n\t"
|
||||
"rax1 v28.2d, v28.2d, v30.2d\n\t"
|
||||
"rax1 v29.2d, v29.2d, v31.2d\n\t"
|
||||
"eor v0.16b, v0.16b, v25.16b\n\t"
|
||||
"xar v30.2d, v1.2d, v26.2d, #63\n\t"
|
||||
"xar v1.2d, v6.2d, v26.2d, #20\n\t"
|
||||
"xar v6.2d, v9.2d, v29.2d, #44\n\t"
|
||||
"xar v9.2d, v22.2d, v27.2d, #3\n\t"
|
||||
"xar v22.2d, v14.2d, v29.2d, #25\n\t"
|
||||
"xar v14.2d, v20.2d, v25.2d, #46\n\t"
|
||||
"xar v20.2d, v2.2d, v27.2d, #2\n\t"
|
||||
"xar v2.2d, v12.2d, v27.2d, #21\n\t"
|
||||
"xar v12.2d, v13.2d, v28.2d, #39\n\t"
|
||||
"xar v13.2d, v19.2d, v29.2d, #56\n\t"
|
||||
"xar v19.2d, v23.2d, v28.2d, #8\n\t"
|
||||
"xar v23.2d, v15.2d, v25.2d, #23\n\t"
|
||||
"xar v15.2d, v4.2d, v29.2d, #37\n\t"
|
||||
"xar v4.2d, v24.2d, v29.2d, #50\n\t"
|
||||
"xar v24.2d, v21.2d, v26.2d, #62\n\t"
|
||||
"xar v21.2d, v8.2d, v28.2d, #9\n\t"
|
||||
"xar v8.2d, v16.2d, v26.2d, #19\n\t"
|
||||
"xar v16.2d, v5.2d, v25.2d, #28\n\t"
|
||||
"xar v5.2d, v3.2d, v28.2d, #36\n\t"
|
||||
"xar v3.2d, v18.2d, v28.2d, #43\n\t"
|
||||
"xar v18.2d, v17.2d, v27.2d, #49\n\t"
|
||||
"xar v17.2d, v11.2d, v26.2d, #54\n\t"
|
||||
"xar v11.2d, v7.2d, v27.2d, #58\n\t"
|
||||
"xar v7.2d, v10.2d, v25.2d, #61\n\t"
|
||||
/* Row Mix */
|
||||
"mov v25.16b, v0.16b\n\t"
|
||||
"mov v26.16b, v1.16b\n\t"
|
||||
"bcax v0.16b, v25.16b, v2.16b, v26.16b\n\t"
|
||||
"bcax v1.16b, v26.16b, v3.16b, v2.16b\n\t"
|
||||
"bcax v2.16b, v2.16b, v4.16b, v3.16b\n\t"
|
||||
"bcax v3.16b, v3.16b, v25.16b, v4.16b\n\t"
|
||||
"bcax v4.16b, v4.16b, v26.16b, v25.16b\n\t"
|
||||
"mov v25.16b, v5.16b\n\t"
|
||||
"mov v26.16b, v6.16b\n\t"
|
||||
"bcax v5.16b, v25.16b, v7.16b, v26.16b\n\t"
|
||||
"bcax v6.16b, v26.16b, v8.16b, v7.16b\n\t"
|
||||
"bcax v7.16b, v7.16b, v9.16b, v8.16b\n\t"
|
||||
"bcax v8.16b, v8.16b, v25.16b, v9.16b\n\t"
|
||||
"bcax v9.16b, v9.16b, v26.16b, v25.16b\n\t"
|
||||
"mov v26.16b, v11.16b\n\t"
|
||||
"bcax v10.16b, v30.16b, v12.16b, v26.16b\n\t"
|
||||
"bcax v11.16b, v26.16b, v13.16b, v12.16b\n\t"
|
||||
"bcax v12.16b, v12.16b, v14.16b, v13.16b\n\t"
|
||||
"bcax v13.16b, v13.16b, v30.16b, v14.16b\n\t"
|
||||
"bcax v14.16b, v14.16b, v26.16b, v30.16b\n\t"
|
||||
"mov v25.16b, v15.16b\n\t"
|
||||
"mov v26.16b, v16.16b\n\t"
|
||||
"bcax v15.16b, v25.16b, v17.16b, v26.16b\n\t"
|
||||
"bcax v16.16b, v26.16b, v18.16b, v17.16b\n\t"
|
||||
"bcax v17.16b, v17.16b, v19.16b, v18.16b\n\t"
|
||||
"bcax v18.16b, v18.16b, v25.16b, v19.16b\n\t"
|
||||
"bcax v19.16b, v19.16b, v26.16b, v25.16b\n\t"
|
||||
"mov v25.16b, v20.16b\n\t"
|
||||
"mov v26.16b, v21.16b\n\t"
|
||||
"bcax v20.16b, v25.16b, v22.16b, v26.16b\n\t"
|
||||
"bcax v21.16b, v26.16b, v23.16b, v22.16b\n\t"
|
||||
"bcax v22.16b, v22.16b, v24.16b, v23.16b\n\t"
|
||||
"bcax v23.16b, v23.16b, v25.16b, v24.16b\n\t"
|
||||
"bcax v24.16b, v24.16b, v26.16b, v25.16b\n\t"
|
||||
"ld1r {v30.2d}, [x1], #8\n\t"
|
||||
"subs x2, x2, #1\n\t"
|
||||
"eor v0.16b, v0.16b, v30.16b\n\t"
|
||||
"bne L_sha3_crypto_begin_%=\n\t"
|
||||
"st4 {v0.d, v1.d, v2.d, v3.d}[0], [%x[state]], #32\n\t"
|
||||
"st4 {v4.d, v5.d, v6.d, v7.d}[0], [%x[state]], #32\n\t"
|
||||
"st4 {v8.d, v9.d, v10.d, v11.d}[0], [%x[state]], #32\n\t"
|
||||
"st4 {v12.d, v13.d, v14.d, v15.d}[0], [%x[state]], #32\n\t"
|
||||
"st4 {v16.d, v17.d, v18.d, v19.d}[0], [%x[state]], #32\n\t"
|
||||
"st4 {v20.d, v21.d, v22.d, v23.d}[0], [%x[state]], #32\n\t"
|
||||
"st1 {v24.1d}, [%x[state]]\n\t"
|
||||
: [state] "+r" (state)
|
||||
: [L_SHA3_transform_crypto_r] "S" (L_SHA3_transform_crypto_r)
|
||||
: "memory", "x1", "x2", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", "cc"
|
||||
);
|
||||
}
|
||||
|
||||
#endif /* WOLFSSL_ARMASM_CRYPTO_SHA3 */
|
||||
#endif /* WOLFSSL_SHA3 */
|
||||
#endif /* __aarch64__ */
|
||||
#endif /* WOLFSSL_ARMASM */
|
||||
#endif /* WOLFSSL_ARMASM_INLINE */
|
||||
@@ -1,12 +1,22 @@
|
||||
/* armv8-sha512-asm
|
||||
*
|
||||
* Copyright (C) 2006-2023 wolfSSL Inc. All rights reserved.
|
||||
* Copyright (C) 2006-2021 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* Contact licensing@wolfssl.com with any questions or comments.
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* https://www.wolfssl.com
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@@ -20,7 +30,6 @@
|
||||
*/
|
||||
#ifdef WOLFSSL_ARMASM
|
||||
#ifdef __aarch64__
|
||||
#ifndef WOLFSSL_ARMASM_INLINE
|
||||
#ifdef WOLFSSL_SHA512
|
||||
#ifndef WOLFSSL_ARMASM_CRYPTO_SHA512
|
||||
#ifndef __APPLE__
|
||||
@@ -1192,15 +1201,20 @@ Transform_Sha512_Len_crypto:
|
||||
.p2align 2
|
||||
_Transform_Sha512_Len_crypto:
|
||||
#endif /* __APPLE__ */
|
||||
stp x29, x30, [sp, #-80]!
|
||||
stp x29, x30, [sp, #-208]!
|
||||
add x29, sp, #0
|
||||
stp d8, d9, [x29, #16]
|
||||
stp d10, d11, [x29, #32]
|
||||
stp d12, d13, [x29, #48]
|
||||
stp d14, d15, [x29, #64]
|
||||
#ifdef __APPLE__
|
||||
.arch_extension sha3
|
||||
#endif /* __APPLE__ */
|
||||
stp d16, d17, [x29, #80]
|
||||
stp d18, d19, [x29, #96]
|
||||
stp d20, d21, [x29, #112]
|
||||
stp d22, d23, [x29, #128]
|
||||
stp d24, d25, [x29, #144]
|
||||
stp d26, d27, [x29, #160]
|
||||
stp d28, d29, [x29, #176]
|
||||
stp d30, d31, [x29, #192]
|
||||
#ifndef __APPLE__
|
||||
adrp x4, L_SHA512_transform_crypto_len_k
|
||||
add x4, x4, :lo12:L_SHA512_transform_crypto_len_k
|
||||
@@ -1208,7 +1222,7 @@ _Transform_Sha512_Len_crypto:
|
||||
adrp x4, L_SHA512_transform_crypto_len_k@PAGE
|
||||
add x4, x4, :lo12:L_SHA512_transform_crypto_len_k@PAGEOFF
|
||||
#endif /* __APPLE__ */
|
||||
# Load first 16 64-bit words of K permanently
|
||||
# Load first 16 64-bit words of K permantly
|
||||
ld1 {v8.2d, v9.2d, v10.2d, v11.2d}, [x4], #0x40
|
||||
ld1 {v12.2d, v13.2d, v14.2d, v15.2d}, [x4], #0x40
|
||||
# Load digest into working vars
|
||||
@@ -1717,7 +1731,15 @@ L_sha512_len_crypto_begin:
|
||||
ldp d10, d11, [x29, #32]
|
||||
ldp d12, d13, [x29, #48]
|
||||
ldp d14, d15, [x29, #64]
|
||||
ldp x29, x30, [sp], #0x50
|
||||
ldp d16, d17, [x29, #80]
|
||||
ldp d18, d19, [x29, #96]
|
||||
ldp d20, d21, [x29, #112]
|
||||
ldp d22, d23, [x29, #128]
|
||||
ldp d24, d25, [x29, #144]
|
||||
ldp d26, d27, [x29, #160]
|
||||
ldp d28, d29, [x29, #176]
|
||||
ldp d30, d31, [x29, #192]
|
||||
ldp x29, x30, [sp], #0xd0
|
||||
ret
|
||||
#ifndef __APPLE__
|
||||
.size Transform_Sha512_Len_crypto,.-Transform_Sha512_Len_crypto
|
||||
@@ -1730,4 +1752,3 @@ L_sha512_len_crypto_begin:
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
#endif
|
||||
#endif /* !WOLFSSL_ARMASM_INLINE */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,22 @@
|
||||
/* sha512.c
|
||||
*
|
||||
* Copyright (C) 2006-2023 wolfSSL Inc. All rights reserved.
|
||||
* Copyright (C) 2006-2021 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* Contact licensing@wolfssl.com with any questions or comments.
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* https://www.wolfssl.com
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@@ -136,6 +146,18 @@ static int InitSha512_256(wc_Sha512* sha512)
|
||||
|
||||
#ifdef WOLFSSL_SHA512
|
||||
|
||||
#ifdef WOLFSSL_ARMASM
|
||||
#ifndef WOLFSSL_ARMASM_CRYPTO_SHA512
|
||||
extern void Transform_Sha512_Len_neon(wc_Sha512* sha512, const byte* data,
|
||||
word32 len);
|
||||
#define Transform_Sha512_Len Transform_Sha512_Len_neon
|
||||
#else
|
||||
extern void Transform_Sha512_Len_crypto(wc_Sha512* sha512, const byte* data,
|
||||
word32 len);
|
||||
#define Transform_Sha512_Len Transform_Sha512_Len_crypto
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static int InitSha512_Family(wc_Sha512* sha512, void* heap, int devId,
|
||||
enum wc_HashType type)
|
||||
{
|
||||
@@ -445,25 +467,7 @@ static WC_INLINE int Sha512Update(wc_Sha512* sha512, const byte* data, word32 le
|
||||
blocksLen = len & ~(WC_SHA512_BLOCK_SIZE-1);
|
||||
if (blocksLen > 0) {
|
||||
/* Byte reversal performed in function if required. */
|
||||
#ifndef WOLFSSL_ARMASM_NO_NEON
|
||||
/* Data must be 64-bit aligned to be passed to Transform_Sha512_Len().
|
||||
* 64 bits is 8 bytes.
|
||||
*/
|
||||
if (((size_t)data & 0x7) != 0) {
|
||||
word32 i;
|
||||
|
||||
for (i = 0; i < blocksLen; i += WC_SHA512_BLOCK_SIZE) {
|
||||
word64 buffer[WC_SHA512_BLOCK_SIZE / sizeof(word64)];
|
||||
XMEMCPY(buffer, data + i, WC_SHA512_BLOCK_SIZE);
|
||||
Transform_Sha512_Len(sha512, (const byte*)buffer,
|
||||
WC_SHA512_BLOCK_SIZE);
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
Transform_Sha512_Len(sha512, data, blocksLen);
|
||||
}
|
||||
Transform_Sha512_Len(sha512, data, blocksLen);
|
||||
data += blocksLen;
|
||||
len -= blocksLen;
|
||||
}
|
||||
@@ -788,8 +792,6 @@ void wc_Sha384Free(wc_Sha384* sha384)
|
||||
|
||||
#ifdef WOLFSSL_SHA512
|
||||
|
||||
#if !defined(WOLFSSL_NOSHA512_224) || !defined(WOLFSSL_NOSHA512_256)
|
||||
|
||||
static int Sha512_Family_GetHash(wc_Sha512* sha512, byte* hash,
|
||||
enum wc_HashType type )
|
||||
{
|
||||
@@ -826,8 +828,6 @@ static int Sha512_Family_GetHash(wc_Sha512* sha512, byte* hash,
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* !WOLFSSL_NOSHA512_224 || !WOLFSSL_NOSHA512_256 */
|
||||
|
||||
int wc_Sha512GetHash(wc_Sha512* sha512, byte* hash)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -2271,7 +2271,10 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
|
||||
#endif
|
||||
#ifndef RSA_LOW_MEM
|
||||
if ((mp_count_bits(&key->p) == 1024) &&
|
||||
(mp_count_bits(&key->q) == 1024)) {
|
||||
(mp_count_bits(&key->q) == 1024) &&
|
||||
(mp_count_bits(&key->dP) > 0) &&
|
||||
(mp_count_bits(&key->dQ) > 0) &&
|
||||
(mp_count_bits(&key->u) > 0)) {
|
||||
return sp_RsaPrivate_2048(in, inLen, &key->d, &key->p, &key->q,
|
||||
&key->dP, &key->dQ, &key->u, &key->n,
|
||||
out, outLen);
|
||||
@@ -2302,7 +2305,10 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
|
||||
#endif
|
||||
#ifndef RSA_LOW_MEM
|
||||
if ((mp_count_bits(&key->p) == 1536) &&
|
||||
(mp_count_bits(&key->q) == 1536)) {
|
||||
(mp_count_bits(&key->q) == 1536) &&
|
||||
(mp_count_bits(&key->dP) > 0) &&
|
||||
(mp_count_bits(&key->dQ) > 0) &&
|
||||
(mp_count_bits(&key->u) > 0)) {
|
||||
return sp_RsaPrivate_3072(in, inLen, &key->d, &key->p, &key->q,
|
||||
&key->dP, &key->dQ, &key->u, &key->n,
|
||||
out, outLen);
|
||||
@@ -2333,7 +2339,10 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
|
||||
#endif
|
||||
#ifndef RSA_LOW_MEM
|
||||
if ((mp_count_bits(&key->p) == 2048) &&
|
||||
(mp_count_bits(&key->q) == 2048)) {
|
||||
(mp_count_bits(&key->q) == 2048) &&
|
||||
(mp_count_bits(&key->dP) > 0) &&
|
||||
(mp_count_bits(&key->dQ) > 0) &&
|
||||
(mp_count_bits(&key->u) > 0)) {
|
||||
return sp_RsaPrivate_4096(in, inLen, &key->d, &key->p, &key->q,
|
||||
&key->dP, &key->dQ, &key->u, &key->n,
|
||||
out, outLen);
|
||||
@@ -2434,7 +2443,13 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
|
||||
if (ret == 0 && mp_exptmod(tmp, &key->d, &key->n, tmp) != MP_OKAY)
|
||||
ret = MP_EXPTMOD_E;
|
||||
#else
|
||||
if (ret == 0) {
|
||||
if (ret == 0 && (mp_iszero(&key->p) || mp_iszero(&key->q) ||
|
||||
mp_iszero(&key->dP) || mp_iszero(&key->dQ))) {
|
||||
if (mp_exptmod(tmp, &key->d, &key->n, tmp) != MP_OKAY) {
|
||||
ret = MP_EXPTMOD_E;
|
||||
}
|
||||
}
|
||||
else if (ret == 0) {
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
mp_int* tmpa;
|
||||
mp_int* tmpb = NULL;
|
||||
|
||||
154544
wolfcrypt/src/sp_arm32.c
154544
wolfcrypt/src/sp_arm32.c
File diff suppressed because it is too large
Load Diff
73514
wolfcrypt/src/sp_arm64.c
73514
wolfcrypt/src/sp_arm64.c
File diff suppressed because it is too large
Load Diff
20974
wolfcrypt/src/sp_c32.c
20974
wolfcrypt/src/sp_c32.c
File diff suppressed because it is too large
Load Diff
19921
wolfcrypt/src/sp_c64.c
19921
wolfcrypt/src/sp_c64.c
File diff suppressed because it is too large
Load Diff
@@ -38,27 +38,6 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
|
||||
#ifndef NO_AES
|
||||
|
||||
#ifdef HAVE_AESGCM
|
||||
typedef struct Gcm {
|
||||
ALIGN16 byte H[16];
|
||||
#ifdef OPENSSL_EXTRA
|
||||
word32 aadH[4]; /* additional authenticated data GHASH */
|
||||
word32 aadLen; /* additional authenticated data len */
|
||||
#endif
|
||||
#ifdef GCM_TABLE
|
||||
/* key-based fast multiplication table. */
|
||||
ALIGN16 byte M0[256][16];
|
||||
#elif defined(GCM_TABLE_4BIT)
|
||||
#if defined(BIG_ENDIAN_ORDER) || defined(WC_16BIT_CPU)
|
||||
ALIGN16 byte M0[16][16];
|
||||
#else
|
||||
ALIGN16 byte M0[32][16];
|
||||
#endif
|
||||
#endif /* GCM_TABLE */
|
||||
} Gcm;
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_FIPS) && \
|
||||
defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 2)
|
||||
#include <wolfssl/wolfcrypt/fips.h>
|
||||
@@ -198,7 +177,6 @@ struct Aes {
|
||||
#endif
|
||||
#ifdef HAVE_AESGCM
|
||||
ALIGN16 byte H[AES_BLOCK_SIZE];
|
||||
Gcm gcm;
|
||||
#ifdef OPENSSL_EXTRA
|
||||
word32 aadH[4]; /* additional authenticated data GHASH */
|
||||
word32 aadLen; /* additional authenticated data len */
|
||||
@@ -399,13 +377,8 @@ WOLFSSL_API int wc_AesEcbDecrypt(Aes* aes, byte* out,
|
||||
WOLFSSL_API __must_check int wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in);
|
||||
WOLFSSL_API __must_check int wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in);
|
||||
#else
|
||||
#ifndef WOLFSSL_ARMASM
|
||||
WOLFSSL_API void wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in);
|
||||
WOLFSSL_API void wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in);
|
||||
#else
|
||||
WOLFSSL_API int wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in);
|
||||
WOLFSSL_API int wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in);
|
||||
#endif
|
||||
WOLFSSL_API void wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in);
|
||||
WOLFSSL_API void wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in);
|
||||
#endif
|
||||
WOLFSSL_API int wc_AesSetKeyDirect(Aes* aes, const byte* key, word32 len,
|
||||
const byte* iv, int dir);
|
||||
@@ -476,10 +449,8 @@ WOLFSSL_API int wc_AesGcmDecryptFinal(Aes* aes, const byte* authTag,
|
||||
const byte* authIn, word32 authInSz,
|
||||
const byte* authTag, word32 authTagSz);
|
||||
#endif /* WC_NO_RNG */
|
||||
#ifndef WOLFSSL_ARMASM
|
||||
WOLFSSL_LOCAL void GHASH(Aes* aes, const byte* a, word32 aSz, const byte* c,
|
||||
WOLFSSL_LOCAL void GHASH(Aes* aes, const byte* a, word32 aSz, const byte* c,
|
||||
word32 cSz, byte* s, word32 sSz);
|
||||
#endif
|
||||
#endif /* HAVE_AESGCM */
|
||||
#ifdef HAVE_AESCCM
|
||||
WOLFSSL_LOCAL int wc_AesCcmCheckTagSize(int sz);
|
||||
|
||||
@@ -204,22 +204,6 @@ struct wc_Sha512 {
|
||||
|
||||
#ifdef WOLFSSL_SHA512
|
||||
|
||||
#ifdef WOLFSSL_ARMASM
|
||||
#ifdef __aarch64__
|
||||
#ifndef WOLFSSL_ARMASM_CRYPTO_SHA512
|
||||
void Transform_Sha512_Len_neon(wc_Sha512* sha512, const byte* data,
|
||||
word32 len);
|
||||
#define Transform_Sha512_Len Transform_Sha512_Len_neon
|
||||
#else
|
||||
void Transform_Sha512_Len_crypto(wc_Sha512* sha512, const byte* data,
|
||||
word32 len);
|
||||
#define Transform_Sha512_Len Transform_Sha512_Len_crypto
|
||||
#endif
|
||||
#else
|
||||
extern void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data,
|
||||
word32 len);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
WOLFSSL_API int wc_InitSha512(wc_Sha512*);
|
||||
WOLFSSL_API int wc_InitSha512_ex(wc_Sha512*, void*, int);
|
||||
|
||||
Reference in New Issue
Block a user