Microchip® Advanced Software Framework

hash.c File Reference

Implementation of HASH algorithms used in Wi-Fi.

Copyright (c) 2017-2018 Microchip Technology Inc. and its subsidiaries.

Macros

#define ADD_TWO_32BIT(z, x, y)
 
#define F1(x, y, z)   (((x) & (y)) | (~(x) & (z)))
 
#define F2(x, y, z)   (((x) & (z)) | ((y) & ~(z)))
 
#define F3(x, y, z)   ((x) ^ (y) ^ (z))
 
#define F4(x, y, z)   (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
 
#define F5(x, y, z)   ((y) ^ ((x) | ~(z)))
 
#define GET_UINT64_BE(n, b, i)
 
#define INT32_TO_INT64(z, x, y)   z = (((uint64)(x)<<32)|((uint64)((y) & 0xffffffff)))
 
#define MD4_F(x, y, z)   F1(x,y,z)
 
#define MD4_G(x, y, z)   F4(x,y,z)
 
#define MD4_H(x, y, z)   F3(x,y,z)
 
#define MD4_INERMEDIATE(A, B, C, D, W, K, S)
 
#define MD4_SEC   OVERLAY_SEC1_API
 
#define MD5_F(x, y, z)   F1(x,y,z)
 
#define MD5_G(x, y, z)   F2(x,y,z)
 
#define MD5_H(x, y, z)   F3(x,y,z)
 
#define MD5_I(x, y, z)   F5(x,y,z)
 
#define MD5_INERMEDIATE(A, B, C, D, W, K, S)
 
#define PUTU64_BE(n, b, i)
 
#define SHA1_CH(x, y, z)   F1(x,y,z)
 
#define SHA1_INERMEDIATE(A, B, C, D, E, W, K)
 
#define SHA1_MAJ(x, y, z)   F4(x,y,z)
 
#define SHA256_CAP_SIGMA0(x)   (SHA_ROTR(x, 2) ^ SHA_ROTR(x,13) ^ SHA_ROTR(x,22))
 
#define SHA256_CAP_SIGMA1(x)   (SHA_ROTR(x, 6) ^ SHA_ROTR(x,11) ^ SHA_ROTR(x,25))
 
#define SHA256_CH(x, y, z)   (z ^ (x & (y ^ z)))
 
#define SHA256_MAJ(x, y, z)   ((x & y) | (z & (x | y)))
 
#define SHA256_MSG_LENGTH   8
 
#define SHA256_SMALL_SIGMA0(x)   (SHA_ROTR(x, 7) ^ SHA_ROTR(x,18) ^ SHA_SHR(x, 3))
 
#define SHA256_SMALL_SIGMA1(x)   (SHA_ROTR(x,17) ^ SHA_ROTR(x,19) ^ SHA_SHR(x,10))
 
#define SHA512_CAP_SIGMA0(high, low)   (SHA_ROTR_64(high,low, 28) ^ SHA_ROTR_64(low,high,2) ^ SHA_ROTR_64(low,high,7))
 
#define SHA512_CAP_SIGMA1(high, low)   (SHA_ROTR_64(high,low, 14) ^ SHA_ROTR_64(high,low,18) ^ SHA_ROTR_64(low,high,9))
 
#define SHA512_CH_HIGH(x, y, z)   (z[0] ^ (x[0] & (y[0] ^ z[0])))
 
#define SHA512_CH_LOW(x, y, z)   (z[1] ^ (x[1] & (y[1] ^ z[1])))
 
#define SHA512_MAJ_HIGH(x, y, z)   ((x[0] & y[0]) | (z[0] & (x[0] | y[0])))
 
#define SHA512_MAJ_LOW(x, y, z)   ((x[1] & y[1]) | (z[1] & (x[1] | y[1])))
 
#define SHA512_MSG_LENGTH   16
 
#define SHA512_SMALL_SIGMA0(high, low)   (SHA_ROTR_64(high,low, 1) ^ SHA_ROTR_64(high,low,8) ^ SHA_SHR_64(high,low, 7))
 
#define SHA512_SMALL_SIGMA1(high, low)   (SHA_ROTR_64(high,low,19) ^ SHA_ROTR_64(low,high,29) ^ SHA_SHR_64(high,low,6))
 
#define SHA_PAD_BYTE   0x80
 
#define SHA_PARITY(x, y, z)   F3(x,y,z)
 
#define UPDATE_SHA512_STATE(state_high, state_low, temp_state, temp_var, var_high, var_low)
 

Functions

void hmac_md5 (uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Key, uint32 u32KeyLength, uint8 *pu8Digest)
 
void hmac_sha1 (uint8 *pu8Key, uint32 u32KeyLength, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void HMAC_SHA256 (uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Key, uint32 u32KeyLength, uint8 *pu8Digest)
 
void HMAC_Vector (tenuHashAlg enuHashAlg, uint8 *pu8Key, uint32 u32KeyLength, tstrBuffer *pstrInData, uint8 u8NumInputs, uint8 *pu8Out)
 
void MD4_Hash (uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
MD4_SEC void MD4ProcessBlock (uint32 *pu32Md4State, const uint8 *pu8MessageBlock)
 
void MD5_Hash (tstrShaHashContext *pstrMD5Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void MD5_HashSW (tstrHash512Context *pstrMD5Context, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void MD5ProcessBlock (uint32 *pu32Md5State, const uint8 *pu8MessageBlock)
 
void SHA1_Hash (tstrShaHashContext *pstrSha1Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void SHA1_HashSW (tstrHash512Context *pstrSha1Context, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void SHA1ProcessBlock (uint32 *pu32Sha1State, const uint8 *pu8MessageBlock)
 
void SHA224_Hash (tstrShaHashContext *pstrSha224Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void SHA224_HashSW (tstrHash512Context *pstrSha224Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void SHA256_Hash (tstrShaHashContext *pstrSha256Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void SHA256_HashSW (tstrHash512Context *pstrSha256Context, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void SHA256ProcessBlock (uint32 *pu32Sha256State, const uint8 *pu8Data)
 
void SHA384_Hash (tstrShaHashContext *pstrSha384Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void SHA512_Hash (tstrShaHashContext *pstrSha512Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
 
void SHA512_HashSW (tstrHash512Context *pstrSha512Context, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest, uint8 u8IsSHA384)
 
void SHA512ProcessBlock (uint32 *pu32Sha512State, const uint8 *pu8Data)
 
void Sha_HashFinish (tstrHash512Context *pstrHashCxt, uint8 *pu8LengthPadding, uint32 u32TotalMessageLength)
 
void Sha_HashUpdate (tstrHash512Context *pstrHashCxt, uint8 *pu8Data, uint32 u32DataLength)
 

Variables

tstrHashInfo eastrTlsHashes []
 
const uint32 K_SHA1 [4]
 
static const uint32 K_SHA256 []
 
static const uint64 K_SHA512 [][2]
 
static const uint32 T_MD5 []
 

#define ADD_TWO_32BIT (   z,
  x,
 
)
Value:
(z)[1] = (x)[1]+ (y)[1]; \
(z)[0] = (x)[0] + (y)[0]; \
if((z)[1] < (y)[1]) \
((z)[0])++

Referenced by SHA512ProcessBlock().

#define F1 (   x,
  y,
 
)    (((x) & (y)) | (~(x) & (z)))
#define F2 (   x,
  y,
 
)    (((x) & (z)) | ((y) & ~(z)))
#define F3 (   x,
  y,
 
)    ((x) ^ (y) ^ (z))
#define F4 (   x,
  y,
 
)    (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
#define F5 (   x,
  y,
 
)    ((y) ^ ((x) | ~(z)))
#define GET_UINT64_BE (   n,
  b,
 
)
Value:
(n)[0] = ( (uint32) (b)[(i) ] << 24 ) \
| ( (uint32) (b)[(i) + 1] << 16 ) \
| ( (uint32) (b)[(i) + 2] << 8 ) \
| ( (uint32) (b)[(i) + 3] ); \
(n)[1] = ( (uint32) (b)[(i) + 4] << 24 ) \
| ( (uint32) (b)[(i) + 5] << 16 ) \
| ( (uint32) (b)[(i) + 6] << 8 ) \
| ( (uint32) (b)[(i) + 7] )
unsigned long uint32
Range of values between 0 to 4294967295.
Definition: nm_bsp.h:107

Referenced by SHA512ProcessBlock().

#define INT32_TO_INT64 (   z,
  x,
 
)    z = (((uint64)(x)<<32)|((uint64)((y) & 0xffffffff)))
#define MD4_F (   x,
  y,
 
)    F1(x,y,z)

Referenced by MD4ProcessBlock().

#define MD4_G (   x,
  y,
 
)    F4(x,y,z)

Referenced by MD4ProcessBlock().

#define MD4_H (   x,
  y,
 
)    F3(x,y,z)

Referenced by MD4ProcessBlock().

#define MD4_INERMEDIATE (   A,
  B,
  C,
  D,
  W,
  K,
 
)
Value:
{ \
W += A + K; \
W = SHA_ROTL(W, S); \
A = D;\
D = C; \
C = B; \
B = W; \
}
#define SHA_ROTL(x, n)
Definition: crypto.h:113

Referenced by MD4ProcessBlock().

#define MD4_SEC   OVERLAY_SEC1_API
#define MD5_F (   x,
  y,
 
)    F1(x,y,z)

Referenced by MD5ProcessBlock().

#define MD5_G (   x,
  y,
 
)    F2(x,y,z)

Referenced by MD5ProcessBlock().

#define MD5_H (   x,
  y,
 
)    F3(x,y,z)

Referenced by MD5ProcessBlock().

#define MD5_I (   x,
  y,
 
)    F5(x,y,z)

Referenced by MD5ProcessBlock().

#define MD5_INERMEDIATE (   A,
  B,
  C,
  D,
  W,
  K,
 
)
Value:
{ \
W += A + K; \
W = B + SHA_ROTL(W, S); \
A = D;\
D = C; \
C = B; \
B = W; \
}
#define SHA_ROTL(x, n)
Definition: crypto.h:113

Referenced by MD5ProcessBlock().

#define PUTU64_BE (   n,
  b,
 
)
Value:
{ \
(b)[(i) ] = (unsigned char) ( (n) >> 56 ); \
(b)[(i) + 1] = (unsigned char) ( (n) >> 48 ); \
(b)[(i) + 2] = (unsigned char) ( (n) >> 40 ); \
(b)[(i) + 3] = (unsigned char) ( (n) >> 32 ); \
(b)[(i) + 4] = (unsigned char) ( (n) >> 24 ); \
(b)[(i) + 5] = (unsigned char) ( (n) >> 16 ); \
(b)[(i) + 6] = (unsigned char) ( (n) >> 8 ); \
(b)[(i) + 7] = (unsigned char) ( (n) ); \
}
#define SHA1_CH (   x,
  y,
 
)    F1(x,y,z)

Referenced by SHA1ProcessBlock().

#define SHA1_INERMEDIATE (   A,
  B,
  C,
  D,
  E,
  W,
 
)
Value:
{ \
W += SHA_ROTL(A,5) + E + K; \
E = D; \
D = C; \
C = SHA_ROTL(B,30); \
B = A; \
A = W; \
}
#define SHA_ROTL(x, n)
Definition: crypto.h:113

Referenced by SHA1ProcessBlock().

#define SHA1_MAJ (   x,
  y,
 
)    F4(x,y,z)

Referenced by SHA1ProcessBlock().

#define SHA256_CAP_SIGMA0 (   x)    (SHA_ROTR(x, 2) ^ SHA_ROTR(x,13) ^ SHA_ROTR(x,22))

Referenced by SHA256ProcessBlock().

#define SHA256_CAP_SIGMA1 (   x)    (SHA_ROTR(x, 6) ^ SHA_ROTR(x,11) ^ SHA_ROTR(x,25))

Referenced by SHA256ProcessBlock().

#define SHA256_CH (   x,
  y,
 
)    (z ^ (x & (y ^ z)))

Referenced by SHA256ProcessBlock().

#define SHA256_MAJ (   x,
  y,
 
)    ((x & y) | (z & (x | y)))

Referenced by SHA256ProcessBlock().

#define SHA256_MSG_LENGTH   8
#define SHA256_SMALL_SIGMA0 (   x)    (SHA_ROTR(x, 7) ^ SHA_ROTR(x,18) ^ SHA_SHR(x, 3))

Referenced by SHA256ProcessBlock().

#define SHA256_SMALL_SIGMA1 (   x)    (SHA_ROTR(x,17) ^ SHA_ROTR(x,19) ^ SHA_SHR(x,10))

Referenced by SHA256ProcessBlock().

#define SHA512_CAP_SIGMA0 (   high,
  low 
)    (SHA_ROTR_64(high,low, 28) ^ SHA_ROTR_64(low,high,2) ^ SHA_ROTR_64(low,high,7))
#define SHA512_CAP_SIGMA1 (   high,
  low 
)    (SHA_ROTR_64(high,low, 14) ^ SHA_ROTR_64(high,low,18) ^ SHA_ROTR_64(low,high,9))
#define SHA512_CH_HIGH (   x,
  y,
 
)    (z[0] ^ (x[0] & (y[0] ^ z[0])))

Referenced by SHA512ProcessBlock().

#define SHA512_CH_LOW (   x,
  y,
 
)    (z[1] ^ (x[1] & (y[1] ^ z[1])))

Referenced by SHA512ProcessBlock().

#define SHA512_MAJ_HIGH (   x,
  y,
 
)    ((x[0] & y[0]) | (z[0] & (x[0] | y[0])))

Referenced by SHA512ProcessBlock().

#define SHA512_MAJ_LOW (   x,
  y,
 
)    ((x[1] & y[1]) | (z[1] & (x[1] | y[1])))

Referenced by SHA512ProcessBlock().

#define SHA512_MSG_LENGTH   16

Referenced by SHA512_HashSW().

#define SHA512_SMALL_SIGMA0 (   high,
  low 
)    (SHA_ROTR_64(high,low, 1) ^ SHA_ROTR_64(high,low,8) ^ SHA_SHR_64(high,low, 7))
#define SHA512_SMALL_SIGMA1 (   high,
  low 
)    (SHA_ROTR_64(high,low,19) ^ SHA_ROTR_64(low,high,29) ^ SHA_SHR_64(high,low,6))
#define SHA_PAD_BYTE   0x80

Referenced by Sha_HashFinish().

#define SHA_PARITY (   x,
  y,
 
)    F3(x,y,z)

Referenced by SHA1ProcessBlock().

#define UPDATE_SHA512_STATE (   state_high,
  state_low,
  temp_state,
  temp_var,
  var_high,
  var_low 
)
Value:
INT32_TO_INT64(temp_state, state_high, state_low);\
INT32_TO_INT64(temp_var, var_high, var_low );\
temp_state += temp_var;\
state_high = (uint32)((temp_state & 0xFFFFFFFF00000000) >> 32);\
state_low = (uint32)(temp_state & 0x00000000FFFFFFFF)
unsigned long uint32
Range of values between 0 to 4294967295.
Definition: nm_bsp.h:107
#define INT32_TO_INT64(z, x, y)
Definition: hash.c:159

void hmac_md5 ( uint8 pu8Data,
uint32  u32DataLength,
uint8 pu8Key,
uint32  u32KeyLength,
uint8 pu8Digest 
)
void hmac_sha1 ( uint8 pu8Key,
uint32  u32KeyLength,
uint8 pu8Data,
uint32  u32DataLength,
uint8 pu8Digest 
)
void HMAC_SHA256 ( uint8 pu8Data,
uint32  u32DataLength,
uint8 pu8Key,
uint32  u32KeyLength,
uint8 pu8Digest 
)
MD4_SEC void MD4ProcessBlock ( uint32 pu32Md4State,
const uint8 pu8MessageBlock 
)

References M2M_MEMCPY, MD4_F, MD4_G, MD4_H, MD4_INERMEDIATE, and NULL.

Referenced by MD4_Hash().

void MD5_Hash ( tstrShaHashContext pstrMD5Cxt,
uint8  u8Flags,
uint8 pu8Data,
uint32  u32DataLength,
uint8 pu8Digest 
)

References MD5_HASH_SW.

void MD5ProcessBlock ( uint32 pu32Md5State,
const uint8 pu8MessageBlock 
)

References M2M_MEMCPY, MD5_F, MD5_G, MD5_H, MD5_I, MD5_INERMEDIATE, and T_MD5.

Referenced by MD5_HashSW().

void SHA1_Hash ( tstrShaHashContext pstrSha1Cxt,
uint8  u8Flags,
uint8 pu8Data,
uint32  u32DataLength,
uint8 pu8Digest 
)

References SHA1_HASH_SW.

void SHA1ProcessBlock ( uint32 pu32Sha1State,
const uint8 pu8MessageBlock 
)
void SHA224_Hash ( tstrShaHashContext pstrSha224Cxt,
uint8  u8Flags,
uint8 pu8Data,
uint32  u32DataLength,
uint8 pu8Digest 
)

References SHA224_HASH_SW.

void SHA256_Hash ( tstrShaHashContext pstrSha256Cxt,
uint8  u8Flags,
uint8 pu8Data,
uint32  u32DataLength,
uint8 pu8Digest 
)

References SHA256_HASH_SW.

void SHA256ProcessBlock ( uint32 pu32Sha256State,
const uint8 pu8Data 
)
void SHA384_Hash ( tstrShaHashContext pstrSha384Cxt,
uint8  u8Flags,
uint8 pu8Data,
uint32  u32DataLength,
uint8 pu8Digest 
)

References SHA384_HASH_SW.

void SHA512_Hash ( tstrShaHashContext pstrSha512Cxt,
uint8  u8Flags,
uint8 pu8Data,
uint32  u32DataLength,
uint8 pu8Digest 
)

References SHA512_HASH_SW.

void SHA512ProcessBlock ( uint32 pu32Sha512State,
const uint8 pu8Data 
)

tstrHashInfo eastrTlsHashes[]
Initial value:
=
{
{NULL , 0 },
}
#define SHA224_DIGEST_SIZE
Definition: crypto.h:58
void MD5_Hash(tstrShaHashContext *pstrMD5Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
Definition: hash.c:1549
void SHA256_Hash(tstrShaHashContext *pstrSha256Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
Definition: hash.c:1634
#define SHA256_DIGEST_SIZE
Definition: crypto.h:59
void SHA512_Hash(tstrShaHashContext *pstrSha512Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
Definition: hash.c:1690
#define SHA384_DIGEST_SIZE
Definition: crypto.h:60
void SHA384_Hash(tstrShaHashContext *pstrSha384Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
Definition: hash.c:1662
void SHA1_Hash(tstrShaHashContext *pstrSha1Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
Definition: hash.c:1578
void SHA224_Hash(tstrShaHashContext *pstrSha224Cxt, uint8 u8Flags, uint8 *pu8Data, uint32 u32DataLength, uint8 *pu8Digest)
Definition: hash.c:1606
#define SHA1_DIGEST_SIZE
Definition: crypto.h:57
#define SHA512_BLOCK_SIZE
Definition: crypto.h:52
#define NULL
Definition: nm_bsp.h:64
#define SHA_BLOCK_SIZE
Definition: crypto.h:53
#define MD5_DIGEST_SIZE
Definition: crypto.h:56
#define SHA512_DIGEST_SIZE
Definition: crypto.h:61

Referenced by Cert_ComputeTBSCertHash().

const uint32 K_SHA1[4]
Initial value:
= {
0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6
}

Referenced by SHA1ProcessBlock().

const uint32 K_SHA256[]
static
Initial value:
= {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
}

Referenced by SHA256ProcessBlock().

const uint64 K_SHA512[][2]
static
Initial value:
= {
{0x428a2f98, 0xd728ae22}, {0x71374491, 0x23ef65cd}, {0xb5c0fbcf, 0xec4d3b2f}, {0xe9b5dba5, 0x8189dbbc}, {0x3956c25b, 0xf348b538},
{0x59f111f1, 0xb605d019}, {0x923f82a4, 0xaf194f9b}, {0xab1c5ed5, 0xda6d8118}, {0xd807aa98, 0xa3030242}, {0x12835b01, 0x45706fbe},
{0x243185be, 0x4ee4b28c}, {0x550c7dc3, 0xd5ffb4e2}, {0x72be5d74, 0xf27b896f}, {0x80deb1fe, 0x3b1696b1}, {0x9bdc06a7, 0x25c71235},
{0xc19bf174, 0xcf692694}, {0xe49b69c1, 0x9ef14ad2}, {0xefbe4786, 0x384f25e3}, {0x0fc19dc6, 0x8b8cd5b5}, {0x240ca1cc, 0x77ac9c65},
{0x2de92c6f, 0x592b0275}, {0x4a7484aa, 0x6ea6e483}, {0x5cb0a9dc, 0xbd41fbd4}, {0x76f988da, 0x831153b5}, {0x983e5152, 0xee66dfab},
{0xa831c66d, 0x2db43210}, {0xb00327c8, 0x98fb213f}, {0xbf597fc7, 0xbeef0ee4}, {0xc6e00bf3, 0x3da88fc2}, {0xd5a79147, 0x930aa725},
{0x06ca6351, 0xe003826f}, {0x14292967, 0x0a0e6e70}, {0x27b70a85, 0x46d22ffc}, {0x2e1b2138, 0x5c26c926}, {0x4d2c6dfc, 0x5ac42aed},
{0x53380d13, 0x9d95b3df}, {0x650a7354, 0x8baf63de}, {0x766a0abb, 0x3c77b2a8}, {0x81c2c92e, 0x47edaee6}, {0x92722c85, 0x1482353b},
{0xa2bfe8a1, 0x4cf10364}, {0xa81a664b, 0xbc423001}, {0xc24b8b70, 0xd0f89791}, {0xc76c51a3, 0x0654be30}, {0xd192e819, 0xd6ef5218},
{0xd6990624, 0x5565a910}, {0xf40e3585, 0x5771202a}, {0x106aa070, 0x32bbd1b8}, {0x19a4c116, 0xb8d2d0c8}, {0x1e376c08, 0x5141ab53},
{0x2748774c, 0xdf8eeb99}, {0x34b0bcb5, 0xe19b48a8}, {0x391c0cb3, 0xc5c95a63}, {0x4ed8aa4a, 0xe3418acb}, {0x5b9cca4f, 0x7763e373},
{0x682e6ff3, 0xd6b2b8a3}, {0x748f82ee, 0x5defb2fc}, {0x78a5636f, 0x43172f60}, {0x84c87814, 0xa1f0ab72}, {0x8cc70208, 0x1a6439ec},
{0x90befffa, 0x23631e28}, {0xa4506ceb, 0xde82bde9}, {0xbef9a3f7, 0xb2c67915}, {0xc67178f2, 0xe372532b}, {0xca273ece, 0xea26619c},
{0xd186b8c7, 0x21c0c207}, {0xeada7dd6, 0xcde0eb1e}, {0xf57d4f7f, 0xee6ed178}, {0x06f067aa, 0x72176fba}, {0x0a637dc5, 0xa2c898a6},
{0x113f9804, 0xbef90dae}, {0x1b710b35, 0x131c471b}, {0x28db77f5, 0x23047d84}, {0x32caab7b, 0x40c72493}, {0x3c9ebe0a, 0x15c9bebc},
{0x431d67c4, 0x9c100d4c}, {0x4cc5d4be, 0xcb3e42b6}, {0x597f299c, 0xfc657e2a}, {0x5fcb6fab, 0x3ad6faec}, {0x6c44198c, 0x4a475817}
}

Referenced by SHA512ProcessBlock().

const uint32 T_MD5[]
static
Initial value:
= {
0xD76AA478, 0xE8C7B756, 0x242070DB, 0xC1BDCEEE, 0xF57C0FAF, 0x4787C62A, 0xA8304613, 0xFD469501,
0x698098D8, 0x8B44F7AF, 0xFFFF5BB1, 0x895CD7BE, 0x6B901122, 0xFD987193, 0xA679438E, 0x49B40821,
0xF61E2562, 0xC040B340, 0x265E5A51, 0xE9B6C7AA, 0xD62F105D, 0x02441453, 0xD8A1E681, 0xE7D3FBC8,
0x21E1CDE6, 0xC33707D6, 0xF4D50D87, 0x455A14ED, 0xA9E3E905, 0xFCEFA3F8, 0x676F02D9, 0x8D2A4C8A,
0xFFFA3942, 0x8771F681, 0x6D9D6122, 0xFDE5380C, 0xA4BEEA44, 0x4BDECFA9, 0xF6BB4B60, 0xBEBFBC70,
0x289B7EC6, 0xEAA127FA, 0xD4EF3085, 0x04881D05, 0xD9D4D039, 0xE6DB99E5, 0x1FA27CF8, 0xC4AC5665,
0xF4292244, 0x432AFF97, 0xAB9423A7, 0xFC93A039, 0x655B59C3, 0x8F0CCC92, 0xFFEFF47D, 0x85845DD1,
0x6FA87E4F, 0xFE2CE6E0, 0xA3014314, 0x4E0811A1, 0xF7537E82, 0xBD3AF235, 0x2AD7D2BB, 0xEB86D391
}

Referenced by MD5ProcessBlock().