Index: core/fpdfapi/fpdf_parser/cpdf_crypto_handler.cpp |
diff --git a/core/fpdfapi/fpdf_parser/cpdf_crypto_handler.cpp b/core/fpdfapi/fpdf_parser/cpdf_crypto_handler.cpp |
index 3cd973c277b05ef964fd0fa927207a9d95cdf9be..6dfe918761e43a6bed92b15628aa5c57b9ce7640 100644 |
--- a/core/fpdfapi/fpdf_parser/cpdf_crypto_handler.cpp |
+++ b/core/fpdfapi/fpdf_parser/cpdf_crypto_handler.cpp |
@@ -28,14 +28,8 @@ void CPDF_CryptoHandler::CryptBlock(FX_BOOL bEncrypt, |
int realkeylen = 16; |
if (m_Cipher != FXCIPHER_AES || m_KeyLen != 32) { |
uint8_t key1[32]; |
- FXSYS_memcpy(key1, m_EncryptKey, m_KeyLen); |
- key1[m_KeyLen + 0] = (uint8_t)objnum; |
- key1[m_KeyLen + 1] = (uint8_t)(objnum >> 8); |
- key1[m_KeyLen + 2] = (uint8_t)(objnum >> 16); |
- key1[m_KeyLen + 3] = (uint8_t)gennum; |
- key1[m_KeyLen + 4] = (uint8_t)(gennum >> 8); |
- FXSYS_memcpy(key1 + m_KeyLen, &objnum, 3); |
- FXSYS_memcpy(key1 + m_KeyLen + 3, &gennum, 2); |
+ PopulateKey(objnum, gennum, key1); |
+ |
if (m_Cipher == FXCIPHER_AES) { |
FXSYS_memcpy(key1 + m_KeyLen + 5, "sAlT", 4); |
} |
@@ -107,9 +101,8 @@ void* CPDF_CryptoHandler::CryptStart(uint32_t objnum, |
return pContext; |
} |
uint8_t key1[48]; |
- FXSYS_memcpy(key1, m_EncryptKey, m_KeyLen); |
- FXSYS_memcpy(key1 + m_KeyLen, &objnum, 3); |
- FXSYS_memcpy(key1 + m_KeyLen + 3, &gennum, 2); |
+ PopulateKey(objnum, gennum, key1); |
+ |
if (m_Cipher == FXCIPHER_AES) { |
FXSYS_memcpy(key1 + m_KeyLen + 5, "sAlT", 4); |
} |
@@ -137,6 +130,7 @@ void* CPDF_CryptoHandler::CryptStart(uint32_t objnum, |
CRYPT_ArcFourSetup(pContext, realkey, realkeylen); |
return pContext; |
} |
+ |
FX_BOOL CPDF_CryptoHandler::CryptStream(void* context, |
const uint8_t* src_buf, |
uint32_t src_size, |
@@ -335,3 +329,14 @@ CPDF_CryptoHandler::CPDF_CryptoHandler() { |
CPDF_CryptoHandler::~CPDF_CryptoHandler() { |
FX_Free(m_pAESContext); |
} |
+ |
+void CPDF_CryptoHandler::PopulateKey(uint32_t objnum, |
+ uint32_t gennum, |
+ uint8_t* key) { |
+ FXSYS_memcpy(key, m_EncryptKey, m_KeyLen); |
+ key[m_KeyLen + 0] = (uint8_t)objnum; |
+ key[m_KeyLen + 1] = (uint8_t)(objnum >> 8); |
+ key[m_KeyLen + 2] = (uint8_t)(objnum >> 16); |
+ key[m_KeyLen + 3] = (uint8_t)gennum; |
+ key[m_KeyLen + 4] = (uint8_t)(gennum >> 8); |
+} |