1 // Copyright 2016 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FPDFAPI_PARSER_CPDF_CRYPTO_HANDLER_H_ 8 #define CORE_FPDFAPI_PARSER_CPDF_CRYPTO_HANDLER_H_ 9 10 #include "core/fxcrt/fx_basic.h" 11 #include "core/fxcrt/fx_string.h" 12 #include "core/fxcrt/fx_system.h" 13 14 class CPDF_Dictionary; 15 class CPDF_SecurityHandler; 16 17 class CPDF_CryptoHandler { 18 public: 19 CPDF_CryptoHandler(); 20 ~CPDF_CryptoHandler(); 21 22 bool Init(CPDF_Dictionary* pEncryptDict, 23 CPDF_SecurityHandler* pSecurityHandler); 24 uint32_t DecryptGetSize(uint32_t src_size); 25 void* DecryptStart(uint32_t objnum, uint32_t gennum); 26 void Decrypt(uint32_t objnum, uint32_t gennum, CFX_ByteString& str); 27 bool DecryptStream(void* context, 28 const uint8_t* src_buf, 29 uint32_t src_size, 30 CFX_BinaryBuf& dest_buf); 31 bool DecryptFinish(void* context, CFX_BinaryBuf& dest_buf); 32 uint32_t EncryptGetSize(uint32_t objnum, 33 uint32_t version, 34 const uint8_t* src_buf, 35 uint32_t src_size); 36 bool EncryptContent(uint32_t objnum, 37 uint32_t version, 38 const uint8_t* src_buf, 39 uint32_t src_size, 40 uint8_t* dest_buf, 41 uint32_t& dest_size); 42 43 bool Init(int cipher, const uint8_t* key, int keylen); 44 45 protected: 46 void CryptBlock(bool bEncrypt, 47 uint32_t objnum, 48 uint32_t gennum, 49 const uint8_t* src_buf, 50 uint32_t src_size, 51 uint8_t* dest_buf, 52 uint32_t& dest_size); 53 void* CryptStart(uint32_t objnum, uint32_t gennum, bool bEncrypt); 54 bool CryptStream(void* context, 55 const uint8_t* src_buf, 56 uint32_t src_size, 57 CFX_BinaryBuf& dest_buf, 58 bool bEncrypt); 59 bool CryptFinish(void* context, CFX_BinaryBuf& dest_buf, bool bEncrypt); 60 61 uint8_t m_EncryptKey[32]; 62 int m_KeyLen; 63 int m_Cipher; 64 uint8_t* m_pAESContext; 65 66 private: 67 void PopulateKey(uint32_t objnum, uint32_t gennum, uint8_t* key); 68 }; 69 70 #endif // CORE_FPDFAPI_PARSER_CPDF_CRYPTO_HANDLER_H_ 71