Author: aadamchik
Date: Thu Apr 17 13:55:34 2014
New Revision: 1588252

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

(in progress) don't compress smaller values

Added:
    
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueDecryptor.java
      - copied, changed from r1588251, 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultDecryptor.java
    
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueEncryptor.java
      - copied, changed from r1588251, 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultEncryptor.java
Removed:
    
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultDecryptor.java
    
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultEncryptor.java
Modified:
    
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/value/DefaultValueTransformerFactory.java
    
cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultEncryptorTest.java
    
cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryTest.java

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=1588252&r1=1588251&r2=1588252&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:34 2014
@@ -29,6 +29,8 @@ import org.apache.cayenne.crypto.Cayenne
  */
 class GzipEncryptor implements BytesEncryptor {
 
+    private static final int GZIP_THRESHOLD = 150;
+
     private BytesEncryptor delegate;
 
     public GzipEncryptor(BytesEncryptor delegate) {
@@ -38,18 +40,18 @@ class GzipEncryptor implements BytesEncr
     @Override
     public byte[] encrypt(byte[] input, int outputOffset) {
 
-        // TODO: skip compression of small inputs... somehow flip compression
-        // bit in the header back to off in that case.
+        boolean compress = input.length >= GZIP_THRESHOLD;
 
-        byte[] compressedIn;
-        try {
-            compressedIn = gzip(input);
-        } catch (IOException e) {
-            // really not expecting an error here...
-            throw new CayenneCryptoException("Error compressing input", e);
+        if (compress) {
+            try {
+                input = gzip(input);
+            } catch (IOException e) {
+                // really not expecting an error here...
+                throw new CayenneCryptoException("Error compressing input", e);
+            }
         }
 
-        return delegate.encrypt(compressedIn, outputOffset);
+        return delegate.encrypt(input, outputOffset);
     }
 
     static byte[] gzip(byte[] input) throws IOException {

Copied: 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueDecryptor.java
 (from r1588251, 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultDecryptor.java)
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueDecryptor.java?p2=cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueDecryptor.java&p1=cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultDecryptor.java&r1=1588251&r2=1588252&rev=1588252&view=diff
==============================================================================
--- 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultDecryptor.java
 (original)
+++ 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueDecryptor.java
 Thu Apr 17 13:55:34 2014
@@ -25,13 +25,13 @@ import org.apache.cayenne.crypto.transfo
 /**
  * @since 3.2
  */
-class DefaultDecryptor implements ValueDecryptor {
+class DefaultValueDecryptor implements ValueDecryptor {
 
     private Key defaultKey;
     private BytesConverter preConverter;
     private BytesConverter postConverter;
 
-    public DefaultDecryptor(BytesConverter preConverter, BytesConverter 
postConverter, Key defaultKey) {
+    public DefaultValueDecryptor(BytesConverter preConverter, BytesConverter 
postConverter, Key defaultKey) {
         this.preConverter = preConverter;
         this.postConverter = postConverter;
     }

Copied: 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueEncryptor.java
 (from r1588251, 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultEncryptor.java)
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueEncryptor.java?p2=cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueEncryptor.java&p1=cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultEncryptor.java&r1=1588251&r2=1588252&rev=1588252&view=diff
==============================================================================
--- 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultEncryptor.java
 (original)
+++ 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueEncryptor.java
 Thu Apr 17 13:55:34 2014
@@ -23,12 +23,12 @@ import org.apache.cayenne.crypto.transfo
 /**
  * @since 3.2
  */
-class DefaultEncryptor implements ValueEncryptor {
+class DefaultValueEncryptor implements ValueEncryptor {
 
     private BytesConverter preConverter;
     private BytesConverter postConverter;
 
-    public DefaultEncryptor(BytesConverter preConverter, BytesConverter 
postConverter) {
+    public DefaultValueEncryptor(BytesConverter preConverter, BytesConverter 
postConverter) {
         this.preConverter = preConverter;
         this.postConverter = postConverter;
     }

Modified: 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java?rev=1588252&r1=1588251&r2=1588252&view=diff
==============================================================================
--- 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
 (original)
+++ 
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
 Thu Apr 17 13:55:34 2014
@@ -164,7 +164,7 @@ public class DefaultValueTransformerFact
                     + " for attribute " + a + " has no bytes-to-db 
conversion");
         }
 
-        return new DefaultEncryptor(toBytes, fromBytes);
+        return new DefaultValueEncryptor(toBytes, fromBytes);
     }
 
     protected ValueDecryptor createDecryptor(DbAttribute a) {
@@ -182,7 +182,7 @@ public class DefaultValueTransformerFact
                     + " has no bytes-to-object conversion");
         }
 
-        return new DefaultDecryptor(toBytes, fromBytes, defaultKey);
+        return new DefaultValueDecryptor(toBytes, fromBytes, defaultKey);
     }
 
     // TODO: calculating Java type of ObjAttribute may become unneeded per

Modified: 
cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultEncryptorTest.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultEncryptorTest.java?rev=1588252&r1=1588251&r2=1588252&view=diff
==============================================================================
--- 
cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultEncryptorTest.java
 (original)
+++ 
cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultEncryptorTest.java
 Thu Apr 17 13:55:34 2014
@@ -53,7 +53,7 @@ public class DefaultEncryptorTest {
     @Test
     public void testEncrypt_BytesToBytes() throws IllegalBlockSizeException, 
BadPaddingException {
 
-        DefaultEncryptor e = new 
DefaultEncryptor(BytesToBytesConverter.INSTANCE, 
BytesToBytesConverter.INSTANCE);
+        DefaultValueEncryptor e = new 
DefaultValueEncryptor(BytesToBytesConverter.INSTANCE, 
BytesToBytesConverter.INSTANCE);
 
         byte[] b1 = new byte[] { 1, 2 };
         byte[] b2 = new byte[] { 2, 3 };
@@ -72,7 +72,7 @@ public class DefaultEncryptorTest {
     @Test
     public void testEncrypt_BytesToBytes_null() throws 
IllegalBlockSizeException, BadPaddingException {
 
-        DefaultEncryptor e = new 
DefaultEncryptor(BytesToBytesConverter.INSTANCE, 
BytesToBytesConverter.INSTANCE);
+        DefaultValueEncryptor e = new 
DefaultValueEncryptor(BytesToBytesConverter.INSTANCE, 
BytesToBytesConverter.INSTANCE);
         assertNull(e.encrypt(encryptor, null));
     }
 
@@ -80,7 +80,7 @@ public class DefaultEncryptorTest {
     public void testEncrypt_StringToBytes() throws 
UnsupportedEncodingException, IllegalBlockSizeException,
             BadPaddingException {
 
-        DefaultEncryptor e = new 
DefaultEncryptor(Utf8StringConverter.INSTANCE, BytesToBytesConverter.INSTANCE);
+        DefaultValueEncryptor e = new 
DefaultValueEncryptor(Utf8StringConverter.INSTANCE, 
BytesToBytesConverter.INSTANCE);
 
         String s1 = "ab";
         String s2 = "cd";
@@ -100,7 +100,7 @@ public class DefaultEncryptorTest {
     public void testEncrypt_StringToString() throws 
UnsupportedEncodingException, IllegalBlockSizeException,
             BadPaddingException {
 
-        DefaultEncryptor e = new 
DefaultEncryptor(Utf8StringConverter.INSTANCE, Base64StringConverter.INSTANCE);
+        DefaultValueEncryptor e = new 
DefaultValueEncryptor(Utf8StringConverter.INSTANCE, 
Base64StringConverter.INSTANCE);
 
         String s1 = "ab";
 

Modified: 
cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryTest.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryTest.java?rev=1588252&r1=1588251&r2=1588252&view=diff
==============================================================================
--- 
cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryTest.java
 (original)
+++ 
cayenne/main/trunk/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryTest.java
 Thu Apr 17 13:55:34 2014
@@ -85,17 +85,17 @@ public class DefaultValueTransformerFact
 
         ValueEncryptor t1 = f.createEncryptor(t1_ct);
         assertNotNull(t1);
-        assertTrue(t1 instanceof DefaultEncryptor);
-        assertSame(Utf8StringConverter.INSTANCE, ((DefaultEncryptor) 
t1).getPreConverter());
-        assertSame(Base64StringConverter.INSTANCE, ((DefaultEncryptor) 
t1).getPostConverter());
+        assertTrue(t1 instanceof DefaultValueEncryptor);
+        assertSame(Utf8StringConverter.INSTANCE, ((DefaultValueEncryptor) 
t1).getPreConverter());
+        assertSame(Base64StringConverter.INSTANCE, ((DefaultValueEncryptor) 
t1).getPostConverter());
 
         DbAttribute t2_cb = t2.getAttribute("CRYPTO_BYTES");
 
         ValueEncryptor t2 = f.createEncryptor(t2_cb);
         assertNotNull(t2);
-        assertTrue(t2 instanceof DefaultEncryptor);
-        assertSame(BytesToBytesConverter.INSTANCE, ((DefaultEncryptor) 
t2).getPreConverter());
-        assertSame(BytesToBytesConverter.INSTANCE, ((DefaultEncryptor) 
t2).getPostConverter());
+        assertTrue(t2 instanceof DefaultValueEncryptor);
+        assertSame(BytesToBytesConverter.INSTANCE, ((DefaultValueEncryptor) 
t2).getPreConverter());
+        assertSame(BytesToBytesConverter.INSTANCE, ((DefaultValueEncryptor) 
t2).getPostConverter());
     }
 
     @Test
@@ -106,25 +106,25 @@ public class DefaultValueTransformerFact
 
         ValueDecryptor t1 = f.createDecryptor(t1_ct);
         assertNotNull(t1);
-        assertTrue(t1 instanceof DefaultDecryptor);
-        assertSame(Base64StringConverter.INSTANCE, ((DefaultDecryptor) 
t1).getPreConverter());
-        assertSame(Utf8StringConverter.INSTANCE, ((DefaultDecryptor) 
t1).getPostConverter());
+        assertTrue(t1 instanceof DefaultValueDecryptor);
+        assertSame(Base64StringConverter.INSTANCE, ((DefaultValueDecryptor) 
t1).getPreConverter());
+        assertSame(Utf8StringConverter.INSTANCE, ((DefaultValueDecryptor) 
t1).getPostConverter());
 
         DbAttribute t2_cb = t2.getAttribute("CRYPTO_BYTES");
 
         ValueDecryptor t2 = f.createDecryptor(t2_cb);
         assertNotNull(t2);
-        assertTrue(t2 instanceof DefaultDecryptor);
-        assertSame(BytesToBytesConverter.INSTANCE, ((DefaultDecryptor) 
t2).getPreConverter());
-        assertSame(BytesToBytesConverter.INSTANCE, ((DefaultDecryptor) 
t2).getPostConverter());
+        assertTrue(t2 instanceof DefaultValueDecryptor);
+        assertSame(BytesToBytesConverter.INSTANCE, ((DefaultValueDecryptor) 
t2).getPreConverter());
+        assertSame(BytesToBytesConverter.INSTANCE, ((DefaultValueDecryptor) 
t2).getPostConverter());
 
         DbAttribute t3_cb = t3.getAttribute("CRYPTO_BYTES");
 
         ValueDecryptor t3 = f.createDecryptor(t3_cb);
         assertNotNull(t3);
-        assertTrue(t3 instanceof DefaultDecryptor);
-        assertSame(BytesToBytesConverter.INSTANCE, ((DefaultDecryptor) 
t3).getPreConverter());
-        assertSame(Utf8StringConverter.INSTANCE, ((DefaultDecryptor) 
t3).getPostConverter());
+        assertTrue(t3 instanceof DefaultValueDecryptor);
+        assertSame(BytesToBytesConverter.INSTANCE, ((DefaultValueDecryptor) 
t3).getPreConverter());
+        assertSame(Utf8StringConverter.INSTANCE, ((DefaultValueDecryptor) 
t3).getPostConverter());
     }
 
     @Test


Reply via email to