summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarel Miko <karel.miko@gmail.com>2023-10-02 12:43:55 +0200
committerKarel Miko <karel.miko@gmail.com>2023-10-02 12:43:55 +0200
commitdc2dc8ea1f1c7ad5c0cf79e9ed0f0360137febd9 (patch)
tree8c6938a46fe45b20d64326ddbbf591b124d53516
parent6f17270a43053bad25952f224cd71a5b92b338c3 (diff)
limtomcrypt patch: Ensure that AES key is always correctly aligned
-rw-r--r--src/ltc/ciphers/aes/aes.c6
-rw-r--r--src/ltc/ciphers/aes/aesni.c6
-rw-r--r--src/ltc/headers/tomcrypt_cipher.h5
3 files changed, 13 insertions, 4 deletions
diff --git a/src/ltc/ciphers/aes/aes.c b/src/ltc/ciphers/aes/aes.c
index 0f46b748..54c5872c 100644
--- a/src/ltc/ciphers/aes/aes.c
+++ b/src/ltc/ciphers/aes/aes.c
@@ -96,6 +96,7 @@ static ulong32 setup_mix2(ulong32 temp)
int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
{
int i;
+ unsigned char *K;
ulong32 temp, *rk;
#ifndef ENCRYPT_ONLY
ulong32 *rrk;
@@ -112,6 +113,10 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s
}
skey->rijndael.Nr = 10 + ((keylen/8)-2)*2;
+ K = (void*)((unsigned long)&skey->rijndael.K[15] & (~0xFuL));
+ skey->rijndael.eK = (ulong32*)K;
+ K += (60 * sizeof(ulong32));
+ skey->rijndael.dK = (ulong32*)K;
/* setup the forward key */
i = 0;
@@ -723,4 +728,3 @@ int ECB_KS(int *keysize)
}
#endif
-
diff --git a/src/ltc/ciphers/aes/aesni.c b/src/ltc/ciphers/aes/aesni.c
index 6f98779e..eefb19e8 100644
--- a/src/ltc/ciphers/aes/aesni.c
+++ b/src/ltc/ciphers/aes/aesni.c
@@ -45,6 +45,7 @@ static const ulong32 rcon[] = {
int aesni_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
{
int i;
+ unsigned char *K;
__m128i temp;
ulong32 *rk;
ulong32 *rrk;
@@ -60,6 +61,10 @@ int aesni_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_
}
skey->rijndael.Nr = keylen / 4 + 6;
+ K = (void*)((unsigned long)&skey->rijndael.K[15] & (~0xFuL));
+ skey->rijndael.eK = (ulong32*)K;
+ K += (60 * sizeof(ulong32));
+ skey->rijndael.dK = (ulong32*)K;
/* setup the forward key */
i = 0;
@@ -364,4 +369,3 @@ int aesni_keysize(int *keysize)
}
#endif
-
diff --git a/src/ltc/headers/tomcrypt_cipher.h b/src/ltc/headers/tomcrypt_cipher.h
index aba28a27..06e61247 100644
--- a/src/ltc/headers/tomcrypt_cipher.h
+++ b/src/ltc/headers/tomcrypt_cipher.h
@@ -35,9 +35,10 @@ struct saferp_key {
#ifdef LTC_RIJNDAEL
struct rijndael_key {
- ulong32 eK[60] LTC_ALIGN(16);
- ulong32 dK[60] LTC_ALIGN(16);
+ ulong32 *eK;
+ ulong32 *dK;
int Nr;
+ unsigned char K[(60 + 60 + 4) * sizeof(ulong32)];
};
#endif