use of org.apache.cayenne.crypto.transformer.bytes.Header in project cayenne by apache.
the class Runtime_AES128_GZIP_IT method testInsert.
@Test
public void testInsert() throws SQLException {
ObjectContext context = runtime.newContext();
// make sure compression is on...
byte[] cryptoBytes = CryptoUnitUtils.bytesOfSize(GZIP_THRESHOLD + 100);
Table2 t1 = context.newObject(Table2.class);
t1.setPlainBytes("plain_1".getBytes());
t1.setCryptoBytes(cryptoBytes);
context.commitChanges();
Object[] data = table2.select();
assertArrayEquals("plain_1".getBytes(), (byte[]) data[1]);
Header h = Header.create((byte[]) data[2], 0);
assertTrue(h.isCompressed());
assertArrayEquals(cryptoBytes, CryptoUnitUtils.gunzip(CryptoUnitUtils.decrypt_AES_CBC((byte[]) data[2], runtime)));
}
use of org.apache.cayenne.crypto.transformer.bytes.Header in project cayenne by apache.
the class Runtime_AES128_GZIP_IT method testInsert_Small.
@Test
public void testInsert_Small() throws SQLException {
ObjectContext context = runtime.newContext();
// make sure compression is on...
byte[] cryptoBytes = CryptoUnitUtils.bytesOfSize(GZIP_THRESHOLD - 20);
Table2 t1 = context.newObject(Table2.class);
t1.setPlainBytes("plain_1".getBytes());
t1.setCryptoBytes(cryptoBytes);
context.commitChanges();
Object[] data = table2.select();
assertArrayEquals("plain_1".getBytes(), (byte[]) data[1]);
Header h = Header.create((byte[]) data[2], 0);
assertFalse(h.isCompressed());
assertArrayEquals(cryptoBytes, CryptoUnitUtils.decrypt_AES_CBC((byte[]) data[2], runtime));
}
use of org.apache.cayenne.crypto.transformer.bytes.Header in project cayenne by apache.
the class CryptoUnitUtils method decrypt_AES_CBC.
public static byte[] decrypt_AES_CBC(byte[] source, ServerRuntime runtime) {
try {
Cipher decCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Header header = Header.create(source, 0);
int offset = header.size();
if (header.haveHMAC()) {
byte hmacLength = source[offset];
offset += hmacLength + 1;
}
int blockSize = decCipher.getBlockSize();
byte[] ivBytes = Arrays.copyOfRange(source, offset, offset + blockSize);
byte[] cipherText = Arrays.copyOfRange(source, offset + blockSize, source.length);
Key key = runtime.getInjector().getInstance(KeySource.class).getKey(header.getKeyName());
decCipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivBytes));
return decCipher.doFinal(cipherText);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Aggregations