9#define GCM_MIN_NONCE_SIZE (1)
10#define GCM_MIN_TAG_SIZE (12)
11#define GCM_MAX_TAG_SIZE (16)
25 return SYMCRYPT_WRONG_BLOCK_SIZE;
34 return SYMCRYPT_WRONG_NONCE_SIZE;
40 if( (cbAssociatedData >> 61) > 0 )
42 return SYMCRYPT_WRONG_DATA_SIZE;
50 return SYMCRYPT_WRONG_DATA_SIZE;
55 return SYMCRYPT_WRONG_TAG_SIZE;
58 return SYMCRYPT_NO_ERROR;
71 if(
pState->bytesInMacBlock > 0 )
77 pState->bytesInMacBlock += bytesToProcess;
85 pState->bytesInMacBlock = 0;
116 nBytes =
pState->bytesInMacBlock;
121 pState->bytesInMacBlock = 0;
136 SIZE_T bytesUsedInKeyStreamBuffer;
147 if( bytesUsedInKeyStreamBuffer != 0 )
151 pbSrc += bytesToProcess;
152 pbDst += bytesToProcess;
167 &
pState->pKey->blockcipherKey,
173 pbSrc += bytesToProcess;
174 pbDst += bytesToProcess;
184 &
pState->pKey->blockcipherKey,
186 &
pState->keystreamBlock[0],
187 &
pState->keystreamBlock[0],
231 if(
pState->bytesInMacBlock > 0 )
256 &
pState->pKey->blockcipherKey,
279 status = SYMCRYPT_WRONG_KEY_SIZE;
289 if(
status != SYMCRYPT_NO_ERROR )
347 pState->counterBlock[15] = 1;
364 if(cbNonceRemainder > 0)
384 &
pState->counterBlock[12],
404 pState->bytesInMacBlock = 0;
423 if( pExpandedKeyCopy !=
NULL )
425 pDst->pKey = pExpandedKeyCopy;
464 if (
pState->pKey->pBlockCipher->gcmEncryptPartFunc !=
NULL )
526 if (
pState->pKey->pBlockCipher->gcmDecryptPartFunc !=
NULL )
599 status = SYMCRYPT_AUTHENTICATION_FAILURE;
603 status = SYMCRYPT_NO_ERROR;
645 pState->bytesInMacBlock = 0;
658 pbAuthData += bytesToDo;
673 if (
pState->pKey->pBlockCipher->gcmEncryptPartFunc !=
NULL )
689 if(
pState->bytesInMacBlock > 0 )
715 &
pState->pKey->blockcipherKey,
759 pState->bytesInMacBlock = 0;
772 pbAuthData += bytesToDo;
787 if (
pState->pKey->pBlockCipher->gcmDecryptPartFunc !=
NULL )
803 if(
pState->bytesInMacBlock > 0 )
828 &
pState->pKey->blockcipherKey,
836 status = SYMCRYPT_AUTHENTICATION_FAILURE;
840 status = SYMCRYPT_NO_ERROR;
846 if(
status != SYMCRYPT_NO_ERROR )
858 0x80, 0xb0, 0x48, 0x6d, 0x03, 0x9f, 0xea, 0xc3, 0x3c, 0x28, 0x96, 0x3f, 0x99, 0x8a, 0x77, 0x43,
COMPILER_DEPENDENT_UINT64 UINT64
VOID SYMCRYPT_CALL SymCryptCtrMsb32(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_ PCVOID pExpandedKey, _Inout_updates_(pBlockCipher->blockSize) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
static void cleanup(void)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
VOID SYMCRYPT_CALL SymCryptGHashResult(_In_ PCSYMCRYPT_GF128_ELEMENT pState, _Out_writes_(SYMCRYPT_GF128_BLOCK_SIZE) PBYTE pbResult)
VOID SYMCRYPT_CALL SymCryptGHashExpandKey(_Out_ PSYMCRYPT_GHASH_EXPANDED_KEY expandedKey, _In_reads_(SYMCRYPT_GF128_BLOCK_SIZE) PCBYTE pH)
VOID SYMCRYPT_CALL SymCryptGHashAppendData(_In_ PCSYMCRYPT_GHASH_EXPANDED_KEY expandedKey, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
GLenum GLuint GLenum GLsizei const GLchar * buf
#define memcpy(s1, s2, n)
#define _In_reads_opt_(s)
#define UNREFERENCED_PARAMETER(P)
VOID SYMCRYPT_CALL SymCryptInjectError(PBYTE pbData, SIZE_T cbData)
const BYTE SymCryptTestKey32[32]
const BYTE SymCryptTestMsg3[3]
VOID SYMCRYPT_CALL SymCryptGcmAddMacData(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_opt_(cbData) PCBYTE pbData, SIZE_T cbData)
SYMCRYPT_NOINLINE SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptGcmDecrypt(_In_ PCSYMCRYPT_GCM_EXPANDED_KEY pExpandedKey, _In_reads_(cbNonce) PCBYTE pbNonce, SIZE_T cbNonce, _In_reads_opt_(cbAuthData) PCBYTE pbAuthData, SIZE_T cbAuthData, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData, _In_reads_(cbTag) PCBYTE pbTag, SIZE_T cbTag)
SYMCRYPT_NOINLINE SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptGcmDecryptFinal(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbTag) PCBYTE pbTag, SIZE_T cbTag)
VOID SYMCRYPT_CALL SymCryptGcmPadMacData(_Inout_ PSYMCRYPT_GCM_STATE pState)
VOID SYMCRYPT_CALL SymCryptGcmEncryptDecryptPart(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
static const BYTE SymCryptGcmSelftestResult[3+SYMCRYPT_AES_BLOCK_SIZE]
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptGcmEncrypt(_In_ PCSYMCRYPT_GCM_EXPANDED_KEY pExpandedKey, _In_reads_(cbNonce) PCBYTE pbNonce, SIZE_T cbNonce, _In_reads_opt_(cbAuthData) PCBYTE pbAuthData, SIZE_T cbAuthData, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData, _Out_writes_(cbTag) PBYTE pbTag, SIZE_T cbTag)
VOID SYMCRYPT_CALL SymCryptGcmKeyCopy(_In_ PCSYMCRYPT_GCM_EXPANDED_KEY pSrc, _Out_ PSYMCRYPT_GCM_EXPANDED_KEY pDst)
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptGcmDecryptPart(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptGcmEncryptPart(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptGcmStateCopy(_In_ PCSYMCRYPT_GCM_STATE pSrc, _In_opt_ PCSYMCRYPT_GCM_EXPANDED_KEY pExpandedKeyCopy, _Out_ PSYMCRYPT_GCM_STATE pDst)
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptGcmDecryptPartTwoPass(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
#define GCM_MIN_NONCE_SIZE
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptGcmInit(_Out_ PSYMCRYPT_GCM_STATE pState, _In_ PCSYMCRYPT_GCM_EXPANDED_KEY pExpandedKey, _In_reads_(cbNonce) PCBYTE pbNonce, SIZE_T cbNonce)
VOID SYMCRYPT_CALL SymCryptGcmSelftest(void)
SYMCRYPT_NOINLINE SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptGcmExpandKey(_Out_ PSYMCRYPT_GCM_EXPANDED_KEY pExpandedKey, _In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_reads_(cbKey) PCBYTE pbKey, SIZE_T cbKey)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptGcmValidateParameters(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_ SIZE_T cbNonce, _In_ UINT64 cbAssociatedData, _In_ UINT64 cbData, _In_ SIZE_T cbTag)
VOID SYMCRYPT_CALL SymCryptGcmComputeTag(_Inout_ PSYMCRYPT_GCM_STATE pState, _Out_writes_(SYMCRYPT_GCM_BLOCK_SIZE) PBYTE pbTag)
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptGcmAuthPart(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_opt_(cbData) PCBYTE pbAuthData, SIZE_T cbData)
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptGcmEncryptFinal(_Inout_ PSYMCRYPT_GCM_STATE pState, _Out_writes_(cbTag) PBYTE pbTag, SIZE_T cbTag)
VOID SYMCRYPT_CALL SymCryptGcmSetNonce(_Out_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbNonce) PCBYTE pbNonce, SIZE_T cbNonce)
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptGcmEncryptPartTwoPass(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptGcmResetCounterBlock(_Inout_ PSYMCRYPT_GCM_STATE pState)
PSYMCRYPT_BLOCKCIPHER_CRYPT encryptFunc
PSYMCRYPT_BLOCKCIPHER_EXPAND_KEY expandKeyFunc
#define SYMCRYPT_ASSERT(_x)
#define SYMCRYPT_LOAD_MSBFIRST32(p)
const PCSYMCRYPT_BLOCKCIPHER SymCryptAesBlockCipher
FORCEINLINE VOID SYMCRYPT_CALL SymCryptWipeKnownSize(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptWipe(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
_Analysis_noreturn_ VOID SYMCRYPT_CALL SymCryptFatal(UINT32 fatalCode)
VOID SYMCRYPT_CALL SymCryptXorBytes(_In_reads_(cbBytes) PCBYTE pbSrc1, _In_reads_(cbBytes) PCBYTE pbSrc2, _Out_writes_(cbBytes) PBYTE pbResult, SIZE_T cbBytes)
#define SYMCRYPT_AES_BLOCK_SIZE
#define SYMCRYPT_STORE_MSBFIRST32(p, v)
BOOLEAN SYMCRYPT_CALL SymCryptEqual(_In_reads_(cbBytes) PCBYTE pbSrc1, _In_reads_(cbBytes) PCBYTE pbSrc2, SIZE_T cbBytes)
#define SYMCRYPT_STORE_MSBFIRST64(p, v)
SYMCRYPT_MAGIC_FIELD * PSYMCRYPT_GCM_STATE
#define SYMCRYPT_GCM_BLOCK_SIZE
#define SYMCRYPT_GCM_BLOCK_MOD_MASK
PCSYMCRYPT_BLOCKCIPHER pBlockCipher
#define SYMCRYPT_GF128_BLOCK_SIZE
#define SYMCRYPT_MIN(_a, _b)
PCBYTE PBYTE SIZE_T cbData
#define SYMCRYPT_SET_MAGIC(p)
#define SYMCRYPT_GCM_MAX_DATA_SIZE
const SYMCRYPT_GCM_EXPANDED_KEY * PCSYMCRYPT_GCM_EXPANDED_KEY
#define SYMCRYPT_GCM_BLOCK_ROUND_MASK
SYMCRYPT_MAGIC_FIELD * PSYMCRYPT_GCM_EXPANDED_KEY
PSYMCRYPT_COMMON_HASH_STATE pState
SYMCRYPT_MAGIC_FIELD SYMCRYPT_GCM_EXPANDED_KEY
SYMCRYPT_MAGIC_FIELD SYMCRYPT_GCM_STATE
const SYMCRYPT_GCM_STATE * PCSYMCRYPT_GCM_STATE
#define SYMCRYPT_CHECK_MAGIC(p)
#define SYMCRYPT_GCM_MAX_KEY_SIZE