diff options
author | Karel Miko <karel.miko@gmail.com> | 2023-10-02 12:43:55 +0200 |
---|---|---|
committer | Karel Miko <karel.miko@gmail.com> | 2023-10-02 12:43:55 +0200 |
commit | dc2dc8ea1f1c7ad5c0cf79e9ed0f0360137febd9 (patch) | |
tree | 8c6938a46fe45b20d64326ddbbf591b124d53516 | |
parent | 6f17270a43053bad25952f224cd71a5b92b338c3 (diff) |
limtomcrypt patch: Ensure that AES key is always correctly aligned
-rw-r--r-- | src/ltc/ciphers/aes/aes.c | 6 | ||||
-rw-r--r-- | src/ltc/ciphers/aes/aesni.c | 6 | ||||
-rw-r--r-- | src/ltc/headers/tomcrypt_cipher.h | 5 |
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 |