Chromium Code Reviews

Side by Side Diff: core/fdrm/crypto/fx_crypt_sha.cpp

Issue 1861403002: Rename FX_SAFE_DWORD to FX_SAFE_UINT32 (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
« no previous file with comments | « core/fdrm/crypto/fx_crypt.cpp ('k') | core/fpdfapi/fpdf_page/fpdf_page_func.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "core/fdrm/crypto/include/fx_crypt.h" 7 #include "core/fdrm/crypto/include/fx_crypt.h"
8 8
9 #ifdef __cplusplus 9 #ifdef __cplusplus
10 extern "C" { 10 extern "C" {
(...skipping 141 matching lines...)
152 SHA_State s; 152 SHA_State s;
153 CRYPT_SHA1Start(&s); 153 CRYPT_SHA1Start(&s);
154 CRYPT_SHA1Update(&s, data, size); 154 CRYPT_SHA1Update(&s, data, size);
155 CRYPT_SHA1Finish(&s, digest); 155 CRYPT_SHA1Finish(&s, digest);
156 } 156 }
157 typedef struct { 157 typedef struct {
158 uint32_t total[2]; 158 uint32_t total[2];
159 uint32_t state[8]; 159 uint32_t state[8];
160 uint8_t buffer[64]; 160 uint8_t buffer[64];
161 } sha256_context; 161 } sha256_context;
162 #define GET_FX_DWORD(n, b, i) \ 162 #define GET_UINT32(n, b, i) \
163 { \ 163 { \
164 (n) = ((uint32_t)(b)[(i)] << 24) | ((uint32_t)(b)[(i) + 1] << 16) | \ 164 (n) = ((uint32_t)(b)[(i)] << 24) | ((uint32_t)(b)[(i) + 1] << 16) | \
165 ((uint32_t)(b)[(i) + 2] << 8) | ((uint32_t)(b)[(i) + 3]); \ 165 ((uint32_t)(b)[(i) + 2] << 8) | ((uint32_t)(b)[(i) + 3]); \
166 } 166 }
167 #define PUT_FX_DWORD(n, b, i) \ 167 #define PUT_UINT32(n, b, i) \
168 { \ 168 { \
169 (b)[(i)] = (uint8_t)((n) >> 24); \ 169 (b)[(i)] = (uint8_t)((n) >> 24); \
170 (b)[(i) + 1] = (uint8_t)((n) >> 16); \ 170 (b)[(i) + 1] = (uint8_t)((n) >> 16); \
171 (b)[(i) + 2] = (uint8_t)((n) >> 8); \ 171 (b)[(i) + 2] = (uint8_t)((n) >> 8); \
172 (b)[(i) + 3] = (uint8_t)((n)); \ 172 (b)[(i) + 3] = (uint8_t)((n)); \
173 } 173 }
174 void CRYPT_SHA256Start(void* context) { 174 void CRYPT_SHA256Start(void* context) {
175 sha256_context* ctx = (sha256_context*)context; 175 sha256_context* ctx = (sha256_context*)context;
176 ctx->total[0] = 0; 176 ctx->total[0] = 0;
177 ctx->total[1] = 0; 177 ctx->total[1] = 0;
178 ctx->state[0] = 0x6A09E667; 178 ctx->state[0] = 0x6A09E667;
179 ctx->state[1] = 0xBB67AE85; 179 ctx->state[1] = 0xBB67AE85;
180 ctx->state[2] = 0x3C6EF372; 180 ctx->state[2] = 0x3C6EF372;
181 ctx->state[3] = 0xA54FF53A; 181 ctx->state[3] = 0xA54FF53A;
182 ctx->state[4] = 0x510E527F; 182 ctx->state[4] = 0x510E527F;
183 ctx->state[5] = 0x9B05688C; 183 ctx->state[5] = 0x9B05688C;
184 ctx->state[6] = 0x1F83D9AB; 184 ctx->state[6] = 0x1F83D9AB;
185 ctx->state[7] = 0x5BE0CD19; 185 ctx->state[7] = 0x5BE0CD19;
186 } 186 }
187 static void sha256_process(sha256_context* ctx, const uint8_t data[64]) { 187 static void sha256_process(sha256_context* ctx, const uint8_t data[64]) {
188 uint32_t temp1, temp2, W[64]; 188 uint32_t temp1, temp2, W[64];
189 uint32_t A, B, C, D, E, F, G, H; 189 uint32_t A, B, C, D, E, F, G, H;
190 GET_FX_DWORD(W[0], data, 0); 190 GET_UINT32(W[0], data, 0);
191 GET_FX_DWORD(W[1], data, 4); 191 GET_UINT32(W[1], data, 4);
192 GET_FX_DWORD(W[2], data, 8); 192 GET_UINT32(W[2], data, 8);
193 GET_FX_DWORD(W[3], data, 12); 193 GET_UINT32(W[3], data, 12);
194 GET_FX_DWORD(W[4], data, 16); 194 GET_UINT32(W[4], data, 16);
195 GET_FX_DWORD(W[5], data, 20); 195 GET_UINT32(W[5], data, 20);
196 GET_FX_DWORD(W[6], data, 24); 196 GET_UINT32(W[6], data, 24);
197 GET_FX_DWORD(W[7], data, 28); 197 GET_UINT32(W[7], data, 28);
198 GET_FX_DWORD(W[8], data, 32); 198 GET_UINT32(W[8], data, 32);
199 GET_FX_DWORD(W[9], data, 36); 199 GET_UINT32(W[9], data, 36);
200 GET_FX_DWORD(W[10], data, 40); 200 GET_UINT32(W[10], data, 40);
201 GET_FX_DWORD(W[11], data, 44); 201 GET_UINT32(W[11], data, 44);
202 GET_FX_DWORD(W[12], data, 48); 202 GET_UINT32(W[12], data, 48);
203 GET_FX_DWORD(W[13], data, 52); 203 GET_UINT32(W[13], data, 52);
204 GET_FX_DWORD(W[14], data, 56); 204 GET_UINT32(W[14], data, 56);
205 GET_FX_DWORD(W[15], data, 60); 205 GET_UINT32(W[15], data, 60);
206 #define SHR(x, n) ((x & 0xFFFFFFFF) >> n) 206 #define SHR(x, n) ((x & 0xFFFFFFFF) >> n)
207 #define ROTR(x, n) (SHR(x, n) | (x << (32 - n))) 207 #define ROTR(x, n) (SHR(x, n) | (x << (32 - n)))
208 #define S0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3)) 208 #define S0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3))
209 #define S1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10)) 209 #define S1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10))
210 #define S2(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)) 210 #define S2(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22))
211 #define S3(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)) 211 #define S3(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25))
212 #define F0(x, y, z) ((x & y) | (z & (x | y))) 212 #define F0(x, y, z) ((x & y) | (z & (x | y)))
213 #define F1(x, y, z) (z ^ (x & (y ^ z))) 213 #define F1(x, y, z) (z ^ (x & (y ^ z)))
214 #define R(t) (W[t] = S1(W[t - 2]) + W[t - 7] + S0(W[t - 15]) + W[t - 16]) 214 #define R(t) (W[t] = S1(W[t - 2]) + W[t - 7] + S0(W[t - 15]) + W[t - 16])
215 #define P(a, b, c, d, e, f, g, h, x, K) \ 215 #define P(a, b, c, d, e, f, g, h, x, K) \
(...skipping 117 matching lines...)
333 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
334 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
335 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 335 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
336 void CRYPT_SHA256Finish(void* context, uint8_t digest[32]) { 336 void CRYPT_SHA256Finish(void* context, uint8_t digest[32]) {
337 sha256_context* ctx = (sha256_context*)context; 337 sha256_context* ctx = (sha256_context*)context;
338 uint32_t last, padn; 338 uint32_t last, padn;
339 uint32_t high, low; 339 uint32_t high, low;
340 uint8_t msglen[8]; 340 uint8_t msglen[8];
341 high = (ctx->total[0] >> 29) | (ctx->total[1] << 3); 341 high = (ctx->total[0] >> 29) | (ctx->total[1] << 3);
342 low = (ctx->total[0] << 3); 342 low = (ctx->total[0] << 3);
343 PUT_FX_DWORD(high, msglen, 0); 343 PUT_UINT32(high, msglen, 0);
344 PUT_FX_DWORD(low, msglen, 4); 344 PUT_UINT32(low, msglen, 4);
345 last = ctx->total[0] & 0x3F; 345 last = ctx->total[0] & 0x3F;
346 padn = (last < 56) ? (56 - last) : (120 - last); 346 padn = (last < 56) ? (56 - last) : (120 - last);
347 CRYPT_SHA256Update(ctx, sha256_padding, padn); 347 CRYPT_SHA256Update(ctx, sha256_padding, padn);
348 CRYPT_SHA256Update(ctx, msglen, 8); 348 CRYPT_SHA256Update(ctx, msglen, 8);
349 PUT_FX_DWORD(ctx->state[0], digest, 0); 349 PUT_UINT32(ctx->state[0], digest, 0);
350 PUT_FX_DWORD(ctx->state[1], digest, 4); 350 PUT_UINT32(ctx->state[1], digest, 4);
351 PUT_FX_DWORD(ctx->state[2], digest, 8); 351 PUT_UINT32(ctx->state[2], digest, 8);
352 PUT_FX_DWORD(ctx->state[3], digest, 12); 352 PUT_UINT32(ctx->state[3], digest, 12);
353 PUT_FX_DWORD(ctx->state[4], digest, 16); 353 PUT_UINT32(ctx->state[4], digest, 16);
354 PUT_FX_DWORD(ctx->state[5], digest, 20); 354 PUT_UINT32(ctx->state[5], digest, 20);
355 PUT_FX_DWORD(ctx->state[6], digest, 24); 355 PUT_UINT32(ctx->state[6], digest, 24);
356 PUT_FX_DWORD(ctx->state[7], digest, 28); 356 PUT_UINT32(ctx->state[7], digest, 28);
357 } 357 }
358 void CRYPT_SHA256Generate(const uint8_t* data, 358 void CRYPT_SHA256Generate(const uint8_t* data,
359 uint32_t size, 359 uint32_t size,
360 uint8_t digest[32]) { 360 uint8_t digest[32]) {
361 sha256_context ctx; 361 sha256_context ctx;
362 CRYPT_SHA256Start(&ctx); 362 CRYPT_SHA256Start(&ctx);
363 CRYPT_SHA256Update(&ctx, data, size); 363 CRYPT_SHA256Update(&ctx, data, size);
364 CRYPT_SHA256Finish(&ctx, digest); 364 CRYPT_SHA256Finish(&ctx, digest);
365 } 365 }
366 typedef struct { 366 typedef struct {
(...skipping 94 matching lines...)
461 "431d67c49c100d4c", "4cc5d4becb3e42b6", "597f299cfc657e2a", 461 "431d67c49c100d4c", "4cc5d4becb3e42b6", "597f299cfc657e2a",
462 "5fcb6fab3ad6faec", "6c44198c4a475817", 462 "5fcb6fab3ad6faec", "6c44198c4a475817",
463 }; 463 };
464 #define GET_FX_64WORD(n, b, i) \ 464 #define GET_FX_64WORD(n, b, i) \
465 { \ 465 { \
466 (n) = ((uint64_t)(b)[(i)] << 56) | ((uint64_t)(b)[(i) + 1] << 48) | \ 466 (n) = ((uint64_t)(b)[(i)] << 56) | ((uint64_t)(b)[(i) + 1] << 48) | \
467 ((uint64_t)(b)[(i) + 2] << 40) | ((uint64_t)(b)[(i) + 3] << 32) | \ 467 ((uint64_t)(b)[(i) + 2] << 40) | ((uint64_t)(b)[(i) + 3] << 32) | \
468 ((uint64_t)(b)[(i) + 4] << 24) | ((uint64_t)(b)[(i) + 5] << 16) | \ 468 ((uint64_t)(b)[(i) + 4] << 24) | ((uint64_t)(b)[(i) + 5] << 16) | \
469 ((uint64_t)(b)[(i) + 6] << 8) | ((uint64_t)(b)[(i) + 7]); \ 469 ((uint64_t)(b)[(i) + 6] << 8) | ((uint64_t)(b)[(i) + 7]); \
470 } 470 }
471 #define PUT_FX_64DWORD(n, b, i) \ 471 #define PUT_UINT64(n, b, i) \
472 { \ 472 { \
473 (b)[(i)] = (uint8_t)((n) >> 56); \ 473 (b)[(i)] = (uint8_t)((n) >> 56); \
474 (b)[(i) + 1] = (uint8_t)((n) >> 48); \ 474 (b)[(i) + 1] = (uint8_t)((n) >> 48); \
475 (b)[(i) + 2] = (uint8_t)((n) >> 40); \ 475 (b)[(i) + 2] = (uint8_t)((n) >> 40); \
476 (b)[(i) + 3] = (uint8_t)((n) >> 32); \ 476 (b)[(i) + 3] = (uint8_t)((n) >> 32); \
477 (b)[(i) + 4] = (uint8_t)((n) >> 24); \ 477 (b)[(i) + 4] = (uint8_t)((n) >> 24); \
478 (b)[(i) + 5] = (uint8_t)((n) >> 16); \ 478 (b)[(i) + 5] = (uint8_t)((n) >> 16); \
479 (b)[(i) + 6] = (uint8_t)((n) >> 8); \ 479 (b)[(i) + 6] = (uint8_t)((n) >> 8); \
480 (b)[(i) + 7] = (uint8_t)((n)); \ 480 (b)[(i) + 7] = (uint8_t)((n)); \
481 } 481 }
(...skipping 93 matching lines...)
575 } 575 }
576 } 576 }
577 void CRYPT_SHA384Finish(void* context, uint8_t digest[48]) { 577 void CRYPT_SHA384Finish(void* context, uint8_t digest[48]) {
578 sha384_context* ctx = (sha384_context*)context; 578 sha384_context* ctx = (sha384_context*)context;
579 uint32_t last, padn; 579 uint32_t last, padn;
580 uint8_t msglen[16]; 580 uint8_t msglen[16];
581 FXSYS_memset(msglen, 0, 16); 581 FXSYS_memset(msglen, 0, 16);
582 uint64_t high, low; 582 uint64_t high, low;
583 high = (ctx->total[0] >> 29) | (ctx->total[1] << 3); 583 high = (ctx->total[0] >> 29) | (ctx->total[1] << 3);
584 low = (ctx->total[0] << 3); 584 low = (ctx->total[0] << 3);
585 PUT_FX_64DWORD(high, msglen, 0); 585 PUT_UINT64(high, msglen, 0);
586 PUT_FX_64DWORD(low, msglen, 8); 586 PUT_UINT64(low, msglen, 8);
587 last = (uint32_t)ctx->total[0] & 0x7F; 587 last = (uint32_t)ctx->total[0] & 0x7F;
588 padn = (last < 112) ? (112 - last) : (240 - last); 588 padn = (last < 112) ? (112 - last) : (240 - last);
589 CRYPT_SHA384Update(ctx, sha384_padding, padn); 589 CRYPT_SHA384Update(ctx, sha384_padding, padn);
590 CRYPT_SHA384Update(ctx, msglen, 16); 590 CRYPT_SHA384Update(ctx, msglen, 16);
591 PUT_FX_64DWORD(ctx->state[0], digest, 0); 591 PUT_UINT64(ctx->state[0], digest, 0);
592 PUT_FX_64DWORD(ctx->state[1], digest, 8); 592 PUT_UINT64(ctx->state[1], digest, 8);
593 PUT_FX_64DWORD(ctx->state[2], digest, 16); 593 PUT_UINT64(ctx->state[2], digest, 16);
594 PUT_FX_64DWORD(ctx->state[3], digest, 24); 594 PUT_UINT64(ctx->state[3], digest, 24);
595 PUT_FX_64DWORD(ctx->state[4], digest, 32); 595 PUT_UINT64(ctx->state[4], digest, 32);
596 PUT_FX_64DWORD(ctx->state[5], digest, 40); 596 PUT_UINT64(ctx->state[5], digest, 40);
597 } 597 }
598 void CRYPT_SHA384Generate(const uint8_t* data, 598 void CRYPT_SHA384Generate(const uint8_t* data,
599 uint32_t size, 599 uint32_t size,
600 uint8_t digest[64]) { 600 uint8_t digest[64]) {
601 sha384_context context; 601 sha384_context context;
602 CRYPT_SHA384Start(&context); 602 CRYPT_SHA384Start(&context);
603 CRYPT_SHA384Update(&context, data, size); 603 CRYPT_SHA384Update(&context, data, size);
604 CRYPT_SHA384Finish(&context, digest); 604 CRYPT_SHA384Finish(&context, digest);
605 } 605 }
606 void CRYPT_SHA512Start(void* context) { 606 void CRYPT_SHA512Start(void* context) {
(...skipping 15 matching lines...)
622 CRYPT_SHA384Update(context, data, size); 622 CRYPT_SHA384Update(context, data, size);
623 } 623 }
624 void CRYPT_SHA512Finish(void* context, uint8_t digest[64]) { 624 void CRYPT_SHA512Finish(void* context, uint8_t digest[64]) {
625 sha384_context* ctx = (sha384_context*)context; 625 sha384_context* ctx = (sha384_context*)context;
626 uint32_t last, padn; 626 uint32_t last, padn;
627 uint8_t msglen[16]; 627 uint8_t msglen[16];
628 FXSYS_memset(msglen, 0, 16); 628 FXSYS_memset(msglen, 0, 16);
629 uint64_t high, low; 629 uint64_t high, low;
630 high = (ctx->total[0] >> 29) | (ctx->total[1] << 3); 630 high = (ctx->total[0] >> 29) | (ctx->total[1] << 3);
631 low = (ctx->total[0] << 3); 631 low = (ctx->total[0] << 3);
632 PUT_FX_64DWORD(high, msglen, 0); 632 PUT_UINT64(high, msglen, 0);
633 PUT_FX_64DWORD(low, msglen, 8); 633 PUT_UINT64(low, msglen, 8);
634 last = (uint32_t)ctx->total[0] & 0x7F; 634 last = (uint32_t)ctx->total[0] & 0x7F;
635 padn = (last < 112) ? (112 - last) : (240 - last); 635 padn = (last < 112) ? (112 - last) : (240 - last);
636 CRYPT_SHA512Update(ctx, sha384_padding, padn); 636 CRYPT_SHA512Update(ctx, sha384_padding, padn);
637 CRYPT_SHA512Update(ctx, msglen, 16); 637 CRYPT_SHA512Update(ctx, msglen, 16);
638 PUT_FX_64DWORD(ctx->state[0], digest, 0); 638 PUT_UINT64(ctx->state[0], digest, 0);
639 PUT_FX_64DWORD(ctx->state[1], digest, 8); 639 PUT_UINT64(ctx->state[1], digest, 8);
640 PUT_FX_64DWORD(ctx->state[2], digest, 16); 640 PUT_UINT64(ctx->state[2], digest, 16);
641 PUT_FX_64DWORD(ctx->state[3], digest, 24); 641 PUT_UINT64(ctx->state[3], digest, 24);
642 PUT_FX_64DWORD(ctx->state[4], digest, 32); 642 PUT_UINT64(ctx->state[4], digest, 32);
643 PUT_FX_64DWORD(ctx->state[5], digest, 40); 643 PUT_UINT64(ctx->state[5], digest, 40);
644 PUT_FX_64DWORD(ctx->state[6], digest, 48); 644 PUT_UINT64(ctx->state[6], digest, 48);
645 PUT_FX_64DWORD(ctx->state[7], digest, 56); 645 PUT_UINT64(ctx->state[7], digest, 56);
646 } 646 }
647 void CRYPT_SHA512Generate(const uint8_t* data, 647 void CRYPT_SHA512Generate(const uint8_t* data,
648 uint32_t size, 648 uint32_t size,
649 uint8_t digest[64]) { 649 uint8_t digest[64]) {
650 sha384_context context; 650 sha384_context context;
651 CRYPT_SHA512Start(&context); 651 CRYPT_SHA512Start(&context);
652 CRYPT_SHA512Update(&context, data, size); 652 CRYPT_SHA512Update(&context, data, size);
653 CRYPT_SHA512Finish(&context, digest); 653 CRYPT_SHA512Finish(&context, digest);
654 } 654 }
655 #ifdef __cplusplus 655 #ifdef __cplusplus
656 }; 656 };
657 #endif 657 #endif
OLDNEW
« no previous file with comments | « core/fdrm/crypto/fx_crypt.cpp ('k') | core/fpdfapi/fpdf_page/fpdf_page_func.cpp » ('j') | no next file with comments »

Powered by Google App Engine