/*
* RELIC is an Efficient LIbrary for Cryptography
* Copyright (c) 2013 RELIC Authors
*
* This file is part of RELIC. RELIC is legal property of its developers,
* whose names are not listed here. Please refer to the COPYRIGHT file
* for contact information.
*
* RELIC is free software; you can redistribute it and/or modify it under the
* terms of the version 2.1 (or later) of the GNU Lesser General Public License
* as published by the Free Software Foundation; or version 2.0 of the Apache
* License as published by the Apache Software Foundation. See the LICENSE files
* for more details.
*
* RELIC is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the LICENSE files for more details.
*
* You should have received a copy of the GNU Lesser General Public or the
* Apache License along with RELIC. If not, see
* or .
*/
/**
* @defgroup bc Block ciphers
*/
/**
* @file
*
* Interface of the module for encrypting with block ciphers.
*
* @ingroup bc
*/
#ifndef RLC_BC_H
#define RLC_BC_H
#include "relic_conf.h"
#include "relic_types.h"
#include "relic_label.h"
/*============================================================================*/
/* Constant definitions */
/*============================================================================*/
/**
* Length in bytes of the default block cipher length.
*/
#define RLC_BC_LEN 16
/*============================================================================*/
/* Function prototypes */
/*============================================================================*/
/**
* Encrypts with AES in CBC mode.
*
* @param[out] out - the resulting ciphertext.
* @param[in,out] out_len - the buffer capacity and number of bytes written.
* @param[in] in - the bytes to be encrypted.
* @param[in] in_len - the number of bytes to encrypt.
* @param[in] key - the key.
* @param[in] key_len - the key size in bytes.
* @return RLC_OK if no errors occurred, RLC_ERR otherwise.
*/
int bc_aes_cbc_enc(uint8_t *out, int *out_len, uint8_t *in,
int in_len, uint8_t *key, int key_len, uint8_t *iv);
/**
* Decrypts with AES in CBC mode.
*
* @param[out] out - the resulting plaintext.
* @param[in,out] out_len - the buffer capacity and number of bytes written.
* @param[in] in - the bytes to be decrypted.
* @param[in] in_len - the number of bytes to decrypt.
* @param[in] key - the key.
* @param[in] key_len - the key size in bytes.
* @return RLC_OK if no errors occurred, RLC_ERR otherwise.
*/
int bc_aes_cbc_dec(uint8_t *out, int *out_len, uint8_t *in,
int in_len, uint8_t *key, int key_len, uint8_t *iv);
#endif /* !RLC_BC_H */