summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2009-10-18 04:26:09 +0200
committerJay Berkenbilt <ejb@ql.org>2009-10-18 04:26:09 +0200
commit67e353e4e4a9207e26171502f44fb2efbf7848c1 (patch)
treeb0f185afbb90be11882934381165a018361ab6ea
parentb873dc9c59f4445239f68d7138aebb53cc0df648 (diff)
downloadqpdf-67e353e4e4a9207e26171502f44fb2efbf7848c1.tar.zst
use StdCF to make adobe reader happy; handle EncryptMetadata properly when reading
git-svn-id: svn+q:///qpdf/trunk@817 71b93d88-0707-0410-a8cf-f5a4172ac649
-rw-r--r--TODO4
-rw-r--r--libqpdf/QPDFWriter.cc9
-rw-r--r--libqpdf/QPDF_encryption.cc2
3 files changed, 9 insertions, 6 deletions
diff --git a/TODO b/TODO
index b2da8d35..ae188902 100644
--- a/TODO
+++ b/TODO
@@ -55,12 +55,12 @@
- figure out a way to test crypt filters defined on a stream
+ - test extraction of metadata with and without encrypted metadata
+
- would be nice to test strings and streams with different
encryption types, but without sample data, we'd have to write
them ourselves which is not that useful
- - figure out why xpdf can open my files but not acroread
-
- figure out how to look at the metadata so I can tell whether
/EncryptMetadata is working the way it's supposed to
diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc
index 8cdd2759..6cfa6fb9 100644
--- a/libqpdf/QPDFWriter.cc
+++ b/libqpdf/QPDFWriter.cc
@@ -363,11 +363,14 @@ QPDFWriter::setEncryptionParametersInternal(
}
if (V == 4)
{
- encryption_dictionary["/StmF"] = "/CF1";
- encryption_dictionary["/StrF"] = "/CF1";
+ // The spec says the value for the crypt filter key can be
+ // anything, and xpdf seems to agree. However, Adobe Reader
+ // won't open our files unless we use /StdCF.
+ encryption_dictionary["/StmF"] = "/StdCF";
+ encryption_dictionary["/StrF"] = "/StdCF";
std::string method = (this->encrypt_use_aes ? "/AESV2" : "/V2");
encryption_dictionary["/CF"] =
- "<< /CF1 << /AuthEvent /DocOpen /CFM " + method + " >> >>";
+ "<< /StdCF << /AuthEvent /DocOpen /CFM " + method + " >> >>";
}
this->encrypted = true;
diff --git a/libqpdf/QPDF_encryption.cc b/libqpdf/QPDF_encryption.cc
index d405759e..287a361a 100644
--- a/libqpdf/QPDF_encryption.cc
+++ b/libqpdf/QPDF_encryption.cc
@@ -612,7 +612,7 @@ QPDF::decryptStream(Pipeline*& pipeline, int objid, int generation,
// XXX What about embedded file streams?
}
use_aes = false;
- switch (this->cf_stream)
+ switch (method)
{
case e_none:
return;