mirror of
https://github.com/openssl/openssl.git
synced 2024-11-27 05:21:51 +08:00
Fix aes_core to use U64() macro..
AIX reported warnings of the form: 1506-207 (W) Integer constant 0x8080808080808080u out of range. This truncation causes all startup self tests related to AES to fail. Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/15842)
This commit is contained in:
parent
d65d296383
commit
4aaed2a5fb
@ -51,6 +51,15 @@
|
||||
#include "aes_local.h"
|
||||
|
||||
#if !defined(OPENSSL_NO_AES_CONST_TIME) && !defined(AES_ASM)
|
||||
|
||||
# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
|
||||
# define U64(C) C##UI64
|
||||
# elif defined(__arch64__)
|
||||
# define U64(C) C##UL
|
||||
# else
|
||||
# define U64(C) C##ULL
|
||||
# endif
|
||||
|
||||
typedef union {
|
||||
unsigned char b[8];
|
||||
u32 w[2];
|
||||
@ -79,10 +88,10 @@ static void XtimeLong(u64 *w)
|
||||
u64 a, b;
|
||||
|
||||
a = *w;
|
||||
b = a & 0x8080808080808080u;
|
||||
b = a & U64(0x8080808080808080);
|
||||
a ^= b;
|
||||
b -= b >> 7;
|
||||
b &= 0x1B1B1B1B1B1B1B1Bu;
|
||||
b &= U64(0x1B1B1B1B1B1B1B1B);
|
||||
b ^= a << 1;
|
||||
*w = b;
|
||||
}
|
||||
@ -229,89 +238,89 @@ static void SubLong(u64 *w)
|
||||
u64 x, y, a1, a2, a3, a4, a5, a6;
|
||||
|
||||
x = *w;
|
||||
y = ((x & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((x & 0x0101010101010101u) << 7);
|
||||
x &= 0xDDDDDDDDDDDDDDDDu;
|
||||
x ^= y & 0x5757575757575757u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x1C1C1C1C1C1C1C1Cu;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x4A4A4A4A4A4A4A4Au;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x4242424242424242u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x6464646464646464u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0xE0E0E0E0E0E0E0E0u;
|
||||
y = ((x & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((x & U64(0x0101010101010101)) << 7);
|
||||
x &= U64(0xDDDDDDDDDDDDDDDD);
|
||||
x ^= y & U64(0x5757575757575757);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x1C1C1C1C1C1C1C1C);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x4A4A4A4A4A4A4A4A);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x4242424242424242);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x6464646464646464);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0xE0E0E0E0E0E0E0E0);
|
||||
a1 = x;
|
||||
a1 ^= (x & 0xF0F0F0F0F0F0F0F0u) >> 4;
|
||||
a2 = ((x & 0xCCCCCCCCCCCCCCCCu) >> 2) | ((x & 0x3333333333333333u) << 2);
|
||||
a1 ^= (x & U64(0xF0F0F0F0F0F0F0F0)) >> 4;
|
||||
a2 = ((x & U64(0xCCCCCCCCCCCCCCCC)) >> 2) | ((x & U64(0x3333333333333333)) << 2);
|
||||
a3 = x & a1;
|
||||
a3 ^= (a3 & 0xAAAAAAAAAAAAAAAAu) >> 1;
|
||||
a3 ^= (((x << 1) & a1) ^ ((a1 << 1) & x)) & 0xAAAAAAAAAAAAAAAAu;
|
||||
a3 ^= (a3 & U64(0xAAAAAAAAAAAAAAAA)) >> 1;
|
||||
a3 ^= (((x << 1) & a1) ^ ((a1 << 1) & x)) & U64(0xAAAAAAAAAAAAAAAA);
|
||||
a4 = a2 & a1;
|
||||
a4 ^= (a4 & 0xAAAAAAAAAAAAAAAAu) >> 1;
|
||||
a4 ^= (((a2 << 1) & a1) ^ ((a1 << 1) & a2)) & 0xAAAAAAAAAAAAAAAAu;
|
||||
a5 = (a3 & 0xCCCCCCCCCCCCCCCCu) >> 2;
|
||||
a3 ^= ((a4 << 2) ^ a4) & 0xCCCCCCCCCCCCCCCCu;
|
||||
a4 = a5 & 0x2222222222222222u;
|
||||
a4 ^= (a4 & U64(0xAAAAAAAAAAAAAAAA)) >> 1;
|
||||
a4 ^= (((a2 << 1) & a1) ^ ((a1 << 1) & a2)) & U64(0xAAAAAAAAAAAAAAAA);
|
||||
a5 = (a3 & U64(0xCCCCCCCCCCCCCCCC)) >> 2;
|
||||
a3 ^= ((a4 << 2) ^ a4) & U64(0xCCCCCCCCCCCCCCCC);
|
||||
a4 = a5 & U64(0x2222222222222222);
|
||||
a4 |= a4 >> 1;
|
||||
a4 ^= (a5 << 1) & 0x2222222222222222u;
|
||||
a4 ^= (a5 << 1) & U64(0x2222222222222222);
|
||||
a3 ^= a4;
|
||||
a5 = a3 & 0xA0A0A0A0A0A0A0A0u;
|
||||
a5 = a3 & U64(0xA0A0A0A0A0A0A0A0);
|
||||
a5 |= a5 >> 1;
|
||||
a5 ^= (a3 << 1) & 0xA0A0A0A0A0A0A0A0u;
|
||||
a4 = a5 & 0xC0C0C0C0C0C0C0C0u;
|
||||
a5 ^= (a3 << 1) & U64(0xA0A0A0A0A0A0A0A0);
|
||||
a4 = a5 & U64(0xC0C0C0C0C0C0C0C0);
|
||||
a6 = a4 >> 2;
|
||||
a4 ^= (a5 << 2) & 0xC0C0C0C0C0C0C0C0u;
|
||||
a5 = a6 & 0x2020202020202020u;
|
||||
a4 ^= (a5 << 2) & U64(0xC0C0C0C0C0C0C0C0);
|
||||
a5 = a6 & U64(0x2020202020202020);
|
||||
a5 |= a5 >> 1;
|
||||
a5 ^= (a6 << 1) & 0x2020202020202020u;
|
||||
a5 ^= (a6 << 1) & U64(0x2020202020202020);
|
||||
a4 |= a5;
|
||||
a3 ^= a4 >> 4;
|
||||
a3 &= 0x0F0F0F0F0F0F0F0Fu;
|
||||
a3 &= U64(0x0F0F0F0F0F0F0F0F);
|
||||
a2 = a3;
|
||||
a2 ^= (a3 & 0x0C0C0C0C0C0C0C0Cu) >> 2;
|
||||
a2 ^= (a3 & U64(0x0C0C0C0C0C0C0C0C)) >> 2;
|
||||
a4 = a3 & a2;
|
||||
a4 ^= (a4 & 0x0A0A0A0A0A0A0A0Au) >> 1;
|
||||
a4 ^= (((a3 << 1) & a2) ^ ((a2 << 1) & a3)) & 0x0A0A0A0A0A0A0A0Au;
|
||||
a5 = a4 & 0x0808080808080808u;
|
||||
a4 ^= (a4 & U64(0x0A0A0A0A0A0A0A0A)) >> 1;
|
||||
a4 ^= (((a3 << 1) & a2) ^ ((a2 << 1) & a3)) & U64(0x0A0A0A0A0A0A0A0A);
|
||||
a5 = a4 & U64(0x0808080808080808);
|
||||
a5 |= a5 >> 1;
|
||||
a5 ^= (a4 << 1) & 0x0808080808080808u;
|
||||
a5 ^= (a4 << 1) & U64(0x0808080808080808);
|
||||
a4 ^= a5 >> 2;
|
||||
a4 &= 0x0303030303030303u;
|
||||
a4 ^= (a4 & 0x0202020202020202u) >> 1;
|
||||
a4 &= U64(0x0303030303030303);
|
||||
a4 ^= (a4 & U64(0x0202020202020202)) >> 1;
|
||||
a4 |= a4 << 2;
|
||||
a3 = a2 & a4;
|
||||
a3 ^= (a3 & 0x0A0A0A0A0A0A0A0Au) >> 1;
|
||||
a3 ^= (((a2 << 1) & a4) ^ ((a4 << 1) & a2)) & 0x0A0A0A0A0A0A0A0Au;
|
||||
a3 ^= (a3 & U64(0x0A0A0A0A0A0A0A0A)) >> 1;
|
||||
a3 ^= (((a2 << 1) & a4) ^ ((a4 << 1) & a2)) & U64(0x0A0A0A0A0A0A0A0A);
|
||||
a3 |= a3 << 4;
|
||||
a2 = ((a1 & 0xCCCCCCCCCCCCCCCCu) >> 2) | ((a1 & 0x3333333333333333u) << 2);
|
||||
a2 = ((a1 & U64(0xCCCCCCCCCCCCCCCC)) >> 2) | ((a1 & U64(0x3333333333333333)) << 2);
|
||||
x = a1 & a3;
|
||||
x ^= (x & 0xAAAAAAAAAAAAAAAAu) >> 1;
|
||||
x ^= (((a1 << 1) & a3) ^ ((a3 << 1) & a1)) & 0xAAAAAAAAAAAAAAAAu;
|
||||
x ^= (x & U64(0xAAAAAAAAAAAAAAAA)) >> 1;
|
||||
x ^= (((a1 << 1) & a3) ^ ((a3 << 1) & a1)) & U64(0xAAAAAAAAAAAAAAAA);
|
||||
a4 = a2 & a3;
|
||||
a4 ^= (a4 & 0xAAAAAAAAAAAAAAAAu) >> 1;
|
||||
a4 ^= (((a2 << 1) & a3) ^ ((a3 << 1) & a2)) & 0xAAAAAAAAAAAAAAAAu;
|
||||
a5 = (x & 0xCCCCCCCCCCCCCCCCu) >> 2;
|
||||
x ^= ((a4 << 2) ^ a4) & 0xCCCCCCCCCCCCCCCCu;
|
||||
a4 = a5 & 0x2222222222222222u;
|
||||
a4 ^= (a4 & U64(0xAAAAAAAAAAAAAAAA)) >> 1;
|
||||
a4 ^= (((a2 << 1) & a3) ^ ((a3 << 1) & a2)) & U64(0xAAAAAAAAAAAAAAAA);
|
||||
a5 = (x & U64(0xCCCCCCCCCCCCCCCC)) >> 2;
|
||||
x ^= ((a4 << 2) ^ a4) & U64(0xCCCCCCCCCCCCCCCC);
|
||||
a4 = a5 & U64(0x2222222222222222);
|
||||
a4 |= a4 >> 1;
|
||||
a4 ^= (a5 << 1) & 0x2222222222222222u;
|
||||
a4 ^= (a5 << 1) & U64(0x2222222222222222);
|
||||
x ^= a4;
|
||||
y = ((x & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((x & 0x0101010101010101u) << 7);
|
||||
x &= 0x3939393939393939u;
|
||||
x ^= y & 0x3F3F3F3F3F3F3F3Fu;
|
||||
y = ((y & 0xFCFCFCFCFCFCFCFCu) >> 2) | ((y & 0x0303030303030303u) << 6);
|
||||
x ^= y & 0x9797979797979797u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x9B9B9B9B9B9B9B9Bu;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x3C3C3C3C3C3C3C3Cu;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0xDDDDDDDDDDDDDDDDu;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x7272727272727272u;
|
||||
x ^= 0x6363636363636363u;
|
||||
y = ((x & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((x & U64(0x0101010101010101)) << 7);
|
||||
x &= U64(0x3939393939393939);
|
||||
x ^= y & U64(0x3F3F3F3F3F3F3F3F);
|
||||
y = ((y & U64(0xFCFCFCFCFCFCFCFC)) >> 2) | ((y & U64(0x0303030303030303)) << 6);
|
||||
x ^= y & U64(0x9797979797979797);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x9B9B9B9B9B9B9B9B);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x3C3C3C3C3C3C3C3C);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0xDDDDDDDDDDDDDDDD);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x7272727272727272);
|
||||
x ^= U64(0x6363636363636363);
|
||||
*w = x;
|
||||
}
|
||||
|
||||
@ -323,93 +332,93 @@ static void InvSubLong(u64 *w)
|
||||
u64 x, y, a1, a2, a3, a4, a5, a6;
|
||||
|
||||
x = *w;
|
||||
x ^= 0x6363636363636363u;
|
||||
y = ((x & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((x & 0x0101010101010101u) << 7);
|
||||
x &= 0xFDFDFDFDFDFDFDFDu;
|
||||
x ^= y & 0x5E5E5E5E5E5E5E5Eu;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0xF3F3F3F3F3F3F3F3u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0xF5F5F5F5F5F5F5F5u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x7878787878787878u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x7777777777777777u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x1515151515151515u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0xA5A5A5A5A5A5A5A5u;
|
||||
x ^= U64(0x6363636363636363);
|
||||
y = ((x & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((x & U64(0x0101010101010101)) << 7);
|
||||
x &= U64(0xFDFDFDFDFDFDFDFD);
|
||||
x ^= y & U64(0x5E5E5E5E5E5E5E5E);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0xF3F3F3F3F3F3F3F3);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0xF5F5F5F5F5F5F5F5);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x7878787878787878);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x7777777777777777);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x1515151515151515);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0xA5A5A5A5A5A5A5A5);
|
||||
a1 = x;
|
||||
a1 ^= (x & 0xF0F0F0F0F0F0F0F0u) >> 4;
|
||||
a2 = ((x & 0xCCCCCCCCCCCCCCCCu) >> 2) | ((x & 0x3333333333333333u) << 2);
|
||||
a1 ^= (x & U64(0xF0F0F0F0F0F0F0F0)) >> 4;
|
||||
a2 = ((x & U64(0xCCCCCCCCCCCCCCCC)) >> 2) | ((x & U64(0x3333333333333333)) << 2);
|
||||
a3 = x & a1;
|
||||
a3 ^= (a3 & 0xAAAAAAAAAAAAAAAAu) >> 1;
|
||||
a3 ^= (((x << 1) & a1) ^ ((a1 << 1) & x)) & 0xAAAAAAAAAAAAAAAAu;
|
||||
a3 ^= (a3 & U64(0xAAAAAAAAAAAAAAAA)) >> 1;
|
||||
a3 ^= (((x << 1) & a1) ^ ((a1 << 1) & x)) & U64(0xAAAAAAAAAAAAAAAA);
|
||||
a4 = a2 & a1;
|
||||
a4 ^= (a4 & 0xAAAAAAAAAAAAAAAAu) >> 1;
|
||||
a4 ^= (((a2 << 1) & a1) ^ ((a1 << 1) & a2)) & 0xAAAAAAAAAAAAAAAAu;
|
||||
a5 = (a3 & 0xCCCCCCCCCCCCCCCCu) >> 2;
|
||||
a3 ^= ((a4 << 2) ^ a4) & 0xCCCCCCCCCCCCCCCCu;
|
||||
a4 = a5 & 0x2222222222222222u;
|
||||
a4 ^= (a4 & U64(0xAAAAAAAAAAAAAAAA)) >> 1;
|
||||
a4 ^= (((a2 << 1) & a1) ^ ((a1 << 1) & a2)) & U64(0xAAAAAAAAAAAAAAAA);
|
||||
a5 = (a3 & U64(0xCCCCCCCCCCCCCCCC)) >> 2;
|
||||
a3 ^= ((a4 << 2) ^ a4) & U64(0xCCCCCCCCCCCCCCCC);
|
||||
a4 = a5 & U64(0x2222222222222222);
|
||||
a4 |= a4 >> 1;
|
||||
a4 ^= (a5 << 1) & 0x2222222222222222u;
|
||||
a4 ^= (a5 << 1) & U64(0x2222222222222222);
|
||||
a3 ^= a4;
|
||||
a5 = a3 & 0xA0A0A0A0A0A0A0A0u;
|
||||
a5 = a3 & U64(0xA0A0A0A0A0A0A0A0);
|
||||
a5 |= a5 >> 1;
|
||||
a5 ^= (a3 << 1) & 0xA0A0A0A0A0A0A0A0u;
|
||||
a4 = a5 & 0xC0C0C0C0C0C0C0C0u;
|
||||
a5 ^= (a3 << 1) & U64(0xA0A0A0A0A0A0A0A0);
|
||||
a4 = a5 & U64(0xC0C0C0C0C0C0C0C0);
|
||||
a6 = a4 >> 2;
|
||||
a4 ^= (a5 << 2) & 0xC0C0C0C0C0C0C0C0u;
|
||||
a5 = a6 & 0x2020202020202020u;
|
||||
a4 ^= (a5 << 2) & U64(0xC0C0C0C0C0C0C0C0);
|
||||
a5 = a6 & U64(0x2020202020202020);
|
||||
a5 |= a5 >> 1;
|
||||
a5 ^= (a6 << 1) & 0x2020202020202020u;
|
||||
a5 ^= (a6 << 1) & U64(0x2020202020202020);
|
||||
a4 |= a5;
|
||||
a3 ^= a4 >> 4;
|
||||
a3 &= 0x0F0F0F0F0F0F0F0Fu;
|
||||
a3 &= U64(0x0F0F0F0F0F0F0F0F);
|
||||
a2 = a3;
|
||||
a2 ^= (a3 & 0x0C0C0C0C0C0C0C0Cu) >> 2;
|
||||
a2 ^= (a3 & U64(0x0C0C0C0C0C0C0C0C)) >> 2;
|
||||
a4 = a3 & a2;
|
||||
a4 ^= (a4 & 0x0A0A0A0A0A0A0A0Au) >> 1;
|
||||
a4 ^= (((a3 << 1) & a2) ^ ((a2 << 1) & a3)) & 0x0A0A0A0A0A0A0A0Au;
|
||||
a5 = a4 & 0x0808080808080808u;
|
||||
a4 ^= (a4 & U64(0x0A0A0A0A0A0A0A0A)) >> 1;
|
||||
a4 ^= (((a3 << 1) & a2) ^ ((a2 << 1) & a3)) & U64(0x0A0A0A0A0A0A0A0A);
|
||||
a5 = a4 & U64(0x0808080808080808);
|
||||
a5 |= a5 >> 1;
|
||||
a5 ^= (a4 << 1) & 0x0808080808080808u;
|
||||
a5 ^= (a4 << 1) & U64(0x0808080808080808);
|
||||
a4 ^= a5 >> 2;
|
||||
a4 &= 0x0303030303030303u;
|
||||
a4 ^= (a4 & 0x0202020202020202u) >> 1;
|
||||
a4 &= U64(0x0303030303030303);
|
||||
a4 ^= (a4 & U64(0x0202020202020202)) >> 1;
|
||||
a4 |= a4 << 2;
|
||||
a3 = a2 & a4;
|
||||
a3 ^= (a3 & 0x0A0A0A0A0A0A0A0Au) >> 1;
|
||||
a3 ^= (((a2 << 1) & a4) ^ ((a4 << 1) & a2)) & 0x0A0A0A0A0A0A0A0Au;
|
||||
a3 ^= (a3 & U64(0x0A0A0A0A0A0A0A0A)) >> 1;
|
||||
a3 ^= (((a2 << 1) & a4) ^ ((a4 << 1) & a2)) & U64(0x0A0A0A0A0A0A0A0A);
|
||||
a3 |= a3 << 4;
|
||||
a2 = ((a1 & 0xCCCCCCCCCCCCCCCCu) >> 2) | ((a1 & 0x3333333333333333u) << 2);
|
||||
a2 = ((a1 & U64(0xCCCCCCCCCCCCCCCC)) >> 2) | ((a1 & U64(0x3333333333333333)) << 2);
|
||||
x = a1 & a3;
|
||||
x ^= (x & 0xAAAAAAAAAAAAAAAAu) >> 1;
|
||||
x ^= (((a1 << 1) & a3) ^ ((a3 << 1) & a1)) & 0xAAAAAAAAAAAAAAAAu;
|
||||
x ^= (x & U64(0xAAAAAAAAAAAAAAAA)) >> 1;
|
||||
x ^= (((a1 << 1) & a3) ^ ((a3 << 1) & a1)) & U64(0xAAAAAAAAAAAAAAAA);
|
||||
a4 = a2 & a3;
|
||||
a4 ^= (a4 & 0xAAAAAAAAAAAAAAAAu) >> 1;
|
||||
a4 ^= (((a2 << 1) & a3) ^ ((a3 << 1) & a2)) & 0xAAAAAAAAAAAAAAAAu;
|
||||
a5 = (x & 0xCCCCCCCCCCCCCCCCu) >> 2;
|
||||
x ^= ((a4 << 2) ^ a4) & 0xCCCCCCCCCCCCCCCCu;
|
||||
a4 = a5 & 0x2222222222222222u;
|
||||
a4 ^= (a4 & U64(0xAAAAAAAAAAAAAAAA)) >> 1;
|
||||
a4 ^= (((a2 << 1) & a3) ^ ((a3 << 1) & a2)) & U64(0xAAAAAAAAAAAAAAAA);
|
||||
a5 = (x & U64(0xCCCCCCCCCCCCCCCC)) >> 2;
|
||||
x ^= ((a4 << 2) ^ a4) & U64(0xCCCCCCCCCCCCCCCC);
|
||||
a4 = a5 & U64(0x2222222222222222);
|
||||
a4 |= a4 >> 1;
|
||||
a4 ^= (a5 << 1) & 0x2222222222222222u;
|
||||
a4 ^= (a5 << 1) & U64(0x2222222222222222);
|
||||
x ^= a4;
|
||||
y = ((x & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((x & 0x0101010101010101u) << 7);
|
||||
x &= 0xB5B5B5B5B5B5B5B5u;
|
||||
x ^= y & 0x4040404040404040u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x8080808080808080u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x1616161616161616u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0xEBEBEBEBEBEBEBEBu;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x9797979797979797u;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0xFBFBFBFBFBFBFBFBu;
|
||||
y = ((y & 0xFEFEFEFEFEFEFEFEu) >> 1) | ((y & 0x0101010101010101u) << 7);
|
||||
x ^= y & 0x7D7D7D7D7D7D7D7Du;
|
||||
y = ((x & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((x & U64(0x0101010101010101)) << 7);
|
||||
x &= U64(0xB5B5B5B5B5B5B5B5);
|
||||
x ^= y & U64(0x4040404040404040);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x8080808080808080);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x1616161616161616);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0xEBEBEBEBEBEBEBEB);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x9797979797979797);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0xFBFBFBFBFBFBFBFB);
|
||||
y = ((y & U64(0xFEFEFEFEFEFEFEFE)) >> 1) | ((y & U64(0x0101010101010101)) << 7);
|
||||
x ^= y & U64(0x7D7D7D7D7D7D7D7D);
|
||||
*w = x;
|
||||
}
|
||||
|
||||
@ -460,10 +469,10 @@ static void MixColumns(u64 *state)
|
||||
for (c = 0; c < 2; c++) {
|
||||
s1.d = state[c];
|
||||
s.d = s1.d;
|
||||
s.d ^= ((s.d & 0xFFFF0000FFFF0000u) >> 16)
|
||||
| ((s.d & 0x0000FFFF0000FFFFu) << 16);
|
||||
s.d ^= ((s.d & 0xFF00FF00FF00FF00u) >> 8)
|
||||
| ((s.d & 0x00FF00FF00FF00FFu) << 8);
|
||||
s.d ^= ((s.d & U64(0xFFFF0000FFFF0000)) >> 16)
|
||||
| ((s.d & U64(0x0000FFFF0000FFFF)) << 16);
|
||||
s.d ^= ((s.d & U64(0xFF00FF00FF00FF00)) >> 8)
|
||||
| ((s.d & U64(0x00FF00FF00FF00FF)) << 8);
|
||||
s.d ^= s1.d;
|
||||
XtimeLong(&s1.d);
|
||||
s.d ^= s1.d;
|
||||
@ -488,10 +497,10 @@ static void InvMixColumns(u64 *state)
|
||||
for (c = 0; c < 2; c++) {
|
||||
s1.d = state[c];
|
||||
s.d = s1.d;
|
||||
s.d ^= ((s.d & 0xFFFF0000FFFF0000u) >> 16)
|
||||
| ((s.d & 0x0000FFFF0000FFFFu) << 16);
|
||||
s.d ^= ((s.d & 0xFF00FF00FF00FF00u) >> 8)
|
||||
| ((s.d & 0x00FF00FF00FF00FFu) << 8);
|
||||
s.d ^= ((s.d & U64(0xFFFF0000FFFF0000)) >> 16)
|
||||
| ((s.d & U64(0x0000FFFF0000FFFF)) << 16);
|
||||
s.d ^= ((s.d & U64(0xFF00FF00FF00FF00)) >> 8)
|
||||
| ((s.d & U64(0x00FF00FF00FF00FF)) << 8);
|
||||
s.d ^= s1.d;
|
||||
XtimeLong(&s1.d);
|
||||
s.d ^= s1.d;
|
||||
@ -504,12 +513,12 @@ static void InvMixColumns(u64 *state)
|
||||
s.b[6] ^= s1.b[7];
|
||||
s.b[7] ^= s1.b[4];
|
||||
XtimeLong(&s1.d);
|
||||
s1.d ^= ((s1.d & 0xFFFF0000FFFF0000u) >> 16)
|
||||
| ((s1.d & 0x0000FFFF0000FFFFu) << 16);
|
||||
s1.d ^= ((s1.d & U64(0xFFFF0000FFFF0000)) >> 16)
|
||||
| ((s1.d & U64(0x0000FFFF0000FFFF)) << 16);
|
||||
s.d ^= s1.d;
|
||||
XtimeLong(&s1.d);
|
||||
s1.d ^= ((s1.d & 0xFF00FF00FF00FF00u) >> 8)
|
||||
| ((s1.d & 0x00FF00FF00FF00FFu) << 8);
|
||||
s1.d ^= ((s1.d & U64(0xFF00FF00FF00FF00)) >> 8)
|
||||
| ((s1.d & U64(0x00FF00FF00FF00FF)) << 8);
|
||||
s.d ^= s1.d;
|
||||
state[c] = s.d;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user