You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2015/04/29 20:47:21 UTC
svn commit: r1676815 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption:
PDEncryption.java PublicKeySecurityHandler.java StandardSecurityHandler.java
Author: tilman
Date: Wed Apr 29 18:47:20 2015
New Revision: 1676815
URL: http://svn.apache.org/r1676815
Log:
PDFBOX-2781: remove / ignore the CF, StmF, and StrF entries if V is not 4 or 5.
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDEncryption.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeySecurityHandler.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDEncryption.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDEncryption.java?rev=1676815&r1=1676814&r2=1676815&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDEncryption.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDEncryption.java Wed Apr 29 18:47:20 2015
@@ -591,6 +591,13 @@ public class PDEncryption
return perms;
}
+ /**
+ * remove CF, StmF, and StrF entries. This is to be called if V is not 4 or 5.
+ */
+ public void removeV45filters()
+ {
+ dictionary.setItem(COSName.CF, null);
+ dictionary.setItem(COSName.STM_F, null);
+ dictionary.setItem(COSName.STR_F, null);
+ }
}
-
-
\ No newline at end of file
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeySecurityHandler.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeySecurityHandler.java?rev=1676815&r1=1676814&r2=1676815&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeySecurityHandler.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeySecurityHandler.java Wed Apr 29 18:47:20 2015
@@ -297,6 +297,10 @@ public final class PublicKeySecurityHand
dictionary.setFilter(FILTER);
dictionary.setLength(this.keyLength);
dictionary.setVersion(2);
+
+ // remove CF, StmF, and StrF entries that may be left from a previous encryption
+ dictionary.removeV45filters();
+
dictionary.setSubFilter(SUBFILTER);
// create the 20 bytes seed
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java?rev=1676815&r1=1676814&r2=1676815&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java Wed Apr 29 18:47:20 2015
@@ -99,7 +99,7 @@ public final class StandardSecurityHandl
/**
* Computes the version number of the StandardSecurityHandler
* regarding the encryption key length.
- * See PDF Spec 1.6 p 93
+ * See PDF Spec 1.6 p 93 and PDF 1.7 AEL3
*
* @return The computed version number.
*/
@@ -245,17 +245,21 @@ public final class StandardSecurityHandl
validatePerms(encryption, dicPermissions, encryptMetadata);
}
- // detect whether AES encryption is used. This assumes that the encryption algo is
- // stored in the PDCryptFilterDictionary
- PDCryptFilterDictionary stdCryptFilterDictionary = encryption.getStdCryptFilterDictionary();
-
- if (stdCryptFilterDictionary != null)
+ if (encryption.getVersion() == 4 || encryption.getVersion() == 5)
{
- COSName cryptFilterMethod = stdCryptFilterDictionary.getCryptFilterMethod();
- if (cryptFilterMethod != null)
- {
- setAES("AESV2".equalsIgnoreCase(cryptFilterMethod.getName()) ||
- "AESV3".equalsIgnoreCase(cryptFilterMethod.getName()));
+ // detect whether AES encryption is used. This assumes that the encryption algo is
+ // stored in the PDCryptFilterDictionary
+ // However, crypt filters are used only when V is 4 or 5.
+ PDCryptFilterDictionary stdCryptFilterDictionary = encryption.getStdCryptFilterDictionary();
+
+ if (stdCryptFilterDictionary != null)
+ {
+ COSName cryptFilterMethod = stdCryptFilterDictionary.getCryptFilterMethod();
+ if (cryptFilterMethod != null)
+ {
+ setAES("AESV2".equalsIgnoreCase(cryptFilterMethod.getName())
+ || "AESV3".equalsIgnoreCase(cryptFilterMethod.getName()));
+ }
}
}
}
@@ -332,6 +336,11 @@ public final class StandardSecurityHandl
int revision = computeRevisionNumber();
encryptionDictionary.setFilter(FILTER);
encryptionDictionary.setVersion(version);
+ if (version != 4 && version != 5)
+ {
+ // remove CF, StmF, and StrF entries that may be left from a previous encryption
+ encryptionDictionary.removeV45filters();
+ }
encryptionDictionary.setRevision(revision);
encryptionDictionary.setLength(keyLength);