Kawe Mazidjatari b3a68ed095 Add EABase, EAThread and DirtySDK to R5sdk
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
2024-04-05 18:29:03 +02:00

88 lines
2.4 KiB
C

/*H*******************************************************************/
/*!
\File cryptsha2.h
\Description
This module implements SHA2 as defined in RFC 6234, which is
itself based on FIPS 180-2.
\Notes
This implementation is limited to hashing no more than 2^32-9
bytes. It will silently produce the wrong result if an attempt
is made to hash more data.
\Copyright
Copyright (c) Electronic Arts 2013
\Version 1.0 11/04/2013 (jbrookes) First Version
*/
/*******************************************************************H*/
#ifndef _cryptsha2_h
#define _cryptsha2_h
/*!
\Moduledef CryptSha2 CryptSha2
\Modulemember Crypt
*/
//@{
/*** Include files ***************************************************/
#include "DirtySDK/platform.h"
/*** Defines *********************************************************/
//! maximum hash result
#define CRYPTSHA224_HASHSIZE (28)
#define CRYPTSHA256_HASHSIZE (32)
#define CRYPTSHA384_HASHSIZE (48)
#define CRYPTSHA512_HASHSIZE (64)
#define CRYPTSHA2_HASHSIZE_MAX (CRYPTSHA512_HASHSIZE)
/*** Macros **********************************************************/
/*** Type Definitions ************************************************/
//! private SHA2 state
typedef struct CryptSha2T
{
uint32_t uCount; //!< total length of hash data in bytes
uint8_t uHashSize; //!< hash size
uint8_t uBlockSize; //!< 64/128 depending on mode
uint8_t uPartialCount; //!< # bytes in the partial data block
uint8_t _pad;
union
{
uint32_t H_32[8];
uint64_t H_64[8];
}TempHash; //!< temporary hash state
uint8_t strData[128]; //!< partial data block
} CryptSha2T;
/*** Variables *******************************************************/
/*** Functions *******************************************************/
#ifdef __cplusplus
extern "C" {
#endif
// init the SHA2 context.
DIRTYCODE_API void CryptSha2Init(CryptSha2T *pSha2, int32_t iHashSize);
// add data to the SHA2 context (hash the data).
DIRTYCODE_API void CryptSha2Update(CryptSha2T *pSha2, const uint8_t *pInput, uint32_t uInputLength);
// convert SHA2 state into final output form
DIRTYCODE_API void CryptSha2Final(CryptSha2T *pSha2, uint8_t *pBuffer, uint32_t uLength);
#ifdef __cplusplus
}
#endif
//@}
#endif // _cryptsha2_h