/**
* Encrypts complete content, block by block.
*/
public byte[] encrypt(byte[] content) {
FastByteBuffer fbb = new FastByteBuffer();
int length = content.length + 1;
int blockCount = length / blockSizeInBytes;
int remaining = length;
int offset = 0;
for (int i = 0; i < blockCount; i++) {
if (remaining == blockSizeInBytes) {
break;
}
byte[] encrypted = encryptBlock(content, offset);
fbb.append(encrypted);
offset += blockSizeInBytes;
remaining -= blockSizeInBytes;
}
if (remaining != 0) {
// process remaining bytes
byte[] block = new byte[blockSizeInBytes];
System.arraycopy(content, offset, block, 0, remaining - 1);
block[remaining - 1] = TERMINATOR;
byte[] encrypted = encryptBlock(block, 0);
fbb.append(encrypted);
}
return fbb.toArray();
}