You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2014/04/17 15:55:49 UTC

svn commit: r1588253 - in /cayenne/main/trunk/cayenne-crypto/src: main/java/org/apache/cayenne/crypto/transformer/bytes/ main/java/org/apache/cayenne/crypto/transformer/value/ test/java/org/apache/cayenne/crypto/ test/java/org/apache/cayenne/crypto/tra...

Author: aadamchik
Date: Thu Apr 17 13:55:48 2014
New Revision: 1588253

URL: http://svn.apache.org/r1588253
Log:
CAY-1925 cayenne-crypto: add optional compression to the encryption pipeline

(in progress) don't compress smaller values

Modified:
    cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/BytesEncryptor.java
    cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/CbcEncryptor.java
    cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptor.java
    cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/Header.java
    cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/HeaderEncryptor.java
    cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueEncryptor.java
    cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/Runtime_AES128_GZIP_Test.java
    cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/CbcEncryptorTest.java
    cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptorTest.java
    cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/HeaderEncryptorTest.java
    cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/HeaderTest.java
    cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/CryptoUnitUtils.java
    cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/SwapBytesTransformer.java
    cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/SwapBytesTransformerTest.java

Modified: cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/BytesEncryptor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/BytesEncryptor.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/BytesEncryptor.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/BytesEncryptor.java Thu Apr 17 13:55:48 2014
@@ -32,7 +32,10 @@ public interface BytesEncryptor {
      *            how much empty space to leave in the beginning of the returned
      *            output array. This would allow the caller to prepend extra
      *            data to the encrypted array.
+     * @param flags
+     *            a byte[1] that allows nested encryptors to manipulate header
+     *            flags.
      */
-    byte[] encrypt(byte[] input, int outputOffset);
+    byte[] encrypt(byte[] input, int outputOffset, byte[] flags);
 
 }

Modified: cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/CbcEncryptor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/CbcEncryptor.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/CbcEncryptor.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/CbcEncryptor.java Thu Apr 17 13:55:48 2014
@@ -65,7 +65,7 @@ class CbcEncryptor implements BytesEncry
     }
 
     @Override
-    public byte[] encrypt(byte[] input, int outputOffset) {
+    public byte[] encrypt(byte[] input, int outputOffset, byte[] flags) {
 
         try {
             return doEncrypt(input, outputOffset);

Modified: cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptor.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptor.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptor.java Thu Apr 17 13:55:48 2014
@@ -29,7 +29,7 @@ import org.apache.cayenne.crypto.Cayenne
  */
 class GzipEncryptor implements BytesEncryptor {
 
-    private static final int GZIP_THRESHOLD = 150;
+    static final int GZIP_THRESHOLD = 150;
 
     private BytesEncryptor delegate;
 
@@ -38,11 +38,11 @@ class GzipEncryptor implements BytesEncr
     }
 
     @Override
-    public byte[] encrypt(byte[] input, int outputOffset) {
+    public byte[] encrypt(byte[] input, int outputOffset, byte[] flags) {
 
-        boolean compress = input.length >= GZIP_THRESHOLD;
+        boolean compressed = input.length >= GZIP_THRESHOLD;
 
-        if (compress) {
+        if (compressed) {
             try {
                 input = gzip(input);
             } catch (IOException e) {
@@ -51,7 +51,8 @@ class GzipEncryptor implements BytesEncr
             }
         }
 
-        return delegate.encrypt(input, outputOffset);
+        flags[0] = Header.setCompressed(flags[0], compressed);
+        return delegate.encrypt(input, outputOffset, flags);
     }
 
     static byte[] gzip(byte[] input) throws IOException {

Modified: cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/Header.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/Header.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/Header.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/Header.java Thu Apr 17 13:55:48 2014
@@ -113,10 +113,18 @@ public class Header {
         return new Header(data, offset);
     }
 
+    public static byte setCompressed(byte bits, boolean compressed) {
+        return compressed ? bitOn(bits, COMPRESS_BIT) : bitOff(bits, COMPRESS_BIT);
+    }
+
     private static byte bitOn(byte bits, int position) {
         return (byte) (bits | (1 << position));
     }
 
+    private static byte bitOff(byte bits, int position) {
+        return (byte) (bits & ~(1 << position));
+    }
+
     private static boolean isBitOn(byte bits, int position) {
         return ((bits >> position) & 1) == 1;
     }
@@ -132,14 +140,19 @@ public class Header {
     }
 
     public boolean isCompressed() {
-        return isBitOn(data[offset + FLAGS_POSITION], COMPRESS_BIT);
+        return isBitOn(getFlags(), COMPRESS_BIT);
+    }
+
+    public byte getFlags() {
+        return data[offset + FLAGS_POSITION];
     }
 
     /**
      * Saves the header bytes in the provided buffer at specified offset.
      */
-    public void store(byte[] output, int outputOffset) {
+    public void store(byte[] output, int outputOffset, byte flags) {
         System.arraycopy(data, offset, output, outputOffset, size());
+        output[outputOffset + FLAGS_POSITION] = flags;
     }
 
     public String getKeyName() {

Modified: cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/HeaderEncryptor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/HeaderEncryptor.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/HeaderEncryptor.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/bytes/HeaderEncryptor.java Thu Apr 17 13:55:48 2014
@@ -29,9 +29,12 @@ class HeaderEncryptor implements BytesEn
     }
 
     @Override
-    public byte[] encrypt(byte[] input, int outputOffset) {
-        byte[] output = delegate.encrypt(input, outputOffset + header.size());
-        header.store(output, outputOffset);
+    public byte[] encrypt(byte[] input, int outputOffset, byte[] flags) {
+
+        flags[0] = header.getFlags();
+
+        byte[] output = delegate.encrypt(input, outputOffset + header.size(), flags);
+        header.store(output, outputOffset, flags[0]);
         return output;
     }
 

Modified: cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueEncryptor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueEncryptor.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueEncryptor.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueEncryptor.java Thu Apr 17 13:55:48 2014
@@ -50,7 +50,7 @@ class DefaultValueEncryptor implements V
         }
 
         byte[] bytes = preConverter.toBytes(value);
-        byte[] transformed = encryptor.encrypt(bytes, 0);
+        byte[] transformed = encryptor.encrypt(bytes, 0, new byte[1]);
         return postConverter.fromBytes(transformed);
     }
 

Modified: cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/Runtime_AES128_GZIP_Test.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/Runtime_AES128_GZIP_Test.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/Runtime_AES128_GZIP_Test.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/Runtime_AES128_GZIP_Test.java Thu Apr 17 13:55:48 2014
@@ -28,7 +28,6 @@ import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Random;
 
 import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.crypto.db.Table2;
@@ -47,20 +46,13 @@ public class Runtime_AES128_GZIP_Test ex
         super.setUp(true);
     }
 
-    byte[] bytesOfSize(int len) {
-        Random r = new Random();
-        byte[] b = new byte[len];
-        r.nextBytes(b);
-        return b;
-    }
-
     @Test
     public void testInsert() throws SQLException {
 
         ObjectContext context = runtime.newContext();
 
         // make sure compression is on...
-        byte[] cryptoBytes = bytesOfSize(GZIP_THRESHOLD + 100);
+        byte[] cryptoBytes = CryptoUnitUtils.bytesOfSize(GZIP_THRESHOLD + 100);
 
         Table2 t1 = context.newObject(Table2.class);
         t1.setPlainBytes("plain_1".getBytes());
@@ -83,7 +75,7 @@ public class Runtime_AES128_GZIP_Test ex
         ObjectContext context = runtime.newContext();
 
         // make sure compression is on...
-        byte[] cryptoBytes = bytesOfSize(GZIP_THRESHOLD - 20);
+        byte[] cryptoBytes = CryptoUnitUtils.bytesOfSize(GZIP_THRESHOLD - 20);
 
         Table2 t1 = context.newObject(Table2.class);
         t1.setPlainBytes("plain_1".getBytes());
@@ -105,8 +97,8 @@ public class Runtime_AES128_GZIP_Test ex
         ObjectContext context = runtime.newContext();
 
         // make sure compression is on...
-        byte[] cryptoBytes1 = bytesOfSize(GZIP_THRESHOLD + 101);
-        byte[] cryptoBytes2 = bytesOfSize(GZIP_THRESHOLD + 102);
+        byte[] cryptoBytes1 = CryptoUnitUtils.bytesOfSize(GZIP_THRESHOLD + 101);
+        byte[] cryptoBytes2 = CryptoUnitUtils.bytesOfSize(GZIP_THRESHOLD + 102);
 
         Table2 t1 = context.newObject(Table2.class);
         t1.setPlainBytes("a".getBytes());
@@ -141,8 +133,8 @@ public class Runtime_AES128_GZIP_Test ex
     public void test_SelectQuery() throws SQLException {
 
         // make sure compression is on...
-        byte[] cryptoBytes1 = bytesOfSize(GZIP_THRESHOLD + 101);
-        byte[] cryptoBytes2 = bytesOfSize(GZIP_THRESHOLD + 102);
+        byte[] cryptoBytes1 = CryptoUnitUtils.bytesOfSize(GZIP_THRESHOLD + 101);
+        byte[] cryptoBytes2 = CryptoUnitUtils.bytesOfSize(GZIP_THRESHOLD + 102);
 
         ObjectContext context = runtime.newContext();
 

Modified: cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/CbcEncryptorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/CbcEncryptorTest.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/CbcEncryptorTest.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/CbcEncryptorTest.java Thu Apr 17 13:55:48 2014
@@ -71,7 +71,7 @@ public class CbcEncryptorTest {
         // copy ivBytes, as they are reset
         CbcEncryptor encryptor = new CbcEncryptor(cipher, key, ivBytes);
 
-        byte[] encrypted = encryptor.encrypt(plain, 0);
+        byte[] encrypted = encryptor.encrypt(plain, 0, new byte[1]);
 
         assertEquals(16 * 3, encrypted.length);
         assertArrayEquals(ivBytes, Arrays.copyOfRange(encrypted, 0, 16));

Modified: cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptorTest.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptorTest.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptorTest.java Thu Apr 17 13:55:48 2014
@@ -48,29 +48,39 @@ public class GzipEncryptorTest {
     public void testEncrypt() throws UnsupportedEncodingException {
 
         BytesEncryptor delegate = mock(BytesEncryptor.class);
-        when(delegate.encrypt(any(byte[].class), anyInt())).thenAnswer(new Answer<byte[]>() {
+        when(delegate.encrypt(any(byte[].class), anyInt(), any(byte[].class))).thenAnswer(new Answer<byte[]>() {
             @Override
             public byte[] answer(InvocationOnMock invocation) throws Throwable {
                 Object[] args = invocation.getArguments();
 
                 byte[] answer = (byte[]) args[0];
                 int offset = (Integer) args[1];
-                
+
                 assertEquals(1, offset);
-                
+
                 return answer;
             }
         });
 
-     
         GzipEncryptor e = new GzipEncryptor(delegate);
 
         byte[] input1 = "Hello Hello Hello".getBytes("UTF8");
-        byte[] output1 = e.encrypt(input1, 1);
-        byte[] expectedOutput1 = CryptoUnitUtils.hexToBytes("1f8b0800000000000000f348cdc9c957f0409000a91a078c11000000");
+        byte[] output1 = e.encrypt(input1, 1, new byte[1]);
+        byte[] expectedOutput1 = input1;
 
         assertArrayEquals(expectedOutput1, output1);
 
+        byte[] input2 = ("Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA Hello "
+                + "Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA Hello").getBytes("UTF8");
+        byte[] output2 = e.encrypt(input2, 1, new byte[1]);
+
+        // somehow 'gzip -c' fills bytes 3..9 with values... the rest of the
+        // gzip string is identical...
+        byte[] expectedOutput2 = CryptoUnitUtils
+                .hexToBytes("1f8b0800000000000000f348cdc9c957700401050f8ad9949b80c40600bbec62509b000000");
+
+        assertArrayEquals(expectedOutput2, output2);
+
     }
 
 }

Modified: cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/HeaderEncryptorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/HeaderEncryptorTest.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/HeaderEncryptorTest.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/HeaderEncryptorTest.java Thu Apr 17 13:55:48 2014
@@ -39,10 +39,10 @@ public class HeaderEncryptorTest {
         // intentionally non-standard block size..
         HeaderEncryptor encryptor = new HeaderEncryptor(delegate, encryptionHeader);
 
-        byte[] output1 = encryptor.encrypt(input, 0);
+        byte[] output1 = encryptor.encrypt(input, 0, new byte[1]);
         assertArrayEquals(new byte[] { 'C', 'C', '1', 10, 0, 'm', 'y', 'k', 'e', 'y', 8, 7, 6, 5, 4, 3, 2, 1 }, output1);
         
-        byte[] output2 = encryptor.encrypt(input, 1);
+        byte[] output2 = encryptor.encrypt(input, 1, new byte[1]);
         assertArrayEquals(new byte[] { 0, 'C', 'C', '1', 10, 0, 'm', 'y', 'k', 'e', 'y', 8, 7, 6, 5, 4, 3, 2, 1 }, output2);
     }
 

Modified: cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/HeaderTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/HeaderTest.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/HeaderTest.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/HeaderTest.java Thu Apr 17 13:55:48 2014
@@ -28,6 +28,15 @@ import org.junit.Test;
 public class HeaderTest {
 
     @Test
+    public void testSetCompressed() {
+        assertEquals(1, Header.setCompressed((byte) 0, true));
+        assertEquals(0, Header.setCompressed((byte) 0, false));
+
+        assertEquals(1, Header.setCompressed((byte) 1, true));
+        assertEquals(0, Header.setCompressed((byte) 1, false));
+    }
+
+    @Test
     public void testCreate_WithKeyName() {
 
         Header h1 = Header.create("bcd", false);

Modified: cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/CryptoUnitUtils.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/CryptoUnitUtils.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/CryptoUnitUtils.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/CryptoUnitUtils.java Thu Apr 17 13:55:48 2014
@@ -24,6 +24,7 @@ import java.io.IOException;
 import java.math.BigInteger;
 import java.security.Key;
 import java.util.Arrays;
+import java.util.Random;
 import java.util.zip.GZIPInputStream;
 
 import javax.crypto.Cipher;
@@ -35,6 +36,13 @@ import org.apache.cayenne.crypto.transfo
 
 public class CryptoUnitUtils {
 
+    public static byte[] bytesOfSize(int len) {
+        Random r = new Random();
+        byte[] b = new byte[len];
+        r.nextBytes(b);
+        return b;
+    }
+
     public static byte[] hexToBytes(String hexString) {
         byte[] bytes = new BigInteger(hexString, 16).toByteArray();
 

Modified: cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/SwapBytesTransformer.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/SwapBytesTransformer.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/SwapBytesTransformer.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/SwapBytesTransformer.java Thu Apr 17 13:55:48 2014
@@ -52,7 +52,7 @@ public class SwapBytesTransformer implem
     }
 
     @Override
-    public byte[] encrypt(byte[] input, int outputOffset) {
+    public byte[] encrypt(byte[] input, int outputOffset, byte[] flags) {
 
         byte[] output = new byte[input.length + outputOffset];
 

Modified: cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/SwapBytesTransformerTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/SwapBytesTransformerTest.java?rev=1588253&r1=1588252&r2=1588253&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/SwapBytesTransformerTest.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/unit/SwapBytesTransformerTest.java Thu Apr 17 13:55:48 2014
@@ -31,7 +31,7 @@ public class SwapBytesTransformerTest {
         BytesEncryptor instance = SwapBytesTransformer.encryptor();
 
         byte[] input = { 1, 3, 5 };
-        byte[] output = instance.encrypt(input, 3);
+        byte[] output = instance.encrypt(input, 3, new byte[1]);
         assertArrayEquals(new byte[] { 0, 0, 0, 5, 3, 1 }, output);
     }
 
@@ -41,7 +41,7 @@ public class SwapBytesTransformerTest {
         BytesEncryptor instance = SwapBytesTransformer.encryptor();
 
         byte[] input = { 1, 3, 5, 8 };
-        byte[] output = instance.encrypt(input, 3);
+        byte[] output = instance.encrypt(input, 3, new byte[1]);
 
         assertArrayEquals(new byte[] { 0, 0, 0, 8, 5, 3, 1 }, output);
     }