| Index: core/fpdfapi/fpdf_parser/cpdf_standard_security_handler.cpp
|
| diff --git a/core/fpdfapi/fpdf_parser/cpdf_standard_security_handler.cpp b/core/fpdfapi/fpdf_parser/cpdf_standard_security_handler.cpp
|
| index b7ed0315bb8097de8851f784ae88aad2264e6eed..e5451d4c25f86b2ab7049a0eb492f128fa304cfc 100644
|
| --- a/core/fpdfapi/fpdf_parser/cpdf_standard_security_handler.cpp
|
| +++ b/core/fpdfapi/fpdf_parser/cpdf_standard_security_handler.cpp
|
| @@ -98,18 +98,18 @@ FX_BOOL CPDF_StandardSecurityHandler::OnInit(CPDF_Parser* pParser,
|
| }
|
| FX_BOOL CPDF_StandardSecurityHandler::CheckSecurity(int32_t key_len) {
|
| CFX_ByteString password = m_pParser->GetPassword();
|
| - if (CheckPassword(password, password.GetLength(), TRUE, m_EncryptKey,
|
| - key_len)) {
|
| + if (CheckPassword(password.raw_str(), password.GetLength(), TRUE,
|
| + m_EncryptKey, key_len)) {
|
| if (password.IsEmpty()) {
|
| - if (!CheckPassword(password, password.GetLength(), FALSE, m_EncryptKey,
|
| - key_len)) {
|
| + if (!CheckPassword(password.raw_str(), password.GetLength(), FALSE,
|
| + m_EncryptKey, key_len)) {
|
| return FALSE;
|
| }
|
| }
|
| return TRUE;
|
| }
|
| - return CheckPassword(password, password.GetLength(), FALSE, m_EncryptKey,
|
| - key_len);
|
| + return CheckPassword(password.raw_str(), password.GetLength(), FALSE,
|
| + m_EncryptKey, key_len);
|
| }
|
| uint32_t CPDF_StandardSecurityHandler::GetPermissions() {
|
| return m_Permissions;
|
| @@ -320,18 +320,18 @@ FX_BOOL CPDF_StandardSecurityHandler::AES256_CheckPassword(
|
| if (ukey.GetLength() < 48) {
|
| return FALSE;
|
| }
|
| - const uint8_t* pkey = bOwner ? (const uint8_t*)okey : (const uint8_t*)ukey;
|
| + const uint8_t* pkey = (bOwner ? okey : ukey).raw_str();
|
| uint8_t sha[128];
|
| uint8_t digest[32];
|
| if (m_Revision >= 6) {
|
| Revision6_Hash(password, size, (const uint8_t*)pkey + 32,
|
| - (bOwner ? (const uint8_t*)ukey : NULL), digest);
|
| + bOwner ? ukey.raw_str() : nullptr, digest);
|
| } else {
|
| CRYPT_SHA256Start(sha);
|
| CRYPT_SHA256Update(sha, password, size);
|
| CRYPT_SHA256Update(sha, pkey + 32, 8);
|
| if (bOwner) {
|
| - CRYPT_SHA256Update(sha, ukey, 48);
|
| + CRYPT_SHA256Update(sha, ukey.raw_str(), 48);
|
| }
|
| CRYPT_SHA256Finish(sha, digest);
|
| }
|
| @@ -343,13 +343,13 @@ FX_BOOL CPDF_StandardSecurityHandler::AES256_CheckPassword(
|
| }
|
| if (m_Revision >= 6) {
|
| Revision6_Hash(password, size, (const uint8_t*)pkey + 40,
|
| - (bOwner ? (const uint8_t*)ukey : NULL), digest);
|
| + bOwner ? ukey.raw_str() : nullptr, digest);
|
| } else {
|
| CRYPT_SHA256Start(sha);
|
| CRYPT_SHA256Update(sha, password, size);
|
| CRYPT_SHA256Update(sha, pkey + 40, 8);
|
| if (bOwner) {
|
| - CRYPT_SHA256Update(sha, ukey, 48);
|
| + CRYPT_SHA256Update(sha, ukey.raw_str(), 48);
|
| }
|
| CRYPT_SHA256Finish(sha, digest);
|
| }
|
| @@ -364,7 +364,7 @@ FX_BOOL CPDF_StandardSecurityHandler::AES256_CheckPassword(
|
| uint8_t iv[16];
|
| FXSYS_memset(iv, 0, 16);
|
| CRYPT_AESSetIV(aes, iv);
|
| - CRYPT_AESDecrypt(aes, key, ekey, 32);
|
| + CRYPT_AESDecrypt(aes, key, ekey.raw_str(), 32);
|
| CRYPT_AESSetKey(aes, 16, key, 32, FALSE);
|
| CRYPT_AESSetIV(aes, iv);
|
| CFX_ByteString perms = m_pEncryptDict->GetStringBy("Perms");
|
| @@ -377,7 +377,7 @@ FX_BOOL CPDF_StandardSecurityHandler::AES256_CheckPassword(
|
| if (copy_len > (uint32_t)perms.GetLength()) {
|
| copy_len = perms.GetLength();
|
| }
|
| - FXSYS_memcpy(perms_buf, (const uint8_t*)perms, copy_len);
|
| + FXSYS_memcpy(perms_buf, perms.raw_str(), copy_len);
|
| uint8_t buf[16];
|
| CRYPT_AESDecrypt(aes, buf, perms_buf, 16);
|
| FX_Free(aes);
|
| @@ -515,12 +515,12 @@ FX_BOOL CPDF_StandardSecurityHandler::CheckOwnerPassword(
|
| uint8_t* key,
|
| int32_t key_len) {
|
| CFX_ByteString user_pass = GetUserPassword(password, pass_size, key_len);
|
| - if (CheckUserPassword(user_pass, user_pass.GetLength(), FALSE, key,
|
| + if (CheckUserPassword(user_pass.raw_str(), user_pass.GetLength(), FALSE, key,
|
| key_len)) {
|
| return TRUE;
|
| }
|
| - return CheckUserPassword(user_pass, user_pass.GetLength(), TRUE, key,
|
| - key_len);
|
| + return CheckUserPassword(user_pass.raw_str(), user_pass.GetLength(), TRUE,
|
| + key, key_len);
|
| }
|
| FX_BOOL CPDF_StandardSecurityHandler::IsMetadataEncrypted() {
|
| return m_pEncryptDict->GetBooleanBy("EncryptMetadata", TRUE);
|
| @@ -622,20 +622,10 @@ void CPDF_StandardSecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict,
|
| }
|
| void CPDF_StandardSecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict,
|
| CPDF_Array* pIdArray,
|
| - const uint8_t* user_pass,
|
| - uint32_t user_size,
|
| - const uint8_t* owner_pass,
|
| - uint32_t owner_size,
|
| - uint32_t type) {
|
| - OnCreate(pEncryptDict, pIdArray, user_pass, user_size, owner_pass, owner_size,
|
| - TRUE, type);
|
| -}
|
| -void CPDF_StandardSecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict,
|
| - CPDF_Array* pIdArray,
|
| - const uint8_t* user_pass,
|
| - uint32_t user_size,
|
| + const CFX_ByteStringC& user_pass,
|
| uint32_t type) {
|
| - OnCreate(pEncryptDict, pIdArray, user_pass, user_size, NULL, 0, FALSE, type);
|
| + OnCreate(pEncryptDict, pIdArray, user_pass.raw_str(), user_pass.GetLength(),
|
| + NULL, 0, FALSE, type);
|
| }
|
| void CPDF_StandardSecurityHandler::AES256_SetPassword(
|
| CPDF_Dictionary* pEncryptDict,
|
| @@ -652,14 +642,14 @@ void CPDF_StandardSecurityHandler::AES256_SetPassword(
|
| CFX_ByteString ukey = pEncryptDict->GetStringBy("U");
|
| uint8_t digest1[48];
|
| if (m_Revision >= 6) {
|
| - Revision6_Hash(password, size, digest,
|
| - (bOwner ? (const uint8_t*)ukey : NULL), digest1);
|
| + Revision6_Hash(password, size, digest, bOwner ? ukey.raw_str() : nullptr,
|
| + digest1);
|
| } else {
|
| CRYPT_SHA256Start(sha);
|
| CRYPT_SHA256Update(sha, password, size);
|
| CRYPT_SHA256Update(sha, digest, 8);
|
| if (bOwner) {
|
| - CRYPT_SHA256Update(sha, ukey, ukey.GetLength());
|
| + CRYPT_SHA256Update(sha, ukey.raw_str(), ukey.GetLength());
|
| }
|
| CRYPT_SHA256Finish(sha, digest1);
|
| }
|
| @@ -667,13 +657,13 @@ void CPDF_StandardSecurityHandler::AES256_SetPassword(
|
| pEncryptDict->SetAtString(bOwner ? "O" : "U", CFX_ByteString(digest1, 48));
|
| if (m_Revision >= 6) {
|
| Revision6_Hash(password, size, digest + 8,
|
| - (bOwner ? (const uint8_t*)ukey : NULL), digest1);
|
| + bOwner ? ukey.raw_str() : nullptr, digest1);
|
| } else {
|
| CRYPT_SHA256Start(sha);
|
| CRYPT_SHA256Update(sha, password, size);
|
| CRYPT_SHA256Update(sha, digest + 8, 8);
|
| if (bOwner) {
|
| - CRYPT_SHA256Update(sha, ukey, ukey.GetLength());
|
| + CRYPT_SHA256Update(sha, ukey.raw_str(), ukey.GetLength());
|
| }
|
| CRYPT_SHA256Finish(sha, digest1);
|
| }
|
|
|