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