ndn-lite
tc_cmac_mode.h
Go to the documentation of this file.
1 /* cmac_mode.h -- interface to a CMAC implementation */
2 
3 /*
4  * Copyright (C) 2017 by Intel Corporation, All Rights Reserved
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * - Redistributions of source code must retain the above copyright notice,
10  * this list of conditions and the following disclaimer.
11  *
12  * - Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * - Neither the name of Intel Corporation nor the names of its contributors
17  * may be used to endorse or promote products derived from this software
18  * without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
32 
97 #ifndef __TC_CMAC_MODE_H__
98 #define __TC_CMAC_MODE_H__
99 
100 #include "tc_aes.h"
101 
102 #include <stddef.h>
103 
104 #ifdef __cplusplus
105 extern "C" {
106 #endif
107 
108 /* padding for last message block */
109 #define TC_CMAC_PADDING 0x80
110 
111 /* struct tc_cmac_struct represents the state of a CMAC computation */
112 typedef struct tc_cmac_struct {
113 /* initialization vector */
115 /* used if message length is a multiple of block_size bytes */
117 /* used if message length isn't a multiple block_size bytes */
119 /* where to put bytes that didn't fill a block */
121 /* identifies the encryption key */
122  unsigned int keyid;
123 /* next available leftover location */
124  unsigned int leftover_offset;
125 /* AES key schedule */
127 /* calls to tc_cmac_update left before re-key */
128  uint64_t countdown;
129 } *TCCmacState_t;
130 
142 int tc_cmac_setup(TCCmacState_t s, const uint8_t *key,
143  TCAesKeySched_t sched);
144 
154 
164 
176 int tc_cmac_update(TCCmacState_t s, const uint8_t *data, size_t dlen);
177 
188 int tc_cmac_final(uint8_t *tag, TCCmacState_t s);
189 
190 #ifdef __cplusplus
191 }
192 #endif
193 
194 #endif /* __TC_CMAC_MODE_H__ */
– Interface to an AES-128 implementation.
#define TC_AES_BLOCK_SIZE
Definition: tc_aes.h:61
uint8_t K1[TC_AES_BLOCK_SIZE]
Definition: tc_cmac_mode.h:116
uint8_t leftover[TC_AES_BLOCK_SIZE]
Definition: tc_cmac_mode.h:120
int tc_cmac_init(TCCmacState_t s)
Initializes a new CMAC computation.
Definition: tc_cmac_mode.c:137
TCAesKeySched_t sched
Definition: tc_cmac_mode.h:126
uint8_t iv[TC_AES_BLOCK_SIZE]
Definition: tc_cmac_mode.h:114
uint8_t K2[TC_AES_BLOCK_SIZE]
Definition: tc_cmac_mode.h:118
unsigned int leftover_offset
Definition: tc_cmac_mode.h:124
uint64_t countdown
Definition: tc_cmac_mode.h:128
unsigned int keyid
Definition: tc_cmac_mode.h:122
int tc_cmac_erase(TCCmacState_t s)
Erases the CMAC state.
Definition: tc_cmac_mode.c:125
struct tc_cmac_struct * TCCmacState_t
int tc_cmac_update(TCCmacState_t s, const uint8_t *data, size_t dlen)
Incrementally computes CMAC over the next data segment.
Definition: tc_cmac_mode.c:157
Definition: tc_cmac_mode.h:112
int tc_cmac_final(uint8_t *tag, TCCmacState_t s)
Generates the tag from the CMAC state.
Definition: tc_cmac_mode.c:222
Definition: tc_aes.h:64
int tc_cmac_setup(TCCmacState_t s, const uint8_t *key, TCAesKeySched_t sched)
Configures the CMAC state to use the given AES key.
Definition: tc_cmac_mode.c:97