/*****************************************************************************
			Eurecom OpenAirInterface 3
			Copyright(c) 2012 Eurecom

Source		securityDef.h

Version		0.1

Date		2013/05/02

Product		NAS stack

Subsystem	include

Author		Frederic Maurel

Description	Contains global security definitions

*****************************************************************************/
#ifndef __SECURITYDEF_H__
#define __SECURITYDEF_H__

/****************************************************************************/
/*********************  G L O B A L    C O N S T A N T S  *******************/
/****************************************************************************/

/*
 * Index of the first byte of each fields of the AUTN parameter
 */
#define AUTH_SQN_INDEX	0
#define AUTH_AMF_INDEX	(AUTH_SQN_INDEX + AUTH_SQN_SIZE)
#define AUTH_MAC_INDEX	(AUTH_AMF_INDEX + AUTH_AMF_SIZE)

/*
 * Size of the authentication challenge parameters in bytes
 */
#define AUTH_SQN_SIZE	6  /* Sequence number:			48 bits	 */
#define AUTH_AK_SIZE	6  /* Anonymity key:			48 bits	 */
#define AUTH_AMF_SIZE	2  /* Authentication Management Field:	16 bits	 */
#define AUTH_MAC_SIZE	8  /* Message Authentication Code:	64 bits	 */
#define AUTH_AUTN_SIZE	16 /* Authentication token:		128 bits
				AUTN = (SQN ⊕ AK) || AMF || MAC		 */
#define AUTH_MACS_SIZE	8  /* Re-synchronization MAC:		64 bits	 */
#define AUTH_AUTS_SIZE	16 /* Re-synchronization AUT:		128 bits */
#define AUTH_RAND_SIZE	16 /* Random challenge:			128 bits */
#define AUTH_CK_SIZE	16 /* Ciphering key:			128 bits */
#define AUTH_IK_SIZE	16 /* Integrity key:			128 bits */
#define AUTH_RES_SIZE	16 /* Authentication response:		128 bits */
#define AUTH_SNID_SIZE	3  /* Serving network's identity:	24 bits	 */
#define AUTH_KASME_SIZE	32 /* ASME security key:		256 bits */
#define AUTH_KNAS_INT_SIZE	AUTH_KASME_SIZE	/* NAS integrity key	 */
#define AUTH_KNAS_ENC_SIZE	AUTH_KASME_SIZE	/* NAS cyphering key	 */
#define AUTH_KENB_SIZE		AUTH_KASME_SIZE	/* eNodeB security key	 */

/* "Separation bit" of AMF field */
#define AUTH_AMF_SEPARATION_BIT(a)	((a) & 0x80)

/****************************************************************************/
/************************  G L O B A L    T Y P E S  ************************/
/****************************************************************************/

/*
 * EPS authentication vector
 */
typedef struct {
	/* ASME security key				*/
    char kasme[AUTH_KASME_SIZE + 1];
	/* Random challenge parameter			*/
    char rand[AUTH_RAND_SIZE + 1];
	/* Authentication token parameter		*/
    char autn[AUTH_AUTN_SIZE + 1];
	/* Expected Authentication response parameter	*/
#define AUTH_XRES_SIZE	AUTH_RES_SIZE
    char xres[AUTH_XRES_SIZE + 1];
} auth_vector_t;

/****************************************************************************/
/********************  G L O B A L    V A R I A B L E S  ********************/
/****************************************************************************/

/****************************************************************************/
/******************  E X P O R T E D    F U N C T I O N S  ******************/
/****************************************************************************/

#endif /* __SECURITYDEF_H__*/