summaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFWriter.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2012-07-16 01:07:59 +0200
committerJay Berkenbilt <ejb@ql.org>2012-07-16 01:07:59 +0200
commitdb95960ac16076030a840a1ae050eea35aa21ea2 (patch)
tree0543e23a4e3156f7852e47bfd301112adcb89d0d /libqpdf/QPDFWriter.cc
parentb5012512916cf136d2f44c0f525075c26686bb77 (diff)
downloadqpdf-db95960ac16076030a840a1ae050eea35aa21ea2.tar.zst
Bug fix: preserve AES when copying encryption parameters
Diffstat (limited to 'libqpdf/QPDFWriter.cc')
-rw-r--r--libqpdf/QPDFWriter.cc28
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(),