/* mvAes.h   v2.0   August '99
* Reference ANSI C code
*/

/*  AES Cipher header file for ANSI C Submissions
      Lawrence E. Bassham III
      Computer Security Division
      National Institute of Standards and Technology

    April 15, 1998

    This sample is to assist implementers developing to the Cryptographic
	API Profile for AES Candidate Algorithm Submissions.  Please consult this
	document as a cross-reference.

    ANY CHANGES, WHERE APPROPRIATE, TO INFORMATION PROVIDED IN THIS FILE
	MUST BE DOCUMENTED.  CHANGES ARE ONLY APPROPRIATE WHERE SPECIFIED WITH
	THE STRING "CHANGE POSSIBLE".  FUNCTION CALLS AND THEIR PARAMETERS CANNOT
	BE CHANGED.  STRUCTURES CAN BE ALTERED TO ALLOW IMPLEMENTERS TO INCLUDE
	IMPLEMENTATION SPECIFIC INFORMATION.
*/

/*  Includes:
	Standard include files
*/

#ifndef __mvAes_h__
#define __mvAes_h__

#ifdef __cplusplus
extern "C" {
#endif

#include "mvOs.h"

/*  Error Codes - CHANGE POSSIBLE: inclusion of additional error codes  */

/*  Key direction is invalid, e.g., unknown value */
#define     AES_BAD_KEY_DIR        -1

/*  Key material not of correct length */
#define     AES_BAD_KEY_MAT        -2

/*  Key passed is not valid  */
#define     AES_BAD_KEY_INSTANCE   -3

/*  Params struct passed to cipherInit invalid */
#define     AES_BAD_CIPHER_MODE    -4

/*  Cipher in wrong state (e.g., not initialized) */
#define     AES_BAD_CIPHER_STATE   -5

#define     AES_BAD_CIPHER_INSTANCE   -7

/*  Function protoypes  */
/*  CHANGED: makeKey(): parameter blockLen added
	this parameter is absolutely necessary if you want to
	setup the round keys in a variable block length setting
	cipherInit(): parameter blockLen added (for obvious reasons)
 */
	int aesMakeKey(MV_U8 *expandedKey, MV_U8 *keyMaterial, int keyLen, int blockLen);
	int aesBlockEncrypt128(MV_U8 mode, MV_U8 *IV, MV_U8 *expandedKey, int keyLen,
			       MV_U32 *plain, int numBlocks, MV_U32 *cipher);
	int aesBlockDecrypt128(MV_U8 mode, MV_U8 *IV, MV_U8 *expandedKey, int keyLen,
			       MV_U32 *plain, int numBlocks, MV_U32 *cipher);

#ifdef __cplusplus
}
#endif
#endif
