diff options
author | Jay Berkenbilt <ejb@ql.org> | 2012-07-16 01:07:59 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2012-07-16 01:07:59 +0200 |
commit | db95960ac16076030a840a1ae050eea35aa21ea2 (patch) | |
tree | 0543e23a4e3156f7852e47bfd301112adcb89d0d /libqpdf | |
parent | b5012512916cf136d2f44c0f525075c26686bb77 (diff) | |
download | qpdf-db95960ac16076030a840a1ae050eea35aa21ea2.tar.zst |
Bug fix: preserve AES when copying encryption parameters
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDFWriter.cc | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc index 96f3ff21..b5daab23 100644 --- a/libqpdf/QPDFWriter.cc +++ b/libqpdf/QPDFWriter.cc @@ -409,10 +409,34 @@ QPDFWriter::copyEncryptionParameters(QPDF& qpdf) this->encrypt_metadata = encrypt.getKey("/EncryptMetadata").getBoolValue(); } + if (V >= 4) + { + if (encrypt.hasKey("/CF") && + encrypt.getKey("/CF").isDictionary() && + encrypt.hasKey("/StmF") && + encrypt.getKey("/StmF").isName()) + { + // Determine whether to use AES from StmF. QPDFWriter + // can't write files with different StrF and StmF. + QPDFObjectHandle CF = encrypt.getKey("/CF"); + QPDFObjectHandle StmF = encrypt.getKey("/StmF"); + if (CF.hasKey(StmF.getName()) && + CF.getKey(StmF.getName()).isDictionary()) + { + QPDFObjectHandle StmF_data = CF.getKey(StmF.getName()); + if (StmF_data.hasKey("/CFM") && + StmF_data.getKey("/CFM").isName() && + StmF_data.getKey("/CFM").getName() == "/AESV2") + { + this->encrypt_use_aes = true; + } + } + } + } QTC::TC("qpdf", "QPDFWriter copy encrypt metadata", this->encrypt_metadata ? 0 : 1); - this->id1 = - trailer.getKey("/ID").getArrayItem(0).getStringValue(); + QTC::TC("qpdf", "QPDFWriter copy use_aes", + this->encrypt_use_aes ? 0 : 1); setEncryptionParametersInternal( V, encrypt.getKey("/R").getIntValue(), |