1386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/*
2386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * aes_icm.h
3386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari *
4386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * Header for AES Integer Counter Mode.
5386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari *
6386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * David A. McGrew
7386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * Cisco Systems, Inc.
8386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari *
9386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */
10386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
11386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#ifndef AES_ICM_H
12386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define AES_ICM_H
13386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
14386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#include "aes.h"
15386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#include "cipher.h"
16386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
17386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagaritypedef struct {
18386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari  v128_t   counter;                /* holds the counter value          */
19386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari  v128_t   offset;                 /* initial offset value             */
20386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari  v128_t   keystream_buffer;       /* buffers bytes of keystream       */
21386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari  aes_expanded_key_t expanded_key; /* the cipher key                   */
22386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari  int      bytes_in_buffer;        /* number of unused bytes in buffer */
23386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} aes_icm_ctx_t;
24386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
25386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
26386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarierr_status_t
27386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariaes_icm_context_init(aes_icm_ctx_t *c,
28386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari		     const unsigned char *key);
29386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
30386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarierr_status_t
31386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariaes_icm_set_iv(aes_icm_ctx_t *c, void *iv);
32386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
33386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarierr_status_t
34386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariaes_icm_encrypt(aes_icm_ctx_t *c,
35386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari		unsigned char *buf, unsigned int *bytes_to_encr);
36386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
37386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarierr_status_t
38386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariaes_icm_output(aes_icm_ctx_t *c,
39386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari	       unsigned char *buf, int bytes_to_output);
40386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
41386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarierr_status_t
42386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariaes_icm_dealloc(cipher_t *c);
43386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
44386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarierr_status_t
45386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariaes_icm_encrypt_ismacryp(aes_icm_ctx_t *c,
46386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari			 unsigned char *buf,
47386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari			 unsigned int *enc_len,
48386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari			 int forIsmacryp);
49386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
50386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarierr_status_t
51386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariaes_icm_alloc_ismacryp(cipher_t **c,
52386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari		       int key_len,
53386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari		       int forIsmacryp);
54386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
55386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif /* AES_ICM_H */
56386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari
57