@Test
public void decrypt() throws Exception {
byte[] src = "FU beyond all r!".getBytes();
assertEquals(16, src.length);
byte [] key = CTRTransformer.randomBytes(32);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
EncryptingStream es = new EncryptingStream(AES256.class, key, bos);
es.write(src);
es.write(src);
byte[] encrypted = bos.toByteArray();
assertEquals(48, encrypted.length);
byte []p1 = Arrays.copyOfRange(encrypted, 0x10, 0x16);
byte []p2 = Arrays.copyOfRange(encrypted, 0x20, 0x26);
byte []cp = Arrays.copyOfRange(src, 0, 6);
assertThat(p1, not(equalTo(p2)));
assertThat(cp, not(equalTo(p2)));
assertThat(cp, not(equalTo(p1)));
byte[] decrypted = DecryptingStream.decrypt(AES256.class, key, encrypted);
p1 = Arrays.copyOfRange(decrypted, 0, 16);
p2 = Arrays.copyOfRange(decrypted, 16, 32);
assertThat(src, equalTo(p1));
assertThat(src, equalTo(p2));
src = "Only5".getBytes();
encrypted = EncryptingStream.encrypt(AES256.class, key, src);
assertThat(encrypted.length, equalTo(21));
assertThat(DecryptingStream.decrypt(AES256.class, key, encrypted), equalTo(src));
}