Commit 09df396931c285586eb0335f69de69f0672339bc
1 parent
a051a162
Refactor `EncryptionParameters` to encapsulate crypt filter interpretation logic…
…, transition `interpretCF` to a class method, and eliminate redundant parameter passing for improved clarity and maintainability.
Showing
3 changed files
with
21 additions
and
19 deletions
include/qpdf/QPDF.hh
| ... | ... | @@ -964,7 +964,6 @@ class QPDF |
| 964 | 964 | void insertPageobjToPage(QPDFObjectHandle const& obj, int pos, bool check_duplicate); |
| 965 | 965 | |
| 966 | 966 | // methods to support encryption -- implemented in QPDF_encryption.cc |
| 967 | - static encryption_method_e interpretCF(EncryptionParameters& encp, QPDFObjectHandle const& cf); | |
| 968 | 967 | void initializeEncryption(); |
| 969 | 968 | static std::string |
| 970 | 969 | getKeyForObject(std::shared_ptr<EncryptionParameters> encp, QPDFObjGen og, bool use_aes); | ... | ... |
libqpdf/QPDF_encryption.cc
| ... | ... | @@ -687,21 +687,21 @@ QPDF::EncryptionData::recover_encryption_key_with_password( |
| 687 | 687 | } |
| 688 | 688 | |
| 689 | 689 | QPDF::encryption_method_e |
| 690 | -QPDF::interpretCF(EncryptionParameters& encp, QPDFObjectHandle const& cf) | |
| 690 | +QPDF::EncryptionParameters::interpretCF(QPDFObjectHandle const& cf) const | |
| 691 | 691 | { |
| 692 | - if (cf.isName()) { | |
| 693 | - std::string filter = cf.getName(); | |
| 694 | - auto it = encp.crypt_filters.find(filter); | |
| 695 | - if (it != encp.crypt_filters.end()) { | |
| 696 | - return it->second; | |
| 697 | - } | |
| 698 | - if (filter == "/Identity") { | |
| 699 | - return e_none; | |
| 700 | - } | |
| 701 | - return e_unknown; | |
| 692 | + if (!cf.isName()) { | |
| 693 | + // Default: /Identity | |
| 694 | + return e_none; | |
| 695 | + } | |
| 696 | + std::string filter = cf.getName(); | |
| 697 | + auto it = crypt_filters.find(filter); | |
| 698 | + if (it != crypt_filters.end()) { | |
| 699 | + return it->second; | |
| 700 | + } | |
| 701 | + if (filter == "/Identity") { | |
| 702 | + return e_none; | |
| 702 | 703 | } |
| 703 | - // Default: /Identity | |
| 704 | - return e_none; | |
| 704 | + return e_unknown; | |
| 705 | 705 | } |
| 706 | 706 | |
| 707 | 707 | void |
| ... | ... | @@ -873,8 +873,8 @@ QPDF::EncryptionParameters::initialize(QPDF& qpdf) |
| 873 | 873 | } |
| 874 | 874 | } |
| 875 | 875 | |
| 876 | - cf_stream = interpretCF(*this, encryption_dict.getKey("/StmF")); | |
| 877 | - cf_string = interpretCF(*this, encryption_dict.getKey("/StrF")); | |
| 876 | + cf_stream = interpretCF(encryption_dict.getKey("/StmF")); | |
| 877 | + cf_string = interpretCF(encryption_dict.getKey("/StrF")); | |
| 878 | 878 | if (auto EFF = encryption_dict.getKey("/EFF"); EFF.isName()) { |
| 879 | 879 | // qpdf does not use this for anything other than informational purposes. This is |
| 880 | 880 | // intended to instruct conforming writers on which crypt filter should be used when new |
| ... | ... | @@ -885,7 +885,7 @@ QPDF::EncryptionParameters::initialize(QPDF& qpdf) |
| 885 | 885 | // the way I was imagining. Still, providing this information could be useful when |
| 886 | 886 | // looking at a file generated by something else, such as Acrobat when specifying that |
| 887 | 887 | // only attachments should be encrypted. |
| 888 | - cf_file = interpretCF(*this, EFF); | |
| 888 | + cf_file = interpretCF(EFF); | |
| 889 | 889 | } else { |
| 890 | 890 | cf_file = cf_stream; |
| 891 | 891 | } |
| ... | ... | @@ -1052,7 +1052,7 @@ QPDF::decryptStream( |
| 1052 | 1052 | QPDFObjectHandle decode_parms = stream_dict.getKey("/DecodeParms"); |
| 1053 | 1053 | if (decode_parms.isDictionaryOfType("/CryptFilterDecodeParms")) { |
| 1054 | 1054 | QTC::TC("qpdf", "QPDF_encryption stream crypt filter"); |
| 1055 | - method = interpretCF(*encp, decode_parms.getKey("/Name")); | |
| 1055 | + method = encp->interpretCF(decode_parms.getKey("/Name")); | |
| 1056 | 1056 | method_source = "stream's Crypt decode parameters"; |
| 1057 | 1057 | } |
| 1058 | 1058 | } else if ( |
| ... | ... | @@ -1067,7 +1067,7 @@ QPDF::decryptStream( |
| 1067 | 1067 | if (crypt_params.isDictionary() && |
| 1068 | 1068 | crypt_params.getKey("/Name").isName()) { |
| 1069 | 1069 | QTC::TC("qpdf", "QPDF_encrypt crypt array"); |
| 1070 | - method = interpretCF(*encp, crypt_params.getKey("/Name")); | |
| 1070 | + method = encp->interpretCF(crypt_params.getKey("/Name")); | |
| 1071 | 1071 | method_source = "stream's Crypt decode parameters (array)"; |
| 1072 | 1072 | } |
| 1073 | 1073 | } | ... | ... |
libqpdf/qpdf/QPDF_private.hh
| ... | ... | @@ -187,8 +187,11 @@ class QPDF::EncryptionParameters |
| 187 | 187 | public: |
| 188 | 188 | EncryptionParameters() = default; |
| 189 | 189 | |
| 190 | + encryption_method_e interpretCF(QPDFObjectHandle const& cf) const; | |
| 191 | + | |
| 190 | 192 | private: |
| 191 | 193 | void initialize(QPDF& qpdf); |
| 194 | + | |
| 192 | 195 | bool encrypted{false}; |
| 193 | 196 | bool encryption_initialized{false}; |
| 194 | 197 | int encryption_P{0}; | ... | ... |