public static void aesOfbCrypt(byte[] data, byte[] iv) {
		//Maple's OFB is done in piecemeal every 1460 bytes (I'm guessing it has
		//to deal with maximum segment size). First piece is only 1456 bytes
		//because the header, although not encrypted, adds 4 blocks to the first
		//segment.
		BlockCipher ciph = aes256.get();
		//loops through each 1460 byte piece (with first piece only 1456 bytes)
		for (
				int remaining = data.length, offset = 0, pieceSize = Math.min(1456, remaining);
				remaining > 0;
				remaining -= pieceSize, offset += pieceSize, pieceSize = Math.min(1460, remaining)) {
			byte[] myIv = ByteTool.multiplyBytes(iv, 4, 4);

			//OFB (which is just input block XOR'd with encrypted IV and key) each full block (block size is equal to IV size)
			int fullBlocks = pieceSize / myIv.length;
			for (int i = 0; i < fullBlocks; i++) {
				ciph.processBlock(myIv, 0, myIv, 0); //encrypt IV with key and copy output back to IV
				for (int j = 0; j < myIv.length; j++)
					data[offset + i * myIv.length + j] ^= myIv[j]; //XOR input block with encrypted IV and key
			}
			//OFB the final, incomplete block - OFB doesn't need block size aligned input
			ciph.processBlock(myIv, 0, myIv, 0);
			for (int i = pieceSize % myIv.length - 1; i >= 0; i--)
				data[offset + fullBlocks * myIv.length + i] ^= myIv[i];
		}
	}