50#define SHA2224Blocksize 64
51#define SHA2224Digestsize 28
119 (void) memset(sha_info,0,
sizeof(*sha_info));
126 if (sha_info->
accumulator == (
unsigned int *) NULL)
130 sha_info->
timestamp=time((time_t *) NULL);
163 if (sha_info->
accumulator != (
unsigned int *) NULL)
226 count=(ssize_t) ((low_order >> 3) & 0x3f);
228 datum[count++]=(
unsigned char) 0x80;
240 datum[56]=(
unsigned char) (high_order >> 24);
241 datum[57]=(
unsigned char) (high_order >> 16);
242 datum[58]=(
unsigned char) (high_order >> 8);
243 datum[59]=(
unsigned char) high_order;
244 datum[60]=(
unsigned char) (low_order >> 24);
245 datum[61]=(
unsigned char) (low_order >> 16);
246 datum[62]=(
unsigned char) (low_order >> 8);
247 datum[63]=(
unsigned char) low_order;
253 *q++=(
unsigned char) ((*p >> 24) & 0xff);
254 *q++=(
unsigned char) ((*p >> 16) & 0xff);
255 *q++=(
unsigned char) ((*p >> 8) & 0xff);
256 *q++=(
unsigned char) (*p & 0xff);
325 return(sha2224_info->
digest);
422static inline unsigned int Ch(
const unsigned int x,
const unsigned int y,
423 const unsigned int z)
425 return((x & y) ^ (~x & z));
428static inline unsigned int Maj(
const unsigned int x,
const unsigned int y,
429 const unsigned int z)
431 return((x & y) ^ (x & z) ^ (y & z));
434static inline unsigned int Trunc32(
const unsigned int x)
436 return((
unsigned int) (x & 0xffffffffU));
439static unsigned int RotateRight(
const unsigned int x,
const unsigned int n)
441 return(
Trunc32((x >> n) | (x << (32-n))));
446#define Sigma0(x) (RotateRight(x,7) ^ RotateRight(x,18) ^ Trunc32((x) >> 3))
447#define Sigma1(x) (RotateRight(x,17) ^ RotateRight(x,19) ^ Trunc32((x) >> 10))
448#define Suma0(x) (RotateRight(x,2) ^ RotateRight(x,13) ^ RotateRight(x,22))
449#define Suma1(x) (RotateRight(x,6) ^ RotateRight(x,11) ^ RotateRight(x,25))
463 0x428a2f98U, 0x71374491U, 0xb5c0fbcfU, 0xe9b5dba5U, 0x3956c25bU,
464 0x59f111f1U, 0x923f82a4U, 0xab1c5ed5U, 0xd807aa98U, 0x12835b01U,
465 0x243185beU, 0x550c7dc3U, 0x72be5d74U, 0x80deb1feU, 0x9bdc06a7U,
466 0xc19bf174U, 0xe49b69c1U, 0xefbe4786U, 0x0fc19dc6U, 0x240ca1ccU,
467 0x2de92c6fU, 0x4a7484aaU, 0x5cb0a9dcU, 0x76f988daU, 0x983e5152U,
468 0xa831c66dU, 0xb00327c8U, 0xbf597fc7U, 0xc6e00bf3U, 0xd5a79147U,
469 0x06ca6351U, 0x14292967U, 0x27b70a85U, 0x2e1b2138U, 0x4d2c6dfcU,
470 0x53380d13U, 0x650a7354U, 0x766a0abbU, 0x81c2c92eU, 0x92722c85U,
471 0xa2bfe8a1U, 0xa81a664bU, 0xc24b8b70U, 0xc76c51a3U, 0xd192e819U,
472 0xd6990624U, 0xf40e3585U, 0x106aa070U, 0x19a4c116U, 0x1e376c08U,
473 0x2748774cU, 0x34b0bcb5U, 0x391c0cb3U, 0x4ed8aa4aU, 0x5b9cca4fU,
474 0x682e6ff3U, 0x748f82eeU, 0x78a5636fU, 0x84c87814U, 0x8cc70208U,
475 0x90befffaU, 0xa4506cebU, 0xbef9a3f7U, 0xc67178f2U
497 if (
sizeof(
unsigned int) <= 4)
498 for (i=0; i < 16; i++)
500 T=(*((
unsigned int *) p));
505 for (i=0; i < 16; i+=2)
507 T=(*((
unsigned int *) p));
514 if (
sizeof(
unsigned int) <= 4)
515 for (i=0; i < 16; i++)
517 T=(*((
unsigned int *) p));
519 W[i]=((T << 24) & 0xff000000) | ((T << 8) & 0x00ff0000) |
520 ((T >> 8) & 0x0000ff00) | ((T >> 24) & 0x000000ff);
523 for (i=0; i < 16; i+=2)
525 T=(*((
unsigned int *) p));
527 W[i]=((T << 24) & 0xff000000) | ((T << 8) & 0x00ff0000) |
528 ((T >> 8) & 0x0000ff00) | ((T >> 24) & 0x000000ff);
530 W[i+1]=((T << 24) & 0xff000000) | ((T << 8) & 0x00ff0000) |
531 ((T >> 8) & 0x0000ff00) | ((T >> 24) & 0x000000ff);
544 for (i=16; i < 64; i++)
546 for (j=0; j < 64; j++)
583 (void) memset(W,0,
sizeof(W));
633 if (length < sha_info->low_order)
638 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)
static void TransformSHA2224(SHA2224Info *)
WizardExport const StringInfo * GetSHA2224Digest(const SHA2224Info *sha2224_info)
WizardExport SHA2224Info * AcquireSHA2224Info(void)
WizardExport WizardBooleanType FinalizeSHA2224(SHA2224Info *sha_info)
WizardExport unsigned int GetSHA2224Blocksize(const SHA2224Info *sha2224_info)
WizardExport WizardBooleanType InitializeSHA2224(SHA2224Info *sha_info)
WizardExport unsigned int GetSHA2224Digestsize(const SHA2224Info *sha2224_info)
WizardExport WizardBooleanType UpdateSHA2224(SHA2224Info *sha_info, const StringInfo *message)
WizardExport SHA2224Info * DestroySHA2224Info(SHA2224Info *sha_info)
#define SHA2224Digestsize
#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)
WizardBooleanType lsb_first
unsigned int * accumulator