#if 0
#pragma makedep header
#endif
VOID
SYMCRYPT_CALL
SYMCRYPT_Xxx(
_In_reads_( cbFunctionNameString ) PCBYTE pbFunctionNameString,
SIZE_T cbFunctionNameString,
_In_reads_( cbCustomizationString ) PCBYTE pbCustomizationString,
SIZE_T cbCustomizationString,
_In_reads_( cbData ) PCBYTE pbData,
SIZE_T cbData,
_Out_writes_( cbResult ) PBYTE pbResult,
SIZE_T cbResult)
{
SYMCRYPT_XXX_STATE state;
SYMCRYPT_XxxInit(&state,
pbFunctionNameString, cbFunctionNameString,
pbCustomizationString, cbCustomizationString);
SYMCRYPT_XxxAppend(&state, pbData, cbData);
SYMCRYPT_XxxExtract(&state, pbResult, cbResult, TRUE);
}
VOID
SYMCRYPT_CALL
SYMCRYPT_XxxInit(
_Out_ PSYMCRYPT_XXX_STATE pState,
_In_reads_( cbFunctionNameString ) PCBYTE pbFunctionNameString,
SIZE_T cbFunctionNameString,
_In_reads_( cbCustomizationString ) PCBYTE pbCustomizationString,
SIZE_T cbCustomizationString)
{
C_ASSERT( sizeof(SYMCRYPT_XXX_STATE) == sizeof(SYMCRYPT_SHAKEXXX_STATE) );
SYMCRYPT_SHAKEXXX_INIT( (SYMCRYPT_SHAKEXXX_STATE*)pState );
if (cbFunctionNameString != 0 || cbCustomizationString != 0)
{
pState->ks.paddingValue = SYMCRYPT_CSHAKE_PADDING_VALUE;
SymCryptCShakeEncodeInputStrings(&pState->ks,
pbFunctionNameString, cbFunctionNameString,
pbCustomizationString, cbCustomizationString);
}
SYMCRYPT_SET_MAGIC(pState);
}
VOID
SYMCRYPT_CALL
SYMCRYPT_XxxAppend(
_Inout_ PSYMCRYPT_XXX_STATE pState,
_In_reads_( cbData ) PCBYTE pbData,
SIZE_T cbData )
{
if (pState->ks.squeezeMode)
{
pState->ks.paddingValue = SYMCRYPT_SHAKE_PADDING_VALUE;
}
SymCryptKeccakAppend(&pState->ks, pbData, cbData);
}
VOID
SYMCRYPT_CALL
SYMCRYPT_XxxExtract(
_Inout_ PSYMCRYPT_XXX_STATE pState,
_Out_writes_(cbResult) PBYTE pbResult,
SIZE_T cbResult,
BOOLEAN bWipe)
{
SymCryptKeccakExtract(&pState->ks, pbResult, cbResult, bWipe);
if (bWipe)
{
pState->ks.paddingValue = SYMCRYPT_SHAKE_PADDING_VALUE;
}
}
VOID
SYMCRYPT_CALL
SYMCRYPT_XxxResult(
_Inout_ PSYMCRYPT_XXX_STATE pState,
_Out_writes_( SYMCRYPT_CSHAKEXXX_RESULT_SIZE ) PBYTE pbResult)
{
SymCryptKeccakExtract(&pState->ks, pbResult, SYMCRYPT_CSHAKEXXX_RESULT_SIZE, TRUE);
pState->ks.paddingValue = SYMCRYPT_SHAKE_PADDING_VALUE;
}
VOID
SYMCRYPT_CALL
SYMCRYPT_XxxStateCopy(_In_ const SYMCRYPT_XXX_STATE* pSrc, _Out_ SYMCRYPT_XXX_STATE* pDst)
{
SYMCRYPT_CHECK_MAGIC(pSrc);
*pDst = *pSrc;
SYMCRYPT_SET_MAGIC(pDst);
}