package illgner.ch.encryption; import javax.crypto.NoSuchPaddingException; import java.io.IOException; import java.io.OutputStream; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; public interface IOutputStreamEnhancer { /** * This method enhances the given input stream {@link OutputStream} wrapping with the additional functionality (in our case with encryption) * @param outputStream the original stream {@link OutputStream} to be enhanced. * @return A new {@link OutputStream} that wraps the functionality to input stream. */ OutputStream enhance(OutputStream outputStream) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, IOException, InvalidAlgorithmParameterException, NoSuchProviderException; }