19#define NATIVE_01 (0x0101010101010101)
20#elif NATIVE_BYTES == 4
21#define NATIVE_01 (0x01010101)
23#error Unexpected NATIVE_BYTES value
31#define MASK32_LT( _a, _b ) ((UINT32)( ( (INT32)((_a)-(_b)) ) >> 31 ) )
34#define MASK32_EQ( _a, _b ) (~(UINT32)(-(INT32)((_a) ^ (_b)) >> 31))
47#define MASKNB_INWORD_RELEVANTBITS (~(NATIVE_BYTES - 1) & 0x0fffffff)
49#define MASKNB_BROADCAST( _b ) ((NATIVE_UINT)(_b) * NATIVE_01)
145 UINT32 resultHashBlockIndex;
146 UINT32 lastHashBlockIndex;
155 const UINT32 cbMacValue = pHash->inputBlockSize / 2;
161 u32 = pHash->resultSize + 256;
173 scError = SYMCRYPT_BUFFER_TOO_SMALL;
193 cbPad = cbPad + ((maxPadLength - cbPad) &
u32);
194 nPaddingError |=
u32;
207 totalBytesHashed = cbExtendedData - pHash->resultSize - cbPad;
220 resultHashBlockIndex = totalBytesHashed + 1 + pHash->inputBlockSize / 8;
221 lastHashBlockIndex = resultHashBlockIndex + cbPad;
224 resultHashBlockIndex = (resultHashBlockIndex + pHash->inputBlockSize - 1) & ~(pHash->inputBlockSize - 1);
225 lastHashBlockIndex = (lastHashBlockIndex + pHash->inputBlockSize - 1) & ~(pHash->inputBlockSize - 1);
228 iPaddingStart = cbExtendedData - cbPad;
229 iMacStart = iPaddingStart - pHash->resultSize;
252 *bufferLocation = (*bufferLocation & (((
NATIVE_UINT)1 << 8*backOffset) - 1)) | (
data << 8*backOffset);
256 *(
NATIVE_UINT *)&pbMacValue[(
next - backOffset) & (cbMacValue - 1)] |= (
w & mInMac) << 8*backOffset;
258 if(
pState->bytesInBuffer == pHash->inputBlockSize )
261 (*pHash->appendBlockFunc)( (
PBYTE)
pState + pHash->chainOffset, &
pState->buffer[0], pHash->inputBlockSize, &tmp );
262 pState->bytesInBuffer = 0;
289 if (
pState->bytesInBuffer == pHash->inputBlockSize)
293 *(
UINT32*) &
pState->buffer[ pHash->inputBlockSize - 4 ] |= hashPaddingFinal & m32ResultBlock;
295 (*pHash->appendBlockFunc)( (
PBYTE)
pState + pHash->chainOffset, &
pState->buffer[0], pHash->inputBlockSize, &tmp );
309 *(
UINT32 *) (&pbHashResult[ pHash->resultSize - 4 ]) |= *(
UINT32 *) ((
PBYTE)
pState + pHash->chainOffset + pHash->resultSize - 4) & (
UINT32) mResultBlock;
311 pState->bytesInBuffer = 0;
316 nPaddingError |= (
w ^ padBytes) & mInPadding;
321 if(
next < cbExtendedData )
336 nPaddingError |= (
w ^ padBytes) & mInPadding;
337 next = cbExtendedData;
343 if (
next < lastHashBlockIndex)
354 *(
UINT32*) &
pState->buffer[ pHash->inputBlockSize - 4 ] = hashPaddingFinal;
356 (*pHash->appendBlockFunc)( (
PBYTE)
pState + pHash->chainOffset, &
pState->buffer[0], pHash->inputBlockSize, &tmp );
370 *(
UINT32 *) (&pbHashResult[ pHash->resultSize - 4 ]) |= *(
UINT32 *) ((
PBYTE)
pState + pHash->chainOffset + pHash->resultSize - 4) & (
UINT32) mResultBlock;
372 pState->bytesInBuffer = 0;
395 *pu32PaddingError = (
UINT32) nPaddingError;
411 BYTE abHashResult[48];
420 SYMCRYPT_ASSERT(((*(pMacAlgorithm->ppHashAlgorithm))->inputBlockSize)/2 <= 64);
421 SYMCRYPT_ASSERT((*(pMacAlgorithm->ppHashAlgorithm))->resultSize <= 48);
439 if( pMacAlgorithm->resultSize <= 32 )
453 u32PaddingError |= *(
PUINT32)&abHashResult[4*
i] ^ *(
PUINT32)&abMacValue[4*
i];
457 return u32PaddingError == 0 ? SYMCRYPT_NO_ERROR : SYMCRYPT_AUTHENTICATION_FAILURE;
COMPILER_DEPENDENT_UINT64 UINT64
static void cleanup(void)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLubyte GLubyte GLubyte GLubyte w
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)
#define _In_reads_bytes_(s)
#define _Inout_updates_(s)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptUint32ToMsbFirst(_In_reads_(cuData) PCUINT32 puData, _Out_writes_(4 *cuData) PBYTE pbResult, SIZE_T cuData)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptUint64ToMsbFirst(_In_reads_(cuData) PCUINT64 puData, _Out_writes_(8 *cuData) PBYTE pbResult, SIZE_T cuData)
#define SYMCRYPT_ASSERT(_x)
const PCSYMCRYPT_MAC SymCryptHmacSha1Algorithm
const PCSYMCRYPT_MAC SymCryptHmacSha256Algorithm
VOID SYMCRYPT_CALL SymCryptWipe(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
const PCSYMCRYPT_MAC SymCryptHmacSha384Algorithm
#define SYMCRYPT_STORE_MSBFIRST32(p, v)
const SYMCRYPT_HASH * PCSYMCRYPT_HASH
PCBYTE PBYTE SIZE_T cbData
PSYMCRYPT_PARALLEL_HASH_OPERATION next
* PSYMCRYPT_COMMON_HASH_STATE
PSYMCRYPT_COMMON_HASH_STATE pState
PCSYMCRYPT_HASH pHashAlgorithm
VOID SYMCRYPT_CALL SymCryptScsRotateBuffer(_Inout_updates_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, SIZE_T lshift)
SIZE_T SYMCRYPT_CALL SymCryptRoundUpPow2Sizet(SIZE_T v)
#define MASKNB_BROADCAST(_b)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptTlsCbcHmacVerifyCore(_In_ PCSYMCRYPT_HASH pHash, _Inout_ PSYMCRYPT_COMMON_HASH_STATE pState, _In_reads_bytes_(cbData) PCBYTE pbData, SIZE_T cbData, _Inout_updates_(pHash->inputBlockSize/2) PBYTE pbMacValue, _Inout_updates_(pHash->resultSize) PBYTE pbHashResult, _Out_ PUINT32 pu32PaddingError)
FORCEINLINE NATIVE_UINT SymCryptNMaskEq80(UINT32 wordStart, UINT32 boundary)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptTlsCbcHmacVerify(_In_ PCSYMCRYPT_MAC pMacAlgorithm, _In_ PVOID pExpandedKey, _Inout_ PVOID pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
FORCEINLINE NATIVE_UINT SymCryptNMaskEq(UINT32 wordStart, UINT32 boundary)
#define MASK32_LT(_a, _b)
FORCEINLINE NATIVE_UINT SymCryptNMaskGe(UINT32 wordStart, UINT32 boundary)
#define MASK32_EQ(_a, _b)
#define MASKNB_INWORD_RELEVANTBITS