50#define SHA2256Blocksize 64
51#define SHA2256Digestsize 32
119 (void) memset(sha_info,0,
sizeof(*sha_info));
126 if (sha_info->
accumulator == (
unsigned int *) NULL)
131 sha_info->
timestamp=time((time_t *) NULL);
164 if (sha_info->
accumulator != (
unsigned int *) NULL)
227 count=(ssize_t) ((low_order >> 3) & 0x3f);
229 datum[count++]=(
unsigned char) 0x80;
241 datum[56]=(
unsigned char) (high_order >> 24);
242 datum[57]=(
unsigned char) (high_order >> 16);
243 datum[58]=(
unsigned char) (high_order >> 8);
244 datum[59]=(
unsigned char) high_order;
245 datum[60]=(
unsigned char) (low_order >> 24);
246 datum[61]=(
unsigned char) (low_order >> 16);
247 datum[62]=(
unsigned char) (low_order >> 8);
248 datum[63]=(
unsigned char) low_order;
254 *q++=(
unsigned char) ((*p >> 24) & 0xff);
255 *q++=(
unsigned char) ((*p >> 16) & 0xff);
256 *q++=(
unsigned char) ((*p >> 8) & 0xff);
257 *q++=(
unsigned char) (*p & 0xff);
326 return(sha2256_info->
digest);
423static inline unsigned int Ch(
const unsigned int x,
const unsigned int y,
424 const unsigned int z)
426 return((x & y) ^ (~x & z));
429static inline unsigned int Maj(
const unsigned int x,
const unsigned int y,
430 const unsigned int z)
432 return((x & y) ^ (x & z) ^ (y & z));
435static inline unsigned int Trunc32(
const unsigned int x)
437 return((
unsigned int) (x & 0xffffffffU));
440static unsigned int RotateRight(
const unsigned int x,
const unsigned int n)
442 return(
Trunc32((x >> n) | (x << (32-n))));
447#define Sigma0(x) (RotateRight(x,7) ^ RotateRight(x,18) ^ Trunc32((x) >> 3))
448#define Sigma1(x) (RotateRight(x,17) ^ RotateRight(x,19) ^ Trunc32((x) >> 10))
449#define Suma0(x) (RotateRight(x,2) ^ RotateRight(x,13) ^ RotateRight(x,22))
450#define Suma1(x) (RotateRight(x,6) ^ RotateRight(x,11) ^ RotateRight(x,25))
464 0x428a2f98U, 0x71374491U, 0xb5c0fbcfU, 0xe9b5dba5U, 0x3956c25bU,
465 0x59f111f1U, 0x923f82a4U, 0xab1c5ed5U, 0xd807aa98U, 0x12835b01U,
466 0x243185beU, 0x550c7dc3U, 0x72be5d74U, 0x80deb1feU, 0x9bdc06a7U,
467 0xc19bf174U, 0xe49b69c1U, 0xefbe4786U, 0x0fc19dc6U, 0x240ca1ccU,
468 0x2de92c6fU, 0x4a7484aaU, 0x5cb0a9dcU, 0x76f988daU, 0x983e5152U,
469 0xa831c66dU, 0xb00327c8U, 0xbf597fc7U, 0xc6e00bf3U, 0xd5a79147U,
470 0x06ca6351U, 0x14292967U, 0x27b70a85U, 0x2e1b2138U, 0x4d2c6dfcU,
471 0x53380d13U, 0x650a7354U, 0x766a0abbU, 0x81c2c92eU, 0x92722c85U,
472 0xa2bfe8a1U, 0xa81a664bU, 0xc24b8b70U, 0xc76c51a3U, 0xd192e819U,
473 0xd6990624U, 0xf40e3585U, 0x106aa070U, 0x19a4c116U, 0x1e376c08U,
474 0x2748774cU, 0x34b0bcb5U, 0x391c0cb3U, 0x4ed8aa4aU, 0x5b9cca4fU,
475 0x682e6ff3U, 0x748f82eeU, 0x78a5636fU, 0x84c87814U, 0x8cc70208U,
476 0x90befffaU, 0xa4506cebU, 0xbef9a3f7U, 0xc67178f2U
498 if (
sizeof(
unsigned int) <= 4)
499 for (i=0; i < 16; i++)
501 T=(*((
unsigned int *) p));
506 for (i=0; i < 16; i+=2)
508 T=(*((
unsigned int *) p));
515 if (
sizeof(
unsigned int) <= 4)
516 for (i=0; i < 16; i++)
518 T=(*((
unsigned int *) p));
520 W[i]=((T << 24) & 0xff000000) | ((T << 8) & 0x00ff0000) |
521 ((T >> 8) & 0x0000ff00) | ((T >> 24) & 0x000000ff);
524 for (i=0; i < 16; i+=2)
526 T=(*((
unsigned int *) p));
528 W[i]=((T << 24) & 0xff000000) | ((T << 8) & 0x00ff0000) |
529 ((T >> 8) & 0x0000ff00) | ((T >> 24) & 0x000000ff);
531 W[i+1]=((T << 24) & 0xff000000) | ((T << 8) & 0x00ff0000) |
532 ((T >> 8) & 0x0000ff00) | ((T >> 24) & 0x000000ff);
545 for (i=16; i < 64; i++)
547 for (j=0; j < 64; j++)
585 (void) memset(W,0,
sizeof(W));
635 if (length < sha_info->low_order)
640 if (sha_info->
offset != 0)
#define WizardAssert(domain, predicate)
#define ThrowWizardFatalError(domain, error)
WizardBooleanType LogWizardEvent(const LogEventType type, const char *module, const char *function, const size_t line, const char *format,...)
#define GetWizardModule()
static unsigned int H(const unsigned int x, const unsigned int y, const unsigned int z)
static unsigned int F(const unsigned int x, const unsigned int y, const unsigned int z)
static unsigned int G(const unsigned int x, const unsigned int y, const unsigned int z)
WizardExport void * AcquireWizardMemory(const size_t size)
WizardExport void * CopyWizardMemory(void *destination, const void *source, const size_t size)
WizardExport void * AcquireQuantumMemory(const size_t count, const size_t quantum)
WizardExport void * RelinquishWizardMemory(void *memory)
WizardExport SHA2256Info * DestroySHA2256Info(SHA2256Info *sha_info)
WizardExport unsigned int GetSHA2256Blocksize(const SHA2256Info *sha2256_info)
WizardExport WizardBooleanType InitializeSHA2256(SHA2256Info *sha_info)
WizardExport const StringInfo * GetSHA2256Digest(const SHA2256Info *sha2256_info)
WizardExport WizardBooleanType UpdateSHA2256(SHA2256Info *sha_info, const StringInfo *message)
#define SHA2256Digestsize
WizardExport SHA2256Info * AcquireSHA2256Info(void)
WizardExport unsigned int GetSHA2256Digestsize(const SHA2256Info *sha2256_info)
WizardExport WizardBooleanType FinalizeSHA2256(SHA2256Info *sha_info)
static void TransformSHA2256(SHA2256Info *)
#define RotateRight(x, n)
WizardExport size_t GetStringInfoLength(const StringInfo *string_info)
WizardExport StringInfo * AcquireStringInfo(const size_t length)
WizardExport void SetStringInfoDatum(StringInfo *string_info, const unsigned char *source)
WizardExport unsigned char * GetStringInfoDatum(const StringInfo *string_info)
WizardExport StringInfo * DestroyStringInfo(StringInfo *string_info)
unsigned int * accumulator
WizardBooleanType lsb_first