ReactOS 0.4.17-dev-1005-g171e1de
cshake_pattern.c File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

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)
 
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)
 
VOID SYMCRYPT_CALL SYMCRYPT_XxxAppend (_Inout_ PSYMCRYPT_XXX_STATE pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
 
VOID SYMCRYPT_CALL SYMCRYPT_XxxExtract (_Inout_ PSYMCRYPT_XXX_STATE pState, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult, BOOLEAN bWipe)
 
VOID SYMCRYPT_CALL SYMCRYPT_XxxResult (_Inout_ PSYMCRYPT_XXX_STATE pState, _Out_writes_(SYMCRYPT_CSHAKEXXX_RESULT_SIZE) PBYTE pbResult)
 
VOID SYMCRYPT_CALL SYMCRYPT_XxxStateCopy (_In_ const SYMCRYPT_XXX_STATE *pSrc, _Out_ SYMCRYPT_XXX_STATE *pDst)
 

Function Documentation

◆ SYMCRYPT_Xxx()

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 
)

Definition at line 23 of file cshake_pattern.c.

32{
34
36 pbFunctionNameString, cbFunctionNameString,
37 pbCustomizationString, cbCustomizationString);
38
41}
static int state
Definition: maze.c:121
#define TRUE
Definition: types.h:120
#define SYMCRYPT_XxxExtract
Definition: sc_lib.h:138
#define SYMCRYPT_XxxInit
Definition: sc_lib.h:123
#define SYMCRYPT_XxxAppend
Definition: sc_lib.h:124
#define SYMCRYPT_XXX_STATE
Definition: sc_lib.h:116
static const BYTE pbResult[]
PCBYTE PBYTE SIZE_T cbData
PCBYTE pbData

◆ SYMCRYPT_XxxAppend()

VOID SYMCRYPT_CALL SYMCRYPT_XxxAppend ( _Inout_ PSYMCRYPT_XXX_STATE  pState,
_In_reads_(cbData) PCBYTE  pbData,
SIZE_T  cbData 
)

Definition at line 82 of file cshake_pattern.c.

86{
87 // Fixing of the padding value
88 //
89 // SymCryptKeccakAppend will reset the state, switch to absorb mode,
90 // and append data to the empty state if the state was in squeeze mode
91 // when Append is called. This behavior is equivalent to initializing
92 // cSHAKE with empty input strings, which makes cSHAKE a SHAKE instance.
93 //
94 // cSHAKE and SHAKE have different paddings, so we have to update the
95 // padding value in case it was cSHAKE padding before.
96 if (pState->ks.squeezeMode)
97 {
98 pState->ks.paddingValue = SYMCRYPT_SHAKE_PADDING_VALUE;
99 }
100
102}
VOID SYMCRYPT_CALL SymCryptKeccakAppend(_Inout_ PSYMCRYPT_KECCAK_STATE pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
Definition: sha3.c:285
#define SYMCRYPT_SHAKE_PADDING_VALUE
Definition: sc_lib.h:1809
PSYMCRYPT_COMMON_HASH_STATE pState

◆ SYMCRYPT_XxxExtract()

VOID SYMCRYPT_CALL SYMCRYPT_XxxExtract ( _Inout_ PSYMCRYPT_XXX_STATE  pState,
_Out_writes_(cbResult) PBYTE  pbResult,
SIZE_T  cbResult,
BOOLEAN  bWipe 
)

Definition at line 109 of file cshake_pattern.c.

114{
115 SymCryptKeccakExtract(&pState->ks, pbResult, cbResult, bWipe);
116
117 if (bWipe)
118 {
119 // If the state was wiped, set the state as if cSHAKE was initialized
120 // with empty strings, which is equivalent to empty SHAKE state.
121 // We have no way to store the Function Name string and Customization
122 // string information to go back to the initial cSHAKE state.
123 pState->ks.paddingValue = SYMCRYPT_SHAKE_PADDING_VALUE;
124 }
125}
VOID SYMCRYPT_CALL SymCryptKeccakExtract(_Inout_ PSYMCRYPT_KECCAK_STATE pState, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult, BOOLEAN bWipe)
Definition: sha3.c:411

◆ SYMCRYPT_XxxInit()

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 
)

Definition at line 49 of file cshake_pattern.c.

55{
57
59
60 // Perform cSHAKE processing of input strings when any of the input strings is non-empty
61 if (cbFunctionNameString != 0 || cbCustomizationString != 0)
62 {
63 // cSHAKE and SHAKE have different paddings. pState->paddingValue
64 // is set to SYMCRYPT_SHAKE_PADDING_VALUE in the SHAKE initialization above.
65 // We update the padding value here because at least one of the input strings
66 // is non-empty and cSHAKE will not default to SHAKE.
67 pState->ks.paddingValue = SYMCRYPT_CSHAKE_PADDING_VALUE;
68
70 pbFunctionNameString, cbFunctionNameString,
71 pbCustomizationString, cbCustomizationString);
72 }
73
75}
#define C_ASSERT(e)
Definition: intsafe.h:73
VOID SYMCRYPT_CALL SymCryptCShakeEncodeInputStrings(_Inout_ PSYMCRYPT_KECCAK_STATE pState, _In_reads_(cbFunctionNameString) PCBYTE pbFunctionNameString, SIZE_T cbFunctionNameString, _In_reads_(cbCustomizationString) PCBYTE pbCustomizationString, SIZE_T cbCustomizationString)
Definition: shake.c:221
#define SYMCRYPT_CSHAKE_PADDING_VALUE
Definition: sc_lib.h:1810
#define SYMCRYPT_SHAKEXXX_STATE
Definition: shake.c:172
#define SYMCRYPT_SHAKEXXX_INIT
Definition: shake.c:171
#define SYMCRYPT_SET_MAGIC(p)

◆ SYMCRYPT_XxxResult()

Definition at line 132 of file cshake_pattern.c.

135{
137
138 // Revert to cSHAKE initialized with empty strings state, i.e., empty SHAKE state
139 pState->ks.paddingValue = SYMCRYPT_SHAKE_PADDING_VALUE;
140}
#define SYMCRYPT_CSHAKEXXX_RESULT_SIZE
Definition: shake.c:174

◆ SYMCRYPT_XxxStateCopy()

VOID SYMCRYPT_CALL SYMCRYPT_XxxStateCopy ( _In_ const SYMCRYPT_XXX_STATE *  pSrc,
_Out_ SYMCRYPT_XXX_STATE *  pDst 
)

Definition at line 147 of file cshake_pattern.c.

148{
150 *pDst = *pSrc;
151 SYMCRYPT_SET_MAGIC(pDst);
152}
#define SYMCRYPT_CHECK_MAGIC(p)