/* See LICENSE for licensing and NOTICE for copyright. */
package org.cryptacular.bean;
import java.io.InputStream;
import java.io.OutputStream;
import org.cryptacular.CryptoException;
import org.cryptacular.StreamException;
/**
* Bean that performs encryption/decryption using a symmetric cipher.
*
* @author Middleware Services
*/
public interface CipherBean
{
/**
* Encrypts the input data using a symmetric cipher.
*
* @param input Plaintext data to encrypt.
*
* @return Ciphertext output.
*
* @throws CryptoException on underlying cipher data handling errors.
*/
byte[] encrypt(byte[] input) throws CryptoException;
/**
* Encrypts the data from the input stream onto the output stream using a symmetric cipher.
*
* <p>The caller is responsible for providing and managing the streams (e.g. closing them when finished).</p>
*
* @param input Input stream containing plaintext data to encrypt.
* @param output Output stream containing ciphertext produced by cipher in encryption mode.
*
* @throws CryptoException on underlying cipher data handling errors.
* @throws StreamException on stream IO errors.
*/
void encrypt(InputStream input, OutputStream output) throws CryptoException, StreamException;
/**
* Decrypts the input data using a block cipher.
*
* @param input Ciphertext data to encrypt.
*
* @return Plaintext output.
*
* @throws CryptoException on underlying cipher data handling errors.
*/
byte[] decrypt(byte[] input) throws CryptoException;
/**
* Decrypts the data from the input stream onto the output stream using a symmetric cipher.
*
* <p>The caller is responsible for providing and managing the streams (e.g. closing them when finished).</p>
*
* @param input Input stream containing ciphertext data to decrypt.
* @param output Output stream containing plaintext produced by cipher in decryption mode.
*
* @throws CryptoException on underlying cipher data handling errors.
* @throws StreamException on stream IO errors.
*/
void decrypt(InputStream input, OutputStream output) throws CryptoException, StreamException;
}