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

Side by Side Diff: core/fpdfapi/fpdf_parser/cpdf_security_handler.cpp

Issue 2027273002: Fix all the code which has duplicate variable declarations (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: rebase Created 4 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
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/fpdfapi/fpdf_parser/cpdf_security_handler.h" 7 #include "core/fpdfapi/fpdf_parser/cpdf_security_handler.h"
8 8
9 #include <time.h> 9 #include <time.h>
10 10
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 CRYPT_ArcFourCryptBlock(ukeybuf, 32, key, key_len); 423 CRYPT_ArcFourCryptBlock(ukeybuf, 32, key, key_len);
424 } else { 424 } else {
425 uint8_t test[32], tmpkey[32]; 425 uint8_t test[32], tmpkey[32];
426 uint32_t copy_len = sizeof(test); 426 uint32_t copy_len = sizeof(test);
427 if (copy_len > (uint32_t)ukey.GetLength()) { 427 if (copy_len > (uint32_t)ukey.GetLength()) {
428 copy_len = ukey.GetLength(); 428 copy_len = ukey.GetLength();
429 } 429 }
430 FXSYS_memset(test, 0, sizeof(test)); 430 FXSYS_memset(test, 0, sizeof(test));
431 FXSYS_memset(tmpkey, 0, sizeof(tmpkey)); 431 FXSYS_memset(tmpkey, 0, sizeof(tmpkey));
432 FXSYS_memcpy(test, ukey.c_str(), copy_len); 432 FXSYS_memcpy(test, ukey.c_str(), copy_len);
433 for (int i = 19; i >= 0; i--) { 433 for (int32_t i = 19; i >= 0; i--) {
434 for (int j = 0; j < key_len; j++) { 434 for (int j = 0; j < key_len; j++)
435 tmpkey[j] = key[j] ^ i; 435 tmpkey[j] = key[j] ^ static_cast<uint8_t>(i);
436 }
437 CRYPT_ArcFourCryptBlock(test, 32, tmpkey, key_len); 436 CRYPT_ArcFourCryptBlock(test, 32, tmpkey, key_len);
438 } 437 }
439 uint8_t md5[100]; 438 uint8_t md5[100];
440 CRYPT_MD5Start(md5); 439 CRYPT_MD5Start(md5);
441 CRYPT_MD5Update(md5, defpasscode, 32); 440 CRYPT_MD5Update(md5, defpasscode, 32);
442 CPDF_Array* pIdArray = m_pParser->GetIDArray(); 441 CPDF_Array* pIdArray = m_pParser->GetIDArray();
443 if (pIdArray) { 442 if (pIdArray) {
444 CFX_ByteString id = pIdArray->GetStringAt(0); 443 CFX_ByteString id = pIdArray->GetStringAt(0);
445 CRYPT_MD5Update(md5, (uint8_t*)id.c_str(), id.GetLength()); 444 CRYPT_MD5Update(md5, (uint8_t*)id.c_str(), id.GetLength());
446 } 445 }
447 CRYPT_MD5Finish(md5, ukeybuf); 446 CRYPT_MD5Finish(md5, ukeybuf);
448 return FXSYS_memcmp(test, ukeybuf, 16) == 0; 447 return FXSYS_memcmp(test, ukeybuf, 16) == 0;
449 } 448 }
450 if (FXSYS_memcmp((void*)ukey.c_str(), ukeybuf, 16) == 0) { 449 if (FXSYS_memcmp((void*)ukey.c_str(), ukeybuf, 16) == 0) {
451 return TRUE; 450 return TRUE;
452 } 451 }
453 return FALSE; 452 return FALSE;
454 } 453 }
455 CFX_ByteString CPDF_SecurityHandler::GetUserPassword(const uint8_t* owner_pass, 454 CFX_ByteString CPDF_SecurityHandler::GetUserPassword(const uint8_t* owner_pass,
456 uint32_t pass_size, 455 uint32_t pass_size,
457 int32_t key_len) { 456 int32_t key_len) {
458 CFX_ByteString okey = m_pEncryptDict->GetStringBy("O"); 457 CFX_ByteString okey = m_pEncryptDict->GetStringBy("O");
459 uint8_t passcode[32]; 458 uint8_t passcode[32];
460 uint32_t i; 459 for (uint32_t i = 0; i < 32; i++) {
461 for (i = 0; i < 32; i++) {
462 passcode[i] = i < pass_size ? owner_pass[i] : defpasscode[i - pass_size]; 460 passcode[i] = i < pass_size ? owner_pass[i] : defpasscode[i - pass_size];
463 } 461 }
464 uint8_t digest[16]; 462 uint8_t digest[16];
465 CRYPT_MD5Generate(passcode, 32, digest); 463 CRYPT_MD5Generate(passcode, 32, digest);
466 if (m_Revision >= 3) { 464 if (m_Revision >= 3) {
467 for (int i = 0; i < 50; i++) { 465 for (uint32_t i = 0; i < 50; i++) {
468 CRYPT_MD5Generate(digest, 16, digest); 466 CRYPT_MD5Generate(digest, 16, digest);
469 } 467 }
470 } 468 }
471 uint8_t enckey[32]; 469 uint8_t enckey[32];
472 FXSYS_memset(enckey, 0, sizeof(enckey)); 470 FXSYS_memset(enckey, 0, sizeof(enckey));
473 uint32_t copy_len = key_len; 471 uint32_t copy_len = key_len;
474 if (copy_len > sizeof(digest)) { 472 if (copy_len > sizeof(digest)) {
475 copy_len = sizeof(digest); 473 copy_len = sizeof(digest);
476 } 474 }
477 FXSYS_memcpy(enckey, digest, copy_len); 475 FXSYS_memcpy(enckey, digest, copy_len);
478 int okeylen = okey.GetLength(); 476 int okeylen = okey.GetLength();
479 if (okeylen > 32) { 477 if (okeylen > 32) {
480 okeylen = 32; 478 okeylen = 32;
481 } 479 }
482 uint8_t okeybuf[64]; 480 uint8_t okeybuf[64];
483 FXSYS_memset(okeybuf, 0, sizeof(okeybuf)); 481 FXSYS_memset(okeybuf, 0, sizeof(okeybuf));
484 FXSYS_memcpy(okeybuf, okey.c_str(), okeylen); 482 FXSYS_memcpy(okeybuf, okey.c_str(), okeylen);
485 if (m_Revision == 2) { 483 if (m_Revision == 2) {
486 CRYPT_ArcFourCryptBlock(okeybuf, okeylen, enckey, key_len); 484 CRYPT_ArcFourCryptBlock(okeybuf, okeylen, enckey, key_len);
487 } else { 485 } else {
488 for (int i = 19; i >= 0; i--) { 486 for (int32_t i = 19; i >= 0; i--) {
489 uint8_t tempkey[32]; 487 uint8_t tempkey[32];
490 FXSYS_memset(tempkey, 0, sizeof(tempkey)); 488 FXSYS_memset(tempkey, 0, sizeof(tempkey));
491 for (int j = 0; j < m_KeyLen; j++) { 489 for (int j = 0; j < m_KeyLen; j++)
492 tempkey[j] = enckey[j] ^ i; 490 tempkey[j] = enckey[j] ^ static_cast<uint8_t>(i);
493 }
494 CRYPT_ArcFourCryptBlock(okeybuf, okeylen, tempkey, key_len); 491 CRYPT_ArcFourCryptBlock(okeybuf, okeylen, tempkey, key_len);
495 } 492 }
496 } 493 }
497 int len = 32; 494 int len = 32;
498 while (len && defpasscode[len - 1] == okeybuf[len - 1]) { 495 while (len && defpasscode[len - 1] == okeybuf[len - 1]) {
499 len--; 496 len--;
500 } 497 }
501 return CFX_ByteString(okeybuf, len); 498 return CFX_ByteString(okeybuf, len);
502 } 499 }
503 FX_BOOL CPDF_SecurityHandler::CheckOwnerPassword(const uint8_t* password, 500 FX_BOOL CPDF_SecurityHandler::CheckOwnerPassword(const uint8_t* password,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 AES256_SetPassword(pEncryptDict, owner_pass, owner_size, TRUE, 543 AES256_SetPassword(pEncryptDict, owner_pass, owner_size, TRUE,
547 m_EncryptKey); 544 m_EncryptKey);
548 AES256_SetPerms(pEncryptDict, m_Permissions, 545 AES256_SetPerms(pEncryptDict, m_Permissions,
549 pEncryptDict->GetBooleanBy("EncryptMetadata", true), 546 pEncryptDict->GetBooleanBy("EncryptMetadata", true),
550 m_EncryptKey); 547 m_EncryptKey);
551 } 548 }
552 return; 549 return;
553 } 550 }
554 if (bDefault) { 551 if (bDefault) {
555 uint8_t passcode[32]; 552 uint8_t passcode[32];
556 uint32_t i; 553 for (uint32_t i = 0; i < 32; i++) {
557 for (i = 0; i < 32; i++) {
558 passcode[i] = 554 passcode[i] =
559 i < owner_size ? owner_pass[i] : defpasscode[i - owner_size]; 555 i < owner_size ? owner_pass[i] : defpasscode[i - owner_size];
560 } 556 }
561 uint8_t digest[16]; 557 uint8_t digest[16];
562 CRYPT_MD5Generate(passcode, 32, digest); 558 CRYPT_MD5Generate(passcode, 32, digest);
563 if (m_Revision >= 3) { 559 if (m_Revision >= 3) {
564 for (int i = 0; i < 50; i++) { 560 for (uint32_t i = 0; i < 50; i++)
565 CRYPT_MD5Generate(digest, 16, digest); 561 CRYPT_MD5Generate(digest, 16, digest);
566 }
567 } 562 }
568 uint8_t enckey[32]; 563 uint8_t enckey[32];
569 FXSYS_memcpy(enckey, digest, key_len); 564 FXSYS_memcpy(enckey, digest, key_len);
570 for (i = 0; i < 32; i++) { 565 for (uint32_t i = 0; i < 32; i++) {
571 passcode[i] = i < user_size ? user_pass[i] : defpasscode[i - user_size]; 566 passcode[i] = i < user_size ? user_pass[i] : defpasscode[i - user_size];
572 } 567 }
573 CRYPT_ArcFourCryptBlock(passcode, 32, enckey, key_len); 568 CRYPT_ArcFourCryptBlock(passcode, 32, enckey, key_len);
574 uint8_t tempkey[32]; 569 uint8_t tempkey[32];
575 if (m_Revision >= 3) { 570 if (m_Revision >= 3) {
576 for (i = 1; i <= 19; i++) { 571 for (uint8_t i = 1; i <= 19; i++) {
577 for (int j = 0; j < key_len; j++) { 572 for (int j = 0; j < key_len; j++)
578 tempkey[j] = enckey[j] ^ (uint8_t)i; 573 tempkey[j] = enckey[j] ^ i;
579 }
580 CRYPT_ArcFourCryptBlock(passcode, 32, tempkey, key_len); 574 CRYPT_ArcFourCryptBlock(passcode, 32, tempkey, key_len);
581 } 575 }
582 } 576 }
583 pEncryptDict->SetAtString("O", CFX_ByteString(passcode, 32)); 577 pEncryptDict->SetAtString("O", CFX_ByteString(passcode, 32));
584 } 578 }
585 CalcEncryptKey(m_pEncryptDict, (uint8_t*)user_pass, user_size, m_EncryptKey, 579 CalcEncryptKey(m_pEncryptDict, (uint8_t*)user_pass, user_size, m_EncryptKey,
586 key_len, FALSE, pIdArray); 580 key_len, FALSE, pIdArray);
587 if (m_Revision < 3) { 581 if (m_Revision < 3) {
588 uint8_t tempbuf[32]; 582 uint8_t tempbuf[32];
589 FXSYS_memcpy(tempbuf, defpasscode, 32); 583 FXSYS_memcpy(tempbuf, defpasscode, 32);
590 CRYPT_ArcFourCryptBlock(tempbuf, 32, m_EncryptKey, key_len); 584 CRYPT_ArcFourCryptBlock(tempbuf, 32, m_EncryptKey, key_len);
591 pEncryptDict->SetAtString("U", CFX_ByteString(tempbuf, 32)); 585 pEncryptDict->SetAtString("U", CFX_ByteString(tempbuf, 32));
592 } else { 586 } else {
593 uint8_t md5[100]; 587 uint8_t md5[100];
594 CRYPT_MD5Start(md5); 588 CRYPT_MD5Start(md5);
595 CRYPT_MD5Update(md5, defpasscode, 32); 589 CRYPT_MD5Update(md5, defpasscode, 32);
596 if (pIdArray) { 590 if (pIdArray) {
597 CFX_ByteString id = pIdArray->GetStringAt(0); 591 CFX_ByteString id = pIdArray->GetStringAt(0);
598 CRYPT_MD5Update(md5, (uint8_t*)id.c_str(), id.GetLength()); 592 CRYPT_MD5Update(md5, (uint8_t*)id.c_str(), id.GetLength());
599 } 593 }
600 uint8_t digest[32]; 594 uint8_t digest[32];
601 CRYPT_MD5Finish(md5, digest); 595 CRYPT_MD5Finish(md5, digest);
602 CRYPT_ArcFourCryptBlock(digest, 16, m_EncryptKey, key_len); 596 CRYPT_ArcFourCryptBlock(digest, 16, m_EncryptKey, key_len);
603 uint8_t tempkey[32]; 597 uint8_t tempkey[32];
604 for (int i = 1; i <= 19; i++) { 598 for (uint8_t i = 1; i <= 19; i++) {
605 for (int j = 0; j < key_len; j++) { 599 for (int j = 0; j < key_len; j++) {
606 tempkey[j] = m_EncryptKey[j] ^ (uint8_t)i; 600 tempkey[j] = m_EncryptKey[j] ^ i;
607 } 601 }
608 CRYPT_ArcFourCryptBlock(digest, 16, tempkey, key_len); 602 CRYPT_ArcFourCryptBlock(digest, 16, tempkey, key_len);
609 } 603 }
610 CRYPT_MD5Generate(digest, 16, digest + 16); 604 CRYPT_MD5Generate(digest, 16, digest + 16);
611 pEncryptDict->SetAtString("U", CFX_ByteString(digest, 32)); 605 pEncryptDict->SetAtString("U", CFX_ByteString(digest, 32));
612 } 606 }
613 } 607 }
614 void CPDF_SecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict, 608 void CPDF_SecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict,
615 CPDF_Array* pIdArray, 609 CPDF_Array* pIdArray,
616 const uint8_t* user_pass, 610 const uint8_t* user_pass,
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 buf[11] = 'b'; 689 buf[11] = 'b';
696 uint8_t* aes = FX_Alloc(uint8_t, 2048); 690 uint8_t* aes = FX_Alloc(uint8_t, 2048);
697 CRYPT_AESSetKey(aes, 16, key, 32, TRUE); 691 CRYPT_AESSetKey(aes, 16, key, 32, TRUE);
698 uint8_t iv[16], buf1[16]; 692 uint8_t iv[16], buf1[16];
699 FXSYS_memset(iv, 0, 16); 693 FXSYS_memset(iv, 0, 16);
700 CRYPT_AESSetIV(aes, iv); 694 CRYPT_AESSetIV(aes, iv);
701 CRYPT_AESEncrypt(aes, buf1, buf, 16); 695 CRYPT_AESEncrypt(aes, buf1, buf, 16);
702 FX_Free(aes); 696 FX_Free(aes);
703 pEncryptDict->SetAtString("Perms", CFX_ByteString(buf1, 16)); 697 pEncryptDict->SetAtString("Perms", CFX_ByteString(buf1, 16));
704 } 698 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_page/fpdf_page_parser.cpp ('k') | core/fpdfapi/fpdf_parser/cpdf_syntax_parser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698