42 #define WEAK_ALIASING 0
88 #define LITTLE_ENDIAN 1234
89 #define BIG_ENDIAN 4321
90 #define BYTE_ORDER LITTLE_ENDIAN
93 #if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN)
94 #warning Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN
95 #define BYTE_ORDER BIG_ENDIAN
100 #define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8)
101 #define SHA384_SHORT_BLOCK_LENGTH (SHA384_BLOCK_LENGTH - 16)
102 #define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16)
105 #if BYTE_ORDER == LITTLE_ENDIAN
106 #define REVERSE32(w, x) \
109 tmp = (tmp >> 16) | (tmp << 16); \
110 (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \
112 #define REVERSE64(w, x) \
115 tmp = (tmp >> 32) | (tmp << 32); \
116 tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \
117 ((tmp & 0x00ff00ff00ff00ffULL) << 8); \
118 (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
119 ((tmp & 0x0000ffff0000ffffULL) << 16); \
128 #define ADDINC128(w, n) \
130 (w)[0] += (ut64)(n); \
131 if ((w)[0] < (n)) { \
146 #define R(b, x) ((x) >> (b))
148 #define S32(b, x) (((x) >> (b)) | ((x) << (32 - (b))))
150 #define S64(b, x) (((x) >> (b)) | ((x) << (64 - (b))))
153 #define Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z)))
154 #define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
157 #define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x)))
158 #define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x)))
159 #define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3, (x)))
160 #define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x)))
163 #define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))
164 #define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))
165 #define sigma0_512(x) (S64(1, (x)) ^ S64(8, (x)) ^ R(7, (x)))
166 #define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R(6, (x)))
180 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
181 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
182 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
183 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
184 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
185 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
186 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
187 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
188 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
189 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
190 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
191 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
192 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
193 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
194 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
195 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
212 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
213 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
214 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
215 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
216 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
217 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
218 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
219 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
220 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
221 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
222 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
223 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
224 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
225 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
226 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
227 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
228 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
229 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
230 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
231 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
232 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
233 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
234 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
235 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
236 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
237 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
238 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
239 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
240 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
241 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
242 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
243 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
244 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
245 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
246 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
247 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
248 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
249 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
250 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
251 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
256 0xcbbb9d5dc1059ed8ULL,
257 0x629a292a367cd507ULL,
258 0x9159015a3070dd17ULL,
259 0x152fecd8f70e5939ULL,
260 0x67332667ffc00b31ULL,
261 0x8eb44a8768581511ULL,
262 0xdb0c2e0d64f98fa7ULL,
263 0x47b5481dbefa4fa4ULL
268 0x6a09e667f3bcc908ULL,
269 0xbb67ae8584caa73bULL,
270 0x3c6ef372fe94f82bULL,
271 0xa54ff53a5f1d36f1ULL,
272 0x510e527fade682d1ULL,
273 0x9b05688c2b3e6c1fULL,
274 0x1f83d9abfb41bd6bULL,
275 0x5be0cd19137e2179ULL
294 #ifdef SHA2_UNROLL_TRANSFORM
298 #if BYTE_ORDER == LITTLE_ENDIAN
300 #define ROUND256_0_TO_15(a, b, c, d, e, f, g, h) \
301 REVERSE32(*data++, W256[j]); \
302 T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
305 (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
310 #define ROUND256_0_TO_15(a, b, c, d, e, f, g, h) \
311 T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
312 K256[j] + (W256[j] = *data++); \
314 (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
319 #define ROUND256(a, b, c, d, e, f, g, h) \
320 s0 = W256[(j + 1) & 0x0f]; \
321 s0 = sigma0_256(s0); \
322 s1 = W256[(j + 14) & 0x0f]; \
323 s1 = sigma1_256(s1); \
324 T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \
325 (W256[j & 0x0f] += s1 + W256[(j + 9) & 0x0f] + s0); \
327 (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
350 ROUND256_0_TO_15(
a,
b,
c,
d,
e,
f,
g,
h);
351 ROUND256_0_TO_15(
h,
a,
b,
c,
d,
e,
f,
g);
352 ROUND256_0_TO_15(
g,
h,
a,
b,
c,
d,
e,
f);
353 ROUND256_0_TO_15(
f,
g,
h,
a,
b,
c,
d,
e);
354 ROUND256_0_TO_15(
e,
f,
g,
h,
a,
b,
c,
d);
355 ROUND256_0_TO_15(
d,
e,
f,
g,
h,
a,
b,
c);
356 ROUND256_0_TO_15(
c,
d,
e,
f,
g,
h,
a,
b);
357 ROUND256_0_TO_15(
b,
c,
d,
e,
f,
g,
h,
a);
428 s0 = W256[(j + 1) & 0x0f];
430 s1 = W256[(j + 14) & 0x0f];
435 (W256[j & 0x0f] +=
s1 + W256[(j + 9) & 0x0f] +
s0);
463 unsigned int freespace, usedspace;
475 if (
len >= freespace) {
478 context->bitcount += freespace << 3;
505 unsigned int usedspace;
513 if (digest != (
ut8 *)0) {
515 #if BYTE_ORDER == LITTLE_ENDIAN
556 #if BYTE_ORDER == LITTLE_ENDIAN
560 for (j = 0; j < 8; j++) {
615 #ifdef SHA2_UNROLL_TRANSFORM
618 #if BYTE_ORDER == LITTLE_ENDIAN
620 #define ROUND512_0_TO_15(a, b, c, d, e, f, g, h) \
621 REVERSE64(*data++, W512[j]); \
622 T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
625 (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \
630 #define ROUND512_0_TO_15(a, b, c, d, e, f, g, h) \
631 T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
632 K512[j] + (W512[j] = *data++); \
634 (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
639 #define ROUND512(a, b, c, d, e, f, g, h) \
640 s0 = W512[(j + 1) & 0x0f]; \
641 s0 = sigma0_512(s0); \
642 s1 = W512[(j + 14) & 0x0f]; \
643 s1 = sigma1_512(s1); \
644 T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \
645 (W512[j & 0x0f] += s1 + W512[(j + 9) & 0x0f] + s0); \
647 (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
667 ROUND512_0_TO_15(
a,
b,
c,
d,
e,
f,
g,
h);
668 ROUND512_0_TO_15(
h,
a,
b,
c,
d,
e,
f,
g);
669 ROUND512_0_TO_15(
g,
h,
a,
b,
c,
d,
e,
f);
670 ROUND512_0_TO_15(
f,
g,
h,
a,
b,
c,
d,
e);
671 ROUND512_0_TO_15(
e,
f,
g,
h,
a,
b,
c,
d);
672 ROUND512_0_TO_15(
d,
e,
f,
g,
h,
a,
b,
c);
673 ROUND512_0_TO_15(
c,
d,
e,
f,
g,
h,
a,
b);
674 ROUND512_0_TO_15(
b,
c,
d,
e,
f,
g,
h,
a);
743 s0 = W512[(j + 1) & 0x0f];
745 s1 = W512[(j + 14) & 0x0f];
750 (W512[j & 0x0f] +=
s1 + W512[(j + 9) & 0x0f] +
s0);
778 unsigned int freespace, usedspace;
795 if (
len >= freespace) {
824 unsigned int usedspace;
827 #if BYTE_ORDER == LITTLE_ENDIAN
882 if (digest != (
ut8 *)0) {
886 #if BYTE_ORDER == LITTLE_ENDIAN
890 for (j = 0; j < 8; j++) {
913 if (
buffer != (
char *)0) {
960 if (digest != (
ut8 *)0) {
964 #if BYTE_ORDER == LITTLE_ENDIAN
968 for (j = 0; j < 6; j++) {
991 if (
buffer != (
char *)0) {
return memset(p, 0, total)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
RZ_API void rz_mem_memzero(void *, size_t)
void SHA384_Final(ut8 digest[], RZ_SHA384_CTX *context)
char * SHA384_Data(const ut8 *data, size_t len, char digest[SHA384_DIGEST_STRING_LENGTH])
char * SHA256_Data(const ut8 *data, size_t len, char digest[SHA256_DIGEST_STRING_LENGTH])
void SHA256_Update(RZ_SHA256_CTX *context, const ut8 *data, size_t len)
void SHA512_Last(RZ_SHA512_CTX *)
char * SHA512_End(RZ_SHA512_CTX *context, char buffer[])
static const ut32 K256[64]
static const char * sha2_hex_digits
static const ut64 sha384_initial_hash_value[8]
void SHA256_Final(ut8 *digest, RZ_SHA256_CTX *context)
void SHA384_Init(RZ_SHA384_CTX *context)
void SHA256_Init(RZ_SHA256_CTX *context)
static const ut64 sha512_initial_hash_value[8]
void SHA512_Transform(RZ_SHA512_CTX *, const ut64 *)
void SHA512_Update(RZ_SHA512_CTX *context, const ut8 *data, size_t len)
void SHA512_Init(RZ_SHA512_CTX *context)
#define SHA512_SHORT_BLOCK_LENGTH
void SHA512_Final(ut8 digest[], RZ_SHA512_CTX *context)
char * SHA256_End(RZ_SHA256_CTX *context, char buffer[])
void SHA384_Update(RZ_SHA384_CTX *context, const ut8 *data, size_t len)
#define SHA256_SHORT_BLOCK_LENGTH
static const ut64 K512[80]
char * SHA512_Data(const ut8 *data, size_t len, char digest[SHA512_DIGEST_STRING_LENGTH])
char * SHA384_End(RZ_SHA384_CTX *context, char buffer[])
void SHA256_Transform(RZ_SHA256_CTX *, const ut32 *)
static const ut32 sha256_initial_hash_value[8]
#define SHA256_DIGEST_STRING_LENGTH
#define SHA512_DIGEST_LENGTH
#define SHA384_DIGEST_STRING_LENGTH
#define SHA384_DIGEST_LENGTH
#define SHA384_BLOCK_LENGTH
#define SHA512_BLOCK_LENGTH
#define SHA512_DIGEST_STRING_LENGTH
#define SHA256_DIGEST_LENGTH
#define SHA256_BLOCK_LENGTH
zip_uint8_t buffer[BUFSIZE]
ut64(WINAPI *w32_GetEnabledXStateFeatures)()