From 67e353e4e4a9207e26171502f44fb2efbf7848c1 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sun, 18 Oct 2009 02:26:09 +0000 Subject: 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 --- TODO | 4 ++-- libqpdf/QPDFWriter.cc | 9 ++++++--- libqpdf/QPDF_encryption.cc | 2 +- 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; -- cgit v1.2.3-54-g00ecf