### Question:
DoubleClickCrypto { public byte[] decrypt(byte[] cipherData) throws SignatureException { checkArgument(cipherData.length >= OVERHEAD_SIZE, "Invalid cipherData, %s bytes", cipherData.length); byte[] workBytes = cipherData.clone(); ByteBuffer workBuffer = ByteBuffer.wrap(workBytes); boolean success = false; try { xorPayloadToHmacPad(workBytes); int confirmationSignature = hmacSignature(workBytes); int integritySignature = workBuffer.getInt(workBytes.length - SIGNATURE_SIZE); workBuffer.putInt(workBytes.length - SIGNATURE_SIZE, confirmationSignature); if (confirmationSignature != integritySignature) { throw new SignatureException("Signature mismatch: " + Integer.toHexString(confirmationSignature) + " vs " + Integer.toHexString(integritySignature)); } if (logger.isDebugEnabled()) { logger.debug(dump("Decrypted", cipherData, workBytes)); } success = true; return workBytes; } finally { if (!success && logger.isDebugEnabled()) { logger.debug(dump("Decrypted (failed)", cipherData, workBytes)); } } } DoubleClickCrypto(Keys keys); byte[] decrypt(byte[] cipherData); byte[] encrypt(byte[] plainData); byte[] createInitVector(@Nullable Date timestamp, long serverId); byte[] createInitVector(long timestamp, long serverId); Date getTimestamp(byte[] data); long getServerId(byte[] data); @Override String toString(); static final String KEY_ALGORITHM; static final int INITV_BASE; static final int INITV_SIZE; static final int INITV_TIMESTAMP_OFFSET; static final int INITV_SERVERID_OFFSET; static final int PAYLOAD_BASE; static final int SIGNATURE_SIZE; static final int OVERHEAD_SIZE; }### Answer:
@Test(expected = IllegalArgumentException.class) public void testDecryptBytes_empty() throws GeneralSecurityException { baseCrypto.decrypt(new byte[0]); }