50#define IS_UINT32_ALIGNED( __p ) ((((intptr_t)__p) & 3) == 0)
57#define NEED_ALIGN (!(SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_ARM | SYMCRYPT_CPU_ARM64))
73 pOut[0] = SymCryptAesSboxMatrixMult[0][pIn[0]][1];
74 pOut[1] = SymCryptAesSboxMatrixMult[0][pIn[1]][1];
75 pOut[2] = SymCryptAesSboxMatrixMult[0][pIn[2]][1];
76 pOut[3] = SymCryptAesSboxMatrixMult[0][pIn[3]][1];
92 PBYTE p = pDecryptionRoundKey;
95 for(
i=0;
i<4;
i++ ) {
97 *(
UINT32 *)SymCryptAesInvMatrixMult[0][
q[0]] ^
98 *(
UINT32 *)SymCryptAesInvMatrixMult[1][
q[1]] ^
99 *(
UINT32 *)SymCryptAesInvMatrixMult[2][
q[2]] ^
100 *(
UINT32 *)SymCryptAesInvMatrixMult[3][
q[3]];
123 const BYTE (*keyPtr)[4][4];
124 const BYTE (*keyLimit)[4][4];
164 while (keyPtr < keyLimit)
168 state2[0] = *((
UINT32 *) &SymCryptAesSboxMatrixMult[0][
state[0][0] ]);
169 state2[3] = *((
UINT32 *) &SymCryptAesSboxMatrixMult[1][
state[0][1] ]);
170 state2[2] = *((
UINT32 *) &SymCryptAesSboxMatrixMult[2][
state[0][2] ]);
171 state2[1] = *((
UINT32 *) &SymCryptAesSboxMatrixMult[3][
state[0][3] ]);
174 state2[1] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[0][
state[1][0] ]);
175 state2[0] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[1][
state[1][1] ]);
176 state2[3] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[2][
state[1][2] ]);
177 state2[2] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[3][
state[1][3] ]);
180 state2[2] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[0][
state[2][0] ]);
181 state2[1] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[1][
state[2][1] ]);
182 state2[0] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[2][
state[2][2] ]);
183 state2[3] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[3][
state[2][3] ]);
186 state2[3] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[0][
state[3][0] ]);
187 state2[2] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[1][
state[3][1] ]);
188 state2[1] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[2][
state[3][2] ]);
189 state2[0] ^= *((
UINT32 *) &SymCryptAesSboxMatrixMult[3][
state[3][3] ]);
203 state2[0] = (
UINT32) SymCryptAesSboxMatrixMult[0][
state[0][0] ][1];
204 state2[3] = (
UINT32) SymCryptAesSboxMatrixMult[0][
state[0][1] ][1] << 8;
205 state2[2] = (
UINT32) SymCryptAesSboxMatrixMult[0][
state[0][2] ][1] << 16;
206 state2[1] = (
UINT32) SymCryptAesSboxMatrixMult[0][
state[0][3] ][1] << 24;
209 state2[1] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[1][0] ][1];
210 state2[0] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[1][1] ][1] << 8;
211 state2[3] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[1][2] ][1] << 16;
212 state2[2] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[1][3] ][1] << 24;
215 state2[2] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[2][0] ][1];
216 state2[1] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[2][1] ][1] << 8;
217 state2[0] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[2][2] ][1] << 16;
218 state2[3] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[2][3] ][1] << 24;
221 state2[3] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[3][0] ][1];
222 state2[2] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[3][1] ][1] << 8;
223 state2[1] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[3][2] ][1] << 16;
224 state2[0] |= (
UINT32) SymCryptAesSboxMatrixMult[0][
state[3][3] ][1] << 24;
227 *((
UINT32 *) &pbCiphertext[0 ]) = *(
UINT32 *) (*keyPtr)[0] ^ state2[0];
228 *((
UINT32 *) &pbCiphertext[4 ]) = *(
UINT32 *) (*keyPtr)[1] ^ state2[1];
229 *((
UINT32 *) &pbCiphertext[8 ]) = *(
UINT32 *) (*keyPtr)[2] ^ state2[2];
230 *((
UINT32 *) &pbCiphertext[12]) = *(
UINT32 *) (*keyPtr)[3] ^ state2[3];
250 const BYTE (*keyPtr)[4][4];
251 const BYTE (*keyLimit)[4][4];
285 while (keyPtr < keyLimit)
289 state2[0] = *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[0][
state[0][0] ]);
290 state2[1] = *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[1][
state[0][1] ]);
291 state2[2] = *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[2][
state[0][2] ]);
292 state2[3] = *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[3][
state[0][3] ]);
295 state2[1] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[0][
state[1][0] ]);
296 state2[2] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[1][
state[1][1] ]);
297 state2[3] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[2][
state[1][2] ]);
298 state2[0] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[3][
state[1][3] ]);
301 state2[2] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[0][
state[2][0] ]);
302 state2[3] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[1][
state[2][1] ]);
303 state2[0] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[2][
state[2][2] ]);
304 state2[1] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[3][
state[2][3] ]);
307 state2[3] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[0][
state[3][0] ]);
308 state2[0] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[1][
state[3][1] ]);
309 state2[1] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[2][
state[3][2] ]);
310 state2[2] ^= *((
UINT32 *) &SymCryptAesInvSboxMatrixMult[3][
state[3][3] ]);
324 state2[0] = (
UINT32) SymCryptAesInvSbox[
state[0][0] ];
325 state2[1] = (
UINT32) SymCryptAesInvSbox[
state[0][1] ] << 8;
326 state2[2] = (
UINT32) SymCryptAesInvSbox[
state[0][2] ] << 16;
327 state2[3] = (
UINT32) SymCryptAesInvSbox[
state[0][3] ] << 24;
330 state2[1] |= (
UINT32) SymCryptAesInvSbox[
state[1][0] ];
331 state2[2] |= (
UINT32) SymCryptAesInvSbox[
state[1][1] ] << 8;
332 state2[3] |= (
UINT32) SymCryptAesInvSbox[
state[1][2] ] << 16;
333 state2[0] |= (
UINT32) SymCryptAesInvSbox[
state[1][3] ] << 24;
336 state2[2] |= (
UINT32) SymCryptAesInvSbox[
state[2][0] ];
337 state2[3] |= (
UINT32) SymCryptAesInvSbox[
state[2][1] ] << 8;
338 state2[0] |= (
UINT32) SymCryptAesInvSbox[
state[2][2] ] << 16;
339 state2[1] |= (
UINT32) SymCryptAesInvSbox[
state[2][3] ] << 24;
342 state2[3] |= (
UINT32) SymCryptAesInvSbox[
state[3][0] ];
343 state2[0] |= (
UINT32) SymCryptAesInvSbox[
state[3][1] ] << 8;
344 state2[1] |= (
UINT32) SymCryptAesInvSbox[
state[3][2] ] << 16;
345 state2[2] |= (
UINT32) SymCryptAesInvSbox[
state[3][3] ] << 24;
348 *((
UINT32 *) &pbPlaintext[0 ]) = *(
UINT32 *) (*keyPtr)[0] ^ state2[0];
349 *((
UINT32 *) &pbPlaintext[4 ]) = *(
UINT32 *) (*keyPtr)[1] ^ state2[1];
350 *((
UINT32 *) &pbPlaintext[8 ]) = *(
UINT32 *) (*keyPtr)[2] ^ state2[2];
351 *((
UINT32 *) &pbPlaintext[12]) = *(
UINT32 *) (*keyPtr)[3] ^ state2[3];
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptAesDecryptC(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbCiphertext, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbPlaintext)
VOID SYMCRYPT_CALL SymCryptAesCreateDecryptionRoundKeyC(_In_reads_(16) PCBYTE pEncryptionRoundKey, _Out_writes_(16) PBYTE pDecryptionRoundKey)
VOID SYMCRYPT_CALL SymCryptAesEcbEncryptC(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
#define IS_UINT32_ALIGNED(__p)
VOID SYMCRYPT_CALL SymCryptAesEcbDecryptC(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptAesEncryptC(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbPlaintext, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbCiphertext)
GLdouble GLdouble GLdouble GLdouble q
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define memcpy(s1, s2, n)
VOID SYMCRYPT_CALL SymCryptAes4SboxC(_In_reads_(4) PCBYTE pIn, _Out_writes_(4) PBYTE pOut)
VOID SYMCRYPT_CALL SymCryptAesDecrypt(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbSrc, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbDst)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptWipeKnownSize(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptAesEncrypt(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbSrc, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbDst)
#define SYMCRYPT_AES_BLOCK_SIZE
#define SYMCRYPT_ALIGN_AT(alignment)
const SYMCRYPT_AES_EXPANDED_KEY * PCSYMCRYPT_AES_EXPANDED_KEY
PCBYTE PBYTE SIZE_T cbData
#define SYMCRYPT_CHECK_MAGIC(p)