NimBLE-Arduino 2.1.2
Loading...
Searching...
No Matches
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 "aes.h"
101
102#include <stddef.h>
103
104#ifdef __cplusplus
105extern "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 */
112typedef struct tc_cmac_struct {
113/* initialization vector */
114 uint8_t iv[TC_AES_BLOCK_SIZE];
115/* used if message length is a multiple of block_size bytes */
116 uint8_t K1[TC_AES_BLOCK_SIZE];
117/* used if message length isn't a multiple block_size bytes */
118 uint8_t K2[TC_AES_BLOCK_SIZE];
119/* where to put bytes that didn't fill a block */
120 uint8_t leftover[TC_AES_BLOCK_SIZE];
121/* identifies the encryption key */
122 unsigned int keyid;
123/* next available leftover location */
124 unsigned int leftover_offset;
125/* AES key schedule */
126 TCAesKeySched_t sched;
127/* calls to tc_cmac_update left before re-key */
128 uint64_t countdown;
129} *TCCmacState_t;
130
142int tc_cmac_setup(TCCmacState_t s, const uint8_t *key,
143 TCAesKeySched_t sched);
144
153int tc_cmac_erase(TCCmacState_t s);
154
163int tc_cmac_init(TCCmacState_t s);
164
176int tc_cmac_update(TCCmacState_t s, const uint8_t *data, size_t dlen);
177
188int 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.
int tc_cmac_final(uint8_t *tag, TCCmacState_t s)
Generates the tag from the CMAC state.
Definition cmac_mode.c:222
int tc_cmac_init(TCCmacState_t s)
Initializes a new CMAC computation.
Definition cmac_mode.c:137
int tc_cmac_erase(TCCmacState_t s)
Erases the CMAC state.
Definition cmac_mode.c:125
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 cmac_mode.c:97
int tc_cmac_update(TCCmacState_t s, const uint8_t *data, size_t dlen)
Incrementally computes CMAC over the next data segment.
Definition cmac_mode.c:157