|
@@ -0,0 +1,52 @@
|
|
|
+From 2bcf8e69bd92e33d84c48e7d108d3d46b22f8a6d Mon Sep 17 00:00:00 2001
|
|
|
+From: ValdikSS <[email protected]>
|
|
|
+Date: Wed, 18 Jan 2023 20:14:48 +0300
|
|
|
+Subject: [PATCH] Padlock: fix byte swapping assembly for AES-192 and 256
|
|
|
+
|
|
|
+Byte swapping code incorrectly uses the number of AES rounds to swap expanded
|
|
|
+AES key, while swapping only a single dword in a loop, resulting in swapped
|
|
|
+key and partially swapped expanded keys, breaking AES encryption and
|
|
|
+decryption on VIA Padlock hardware.
|
|
|
+
|
|
|
+This commit correctly sets the number of swapping loops to be done.
|
|
|
+
|
|
|
+Fixes #20073
|
|
|
+
|
|
|
+CLA: trivial
|
|
|
+
|
|
|
+Reviewed-by: Hugo Landau <[email protected]>
|
|
|
+Reviewed-by: Tomas Mraz <[email protected]>
|
|
|
+(Merged from https://github.com/openssl/openssl/pull/20077)
|
|
|
+
|
|
|
+(cherry picked from commit 7331e7ef79fe4499d81cc92249e9c97e9ff9291a)
|
|
|
+---
|
|
|
+ engines/asm/e_padlock-x86.pl | 2 ++
|
|
|
+ engines/asm/e_padlock-x86_64.pl | 2 ++
|
|
|
+ 2 files changed, 4 insertions(+)
|
|
|
+
|
|
|
+diff --git a/engines/asm/e_padlock-x86.pl b/engines/asm/e_padlock-x86.pl
|
|
|
+index 5b097ce3ef9b..07f7000fd38a 100644
|
|
|
+--- a/engines/asm/e_padlock-x86.pl
|
|
|
++++ b/engines/asm/e_padlock-x86.pl
|
|
|
+@@ -116,6 +116,8 @@
|
|
|
+ &function_begin_B("padlock_key_bswap");
|
|
|
+ &mov ("edx",&wparam(0));
|
|
|
+ &mov ("ecx",&DWP(240,"edx"));
|
|
|
++ &inc ("ecx");
|
|
|
++ &shl ("ecx",2);
|
|
|
+ &set_label("bswap_loop");
|
|
|
+ &mov ("eax",&DWP(0,"edx"));
|
|
|
+ &bswap ("eax");
|
|
|
+diff --git a/engines/asm/e_padlock-x86_64.pl b/engines/asm/e_padlock-x86_64.pl
|
|
|
+index 09b0aaa48dfe..dfd2ae656375 100644
|
|
|
+--- a/engines/asm/e_padlock-x86_64.pl
|
|
|
++++ b/engines/asm/e_padlock-x86_64.pl
|
|
|
+@@ -92,6 +92,8 @@
|
|
|
+ .align 16
|
|
|
+ padlock_key_bswap:
|
|
|
+ mov 240($arg1),%edx
|
|
|
++ inc %edx
|
|
|
++ shl \$2,%edx
|
|
|
+ .Lbswap_loop:
|
|
|
+ mov ($arg1),%eax
|
|
|
+ bswap %eax
|