18#define SYMCRYPT_SSKDF_KMAC_128_DEFAULT_SALT_SIZE (164)
19#define SYMCRYPT_SSKDF_KMAC_256_DEFAULT_SALT_SIZE (132)
20#define SYMCRYPT_SSKDF_DEFAULT_SALT_MAX SYMCRYPT_SSKDF_KMAC_128_DEFAULT_SALT_SIZE
56 pbSalt = pbSaltDefault;
62 &pExpandedSalt->macKey.kmac128Key,
71 &pExpandedSalt->macKey.kmac256Key,
110 if ( cbMacOutputSize > 64 )
112 scError = SYMCRYPT_INVALID_ARGUMENT;
118 cbMacResultSize = cbMacOutputSize;
123 cbMacResultSize = cbMacOutputSize;
126 else if ( cbMacOutputSize > 0 && cbMacOutputSize != pMacAlgorithm->
resultSize )
128 scError = SYMCRYPT_INVALID_ARGUMENT;
132 while ( cbResult > 0 )
144 if ( resultFuncEx !=
NULL )
146 if ( cbMacOutputSize > 0 )
148 resultFuncEx( &
state, rbPartialResult, cbMacOutputSize );
163 memcpy( pbCurr, rbPartialResult, cbBlock );
197 if ( scError != SYMCRYPT_NO_ERROR )
235 SIZE_T cbHashResultSize = hashAlgorithm->resultSize;
240 if ( cbHashOutputSize > 64 ||
241 cbHashOutputSize > 0 && cbHashOutputSize != hashAlgorithm->resultSize )
243 return SYMCRYPT_INVALID_ARGUMENT;
246 while ( cbResult > 0 )
250 cbPartialResult =
SYMCRYPT_MIN( cbResult, cbHashResultSize );
261 pbCurr += cbPartialResult;
262 cbResult -= cbPartialResult;
265 return SYMCRYPT_NO_ERROR;
static void cleanup(void)
#define memcpy(s1, s2, n)
#define _In_reads_opt_(s)
static const BYTE pbResult[]
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptSskdfMac(_In_ PCSYMCRYPT_MAC macAlgorithm, SIZE_T cbMacOutputSize, _In_reads_(cbSecret) PCBYTE pbSecret, SIZE_T cbSecret, _In_reads_opt_(cbSalt) PCBYTE pbSalt, SIZE_T cbSalt, _In_reads_opt_(cbInfo) PCBYTE pbInfo, SIZE_T cbInfo, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptSskdfMacDerive(_In_ PCSYMCRYPT_SSKDF_MAC_EXPANDED_SALT pExpandedSalt, SIZE_T cbMacOutputSize, _In_reads_(cbSecret) PCBYTE pbSecret, SIZE_T cbSecret, _In_reads_opt_(cbInfo) PCBYTE pbInfo, SIZE_T cbInfo, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptSskdfMacExpandSalt(_Out_ PSYMCRYPT_SSKDF_MAC_EXPANDED_SALT pExpandedSalt, _In_ PCSYMCRYPT_MAC macAlgorithm, _In_reads_opt_(cbSalt) PCBYTE pbSalt, SIZE_T cbSalt)
#define SYMCRYPT_SSKDF_KMAC_128_DEFAULT_SALT_SIZE
#define SYMCRYPT_SSKDF_KMAC_256_DEFAULT_SALT_SIZE
#define SYMCRYPT_SSKDF_DEFAULT_SALT_MAX
static const BYTE pbKmacCustomizationString[3]
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptSskdfHash(_In_ PCSYMCRYPT_HASH hashAlgorithm, SIZE_T cbHashOutputSize, _In_reads_(cbSecret) PCBYTE pbSecret, SIZE_T cbSecret, _In_reads_opt_(cbInfo) PCBYTE pbInfo, SIZE_T cbInfo, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult)
const PCSYMCRYPT_HASH * ppHashAlgorithm
PSYMCRYPT_MAC_EXPAND_KEY expandKeyFunc
PSYMCRYPT_MAC_RESULT resultFunc
PSYMCRYPT_MAC_APPEND appendFunc
PSYMCRYPT_MAC_INIT initFunc
#define SYMCRYPT_ASSERT(_x)
SIZE_T SYMCRYPT_CALL SymCryptHashInputBlockSize(_In_ PCSYMCRYPT_HASH pHash)
const PCSYMCRYPT_MAC SymCryptKmac256Algorithm
const PCSYMCRYPT_MAC SymCryptKmac128Algorithm
VOID SYMCRYPT_CALL SymCryptHashAppend(_In_ PCSYMCRYPT_HASH pHash, _Inout_updates_bytes_(pHash->stateSize) PVOID pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptWipeKnownSize(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptKmac256ExpandKeyEx(_Out_ PSYMCRYPT_KMAC256_EXPANDED_KEY pExpandedKey, _In_reads_bytes_(cbKey) PCBYTE pbKey, SIZE_T cbKey, _In_reads_bytes_(cbCustomizationString) PCBYTE pbCustomizationString, SIZE_T cbCustomizationString)
VOID SYMCRYPT_CALL SymCryptHashInit(_In_ PCSYMCRYPT_HASH pHash, _Out_writes_bytes_(pHash->stateSize) PVOID pState)
VOID SYMCRYPT_CALL SymCryptKmac256ResultEx(_Inout_ PSYMCRYPT_KMAC256_STATE pState, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptKmac128ExpandKeyEx(_Out_ PSYMCRYPT_KMAC128_EXPANDED_KEY pExpandedKey, _In_reads_bytes_(cbKey) PCBYTE pbKey, SIZE_T cbKey, _In_reads_bytes_(cbCustomizationString) PCBYTE pbCustomizationString, SIZE_T cbCustomizationString)
#define SYMCRYPT_STORE_MSBFIRST32(p, v)
VOID SYMCRYPT_CALL SymCryptHashResult(_In_ PCSYMCRYPT_HASH pHash, _Inout_updates_bytes_(pHash->stateSize) PVOID pState, _Out_writes_(SYMCRYPT_MIN(cbResult, pHash->resultSize)) PBYTE pbResult, SIZE_T cbResult)
VOID SYMCRYPT_CALL SymCryptKmac128ResultEx(_Inout_ PSYMCRYPT_KMAC128_STATE pState, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult)
const SYMCRYPT_HASH * PCSYMCRYPT_HASH
#define SYMCRYPT_MIN(_a, _b)
VOID(SYMCRYPT_CALL * PSYMCRYPT_MAC_RESULT_EX)(PVOID pState, PVOID pbResult, SIZE_T cbResult)
#define SYMCRYPT_MAC_MAX_RESULT_SIZE
PCSYMCRYPT_MAC macAlgorithm