class EncryptionService {

    public byte[] decrypt(final byte[] inputData) throws FunctionalException {

        try {
            final Cipher cipher = Cipher.getInstance(ALGORITHM, PROVIDER);
            cipher.init(Cipher.DECRYPT_MODE, this.key, new IvParameterSpec(IVBYTES));
            final byte[] decryptedData = cipher.doFinal(inputData);
            if (this.checkNullBytesPrepended(decryptedData)) {
                return Arrays.copyOfRange(decryptedData, IVBYTES.length, decryptedData.length);
            } else {
                return decryptedData;
            }
        } catch (final NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException
                | IllegalBlockSizeException | BadPaddingException | NoSuchProviderException
                | InvalidAlgorithmParameterException e) {
            LOGGER.error("Unexpected exception during decryption", e);

            throw new FunctionalException(FunctionalExceptionType.DECRYPTION_EXCEPTION, ComponentType.SHARED, e);
        }
    }

    protected  EncryptionService(final SecretKeySpec key);
    public  EncryptionService();

}