63 lines
2.2 KiB
Diff
63 lines
2.2 KiB
Diff
From a91c268853c4bda825a505629a873e21685490bf Mon Sep 17 00:00:00 2001
|
|
From: "Hongren (Zenithal) Zheng" <i@zenithal.me>
|
|
Date: Mon, 9 May 2022 19:42:39 +0800
|
|
Subject: [PATCH] Make IV/buf in prov_cipher_ctx_st aligned
|
|
|
|
Make IV/buf aligned will drastically improve performance
|
|
as some architecture performs badly on misaligned memory
|
|
access.
|
|
|
|
Ref to
|
|
https://gist.github.com/ZenithalHourlyRate/7b5175734f87acb73d0bbc53391d7140#file-2-openssl-long-md
|
|
Ref to
|
|
openssl#18197
|
|
|
|
Signed-off-by: Hongren (Zenithal) Zheng <i@zenithal.me>
|
|
|
|
Reviewed-by: Paul Dale <pauli@openssl.org>
|
|
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
|
|
|
(cherry picked from commit 2787a709c984d3884e1726383c2f2afca428d795)
|
|
|
|
Reviewed-by: Neil Horman <nhorman@openssl.org>
|
|
Reviewed-by: Matt Caswell <matt@openssl.org>
|
|
(Merged from https://github.com/openssl/openssl/pull/23463)
|
|
---
|
|
.../implementations/include/prov/ciphercommon.h | 13 +++++++------
|
|
1 file changed, 7 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/providers/implementations/include/prov/ciphercommon.h b/providers/implementations/include/prov/ciphercommon.h
|
|
index 383b759304..7f9a4a3bf2 100644
|
|
--- a/providers/implementations/include/prov/ciphercommon.h
|
|
+++ b/providers/implementations/include/prov/ciphercommon.h
|
|
@@ -42,6 +42,13 @@ typedef int (PROV_CIPHER_HW_FN)(PROV_CIPHER_CTX *dat, unsigned char *out,
|
|
#define PROV_CIPHER_FLAG_INVERSE_CIPHER 0x0200
|
|
|
|
struct prov_cipher_ctx_st {
|
|
+ /* place buffer at the beginning for memory alignment */
|
|
+ /* The original value of the iv */
|
|
+ unsigned char oiv[GENERIC_BLOCK_SIZE];
|
|
+ /* Buffer of partial blocks processed via update calls */
|
|
+ unsigned char buf[GENERIC_BLOCK_SIZE];
|
|
+ unsigned char iv[GENERIC_BLOCK_SIZE];
|
|
+
|
|
block128_f block;
|
|
union {
|
|
cbc128_f cbc;
|
|
@@ -83,12 +90,6 @@ struct prov_cipher_ctx_st {
|
|
* manage partial blocks themselves.
|
|
*/
|
|
unsigned int num;
|
|
-
|
|
- /* The original value of the iv */
|
|
- unsigned char oiv[GENERIC_BLOCK_SIZE];
|
|
- /* Buffer of partial blocks processed via update calls */
|
|
- unsigned char buf[GENERIC_BLOCK_SIZE];
|
|
- unsigned char iv[GENERIC_BLOCK_SIZE];
|
|
const PROV_CIPHER_HW *hw; /* hardware specific functions */
|
|
const void *ks; /* Pointer to algorithm specific key data */
|
|
OSSL_LIB_CTX *libctx;
|
|
--
|
|
2.33.0
|
|
|