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);