Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

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

Issue 1172793002: Merge to XFA: Use stdint.h types throughout PDFium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fdrm/crypto/fx_crypt.cpp ('k') | core/src/fpdfapi/fpdf_edit/editint.h » ('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 "../../../include/fxcrt/fx_basic.h" 7 #include "../../../include/fxcrt/fx_basic.h"
8 #include "../../../include/fdrm/fx_crypt.h" 8 #include "../../../include/fdrm/fx_crypt.h"
9 #ifdef __cplusplus 9 #ifdef __cplusplus
10 extern "C" { 10 extern "C" {
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 (((unsigned int) s->block[i * 4 + 2]) << 8) | 114 (((unsigned int) s->block[i * 4 + 2]) << 8) |
115 (((unsigned int) s->block[i * 4 + 3]) << 0); 115 (((unsigned int) s->block[i * 4 + 3]) << 0);
116 } 116 }
117 SHATransform(s->h, wordblock); 117 SHATransform(s->h, wordblock);
118 s->blkused = 0; 118 s->blkused = 0;
119 } 119 }
120 FXSYS_memcpy32(s->block, q, len); 120 FXSYS_memcpy32(s->block, q, len);
121 s->blkused = len; 121 s->blkused = len;
122 } 122 }
123 } 123 }
124 void CRYPT_SHA1Finish(FX_LPVOID context, FX_BYTE digest[20]) 124 void CRYPT_SHA1Finish(FX_LPVOID context, uint8_t digest[20])
125 { 125 {
126 SHA_State * s = (SHA_State*)context; 126 SHA_State * s = (SHA_State*)context;
127 int i; 127 int i;
128 int pad; 128 int pad;
129 unsigned char c[64]; 129 unsigned char c[64];
130 unsigned int lenhi, lenlo; 130 unsigned int lenhi, lenlo;
131 if (s->blkused >= 56) { 131 if (s->blkused >= 56) {
132 pad = 56 + 64 - s->blkused; 132 pad = 56 + 64 - s->blkused;
133 } else { 133 } else {
134 pad = 56 - s->blkused; 134 pad = 56 - s->blkused;
(...skipping 12 matching lines...) Expand all
147 c[6] = (lenlo >> 8) & 0xFF; 147 c[6] = (lenlo >> 8) & 0xFF;
148 c[7] = (lenlo >> 0) & 0xFF; 148 c[7] = (lenlo >> 0) & 0xFF;
149 CRYPT_SHA1Update(s, c, 8); 149 CRYPT_SHA1Update(s, c, 8);
150 for (i = 0; i < 5; i++) { 150 for (i = 0; i < 5; i++) {
151 digest[i * 4] = (s->h[i] >> 24) & 0xFF; 151 digest[i * 4] = (s->h[i] >> 24) & 0xFF;
152 digest[i * 4 + 1] = (s->h[i] >> 16) & 0xFF; 152 digest[i * 4 + 1] = (s->h[i] >> 16) & 0xFF;
153 digest[i * 4 + 2] = (s->h[i] >> 8) & 0xFF; 153 digest[i * 4 + 2] = (s->h[i] >> 8) & 0xFF;
154 digest[i * 4 + 3] = (s->h[i]) & 0xFF; 154 digest[i * 4 + 3] = (s->h[i]) & 0xFF;
155 } 155 }
156 } 156 }
157 void CRYPT_SHA1Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[20]) 157 void CRYPT_SHA1Generate(FX_LPCBYTE data, FX_DWORD size, uint8_t digest[20])
158 { 158 {
159 SHA_State s; 159 SHA_State s;
160 CRYPT_SHA1Start(&s); 160 CRYPT_SHA1Start(&s);
161 CRYPT_SHA1Update(&s, data, size); 161 CRYPT_SHA1Update(&s, data, size);
162 CRYPT_SHA1Finish(&s, digest); 162 CRYPT_SHA1Finish(&s, digest);
163 } 163 }
164 typedef struct { 164 typedef struct {
165 FX_DWORD total[2]; 165 FX_DWORD total[2];
166 FX_DWORD state[8]; 166 FX_DWORD state[8];
167 FX_BYTE buffer[64]; 167 uint8_t buffer[64];
168 } 168 }
169 sha256_context; 169 sha256_context;
170 #define GET_FX_DWORD(n,b,i) \ 170 #define GET_FX_DWORD(n,b,i) \
171 { \ 171 { \
172 (n) = ( (FX_DWORD) (b)[(i) ] << 24 ) \ 172 (n) = ( (FX_DWORD) (b)[(i) ] << 24 ) \
173 | ( (FX_DWORD) (b)[(i) + 1] << 16 ) \ 173 | ( (FX_DWORD) (b)[(i) + 1] << 16 ) \
174 | ( (FX_DWORD) (b)[(i) + 2] << 8 ) \ 174 | ( (FX_DWORD) (b)[(i) + 2] << 8 ) \
175 | ( (FX_DWORD) (b)[(i) + 3] ); \ 175 | ( (FX_DWORD) (b)[(i) + 3] ); \
176 } 176 }
177 #define PUT_FX_DWORD(n,b,i) \ 177 #define PUT_FX_DWORD(n,b,i) \
178 { \ 178 { \
179 (b)[(i) ] = (FX_BYTE) ( (n) >> 24 ); \ 179 (b)[(i) ] = (uint8_t) ( (n) >> 24 ); \
180 (b)[(i) + 1] = (FX_BYTE) ( (n) >> 16 ); \ 180 (b)[(i) + 1] = (uint8_t) ( (n) >> 16 ); \
181 (b)[(i) + 2] = (FX_BYTE) ( (n) >> 8 ); \ 181 (b)[(i) + 2] = (uint8_t) ( (n) >> 8 ); \
182 (b)[(i) + 3] = (FX_BYTE) ( (n) ); \ 182 (b)[(i) + 3] = (uint8_t) ( (n) ); \
183 } 183 }
184 void CRYPT_SHA256Start( FX_LPVOID context ) 184 void CRYPT_SHA256Start( FX_LPVOID context )
185 { 185 {
186 sha256_context *ctx = (sha256_context *)context; 186 sha256_context *ctx = (sha256_context *)context;
187 ctx->total[0] = 0; 187 ctx->total[0] = 0;
188 ctx->total[1] = 0; 188 ctx->total[1] = 0;
189 ctx->state[0] = 0x6A09E667; 189 ctx->state[0] = 0x6A09E667;
190 ctx->state[1] = 0xBB67AE85; 190 ctx->state[1] = 0xBB67AE85;
191 ctx->state[2] = 0x3C6EF372; 191 ctx->state[2] = 0x3C6EF372;
192 ctx->state[3] = 0xA54FF53A; 192 ctx->state[3] = 0xA54FF53A;
193 ctx->state[4] = 0x510E527F; 193 ctx->state[4] = 0x510E527F;
194 ctx->state[5] = 0x9B05688C; 194 ctx->state[5] = 0x9B05688C;
195 ctx->state[6] = 0x1F83D9AB; 195 ctx->state[6] = 0x1F83D9AB;
196 ctx->state[7] = 0x5BE0CD19; 196 ctx->state[7] = 0x5BE0CD19;
197 } 197 }
198 static void sha256_process( sha256_context *ctx, const FX_BYTE data[64] ) 198 static void sha256_process( sha256_context *ctx, const uint8_t data[64] )
199 { 199 {
200 FX_DWORD temp1, temp2, W[64]; 200 FX_DWORD temp1, temp2, W[64];
201 FX_DWORD A, B, C, D, E, F, G, H; 201 FX_DWORD A, B, C, D, E, F, G, H;
202 GET_FX_DWORD( W[0], data, 0 ); 202 GET_FX_DWORD( W[0], data, 0 );
203 GET_FX_DWORD( W[1], data, 4 ); 203 GET_FX_DWORD( W[1], data, 4 );
204 GET_FX_DWORD( W[2], data, 8 ); 204 GET_FX_DWORD( W[2], data, 8 );
205 GET_FX_DWORD( W[3], data, 12 ); 205 GET_FX_DWORD( W[3], data, 12 );
206 GET_FX_DWORD( W[4], data, 16 ); 206 GET_FX_DWORD( W[4], data, 16 );
207 GET_FX_DWORD( W[5], data, 20 ); 207 GET_FX_DWORD( W[5], data, 20 );
208 GET_FX_DWORD( W[6], data, 24 ); 208 GET_FX_DWORD( W[6], data, 24 );
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 while( length >= 64 ) { 340 while( length >= 64 ) {
341 sha256_process( ctx, input ); 341 sha256_process( ctx, input );
342 length -= 64; 342 length -= 64;
343 input += 64; 343 input += 64;
344 } 344 }
345 if( length ) { 345 if( length ) {
346 FXSYS_memcpy32( (void *) (ctx->buffer + left), 346 FXSYS_memcpy32( (void *) (ctx->buffer + left),
347 (void *) input, length ); 347 (void *) input, length );
348 } 348 }
349 } 349 }
350 static const FX_BYTE sha256_padding[64] = { 350 static const uint8_t sha256_padding[64] = {
351 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
352 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
353 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
354 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 354 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
355 }; 355 };
356 void CRYPT_SHA256Finish( FX_LPVOID context, FX_BYTE digest[32] ) 356 void CRYPT_SHA256Finish( FX_LPVOID context, uint8_t digest[32] )
357 { 357 {
358 sha256_context *ctx = (sha256_context *)context; 358 sha256_context *ctx = (sha256_context *)context;
359 FX_DWORD last, padn; 359 FX_DWORD last, padn;
360 FX_DWORD high, low; 360 FX_DWORD high, low;
361 FX_BYTE msglen[8]; 361 uint8_t msglen[8];
362 high = ( ctx->total[0] >> 29 ) 362 high = ( ctx->total[0] >> 29 )
363 | ( ctx->total[1] << 3 ); 363 | ( ctx->total[1] << 3 );
364 low = ( ctx->total[0] << 3 ); 364 low = ( ctx->total[0] << 3 );
365 PUT_FX_DWORD( high, msglen, 0 ); 365 PUT_FX_DWORD( high, msglen, 0 );
366 PUT_FX_DWORD( low, msglen, 4 ); 366 PUT_FX_DWORD( low, msglen, 4 );
367 last = ctx->total[0] & 0x3F; 367 last = ctx->total[0] & 0x3F;
368 padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); 368 padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
369 CRYPT_SHA256Update( ctx, sha256_padding, padn ); 369 CRYPT_SHA256Update( ctx, sha256_padding, padn );
370 CRYPT_SHA256Update( ctx, msglen, 8 ); 370 CRYPT_SHA256Update( ctx, msglen, 8 );
371 PUT_FX_DWORD( ctx->state[0], digest, 0 ); 371 PUT_FX_DWORD( ctx->state[0], digest, 0 );
372 PUT_FX_DWORD( ctx->state[1], digest, 4 ); 372 PUT_FX_DWORD( ctx->state[1], digest, 4 );
373 PUT_FX_DWORD( ctx->state[2], digest, 8 ); 373 PUT_FX_DWORD( ctx->state[2], digest, 8 );
374 PUT_FX_DWORD( ctx->state[3], digest, 12 ); 374 PUT_FX_DWORD( ctx->state[3], digest, 12 );
375 PUT_FX_DWORD( ctx->state[4], digest, 16 ); 375 PUT_FX_DWORD( ctx->state[4], digest, 16 );
376 PUT_FX_DWORD( ctx->state[5], digest, 20 ); 376 PUT_FX_DWORD( ctx->state[5], digest, 20 );
377 PUT_FX_DWORD( ctx->state[6], digest, 24 ); 377 PUT_FX_DWORD( ctx->state[6], digest, 24 );
378 PUT_FX_DWORD( ctx->state[7], digest, 28 ); 378 PUT_FX_DWORD( ctx->state[7], digest, 28 );
379 } 379 }
380 void CRYPT_SHA256Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[32]) 380 void CRYPT_SHA256Generate(FX_LPCBYTE data, FX_DWORD size, uint8_t digest[32])
381 { 381 {
382 sha256_context ctx; 382 sha256_context ctx;
383 CRYPT_SHA256Start(&ctx); 383 CRYPT_SHA256Start(&ctx);
384 CRYPT_SHA256Update(&ctx, data, size); 384 CRYPT_SHA256Update(&ctx, data, size);
385 CRYPT_SHA256Finish(&ctx, digest); 385 CRYPT_SHA256Finish(&ctx, digest);
386 } 386 }
387 typedef struct { 387 typedef struct {
388 FX_UINT64» total[2]; 388 uint64_t» total[2];
389 FX_UINT64» state[8]; 389 uint64_t» state[8];
390 FX_BYTE» » buffer[128]; 390 uint8_t» » buffer[128];
391 } sha384_context; 391 } sha384_context;
392 FX_UINT64 FX_ato64i(FX_LPCSTR str) 392 uint64_t FX_ato64i(FX_LPCSTR str)
393 { 393 {
394 FXSYS_assert(str != NULL); 394 FXSYS_assert(str != NULL);
395 FX_UINT64 ret = 0; 395 uint64_t ret = 0;
396 int len = (int)FXSYS_strlen(str); 396 int len = (int)FXSYS_strlen(str);
397 len = len > 16 ? 16 : len; 397 len = len > 16 ? 16 : len;
398 for (int i = 0; i < len; ++i) { 398 for (int i = 0; i < len; ++i) {
399 if (i) { 399 if (i) {
400 ret <<= 4; 400 ret <<= 4;
401 } 401 }
402 if (str[i] >= '0' && str[i] <= '9') { 402 if (str[i] >= '0' && str[i] <= '9') {
403 ret |= (str[i] - '0') & 0xFF; 403 ret |= (str[i] - '0') & 0xFF;
404 } else if (str[i] >= 'a' && str[i] <= 'f') { 404 } else if (str[i] >= 'a' && str[i] <= 'f') {
405 ret |= (str[i] - 'a' + 10) & 0xFF; 405 ret |= (str[i] - 'a' + 10) & 0xFF;
(...skipping 28 matching lines...) Expand all
434 #define SHA384_S0(x) (SHA384_ROTR(x, 1) ^ SHA384_ROTR(x, 8) ^ SHA384_SHR(x, 7)) 434 #define SHA384_S0(x) (SHA384_ROTR(x, 1) ^ SHA384_ROTR(x, 8) ^ SHA384_SHR(x, 7))
435 #define SHA384_S1(x) (SHA384_ROTR(x,19) ^ SHA384_ROTR(x, 61) ^ SHA384_SHR(x, 6) ) 435 #define SHA384_S1(x) (SHA384_ROTR(x,19) ^ SHA384_ROTR(x, 61) ^ SHA384_SHR(x, 6) )
436 #define SHA384_S2(x) (SHA384_ROTR(x, 28) ^ SHA384_ROTR(x, 34) ^ SHA384_ROTR(x, 3 9)) 436 #define SHA384_S2(x) (SHA384_ROTR(x, 28) ^ SHA384_ROTR(x, 34) ^ SHA384_ROTR(x, 3 9))
437 #define SHA384_S3(x) (SHA384_ROTR(x, 14) ^ SHA384_ROTR(x,18) ^ SHA384_ROTR(x, 41 )) 437 #define SHA384_S3(x) (SHA384_ROTR(x, 14) ^ SHA384_ROTR(x,18) ^ SHA384_ROTR(x, 41 ))
438 #define SHA384_P(a,b,c,d,e,f,g,h,x,K) \ 438 #define SHA384_P(a,b,c,d,e,f,g,h,x,K) \
439 { \ 439 { \
440 temp1 = h + SHA384_S3(e) + SHA384_F1(e,f,g) + K + x; \ 440 temp1 = h + SHA384_S3(e) + SHA384_F1(e,f,g) + K + x; \
441 temp2 = SHA384_S2(a) + SHA384_F0(a,b,c); \ 441 temp2 = SHA384_S2(a) + SHA384_F0(a,b,c); \
442 d += temp1; h = temp1 + temp2; \ 442 d += temp1; h = temp1 + temp2; \
443 } 443 }
444 static const FX_BYTE sha384_padding[128] = { 444 static const uint8_t sha384_padding[128] = {
445 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
447 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
448 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
449 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
450 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
451 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
452 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
453 }; 453 };
454 #define SHA384_R(t) (W[t] = SHA384_S1(W[t - 2]) + W[t - 7] + SHA384_S0(W[t - 1 5]) + W[t - 16]) 454 #define SHA384_R(t) (W[t] = SHA384_S1(W[t - 2]) + W[t - 7] + SHA384_S0(W[t - 1 5]) + W[t - 16])
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 "32caab7b40c72493", 529 "32caab7b40c72493",
530 "3c9ebe0a15c9bebc", 530 "3c9ebe0a15c9bebc",
531 "431d67c49c100d4c", 531 "431d67c49c100d4c",
532 "4cc5d4becb3e42b6", 532 "4cc5d4becb3e42b6",
533 "597f299cfc657e2a", 533 "597f299cfc657e2a",
534 "5fcb6fab3ad6faec", 534 "5fcb6fab3ad6faec",
535 "6c44198c4a475817", 535 "6c44198c4a475817",
536 }; 536 };
537 #define GET_FX_64WORD(n,b,i) \ 537 #define GET_FX_64WORD(n,b,i) \
538 { \ 538 { \
539 (n) = ( (FX_UINT64) (b)[(i) ] << 56 ) \ 539 (n) = ( (uint64_t) (b)[(i) ] << 56 ) \
540 | ( (FX_UINT64) (b)[(i) + 1] << 48 ) \ 540 | ( (uint64_t) (b)[(i) + 1] << 48 ) \
541 | ( (FX_UINT64) (b)[(i) + 2] << 40 ) \ 541 | ( (uint64_t) (b)[(i) + 2] << 40 ) \
542 | ( (FX_UINT64) (b)[(i) + 3] << 32 ) \ 542 | ( (uint64_t) (b)[(i) + 3] << 32 ) \
543 | ( (FX_UINT64) (b)[(i) + 4] << 24 ) \ 543 | ( (uint64_t) (b)[(i) + 4] << 24 ) \
544 | ( (FX_UINT64) (b)[(i) + 5] << 16 ) \ 544 | ( (uint64_t) (b)[(i) + 5] << 16 ) \
545 | ( (FX_UINT64) (b)[(i) + 6] << 8 ) \ 545 | ( (uint64_t) (b)[(i) + 6] << 8 ) \
546 | ( (FX_UINT64) (b)[(i) + 7] ); \ 546 | ( (uint64_t) (b)[(i) + 7] ); \
547 } 547 }
548 #define PUT_FX_64DWORD(n,b,i) \ 548 #define PUT_FX_64DWORD(n,b,i) \
549 { \ 549 { \
550 (b)[(i) ] = (FX_BYTE) ( (n) >> 56 ); \ 550 (b)[(i) ] = (uint8_t) ( (n) >> 56 ); \
551 (b)[(i) + 1] = (FX_BYTE) ( (n) >> 48 ); \ 551 (b)[(i) + 1] = (uint8_t) ( (n) >> 48 ); \
552 (b)[(i) + 2] = (FX_BYTE) ( (n) >> 40 ); \ 552 (b)[(i) + 2] = (uint8_t) ( (n) >> 40 ); \
553 (b)[(i) + 3] = (FX_BYTE) ( (n) >> 32 ); \ 553 (b)[(i) + 3] = (uint8_t) ( (n) >> 32 ); \
554 (b)[(i) + 4] = (FX_BYTE) ( (n) >> 24 ); \ 554 (b)[(i) + 4] = (uint8_t) ( (n) >> 24 ); \
555 (b)[(i) + 5] = (FX_BYTE) ( (n) >> 16 ); \ 555 (b)[(i) + 5] = (uint8_t) ( (n) >> 16 ); \
556 (b)[(i) + 6] = (FX_BYTE) ( (n) >> 8 ); \ 556 (b)[(i) + 6] = (uint8_t) ( (n) >> 8 ); \
557 (b)[(i) + 7] = (FX_BYTE) ( (n) ); \ 557 (b)[(i) + 7] = (uint8_t) ( (n) ); \
558 } 558 }
559 static void sha384_process( sha384_context *ctx, const FX_BYTE data[128] ) 559 static void sha384_process( sha384_context *ctx, const uint8_t data[128] )
560 { 560 {
561 FX_UINT64 temp1, temp2; 561 uint64_t temp1, temp2;
562 FX_UINT64 A, B, C, D, E, F, G, H; 562 uint64_t A, B, C, D, E, F, G, H;
563 FX_UINT64 W[80]; 563 uint64_t W[80];
564 GET_FX_64WORD(W[0], data, 0); 564 GET_FX_64WORD(W[0], data, 0);
565 GET_FX_64WORD(W[1], data, 8); 565 GET_FX_64WORD(W[1], data, 8);
566 GET_FX_64WORD(W[2], data, 16); 566 GET_FX_64WORD(W[2], data, 16);
567 GET_FX_64WORD(W[3], data, 24); 567 GET_FX_64WORD(W[3], data, 24);
568 GET_FX_64WORD(W[4], data, 32); 568 GET_FX_64WORD(W[4], data, 32);
569 GET_FX_64WORD(W[5], data, 40); 569 GET_FX_64WORD(W[5], data, 40);
570 GET_FX_64WORD(W[6], data, 48); 570 GET_FX_64WORD(W[6], data, 48);
571 GET_FX_64WORD(W[7], data, 56); 571 GET_FX_64WORD(W[7], data, 56);
572 GET_FX_64WORD(W[8], data, 64); 572 GET_FX_64WORD(W[8], data, 64);
573 GET_FX_64WORD(W[9], data, 72); 573 GET_FX_64WORD(W[9], data, 72);
574 GET_FX_64WORD(W[10], data, 80); 574 GET_FX_64WORD(W[10], data, 80);
575 GET_FX_64WORD(W[11], data, 88); 575 GET_FX_64WORD(W[11], data, 88);
576 GET_FX_64WORD(W[12], data, 96); 576 GET_FX_64WORD(W[12], data, 96);
577 GET_FX_64WORD(W[13], data, 104); 577 GET_FX_64WORD(W[13], data, 104);
578 GET_FX_64WORD(W[14], data, 112); 578 GET_FX_64WORD(W[14], data, 112);
579 GET_FX_64WORD(W[15], data, 120); 579 GET_FX_64WORD(W[15], data, 120);
580 A = ctx->state[0]; 580 A = ctx->state[0];
581 B = ctx->state[1]; 581 B = ctx->state[1];
582 C = ctx->state[2]; 582 C = ctx->state[2];
583 D = ctx->state[3]; 583 D = ctx->state[3];
584 E = ctx->state[4]; 584 E = ctx->state[4];
585 F = ctx->state[5]; 585 F = ctx->state[5];
586 G = ctx->state[6]; 586 G = ctx->state[6];
587 H = ctx->state[7]; 587 H = ctx->state[7];
588 for (int i = 0; i < 10; ++i) { 588 for (int i = 0; i < 10; ++i) {
589 FX_UINT64 temp[8]; 589 uint64_t temp[8];
590 if (i < 2) { 590 if (i < 2) {
591 temp[0] = W[i * 8]; 591 temp[0] = W[i * 8];
592 temp[1] = W[i * 8 + 1]; 592 temp[1] = W[i * 8 + 1];
593 temp[2] = W[i * 8 + 2]; 593 temp[2] = W[i * 8 + 2];
594 temp[3] = W[i * 8 + 3]; 594 temp[3] = W[i * 8 + 3];
595 temp[4] = W[i * 8 + 4]; 595 temp[4] = W[i * 8 + 4];
596 temp[5] = W[i * 8 + 5]; 596 temp[5] = W[i * 8 + 5];
597 temp[6] = W[i * 8 + 6]; 597 temp[6] = W[i * 8 + 6];
598 temp[7] = W[i * 8 + 7]; 598 temp[7] = W[i * 8 + 7];
599 } else { 599 } else {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 while( length >= 128 ) { 648 while( length >= 128 ) {
649 sha384_process( ctx, input ); 649 sha384_process( ctx, input );
650 length -= 128; 650 length -= 128;
651 input += 128; 651 input += 128;
652 } 652 }
653 if( length ) { 653 if( length ) {
654 FXSYS_memcpy32( (void *) (ctx->buffer + left), 654 FXSYS_memcpy32( (void *) (ctx->buffer + left),
655 (void *) input, length ); 655 (void *) input, length );
656 } 656 }
657 } 657 }
658 void CRYPT_SHA384Finish(FX_LPVOID context, FX_BYTE digest[48]) 658 void CRYPT_SHA384Finish(FX_LPVOID context, uint8_t digest[48])
659 { 659 {
660 sha384_context *ctx = (sha384_context *)context; 660 sha384_context *ctx = (sha384_context *)context;
661 FX_DWORD last, padn; 661 FX_DWORD last, padn;
662 FX_BYTE msglen[16]; 662 uint8_t msglen[16];
663 FXSYS_memset32(msglen, 0, 16); 663 FXSYS_memset32(msglen, 0, 16);
664 FX_UINT64 high, low; 664 uint64_t high, low;
665 high = ( ctx->total[0] >> 29 ) 665 high = ( ctx->total[0] >> 29 )
666 | ( ctx->total[1] << 3 ); 666 | ( ctx->total[1] << 3 );
667 low = ( ctx->total[0] << 3 ); 667 low = ( ctx->total[0] << 3 );
668 PUT_FX_64DWORD( high, msglen, 0 ); 668 PUT_FX_64DWORD( high, msglen, 0 );
669 PUT_FX_64DWORD( low, msglen, 8 ); 669 PUT_FX_64DWORD( low, msglen, 8 );
670 last = (FX_DWORD)ctx->total[0] & 0x7F; 670 last = (FX_DWORD)ctx->total[0] & 0x7F;
671 padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last ); 671 padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last );
672 CRYPT_SHA384Update( ctx, sha384_padding, padn ); 672 CRYPT_SHA384Update( ctx, sha384_padding, padn );
673 CRYPT_SHA384Update( ctx, msglen, 16 ); 673 CRYPT_SHA384Update( ctx, msglen, 16 );
674 PUT_FX_64DWORD(ctx->state[0], digest, 0); 674 PUT_FX_64DWORD(ctx->state[0], digest, 0);
675 PUT_FX_64DWORD(ctx->state[1], digest, 8); 675 PUT_FX_64DWORD(ctx->state[1], digest, 8);
676 PUT_FX_64DWORD(ctx->state[2], digest, 16); 676 PUT_FX_64DWORD(ctx->state[2], digest, 16);
677 PUT_FX_64DWORD(ctx->state[3], digest, 24); 677 PUT_FX_64DWORD(ctx->state[3], digest, 24);
678 PUT_FX_64DWORD(ctx->state[4], digest, 32); 678 PUT_FX_64DWORD(ctx->state[4], digest, 32);
679 PUT_FX_64DWORD(ctx->state[5], digest, 40); 679 PUT_FX_64DWORD(ctx->state[5], digest, 40);
680 } 680 }
681 void CRYPT_SHA384Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[64]) 681 void CRYPT_SHA384Generate(FX_LPCBYTE data, FX_DWORD size, uint8_t digest[64])
682 { 682 {
683 sha384_context context; 683 sha384_context context;
684 CRYPT_SHA384Start(&context); 684 CRYPT_SHA384Start(&context);
685 CRYPT_SHA384Update(&context, data, size); 685 CRYPT_SHA384Update(&context, data, size);
686 CRYPT_SHA384Finish(&context, digest); 686 CRYPT_SHA384Finish(&context, digest);
687 } 687 }
688 void CRYPT_SHA512Start(FX_LPVOID context) 688 void CRYPT_SHA512Start(FX_LPVOID context)
689 { 689 {
690 if (context == NULL) { 690 if (context == NULL) {
691 return; 691 return;
692 } 692 }
693 sha384_context *ctx = (sha384_context *)context; 693 sha384_context *ctx = (sha384_context *)context;
694 FXSYS_memset32(ctx, 0, sizeof(sha384_context)); 694 FXSYS_memset32(ctx, 0, sizeof(sha384_context));
695 ctx->state[0] = FX_ato64i("6a09e667f3bcc908"); 695 ctx->state[0] = FX_ato64i("6a09e667f3bcc908");
696 ctx->state[1] = FX_ato64i("bb67ae8584caa73b"); 696 ctx->state[1] = FX_ato64i("bb67ae8584caa73b");
697 ctx->state[2] = FX_ato64i("3c6ef372fe94f82b"); 697 ctx->state[2] = FX_ato64i("3c6ef372fe94f82b");
698 ctx->state[3] = FX_ato64i("a54ff53a5f1d36f1"); 698 ctx->state[3] = FX_ato64i("a54ff53a5f1d36f1");
699 ctx->state[4] = FX_ato64i("510e527fade682d1"); 699 ctx->state[4] = FX_ato64i("510e527fade682d1");
700 ctx->state[5] = FX_ato64i("9b05688c2b3e6c1f"); 700 ctx->state[5] = FX_ato64i("9b05688c2b3e6c1f");
701 ctx->state[6] = FX_ato64i("1f83d9abfb41bd6b"); 701 ctx->state[6] = FX_ato64i("1f83d9abfb41bd6b");
702 ctx->state[7] = FX_ato64i("5be0cd19137e2179"); 702 ctx->state[7] = FX_ato64i("5be0cd19137e2179");
703 } 703 }
704 void CRYPT_SHA512Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size) 704 void CRYPT_SHA512Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size)
705 { 705 {
706 CRYPT_SHA384Update(context, data, size); 706 CRYPT_SHA384Update(context, data, size);
707 } 707 }
708 void CRYPT_SHA512Finish(FX_LPVOID context, FX_BYTE digest[64]) 708 void CRYPT_SHA512Finish(FX_LPVOID context, uint8_t digest[64])
709 { 709 {
710 sha384_context *ctx = (sha384_context *)context; 710 sha384_context *ctx = (sha384_context *)context;
711 FX_DWORD last, padn; 711 FX_DWORD last, padn;
712 FX_BYTE msglen[16]; 712 uint8_t msglen[16];
713 FXSYS_memset32(msglen, 0, 16); 713 FXSYS_memset32(msglen, 0, 16);
714 FX_UINT64 high, low; 714 uint64_t high, low;
715 high = ( ctx->total[0] >> 29 ) 715 high = ( ctx->total[0] >> 29 )
716 | ( ctx->total[1] << 3 ); 716 | ( ctx->total[1] << 3 );
717 low = ( ctx->total[0] << 3 ); 717 low = ( ctx->total[0] << 3 );
718 PUT_FX_64DWORD( high, msglen, 0 ); 718 PUT_FX_64DWORD( high, msglen, 0 );
719 PUT_FX_64DWORD( low, msglen, 8 ); 719 PUT_FX_64DWORD( low, msglen, 8 );
720 last = (FX_DWORD)ctx->total[0] & 0x7F; 720 last = (FX_DWORD)ctx->total[0] & 0x7F;
721 padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last ); 721 padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last );
722 CRYPT_SHA512Update( ctx, sha384_padding, padn ); 722 CRYPT_SHA512Update( ctx, sha384_padding, padn );
723 CRYPT_SHA512Update( ctx, msglen, 16 ); 723 CRYPT_SHA512Update( ctx, msglen, 16 );
724 PUT_FX_64DWORD(ctx->state[0], digest, 0); 724 PUT_FX_64DWORD(ctx->state[0], digest, 0);
725 PUT_FX_64DWORD(ctx->state[1], digest, 8); 725 PUT_FX_64DWORD(ctx->state[1], digest, 8);
726 PUT_FX_64DWORD(ctx->state[2], digest, 16); 726 PUT_FX_64DWORD(ctx->state[2], digest, 16);
727 PUT_FX_64DWORD(ctx->state[3], digest, 24); 727 PUT_FX_64DWORD(ctx->state[3], digest, 24);
728 PUT_FX_64DWORD(ctx->state[4], digest, 32); 728 PUT_FX_64DWORD(ctx->state[4], digest, 32);
729 PUT_FX_64DWORD(ctx->state[5], digest, 40); 729 PUT_FX_64DWORD(ctx->state[5], digest, 40);
730 PUT_FX_64DWORD(ctx->state[6], digest, 48); 730 PUT_FX_64DWORD(ctx->state[6], digest, 48);
731 PUT_FX_64DWORD(ctx->state[7], digest, 56); 731 PUT_FX_64DWORD(ctx->state[7], digest, 56);
732 } 732 }
733 void CRYPT_SHA512Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[64]) 733 void CRYPT_SHA512Generate(FX_LPCBYTE data, FX_DWORD size, uint8_t digest[64])
734 { 734 {
735 sha384_context context; 735 sha384_context context;
736 CRYPT_SHA512Start(&context); 736 CRYPT_SHA512Start(&context);
737 CRYPT_SHA512Update(&context, data, size); 737 CRYPT_SHA512Update(&context, data, size);
738 CRYPT_SHA512Finish(&context, digest); 738 CRYPT_SHA512Finish(&context, digest);
739 } 739 }
740 #ifdef __cplusplus 740 #ifdef __cplusplus
741 }; 741 };
742 #endif 742 #endif
OLDNEW
« no previous file with comments | « core/src/fdrm/crypto/fx_crypt.cpp ('k') | core/src/fpdfapi/fpdf_edit/editint.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698