Search in sources :

Example 1 with Header

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)));
}
Also used : Header(org.apache.cayenne.crypto.transformer.bytes.Header) Table2(org.apache.cayenne.crypto.db.Table2) ObjectContext(org.apache.cayenne.ObjectContext) Test(org.junit.Test)

Example 2 with Header

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));
}
Also used : Header(org.apache.cayenne.crypto.transformer.bytes.Header) Table2(org.apache.cayenne.crypto.db.Table2) ObjectContext(org.apache.cayenne.ObjectContext) Test(org.junit.Test)

Example 3 with Header

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);
    }
}
Also used : KeySource(org.apache.cayenne.crypto.key.KeySource) Header(org.apache.cayenne.crypto.transformer.bytes.Header) IvParameterSpec(javax.crypto.spec.IvParameterSpec) Cipher(javax.crypto.Cipher) Key(java.security.Key) IOException(java.io.IOException)

Aggregations

Header (org.apache.cayenne.crypto.transformer.bytes.Header)3 ObjectContext (org.apache.cayenne.ObjectContext)2 Table2 (org.apache.cayenne.crypto.db.Table2)2 Test (org.junit.Test)2 IOException (java.io.IOException)1 Key (java.security.Key)1 Cipher (javax.crypto.Cipher)1 IvParameterSpec (javax.crypto.spec.IvParameterSpec)1 KeySource (org.apache.cayenne.crypto.key.KeySource)1