7#include "core/fdrm/fx_crypt_sha.h"
9#include "core/fxcrt/compiler_specific.h"
10#include "core/fxcrt/fx_memcpy_wrappers.h"
11#include "core/fxcrt/stl_util.h"
13#define SHA_GET_UINT32(n, b, i)
15 (n) = ((uint32_t)(b)[(i)] << 24
) | ((uint32_t)(b)[(i) + 1
] << 16
) |
16 ((uint32_t)(b)[(i) + 2
] << 8
) | ((uint32_t)(b)[(i) + 3
]);
19#define SHA_PUT_UINT32(n, b, i)
21 (b)[(i)] = (uint8_t)((n) >> 24
);
22 (b)[(i) + 1
] = (uint8_t)((n) >> 16
);
23 (b)[(i) + 2
] = (uint8_t)((n) >> 8
);
24 (b)[(i) + 3
] = (uint8_t)((n));
27#define SHA_GET_UINT64(n, b, i)
29 (n) = ((uint64_t)(b)[(i)] << 56
) | ((uint64_t)(b)[(i) + 1
] << 48
) |
30 ((uint64_t)(b)[(i) + 2
] << 40
) | ((uint64_t)(b)[(i) + 3
] << 32
) |
31 ((uint64_t)(b)[(i) + 4
] << 24
) | ((uint64_t)(b)[(i) + 5
] << 16
) |
32 ((uint64_t)(b)[(i) + 6
] << 8
) | ((uint64_t)(b)[(i) + 7
]);
35#define SHA_PUT_UINT64(n, b, i)
37 (b)[(i)] = (uint8_t)((n) >> 56
);
38 (b)[(i) + 1
] = (uint8_t)((n) >> 48
);
39 (b)[(i) + 2
] = (uint8_t)((n) >> 40
);
40 (b)[(i) + 3
] = (uint8_t)((n) >> 32
);
41 (b)[(i) + 4
] = (uint8_t)((n) >> 24
);
42 (b)[(i) + 5
] = (uint8_t)((n) >> 16
);
43 (b)[(i) + 6
] = (uint8_t)((n) >> 8
);
44 (b)[(i) + 7
] = (uint8_t)((n));
47#define SHA384_F0(x, y, z) ((x & y) | (z & (x | y)))
48#define SHA384_F1(x, y, z) (z ^ (x & (y ^ z)))
49#define SHA384_SHR(x, n) (x >> n)
50#define SHA384_ROTR(x, n) (SHA384_SHR(x, n) | x << (64
- n))
58#define SHA384_P(a, b, c, d, e, f, g, h, x, K)
68#define rol(x, y) (((x) << (y)) | (((uint32_t)x) >> (32
- y)))
69#define SHR(x, n) ((x & 0xFFFFFFFF
) >> n)
70#define ROTR(x, n) (SHR(x, n) | (x << (32
- n)))
75#define F0(x, y, z) ((x & y) | (z & (x | y)))
76#define F1(x, y, z) (z ^ (x & (y ^ z)))
79#define PS(a, b, c, d, e, f, g, h, x, K)
81 uint32_t temp1 = h + S3(e) + F1(e, f, g) + K + x;
82 uint32_t temp2 = S2(a) + F0(a, b, c);
89void SHA_Core_Init(pdfium::span<uint32_t, 5> h) {
97void SHATransform(pdfium::span<uint32_t> digest, pdfium::span<uint32_t> block) {
98 std::array<uint32_t, 80> w;
100 for (t = 0; t < 16; t++) {
103 for (t = 16; t < 80; t++) {
104 uint32_t tmp = w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16];
107 uint32_t a = digest[0];
108 uint32_t b = digest[1];
109 uint32_t c = digest[2];
110 uint32_t d = digest[3];
111 uint32_t e = digest[4];
112 for (t = 0; t < 20; t++) {
113 uint32_t tmp =
rol(a, 5) + ((b & c) | (d & ~b)) + e + w[t] + 0x5a827999;
120 for (t = 20; t < 40; t++) {
121 uint32_t tmp =
rol(a, 5) + (b ^ c ^ d) + e + w[t] + 0x6ed9eba1;
128 for (t = 40; t < 60; t++) {
130 rol(a, 5) + ((b & c) | (b & d) | (c & d)) + e + w[t] + 0x8f1bbcdc;
137 for (t = 60; t < 80; t++) {
138 uint32_t tmp =
rol(a, 5) + (b ^ c ^ d) + e + w[t] + 0xca62c1d6;
153 pdfium::span<
const uint8_t, 64> data) {
172 uint32_t A =
static_cast<uint32_t>(ctx->state[0]);
173 uint32_t B =
static_cast<uint32_t>(ctx->state[1]);
174 uint32_t C =
static_cast<uint32_t>(ctx->state[2]);
175 uint32_t D =
static_cast<uint32_t>(ctx->state[3]);
176 uint32_t E =
static_cast<uint32_t>(ctx->state[4]);
177 uint32_t F =
static_cast<uint32_t>(ctx->state[5]);
178 uint32_t G =
static_cast<uint32_t>(ctx->state[6]);
179 uint32_t H =
static_cast<uint32_t>(ctx->state[7]);
180 PS(A, B, C, D, E, F, G, H, W[0], 0x428A2F98);
181 PS(H, A, B, C, D, E, F, G, W[1], 0x71374491);
182 PS(G, H, A, B, C, D, E, F, W[2], 0xB5C0FBCF);
183 PS(F, G, H, A, B, C, D, E, W[3], 0xE9B5DBA5);
184 PS(E, F, G, H, A, B, C, D, W[4], 0x3956C25B);
185 PS(D, E, F, G, H, A, B, C, W[5], 0x59F111F1);
186 PS(C, D, E, F, G, H, A, B, W[6], 0x923F82A4);
187 PS(B, C, D, E, F, G, H, A, W[7], 0xAB1C5ED5);
188 PS(A, B, C, D, E, F, G, H, W[8], 0xD807AA98);
189 PS(H, A, B, C, D, E, F, G, W[9], 0x12835B01);
190 PS(G, H, A, B, C, D, E, F, W[10], 0x243185BE);
191 PS(F, G, H, A, B, C, D, E, W[11], 0x550C7DC3);
192 PS(E, F, G, H, A, B, C, D, W[12], 0x72BE5D74);
193 PS(D, E, F, G, H, A, B, C, W[13], 0x80DEB1FE);
194 PS(C, D, E, F, G, H, A, B, W[14], 0x9BDC06A7);
195 PS(B, C, D, E, F, G, H, A, W[15], 0xC19BF174);
196 PS(A, B, C, D, E, F, G, H,
R(16), 0xE49B69C1);
197 PS(H, A, B, C, D, E, F, G,
R(17), 0xEFBE4786);
198 PS(G, H, A, B, C, D, E, F,
R(18), 0x0FC19DC6);
199 PS(F, G, H, A, B, C, D, E,
R(19), 0x240CA1CC);
200 PS(E, F, G, H, A, B, C, D,
R(20), 0x2DE92C6F);
201 PS(D, E, F, G, H, A, B, C,
R(21), 0x4A7484AA);
202 PS(C, D, E, F, G, H, A, B,
R(22), 0x5CB0A9DC);
203 PS(B, C, D, E, F, G, H, A,
R(23), 0x76F988DA);
204 PS(A, B, C, D, E, F, G, H,
R(24), 0x983E5152);
205 PS(H, A, B, C, D, E, F, G,
R(25), 0xA831C66D);
206 PS(G, H, A, B, C, D, E, F,
R(26), 0xB00327C8);
207 PS(F, G, H, A, B, C, D, E,
R(27), 0xBF597FC7);
208 PS(E, F, G, H, A, B, C, D,
R(28), 0xC6E00BF3);
209 PS(D, E, F, G, H, A, B, C,
R(29), 0xD5A79147);
210 PS(C, D, E, F, G, H, A, B,
R(30), 0x06CA6351);
211 PS(B, C, D, E, F, G, H, A,
R(31), 0x14292967);
212 PS(A, B, C, D, E, F, G, H,
R(32), 0x27B70A85);
213 PS(H, A, B, C, D, E, F, G,
R(33), 0x2E1B2138);
214 PS(G, H, A, B, C, D, E, F,
R(34), 0x4D2C6DFC);
215 PS(F, G, H, A, B, C, D, E,
R(35), 0x53380D13);
216 PS(E, F, G, H, A, B, C, D,
R(36), 0x650A7354);
217 PS(D, E, F, G, H, A, B, C,
R(37), 0x766A0ABB);
218 PS(C, D, E, F, G, H, A, B,
R(38), 0x81C2C92E);
219 PS(B, C, D, E, F, G, H, A,
R(39), 0x92722C85);
220 PS(A, B, C, D, E, F, G, H,
R(40), 0xA2BFE8A1);
221 PS(H, A, B, C, D, E, F, G,
R(41), 0xA81A664B);
222 PS(G, H, A, B, C, D, E, F,
R(42), 0xC24B8B70);
223 PS(F, G, H, A, B, C, D, E,
R(43), 0xC76C51A3);
224 PS(E, F, G, H, A, B, C, D,
R(44), 0xD192E819);
225 PS(D, E, F, G, H, A, B, C,
R(45), 0xD6990624);
226 PS(C, D, E, F, G, H, A, B,
R(46), 0xF40E3585);
227 PS(B, C, D, E, F, G, H, A,
R(47), 0x106AA070);
228 PS(A, B, C, D, E, F, G, H,
R(48), 0x19A4C116);
229 PS(H, A, B, C, D, E, F, G,
R(49), 0x1E376C08);
230 PS(G, H, A, B, C, D, E, F,
R(50), 0x2748774C);
231 PS(F, G, H, A, B, C, D, E,
R(51), 0x34B0BCB5);
232 PS(E, F, G, H, A, B, C, D,
R(52), 0x391C0CB3);
233 PS(D, E, F, G, H, A, B, C,
R(53), 0x4ED8AA4A);
234 PS(C, D, E, F, G, H, A, B,
R(54), 0x5B9CCA4F);
235 PS(B, C, D, E, F, G, H, A,
R(55), 0x682E6FF3);
236 PS(A, B, C, D, E, F, G, H,
R(56), 0x748F82EE);
237 PS(H, A, B, C, D, E, F, G,
R(57), 0x78A5636F);
238 PS(G, H, A, B, C, D, E, F,
R(58), 0x84C87814);
239 PS(F, G, H, A, B, C, D, E,
R(59), 0x8CC70208);
240 PS(E, F, G, H, A, B, C, D,
R(60), 0x90BEFFFA);
241 PS(D, E, F, G, H, A, B, C,
R(61), 0xA4506CEB);
242 PS(C, D, E, F, G, H, A, B,
R(62), 0xBEF9A3F7);
243 PS(B, C, D, E, F, G, H, A,
R(63), 0xC67178F2);
254const uint8_t kSha256Padding[64] = {
255 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
259const uint8_t kSha384Padding[128] = {
260 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
262 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
263 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
264 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
265 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
268constexpr auto constants =
fxcrt::ToArray<
const uint64_t>({
269 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL,
270 0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
271 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL,
272 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
273 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL,
274 0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
275 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL,
276 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
277 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL,
278 0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
279 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL,
280 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
281 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL,
282 0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
283 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL,
284 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
285 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL,
286 0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
287 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL,
288 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
289 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL,
290 0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
291 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL,
292 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
293 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL,
294 0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
295 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL,
299 pdfium::span<
const uint8_t, 128> data) {
300 std::array<uint64_t, 80> W;
317 uint64_t A = ctx->state[0];
318 uint64_t B = ctx->state[1];
319 uint64_t C = ctx->state[2];
320 uint64_t D = ctx->state[3];
321 uint64_t E = ctx->state[4];
322 uint64_t F = ctx->state[5];
323 uint64_t G = ctx->state[6];
324 uint64_t H = ctx->state[7];
325 for (
int i = 0; i < 10; ++i) {
329 temp[1] = W[i * 8 + 1];
330 temp[2] = W[i * 8 + 2];
331 temp[3] = W[i * 8 + 3];
332 temp[4] = W[i * 8 + 4];
333 temp[5] = W[i * 8 + 5];
334 temp[6] = W[i * 8 + 6];
335 temp[7] = W[i * 8 + 7];
346 SHA384_P(A, B, C, D, E, F, G, H, temp[0], constants[i * 8]);
347 SHA384_P(H, A, B, C, D, E, F, G, temp[1], constants[i * 8 + 1]);
348 SHA384_P(G, H, A, B, C, D, E, F, temp[2], constants[i * 8 + 2]);
349 SHA384_P(F, G, H, A, B, C, D, E, temp[3], constants[i * 8 + 3]);
350 SHA384_P(E, F, G, H, A, B, C, D, temp[4], constants[i * 8 + 4]);
351 SHA384_P(D, E, F, G, H, A, B, C, temp[5], constants[i * 8 + 5]);
352 SHA384_P(C, D, E, F, G, H, A, B, temp[6], constants[i * 8 + 6]);
353 SHA384_P(B, C, D, E, F, G, H, A, temp[7], constants[i * 8 + 7]);
368 SHA_Core_Init(context->h);
374 pdfium::span<
const uint8_t> data) {
375 const auto block_span =
pdfium::make_span(context->block);
382 std::array<uint32_t, 16> wordblock;
383 while (data.size() >= 64 - context
->blkused) {
386 data = data.subspan(64 - context
->blkused);
387 for (
int i = 0; i < 16; i++) {
388 wordblock[i] = (((uint32_t)context->block[i * 4 + 0]) << 24) |
389 (((uint32_t)context->block[i * 4 + 1]) << 16) |
390 (((uint32_t)context->block[i * 4 + 2]) << 8) |
391 (((uint32_t)context->block[i * 4 + 3]) << 0);
393 SHATransform(context->h, wordblock);
396 fxcrt::Copy(data, block_span);
397 context
->blkused =
static_cast<uint32_t>(data.size());
401 pdfium::span<uint8_t, 20> digest) {
403 std::array<uint8_t, 64> c;
412 CRYPT_SHA1Update(context,
pdfium::make_span(c).first(pad));
413 c[0] = (total_bits >> 56) & 0xFF;
414 c[1] = (total_bits >> 48) & 0xFF;
415 c[2] = (total_bits >> 40) & 0xFF;
416 c[3] = (total_bits >> 32) & 0xFF;
417 c[4] = (total_bits >> 24) & 0xFF;
418 c[5] = (total_bits >> 16) & 0xFF;
419 c[6] = (total_bits >> 8) & 0xFF;
420 c[7] = (total_bits >> 0) & 0xFF;
421 CRYPT_SHA1Update(context, pdfium::make_span(c).first<8u>());
422 for (
int i = 0; i < 5; i++) {
423 digest[i * 4] = (context->h[i] >> 24) & 0xFF;
424 digest[i * 4 + 1] = (context->h[i] >> 16) & 0xFF;
425 digest[i * 4 + 2] = (context->h[i] >> 8) & 0xFF;
426 digest[i * 4 + 3] = (context->h[i]) & 0xFF;
433 CRYPT_SHA1Update(&s, data);
435 DataVector<uint8_t> digest(20);
436 CRYPT_SHA1Finish(&s, digest);
442 context->state[0] = 0x6A09E667;
443 context->state[1] = 0xBB67AE85;
444 context->state[2] = 0x3C6EF372;
445 context->state[3] = 0xA54FF53A;
446 context->state[4] = 0x510E527F;
447 context->state[5] = 0x9B05688C;
448 context->state[6] = 0x1F83D9AB;
449 context->state[7] = 0x5BE0CD19;
454 pdfium::span<
const uint8_t> data) {
460 uint32_t fill = 64 - left;
462 if (left && data.size() >= fill) {
463 fxcrt::Copy(data.first(fill), buffer_span.subspan(left));
464 sha256_process(context, buffer_span);
465 data = data.subspan(fill);
468 while (data.size() >= 64) {
469 sha256_process(context, data.first(64u));
470 data = data.subspan(64u);
473 fxcrt::Copy(data, buffer_span.subspan(left));
478 pdfium::span<uint8_t, 32> digest) {
483 uint32_t padn = (last < 56) ? (56 - last) : (120 - last);
484 CRYPT_SHA256Update(context, pdfium::span(kSha256Padding).first(padn));
485 CRYPT_SHA256Update(context, msglen);
499 CRYPT_SHA256Update(&ctx, data);
501 DataVector<uint8_t> digest(32);
502 CRYPT_SHA256Finish(&ctx, digest);
508 context->state[0] = 0xcbbb9d5dc1059ed8ULL;
509 context->state[1] = 0x629a292a367cd507ULL;
510 context->state[2] = 0x9159015a3070dd17ULL;
511 context->state[3] = 0x152fecd8f70e5939ULL;
512 context->state[4] = 0x67332667ffc00b31ULL;
513 context->state[5] = 0x8eb44a8768581511ULL;
514 context->state[6] = 0xdb0c2e0d64f98fa7ULL;
515 context->state[7] = 0x47b5481dbefa4fa4ULL;
520 pdfium::span<
const uint8_t> data) {
526 uint32_t fill = 128 - left;
528 if (left && data.size() >= fill) {
529 fxcrt::Copy(data.first(fill), buffer_span.subspan(left));
530 sha384_process(context, buffer_span);
531 data = data.subspan(fill);
534 while (data.size() >= 128) {
535 sha384_process(context, data);
536 data = data.subspan(128);
539 fxcrt::Copy(data, buffer_span.subspan(left));
544 pdfium::span<uint8_t, 48> digest) {
550 uint32_t padn = (last < 112) ? (112 - last) : (240 - last);
551 CRYPT_SHA384Update(context,
pdfium::make_span(kSha384Padding).first(padn));
552 CRYPT_SHA384Update(context, msglen);
564 CRYPT_SHA384Update(&context, data);
566 DataVector<uint8_t> digest(48);
567 CRYPT_SHA384Finish(&context, digest);
573 context->state[0] = 0x6a09e667f3bcc908ULL;
574 context->state[1] = 0xbb67ae8584caa73bULL;
575 context->state[2] = 0x3c6ef372fe94f82bULL;
576 context->state[3] = 0xa54ff53a5f1d36f1ULL;
577 context->state[4] = 0x510e527fade682d1ULL;
578 context->state[5] = 0x9b05688c2b3e6c1fULL;
579 context->state[6] = 0x1f83d9abfb41bd6bULL;
580 context->state[7] = 0x5be0cd19137e2179ULL;
585 pdfium::span<
const uint8_t> data) {
586 CRYPT_SHA384Update(context, data);
590 pdfium::span<uint8_t, 64> digest) {
596 uint32_t padn = (last < 112) ? (112 - last) : (240 - last);
597 CRYPT_SHA512Update(context,
pdfium::make_span(kSha384Padding).first(padn));
598 CRYPT_SHA512Update(context, msglen);
612 CRYPT_SHA512Update(&context, data);
614 DataVector<uint8_t> digest(64);
615 CRYPT_SHA512Finish(&context, digest);
#define UNSAFE_BUFFERS(...)
void CRYPT_SHA512Update(CRYPT_sha2_context *context, pdfium::span< const uint8_t > data)
#define SHA_PUT_UINT64(n, b, i)
void CRYPT_SHA384Update(CRYPT_sha2_context *context, pdfium::span< const uint8_t > data)
DataVector< uint8_t > CRYPT_SHA256Generate(pdfium::span< const uint8_t > data)
void CRYPT_SHA1Finish(CRYPT_sha1_context *context, pdfium::span< uint8_t, 20 > digest)
#define SHA384_F0(x, y, z)
void CRYPT_SHA1Update(CRYPT_sha1_context *context, pdfium::span< const uint8_t > data)
#define SHA_GET_UINT32(n, b, i)
#define SHA_PUT_UINT32(n, b, i)
#define SHA384_P(a, b, c, d, e, f, g, h, x, K)
void CRYPT_SHA512Finish(CRYPT_sha2_context *context, pdfium::span< uint8_t, 64 > digest)
DataVector< uint8_t > CRYPT_SHA384Generate(pdfium::span< const uint8_t > data)
void CRYPT_SHA384Start(CRYPT_sha2_context *context)
void CRYPT_SHA384Finish(CRYPT_sha2_context *context, pdfium::span< uint8_t, 48 > digest)
#define SHA384_F1(x, y, z)
#define PS(a, b, c, d, e, f, g, h, x, K)
void CRYPT_SHA512Start(CRYPT_sha2_context *context)
DataVector< uint8_t > CRYPT_SHA1Generate(pdfium::span< const uint8_t > data)
void CRYPT_SHA256Start(CRYPT_sha2_context *context)
#define SHA384_ROTR(x, n)
DataVector< uint8_t > CRYPT_SHA512Generate(pdfium::span< const uint8_t > data)
void CRYPT_SHA1Start(CRYPT_sha1_context *context)
void CRYPT_SHA256Finish(CRYPT_sha2_context *context, pdfium::span< uint8_t, 32 > digest)
#define SHA_GET_UINT64(n, b, i)
void CRYPT_SHA256Update(CRYPT_sha2_context *context, pdfium::span< const uint8_t > data)