Author: tilman
Date: Fri Sep 19 10:33:10 2025
New Revision: 1928616

Log:
PDFBOX-6072: refactor, as suggested by Valery Bokov; closes #247

Modified:
   
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/RC4Cipher.java

Modified: 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/RC4Cipher.java
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/RC4Cipher.java
        Fri Sep 19 09:42:14 2025        (r1928615)
+++ 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/RC4Cipher.java
        Fri Sep 19 10:33:10 2025        (r1928616)
@@ -95,6 +95,15 @@ class RC4Cipher
         data[ secondIndex ] = tmp;
     }
 
+    private int encrypt(byte aByte)
+    {
+        b = (b + 1) % 256;
+        c = (salt[b] + c) % 256;
+        swap(salt, b, c);
+        int saltIndex = (salt[b] + salt[c]) % 256;
+        return aByte ^ (byte) salt[saltIndex];
+    }
+
     /**
      * This will encrypt and write the next byte.
      *
@@ -105,11 +114,7 @@ class RC4Cipher
      */
     public void write( byte aByte, OutputStream output ) throws IOException
     {
-        b = (b + 1) % 256;
-        c = (salt[b] + c) % 256;
-        swap( salt, b, c );
-        int saltIndex = (salt[b] + salt[c]) % 256;
-        output.write(aByte ^ (byte)salt[saltIndex]);
+        output.write(encrypt(aByte));
     }
 
     /**
@@ -122,10 +127,7 @@ class RC4Cipher
      */
     public void write( byte[] data, OutputStream output ) throws IOException
     {
-        for (byte aData : data)
-        {
-            write(aData, output);
-        }
+        write(data, 0, data.length, output);
     }
 
     /**
@@ -142,7 +144,7 @@ class RC4Cipher
         int amountRead;
         while( (amountRead = data.read( buffer )) != -1 )
         {
-            write( buffer, 0, amountRead, output );
+            write(buffer, 0, amountRead, output, buffer);
         }
     }
 
@@ -158,9 +160,16 @@ class RC4Cipher
      */
     public void write( byte[] data, int offset, int len, OutputStream output) 
throws IOException
     {
-        for( int i = offset; i < offset + len; i++ )
+        write(data, offset, len, output, new byte[len]);
+    }
+
+    private void write(byte[] data, int offset, int len, OutputStream output, 
byte[] buffer) throws IOException
+    {
+        for (int i = 0, j = offset; i < len; ++i, ++j)
         {
-            write( data[i], output );
+            buffer[i] = (byte) encrypt(data[j]);
         }
+
+        output.write(buffer, 0, len);
     }
 }

Reply via email to