You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/03/11 21:09:39 UTC
svn commit: r1576489 [1/2] - in /pdfbox/trunk:
examples/src/main/java/org/apache/pdfbox/examples/fdf/
examples/src/main/java/org/apache/pdfbox/examples/pdmodel/
examples/src/main/java/org/apache/pdfbox/examples/persistence/
examples/src/main/java/org/a...
Author: jahewson
Date: Tue Mar 11 20:09:38 2014
New Revision: 1576489
URL: http://svn.apache.org/r1576489
Log:
PDFBOX-1973: Don't throw NoSuchAlgorithmException
Added:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/MessageDigests.java
Modified:
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/fdf/SetField.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMessageToEachPage.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBlankPDF.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateLandscapePDF.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFiles.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorld.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldTTF.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1AfmPfb.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowColorBoxes.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/UsingTextMatrix.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/persistence/CopyDoc.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature.java
pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestRubberStampWithImage.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encryption/DocumentEncryption.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encryption/PDFEncryption.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.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/SecurityHandler.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFDocument.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateStructure.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigProperties.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSBase.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSString.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocument.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestLayerUtility.java
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/fdf/SetField.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/fdf/SetField.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/fdf/SetField.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/fdf/SetField.java Tue Mar 11 20:09:38 2014
@@ -69,14 +69,14 @@ public class SetField
* @throws IOException If there is an error importing the FDF document.
*/
public static void main(String[] args)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
SetField setter = new SetField();
setter.setField(args);
}
private void setField(String[] args)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
PDDocument pdf = null;
try
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java Tue Mar 11 20:09:38 2014
@@ -19,7 +19,6 @@ package org.apache.pdfbox.examples.pdmod
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import org.apache.pdfbox.exceptions.CryptographyException;
import org.apache.pdfbox.exceptions.SignatureException;
@@ -54,7 +53,7 @@ public class AddImageToPDF
* @throws IOException If there is an error writing the data.
*/
public void createPDFFromImage( String inputFile, String image, String outputFile )
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// the document
PDDocument doc = null;
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMessageToEachPage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMessageToEachPage.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMessageToEachPage.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMessageToEachPage.java Tue Mar 11 20:09:38 2014
@@ -17,7 +17,6 @@
package org.apache.pdfbox.examples.pdmodel;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import java.util.List;
import org.apache.pdfbox.exceptions.CryptographyException;
@@ -58,7 +57,7 @@ public class AddMessageToEachPage
* @throws IOException If there is an error writing the data.
*/
public void doIt( String file, String message, String outfile )
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// the document
PDDocument doc = null;
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBlankPDF.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBlankPDF.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBlankPDF.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBlankPDF.java Tue Mar 11 20:09:38 2014
@@ -17,7 +17,6 @@
package org.apache.pdfbox.examples.pdmodel;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import org.apache.pdfbox.exceptions.CryptographyException;
import org.apache.pdfbox.exceptions.SignatureException;
@@ -43,7 +42,7 @@ public class CreateBlankPDF
* @throws IOException If there is an error writing the data.
*/
public void create( String file )
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
PDDocument document = null;
try
@@ -72,7 +71,7 @@ public class CreateBlankPDF
* @throws IOException If there is an error writing the document data.
*/
public static void main( String[] args )
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
if( args.length != 1 )
{
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateLandscapePDF.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateLandscapePDF.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateLandscapePDF.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateLandscapePDF.java Tue Mar 11 20:09:38 2014
@@ -17,7 +17,6 @@
package org.apache.pdfbox.examples.pdmodel;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import org.apache.pdfbox.exceptions.CryptographyException;
import org.apache.pdfbox.exceptions.SignatureException;
@@ -51,7 +50,7 @@ public class CreateLandscapePDF
* @throws IOException If there is an error writing the data.
*/
public void doIt( String message, String outfile )
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// the document
PDDocument doc = null;
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFiles.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFiles.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFiles.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFiles.java Tue Mar 11 20:09:38 2014
@@ -18,7 +18,6 @@ package org.apache.pdfbox.examples.pdmod
import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.GregorianCalendar;
@@ -62,7 +61,7 @@ public class EmbeddedFiles
* @throws IOException If there is an error writing the data.
*/
public void doIt( String file)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// the document
PDDocument doc = null;
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorld.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorld.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorld.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorld.java Tue Mar 11 20:09:38 2014
@@ -17,7 +17,6 @@
package org.apache.pdfbox.examples.pdmodel;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import org.apache.pdfbox.exceptions.CryptographyException;
import org.apache.pdfbox.exceptions.SignatureException;
@@ -56,7 +55,7 @@ public class HelloWorld
* @throws IOException If there is an error writing the data.
*/
public void doIt( String file, String message)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// the document
PDDocument doc = null;
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldTTF.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldTTF.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldTTF.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldTTF.java Tue Mar 11 20:09:38 2014
@@ -18,7 +18,6 @@
package org.apache.pdfbox.examples.pdmodel;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import org.apache.pdfbox.exceptions.CryptographyException;
import org.apache.pdfbox.exceptions.SignatureException;
@@ -47,7 +46,7 @@ public class HelloWorldTTF
* @throws IOException If there is an error writing the data.
*/
public void doIt(final String file, final String message, final String fontfile)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// the document
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1AfmPfb.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1AfmPfb.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1AfmPfb.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1AfmPfb.java Tue Mar 11 20:09:38 2014
@@ -18,7 +18,6 @@
package org.apache.pdfbox.examples.pdmodel;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import org.apache.pdfbox.exceptions.CryptographyException;
import org.apache.pdfbox.exceptions.SignatureException;
@@ -48,7 +47,7 @@ public class HelloWorldType1AfmPfb
* @throws IOException If there is an error writing the data.
*/
public void doIt(String file, String message, String fontfile)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// the document
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java Tue Mar 11 20:09:38 2014
@@ -19,7 +19,6 @@ package org.apache.pdfbox.examples.pdmod
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import org.apache.pdfbox.exceptions.CryptographyException;
import org.apache.pdfbox.exceptions.SignatureException;
@@ -53,7 +52,7 @@ public class ImageToPDF
* @throws IOException If there is an error writing the data.
*/
public void createPDFFromImage( String file, String image)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// the document
PDDocument doc = null;
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java Tue Mar 11 20:09:38 2014
@@ -34,7 +34,6 @@ import org.apache.pdfbox.pdmodel.interac
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
-import java.security.NoSuchAlgorithmException;
import java.text.NumberFormat;
import java.util.List;
import java.util.Locale;
@@ -59,7 +58,7 @@ public class RubberStampWithImage
* @throws IOException an exception is thrown if something went wrong
*/
public void doIt( String[] args )
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
if( args.length != 3 )
{
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowColorBoxes.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowColorBoxes.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowColorBoxes.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowColorBoxes.java Tue Mar 11 20:09:38 2014
@@ -18,7 +18,6 @@ package org.apache.pdfbox.examples.pdmod
import java.awt.Color;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import org.apache.pdfbox.exceptions.CryptographyException;
import org.apache.pdfbox.exceptions.SignatureException;
@@ -53,7 +52,7 @@ public class ShowColorBoxes
* @throws IOException If there is an error writing the data.
*/
public void doIt( String file)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// the document
PDDocument doc = null;
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/UsingTextMatrix.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/UsingTextMatrix.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/UsingTextMatrix.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/UsingTextMatrix.java Tue Mar 11 20:09:38 2014
@@ -17,7 +17,6 @@
package org.apache.pdfbox.examples.pdmodel;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
import org.apache.pdfbox.exceptions.CryptographyException;
import org.apache.pdfbox.exceptions.SignatureException;
@@ -51,7 +50,7 @@ public class UsingTextMatrix
* @throws IOException If there is an error writing the data.
*/
public void doIt( String message, String outfile )
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// the document
PDDocument doc = null;
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/persistence/CopyDoc.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/persistence/CopyDoc.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/persistence/CopyDoc.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/persistence/CopyDoc.java Tue Mar 11 20:09:38 2014
@@ -16,8 +16,11 @@
*/
package org.apache.pdfbox.examples.persistence;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
+import java.io.InputStream;
+import java.io.OutputStream;
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.exceptions.CryptographyException;
@@ -51,20 +54,20 @@ public class CopyDoc
* @throws IOException If there is an error parsing the document.
*/
public void doIt(String in, String out)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
- java.io.InputStream is = null;
- java.io.OutputStream os = null;
+ InputStream is = null;
+ OutputStream os = null;
COSWriter writer = null;
try
{
- is = new java.io.FileInputStream(in);
+ is = new FileInputStream(in);
PDFParser parser = new PDFParser(is);
parser.parse();
COSDocument doc = parser.getDocument();
- os = new java.io.FileOutputStream(out);
+ os = new FileOutputStream(out);
writer = new COSWriter(os);
writer.write(doc);
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java Tue Mar 11 20:09:38 2014
@@ -21,7 +21,6 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
@@ -43,8 +42,6 @@ import org.apache.pdfbox.pdmodel.PDDocum
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature;
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface;
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureOptions;
-import org.bouncycastle.cms.CMSException;
-import org.bouncycastle.cms.CMSProcessable;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.cms.CMSSignedDataGenerator;
import org.bouncycastle.cms.CMSSignedGenerator;
@@ -119,7 +116,7 @@ public class CreateSignature implements
* @throws SignatureException
*/
public File signPDF(File document)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
byte[] buffer = new byte[8 * 1024];
if (document == null || !document.exists())
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature.java Tue Mar 11 20:09:38 2014
@@ -18,7 +18,6 @@ package org.apache.pdfbox.examples.signa
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -117,7 +116,7 @@ public class CreateVisibleSignature impl
* @throws SignatureException
*/
public File signPDF(File document, PDVisibleSigProperties signatureProperties)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
byte[] buffer = new byte[8 * 1024];
if (document == null || !document.exists())
Modified: pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestRubberStampWithImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestRubberStampWithImage.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestRubberStampWithImage.java (original)
+++ pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestRubberStampWithImage.java Tue Mar 11 20:09:38 2014
@@ -22,7 +22,6 @@ import org.apache.pdfbox.exceptions.Sign
import java.io.File;
import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
/**
* Test for RubberStampWithImage
@@ -30,7 +29,7 @@ import java.security.NoSuchAlgorithmExce
public class TestRubberStampWithImage extends TestCase
{
public void test()
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
String documentFile = "src/test/resources/org.apache.pdfbox.examples.pdmodel/document.pdf";
String stampFile = "src/test/resources/org.apache.pdfbox.examples.pdmodel/stamp.jpg";
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encryption/DocumentEncryption.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encryption/DocumentEncryption.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encryption/DocumentEncryption.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encryption/DocumentEncryption.java Tue Mar 11 20:09:38 2014
@@ -121,26 +121,30 @@ public class DocumentEncryption
if( idArray == null || idArray.size() < 2 )
{
idArray = new COSArray();
+
+ MessageDigest md5;
try
{
- MessageDigest md = MessageDigest.getInstance( "MD5" );
- BigInteger time = BigInteger.valueOf( System.currentTimeMillis() );
- md.update( time.toByteArray() );
- md.update( ownerPassword.getBytes("ISO-8859-1") );
- md.update( userPassword.getBytes("ISO-8859-1") );
- md.update( document.toString().getBytes() );
- byte[] id = md.digest( this.toString().getBytes("ISO-8859-1") );
- COSString idString = new COSString();
- idString.append( id );
- idArray.add( idString );
- idArray.add( idString );
- document.setDocumentID( idArray );
+ md5 = MessageDigest.getInstance("MD5");
}
- catch( NoSuchAlgorithmException e )
+ catch (NoSuchAlgorithmException e)
{
- throw new CryptographyException( e );
+ // should never happen
+ throw new RuntimeException(e);
}
+ BigInteger time = BigInteger.valueOf( System.currentTimeMillis() );
+ md5.update(time.toByteArray());
+ md5.update(ownerPassword.getBytes("ISO-8859-1"));
+ md5.update(userPassword.getBytes("ISO-8859-1"));
+ md5.update(document.toString().getBytes());
+
+ byte[] id = md5.digest( this.toString().getBytes("ISO-8859-1") );
+ COSString idString = new COSString();
+ idString.append( id );
+ idArray.add( idString );
+ idArray.add( idString );
+ document.setDocumentID( idArray );
}
COSString id = (COSString)idArray.getObject( 0 );
encryption = new PDFEncryption();
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encryption/PDFEncryption.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encryption/PDFEncryption.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encryption/PDFEncryption.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encryption/PDFEncryption.java Tue Mar 11 20:09:38 2014
@@ -90,15 +90,8 @@ public final class PDFEncryption
//step 3
byte[] digestedKey = null;
- try
- {
- MessageDigest md = MessageDigest.getInstance( "MD5" );
- digestedKey = md.digest( newKey );
- }
- catch( NoSuchAlgorithmException e )
- {
- throw new CryptographyException( e );
- }
+ MessageDigest md = getMD5();
+ digestedKey = md.digest( newKey );
//step 4
int length = Math.min( newKey.length, 16 );
@@ -130,92 +123,83 @@ public final class PDFEncryption
long length )
throws CryptographyException, IOException
{
- try
- {
- ByteArrayOutputStream result = new ByteArrayOutputStream();
+ ByteArrayOutputStream result = new ByteArrayOutputStream();
- //3.3 STEP 1
- byte[] ownerPadded = truncateOrPad( ownerPassword );
+ //3.3 STEP 1
+ byte[] ownerPadded = truncateOrPad( ownerPassword );
- //3.3 STEP 2
- MessageDigest md = MessageDigest.getInstance( "MD5" );
- md.update( ownerPadded );
- byte[] digest = md.digest();
+ //3.3 STEP 2
+ MessageDigest md = getMD5();
+ md.update( ownerPadded );
+ byte[] digest = md.digest();
- //3.3 STEP 3
- if( revision == 3 || revision == 4 )
- {
- for( int i=0; i<50; i++ )
- {
- md.reset();
- md.update( digest );
- digest = md.digest();
- }
- }
- if( revision == 2 && length != 5 )
+ //3.3 STEP 3
+ if( revision == 3 || revision == 4 )
+ {
+ for( int i=0; i<50; i++ )
{
- throw new CryptographyException(
- "Error: Expected length=5 actual=" + length );
+ md.reset();
+ md.update( digest );
+ digest = md.digest();
}
+ }
+ if( revision == 2 && length != 5 )
+ {
+ throw new CryptographyException(
+ "Error: Expected length=5 actual=" + length );
+ }
- //3.3 STEP 4
- byte[] rc4Key = new byte[ (int)length ];
- System.arraycopy( digest, 0, rc4Key, 0, (int)length );
+ //3.3 STEP 4
+ byte[] rc4Key = new byte[ (int)length ];
+ System.arraycopy( digest, 0, rc4Key, 0, (int)length );
- //3.7 step 2
- if( revision == 2 )
- {
- rc4.setKey( rc4Key );
- rc4.write( o, result );
- }
- else if( revision == 3 || revision == 4)
+ //3.7 step 2
+ if( revision == 2 )
+ {
+ rc4.setKey( rc4Key );
+ rc4.write( o, result );
+ }
+ else if( revision == 3 || revision == 4)
+ {
+ /**
+ byte[] iterationKey = new byte[ rc4Key.length ];
+ byte[] dataToEncrypt = o;
+ for( int i=19; i>=0; i-- )
{
- /**
- byte[] iterationKey = new byte[ rc4Key.length ];
- byte[] dataToEncrypt = o;
- for( int i=19; i>=0; i-- )
+ System.arraycopy( rc4Key, 0, iterationKey, 0, rc4Key.length );
+ for( int j=0; j< iterationKey.length; j++ )
{
- System.arraycopy( rc4Key, 0, iterationKey, 0, rc4Key.length );
- for( int j=0; j< iterationKey.length; j++ )
- {
- iterationKey[j] = (byte)(iterationKey[j] ^ (byte)i);
- }
- rc4.setKey( iterationKey );
- rc4.write( dataToEncrypt, result );
- dataToEncrypt = result.toByteArray();
- result.reset();
+ iterationKey[j] = (byte)(iterationKey[j] ^ (byte)i);
}
- result.write( dataToEncrypt, 0, dataToEncrypt.length );
- */
- byte[] iterationKey = new byte[ rc4Key.length ];
+ rc4.setKey( iterationKey );
+ rc4.write( dataToEncrypt, result );
+ dataToEncrypt = result.toByteArray();
+ result.reset();
+ }
+ result.write( dataToEncrypt, 0, dataToEncrypt.length );
+ */
+ byte[] iterationKey = new byte[ rc4Key.length ];
- byte[] otemp = new byte[ o.length ]; //sm
- System.arraycopy( o, 0, otemp, 0, o.length ); //sm
- rc4.write( o, result);//sm
+ byte[] otemp = new byte[ o.length ]; //sm
+ System.arraycopy( o, 0, otemp, 0, o.length ); //sm
+ rc4.write( o, result);//sm
- for( int i=19; i>=0; i-- )
+ for( int i=19; i>=0; i-- )
+ {
+ System.arraycopy( rc4Key, 0, iterationKey, 0, rc4Key.length );
+ for( int j=0; j< iterationKey.length; j++ )
{
- System.arraycopy( rc4Key, 0, iterationKey, 0, rc4Key.length );
- for( int j=0; j< iterationKey.length; j++ )
- {
- iterationKey[j] = (byte)(iterationKey[j] ^ (byte)i);
- }
- rc4.setKey( iterationKey );
- result.reset(); //sm
- rc4.write( otemp, result ); //sm
- otemp = result.toByteArray(); //sm
+ iterationKey[j] = (byte)(iterationKey[j] ^ (byte)i);
}
+ rc4.setKey( iterationKey );
+ result.reset(); //sm
+ rc4.write( otemp, result ); //sm
+ otemp = result.toByteArray(); //sm
}
-
-
- return result.toByteArray();
-
- }
- catch( NoSuchAlgorithmException e )
- {
- throw new CryptographyException( e );
}
+
+ return result.toByteArray();
}
/**
@@ -365,43 +349,36 @@ public final class PDFEncryption
}
else if( revision == 3 || revision == 4 )
{
- try
+ //STEP 2
+ MessageDigest md = getMD5();
+ //md.update( truncateOrPad( password ) );
+ md.update( ENCRYPT_PADDING );
+
+ //STEP 3
+ md.update( id );
+ result.write( md.digest() );
+
+ //STEP 4 and 5
+ byte[] iterationKey = new byte[ encryptionKey.length ];
+ for( int i=0; i<20; i++ )
{
- //STEP 2
- MessageDigest md = MessageDigest.getInstance("MD5");
- //md.update( truncateOrPad( password ) );
- md.update( ENCRYPT_PADDING );
-
- //STEP 3
- md.update( id );
- result.write( md.digest() );
-
- //STEP 4 and 5
- byte[] iterationKey = new byte[ encryptionKey.length ];
- for( int i=0; i<20; i++ )
+ System.arraycopy( encryptionKey, 0, iterationKey, 0, iterationKey.length );
+ for( int j=0; j< iterationKey.length; j++ )
{
- System.arraycopy( encryptionKey, 0, iterationKey, 0, iterationKey.length );
- for( int j=0; j< iterationKey.length; j++ )
- {
- iterationKey[j] = (byte)(iterationKey[j] ^ i);
- }
- rc4.setKey( iterationKey );
- ByteArrayInputStream input = new ByteArrayInputStream( result.toByteArray() );
- result.reset();
- rc4.write( input, result );
+ iterationKey[j] = (byte)(iterationKey[j] ^ i);
}
-
- //step 6
- byte[] finalResult = new byte[32];
- System.arraycopy( result.toByteArray(), 0, finalResult, 0, 16 );
- System.arraycopy( ENCRYPT_PADDING, 0, finalResult, 16, 16 );
+ rc4.setKey( iterationKey );
+ ByteArrayInputStream input = new ByteArrayInputStream( result.toByteArray() );
result.reset();
- result.write( finalResult );
- }
- catch( NoSuchAlgorithmException e )
- {
- throw new CryptographyException( e );
+ rc4.write( input, result );
}
+
+ //step 6
+ byte[] finalResult = new byte[32];
+ System.arraycopy( result.toByteArray(), 0, finalResult, 0, 16 );
+ System.arraycopy( ENCRYPT_PADDING, 0, finalResult, 16, 16 );
+ result.reset();
+ result.write( finalResult );
}
return result.toByteArray();
}
@@ -430,57 +407,51 @@ public final class PDFEncryption
throws CryptographyException
{
byte[] result = new byte[ length ];
- try
- {
- //PDFReference 1.4 pg 78
- //step1
- byte[] padded = truncateOrPad( password );
-
- //step 2
- MessageDigest md = MessageDigest.getInstance("MD5");
- md.update( padded );
-
- //step 3
- md.update( o );
-
- //step 4
- byte zero = (byte)(permissions >>> 0);
- byte one = (byte)(permissions >>> 8);
- byte two = (byte)(permissions >>> 16);
- byte three = (byte)(permissions >>> 24);
-
- md.update( zero );
- md.update( one );
- md.update( two );
- md.update( three );
- //step 5
- md.update( id );
- byte[] digest = md.digest();
+ //PDFReference 1.4 pg 78
+ //step1
+ byte[] padded = truncateOrPad( password );
+
+ //step 2
+ MessageDigest md = getMD5();
+ md.update( padded );
- //step 6
- if( revision == 3 || revision == 4)
- {
- for( int i=0; i<50; i++ )
- {
- md.reset();
- md.update( digest, 0, length );
- digest = md.digest();
- }
- }
+ //step 3
+ md.update( o );
+
+ //step 4
+ byte zero = (byte)(permissions >>> 0);
+ byte one = (byte)(permissions >>> 8);
+ byte two = (byte)(permissions >>> 16);
+ byte three = (byte)(permissions >>> 24);
- //step 7
- if( revision == 2 && length != 5 )
+ md.update( zero );
+ md.update( one );
+ md.update( two );
+ md.update( three );
+
+ //step 5
+ md.update( id );
+ byte[] digest = md.digest();
+
+ //step 6
+ if( revision == 3 || revision == 4)
+ {
+ for( int i=0; i<50; i++ )
{
- throw new CryptographyException(
- "Error: length should be 5 when revision is two actual=" + length );
+ md.reset();
+ md.update( digest, 0, length );
+ digest = md.digest();
}
- System.arraycopy( digest, 0, result, 0, length );
}
- catch( NoSuchAlgorithmException e )
+
+ //step 7
+ if( revision == 2 && length != 5 )
{
- throw new CryptographyException( e );
+ throw new CryptographyException(
+ "Error: length should be 5 when revision is two actual=" + length );
}
+ System.arraycopy( digest, 0, result, 0, length );
return result;
}
@@ -504,71 +475,64 @@ public final class PDFEncryption
int length )
throws CryptographyException, IOException
{
- try
- {
- //STEP 1
- byte[] ownerPadded = truncateOrPad( ownerPassword );
+ //STEP 1
+ byte[] ownerPadded = truncateOrPad( ownerPassword );
- //STEP 2
- MessageDigest md = MessageDigest.getInstance( "MD5" );
- md.update( ownerPadded );
- byte[] digest = md.digest();
+ //STEP 2
+ MessageDigest md = getMD5();
+ md.update( ownerPadded );
+ byte[] digest = md.digest();
- //STEP 3
- if( revision == 3 || revision == 4)
- {
- for( int i=0; i<50; i++ )
- {
- md.reset();
- md.update( digest, 0, length );
- digest = md.digest();
- }
- }
- if( revision == 2 && length != 5 )
+ //STEP 3
+ if( revision == 3 || revision == 4)
+ {
+ for( int i=0; i<50; i++ )
{
- throw new CryptographyException(
- "Error: Expected length=5 actual=" + length );
+ md.reset();
+ md.update( digest, 0, length );
+ digest = md.digest();
}
+ }
+ if( revision == 2 && length != 5 )
+ {
+ throw new CryptographyException(
+ "Error: Expected length=5 actual=" + length );
+ }
- //STEP 4
- byte[] rc4Key = new byte[ length ];
- System.arraycopy( digest, 0, rc4Key, 0, length );
+ //STEP 4
+ byte[] rc4Key = new byte[ length ];
+ System.arraycopy( digest, 0, rc4Key, 0, length );
- //STEP 5
- byte[] paddedUser = truncateOrPad( userPassword );
+ //STEP 5
+ byte[] paddedUser = truncateOrPad( userPassword );
- //STEP 6
- rc4.setKey( rc4Key );
- ByteArrayOutputStream crypted = new ByteArrayOutputStream();
- rc4.write( new ByteArrayInputStream( paddedUser ), crypted );
+ //STEP 6
+ rc4.setKey( rc4Key );
+ ByteArrayOutputStream crypted = new ByteArrayOutputStream();
+ rc4.write( new ByteArrayInputStream( paddedUser ), crypted );
- //STEP 7
- if( revision == 3 || revision == 4 )
+ //STEP 7
+ if( revision == 3 || revision == 4 )
+ {
+ byte[] iterationKey = new byte[ rc4Key.length ];
+ for( int i=1; i<20; i++ )
{
- byte[] iterationKey = new byte[ rc4Key.length ];
- for( int i=1; i<20; i++ )
+ System.arraycopy( rc4Key, 0, iterationKey, 0, rc4Key.length );
+ for( int j=0; j< iterationKey.length; j++ )
{
- System.arraycopy( rc4Key, 0, iterationKey, 0, rc4Key.length );
- for( int j=0; j< iterationKey.length; j++ )
- {
- iterationKey[j] = (byte)(iterationKey[j] ^ (byte)i);
- }
- rc4.setKey( iterationKey );
- ByteArrayInputStream input = new ByteArrayInputStream( crypted.toByteArray() );
- crypted.reset();
- rc4.write( input, crypted );
+ iterationKey[j] = (byte)(iterationKey[j] ^ (byte)i);
}
+ rc4.setKey( iterationKey );
+ ByteArrayInputStream input = new ByteArrayInputStream( crypted.toByteArray() );
+ crypted.reset();
+ rc4.write( input, crypted );
}
-
- //STEP 8
- return crypted.toByteArray();
- }
- catch( NoSuchAlgorithmException e )
- {
- throw new CryptographyException( e.getMessage() );
}
+
+ //STEP 8
+ return crypted.toByteArray();
}
/**
@@ -586,4 +550,18 @@ public final class PDFEncryption
System.arraycopy( ENCRYPT_PADDING, 0, padded, bytesBeforePad, ENCRYPT_PADDING.length-bytesBeforePad );
return padded;
}
+
+ // helper to create MD5 hash
+ private MessageDigest getMD5()
+ {
+ try
+ {
+ return MessageDigest.getInstance("MD5");
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ // should never happen
+ throw new RuntimeException(e);
+ }
+ }
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java Tue Mar 11 20:09:38 2014
@@ -1241,7 +1241,7 @@ public class COSWriter implements ICOSVi
* @param doc The document to write.
*/
public void write(COSDocument doc)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
PDDocument pdDoc = new PDDocument( doc );
write( pdDoc );
@@ -1255,8 +1255,7 @@ public class COSWriter implements ICOSVi
* @throws IOException If an error occurs while generating the data.
* @throws CryptographyException If an error occurs while generating the data.
*/
- public void write(PDDocument doc)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ public void write(PDDocument doc) throws IOException, CryptographyException, SignatureException
{
Long idTime = doc.getDocumentId() == null ? System.currentTimeMillis() :
doc.getDocumentId();
@@ -1288,7 +1287,7 @@ public class COSWriter implements ICOSVi
else
{
willEncrypt = false;
- }
+ }
}
COSDocument cosDoc = document.getDocument();
@@ -1296,21 +1295,32 @@ public class COSWriter implements ICOSVi
COSArray idArray = (COSArray)trailer.getDictionaryObject( COSName.ID );
if( idArray == null || incrementalUpdate)
{
- //algorithm says to use time/path/size/values in doc to generate
- //the id. We don't have path or size, so do the best we can
- MessageDigest md = MessageDigest.getInstance( "MD5" );
- md.update( Long.toString(idTime).getBytes("ISO-8859-1") );
+ MessageDigest md5;
+ try
+ {
+ md5 = MessageDigest.getInstance("MD5");
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ // should never happen
+ throw new RuntimeException(e);
+ }
+
+ // algorithm says to use time/path/size/values in doc to generate the id.
+ // we don't have path or size, so do the best we can
+ md5.update( Long.toString(idTime).getBytes("ISO-8859-1") );
+
COSDictionary info = (COSDictionary)trailer.getDictionaryObject( COSName.INFO );
if( info != null )
{
Iterator<COSBase> values = info.getValues().iterator();
while( values.hasNext() )
{
- md.update( values.next().toString().getBytes("ISO-8859-1") );
+ md5.update( values.next().toString().getBytes("ISO-8859-1") );
}
}
idArray = new COSArray();
- COSString id = new COSString( md.digest() );
+ COSString id = new COSString( md5.digest() );
idArray.add( id );
idArray.add( id );
trailer.setItem( COSName.ID, idArray );
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java Tue Mar 11 20:09:38 2014
@@ -25,7 +25,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
-import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
@@ -1196,10 +1195,9 @@ public class PDDocument implements Close
* @throws IOException if the output could not be written
* @throws CryptographyException if something went wrong during a cryptography operation
* @throws SignatureException if signing failed
- * @throws NoSuchAlgorithmException if the cryptographic algorithm is not available
*/
public void save(String fileName)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
save(new File(fileName));
}
@@ -1212,10 +1210,9 @@ public class PDDocument implements Close
* @throws IOException if the output could not be written
* @throws CryptographyException if something went wrong during a cryptography operation
* @throws SignatureException if signing failed
- * @throws NoSuchAlgorithmException if the cryptographic algorithm is not available
*/
public void save(File file)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
save(new FileOutputStream(file));
}
@@ -1228,10 +1225,9 @@ public class PDDocument implements Close
* @throws IOException if the output could not be written
* @throws CryptographyException if something went wrong during a cryptography operation
* @throws SignatureException if signing failed
- * @throws NoSuchAlgorithmException if the cryptographic algorithm is not available
*/
public void save(OutputStream output)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// update the count in case any pages have been added behind the scenes.
getDocumentCatalog().getPages().updateCount();
@@ -1258,10 +1254,9 @@ public class PDDocument implements Close
* @throws IOException if the output could not be written
* @throws CryptographyException if something went wrong during a cryptography operation
* @throws SignatureException if signing failed
- * @throws NoSuchAlgorithmException if the cryptographic algorithm is not available
*/
public void saveIncremental(String fileName)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
saveIncremental(new FileInputStream(fileName), new FileOutputStream(fileName, true));
}
@@ -1274,10 +1269,9 @@ public class PDDocument implements Close
* @throws IOException if the output could not be written
* @throws CryptographyException if something went wrong during a cryptography operation
* @throws SignatureException if signing failed
- * @throws NoSuchAlgorithmException if the cryptographic algorithm is not available
*/
public void saveIncremental(FileInputStream input, OutputStream output)
- throws IOException, CryptographyException, SignatureException, NoSuchAlgorithmException
+ throws IOException, CryptographyException, SignatureException
{
// update the count in case any pages have been added behind the scenes.
getDocumentCatalog().getPages().updateCount();
Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/MessageDigests.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/MessageDigests.java?rev=1576489&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/MessageDigests.java (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/MessageDigests.java Tue Mar 11 20:09:38 2014
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.pdmodel.encryption;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * Utility class for creating MessageDigest instances.
+ * @author John Hewson
+ */
+class MessageDigests
+{
+ /**
+ * @return MD5 message digest
+ */
+ static MessageDigest getMD5()
+ {
+ try
+ {
+ return MessageDigest.getInstance("MD5");
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ // should never happen
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * @return SHA-1 message digest
+ */
+ static MessageDigest getSHA1()
+ {
+ try
+ {
+ return MessageDigest.getInstance("SHA-1");
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ // should never happen
+ throw new RuntimeException(e);
+ }
+ }
+}
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=1576489&r1=1576488&r2=1576489&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 Tue Mar 11 20:09:38 2014
@@ -17,23 +17,27 @@
package org.apache.pdfbox.pdmodel.encryption;
-import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.AlgorithmParameterGenerator;
import java.security.AlgorithmParameters;
import java.security.GeneralSecurityException;
+import java.security.InvalidKeyException;
import java.security.KeyStoreException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.Security;
+import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.util.Iterator;
+import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
+import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import org.bouncycastle.asn1.ASN1InputStream;
@@ -139,10 +143,9 @@ public class PublicKeySecurityHandler ex
* @throws CryptographyException If there is an error with decryption.
*/
public void prepareForDecryption(PDEncryptionDictionary encDictionary, COSArray documentIDArray,
- DecryptionMaterial decryptionMaterial)
- throws CryptographyException, IOException
+ DecryptionMaterial decryptionMaterial)
+ throws IOException, CryptographyException
{
-
if(encDictionary.getLength() != 0)
{
this.keyLength = encDictionary.getLength();
@@ -225,7 +228,7 @@ public class PublicKeySecurityHandler ex
sha1InputOffset += recipientFieldsBytes[i].length;
}
- MessageDigest md = MessageDigest.getInstance("SHA-1");
+ MessageDigest md = MessageDigests.getSHA1();
byte[] mdResult = md.digest(sha1Input);
// we have the encryption key ...
@@ -244,10 +247,6 @@ public class PublicKeySecurityHandler ex
{
throw new CryptographyException(e);
}
- catch(NoSuchAlgorithmException e)
- {
- throw new CryptographyException(e);
- }
}
/**
@@ -281,7 +280,17 @@ public class PublicKeySecurityHandler ex
byte[] seed = new byte[20];
- KeyGenerator key = KeyGenerator.getInstance("AES");
+ KeyGenerator key;
+ try
+ {
+ key = KeyGenerator.getInstance("AES");
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ // should never happen
+ throw new RuntimeException("Could not find a suitable javax.crypto provider", e);
+ }
+
key.init(192, new SecureRandom());
SecretKey sk = key.generateKey();
System.arraycopy(sk.getEncoded(), 0, seed, 0, 20); // create the 20 bytes seed
@@ -350,9 +359,8 @@ public class PublicKeySecurityHandler ex
sha1InputOffset += string.getBytes().length;
}
- MessageDigest md = MessageDigest.getInstance("SHA-1");
-
- byte[] mdResult = md.digest(sha1Input);
+ MessageDigest sha1 = MessageDigests.getSHA1();
+ byte[] mdResult = sha1.digest(sha1Input);
this.encryptionKey = new byte[this.keyLength/8];
System.arraycopy(mdResult, 0, this.encryptionKey, 0, this.keyLength/8);
@@ -361,69 +369,95 @@ public class PublicKeySecurityHandler ex
doc.getDocument().setEncryptionDictionary(dictionary.encryptionDictionary);
}
- catch(NoSuchAlgorithmException ex)
+ catch(GeneralSecurityException e)
{
- throw new CryptographyException(ex);
- }
- catch(NoSuchProviderException ex)
- {
- throw new CryptographyException(ex);
+ throw new CryptographyException(e);
}
- catch(Exception e)
+ catch(IOException e)
{
- e.printStackTrace();
throw new CryptographyException(e);
}
-
}
private ASN1Primitive createDERForRecipient(byte[] in, X509Certificate cert)
- throws IOException,
- GeneralSecurityException
+ throws IOException, GeneralSecurityException
{
+ String algorithm = "1.2.840.113549.3.2";
+ AlgorithmParameterGenerator apg;
+ KeyGenerator keygen;
+ Cipher cipher;
+ try
+ {
+ apg = AlgorithmParameterGenerator.getInstance(algorithm);
+ keygen = KeyGenerator.getInstance(algorithm);
+ cipher = Cipher.getInstance(algorithm);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ // should never happen
+ throw new RuntimeException("Could not find a suitable javax.crypto provider", e);
+ }
+ catch (NoSuchPaddingException e)
+ {
+ // should never happen
+ throw new RuntimeException("Could not find a suitable javax.crypto provider", e);
+ }
+
+ AlgorithmParameters parameters = apg.generateParameters();
+
+ ASN1InputStream input = new ASN1InputStream(parameters.getEncoded("ASN.1"));
+ ASN1Primitive object = input.readObject();
+
+ keygen.init(128);
+ SecretKey secretkey = keygen.generateKey();
+
+ cipher.init(1, secretkey, parameters);
+ byte[] bytes = cipher.doFinal(in);
- String s = "1.2.840.113549.3.2";
+ KeyTransRecipientInfo recipientInfo = computeRecipientInfo(cert, secretkey.getEncoded());
+ DERSet set = new DERSet(new RecipientInfo(recipientInfo));
- AlgorithmParameterGenerator algorithmparametergenerator = AlgorithmParameterGenerator.getInstance(s);
- AlgorithmParameters algorithmparameters = algorithmparametergenerator.generateParameters();
- ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(algorithmparameters.getEncoded("ASN.1"));
- ASN1InputStream asn1inputstream = new ASN1InputStream(bytearrayinputstream);
- ASN1Primitive derobject = asn1inputstream.readObject();
- KeyGenerator keygenerator = KeyGenerator.getInstance(s);
- keygenerator.init(128);
- SecretKey secretkey = keygenerator.generateKey();
- Cipher cipher = Cipher.getInstance(s);
- cipher.init(1, secretkey, algorithmparameters);
- byte[] abyte1 = cipher.doFinal(in);
- DEROctetString deroctetstring = new DEROctetString(abyte1);
- KeyTransRecipientInfo keytransrecipientinfo = computeRecipientInfo(cert, secretkey.getEncoded());
- DERSet derset = new DERSet(new RecipientInfo(keytransrecipientinfo));
- AlgorithmIdentifier algorithmidentifier = new AlgorithmIdentifier(new DERObjectIdentifier(s), derobject);
- EncryptedContentInfo encryptedcontentinfo =
- new EncryptedContentInfo(PKCSObjectIdentifiers.data, algorithmidentifier, deroctetstring);
- EnvelopedData env = new EnvelopedData(null, derset, encryptedcontentinfo, (ASN1Set) null);
- ContentInfo contentinfo =
- new ContentInfo(PKCSObjectIdentifiers.envelopedData, env);
- return contentinfo.toASN1Primitive();
+ AlgorithmIdentifier algorithmId = new AlgorithmIdentifier(new DERObjectIdentifier(algorithm), object);
+ EncryptedContentInfo encryptedInfo = new EncryptedContentInfo(PKCSObjectIdentifiers.data, algorithmId, new DEROctetString(bytes));
+ EnvelopedData enveloped = new EnvelopedData(null, set, encryptedInfo, (ASN1Set) null);
+
+ ContentInfo contentInfo = new ContentInfo(PKCSObjectIdentifiers.envelopedData, enveloped);
+ return contentInfo.toASN1Primitive();
}
private KeyTransRecipientInfo computeRecipientInfo(X509Certificate x509certificate, byte[] abyte0)
- throws GeneralSecurityException, IOException
+ throws IOException, CertificateEncodingException, InvalidKeyException,
+ BadPaddingException, IllegalBlockSizeException
{
- ASN1InputStream asn1inputstream =
- new ASN1InputStream(new ByteArrayInputStream(x509certificate.getTBSCertificate()));
- TBSCertificateStructure tbscertificatestructure =
- TBSCertificateStructure.getInstance(asn1inputstream.readObject());
- AlgorithmIdentifier algorithmidentifier = tbscertificatestructure.getSubjectPublicKeyInfo().getAlgorithmId();
- IssuerAndSerialNumber issuerandserialnumber =
- new IssuerAndSerialNumber(
- tbscertificatestructure.getIssuer(),
- tbscertificatestructure.getSerialNumber().getValue());
- Cipher cipher = Cipher.getInstance(algorithmidentifier.getObjectId().getId());
+ ASN1InputStream input = new ASN1InputStream(x509certificate.getTBSCertificate());
+
+ TBSCertificateStructure certificate = TBSCertificateStructure.getInstance(input.readObject());
+ AlgorithmIdentifier algorithmId = certificate.getSubjectPublicKeyInfo().getAlgorithmId();
+
+ IssuerAndSerialNumber serial = new IssuerAndSerialNumber(
+ certificate.getIssuer(),
+ certificate.getSerialNumber().getValue());
+
+ Cipher cipher;
+ try
+ {
+ cipher = Cipher.getInstance(algorithmId.getObjectId().getId());
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ // should never happen
+ throw new RuntimeException("Could not find a suitable javax.crypto provider", e);
+ }
+ catch (NoSuchPaddingException e)
+ {
+ // should never happen
+ throw new RuntimeException("Could not find a suitable javax.crypto provider", e);
+ }
+
cipher.init(1, x509certificate.getPublicKey());
- DEROctetString deroctetstring = new DEROctetString(cipher.doFinal(abyte0));
- RecipientIdentifier recipId = new RecipientIdentifier(issuerandserialnumber);
- return new KeyTransRecipientInfo( recipId, algorithmidentifier, deroctetstring);
- }
+ DEROctetString octets = new DEROctetString(cipher.doFinal(abyte0));
+ RecipientIdentifier recipientId = new RecipientIdentifier(serial);
+ return new KeyTransRecipientInfo(recipientId, algorithmId, octets);
+ }
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java?rev=1576489&r1=1576488&r2=1576489&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java Tue Mar 11 20:09:38 2014
@@ -266,21 +266,13 @@ public abstract class SecurityHandler
newKey[newKey.length - 1] = (byte) ((genNumber >> 8) & 0xff);
// step 3
- byte[] digestedKey = null;
- try
- {
- MessageDigest md = MessageDigest.getInstance("MD5");
- md.update(newKey);
- if (aes)
- {
- md.update(AES_SALT);
- }
- digestedKey = md.digest();
- }
- catch (NoSuchAlgorithmException e)
+ MessageDigest md = MessageDigests.getMD5();
+ md.update(newKey);
+ if (aes)
{
- throw new CryptographyException(e);
+ md.update(AES_SALT);
}
+ byte[] digestedKey = md.digest();
// step 4
int length = Math.min(newKey.length, 16);
@@ -295,7 +287,16 @@ public abstract class SecurityHandler
try
{
- Cipher decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+ Cipher decryptCipher;
+ try
+ {
+ decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ // should never happen
+ throw new RuntimeException("Could not find a suitable javax.crypto provider", e);
+ }
SecretKey aesKey = new SecretKeySpec(finalKey, "AES");
@@ -326,10 +327,6 @@ public abstract class SecurityHandler
{
throw new IOException(e);
}
- catch (NoSuchAlgorithmException e)
- {
- throw new IOException(e);
- }
catch (NoSuchPaddingException e)
{
throw new IOException(e);