| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| #ifndef _CMAC_H_ |
| #define _CMAC_H_ |
| |
| typedef struct CMACContextStr CMACContext; |
| |
| SEC_BEGIN_PROTOS |
| |
| /* Enum for identifying the underlying block cipher we're using internally. */ |
| typedef enum { |
| CMAC_AES = 0 |
| } CMACCipher; |
| |
| /* Initialize an existing CMACContext struct. */ |
| SECStatus CMAC_Init(CMACContext *ctx, CMACCipher type, |
| const unsigned char *key, unsigned int key_len); |
| |
| /* Allocate and initialize a new CMAC context with the specified cipher and |
| * key. */ |
| CMACContext *CMAC_Create(CMACCipher type, const unsigned char *key, |
| unsigned int key_len); |
| |
| /* Called automatically by CMAC_*{Create,Init}(...). Only useful for restarting |
| * an already-started CMAC instance. */ |
| SECStatus CMAC_Begin(CMACContext *ctx); |
| |
| /* Add the specified bytes into the CMAC state. */ |
| SECStatus CMAC_Update(CMACContext *ctx, const unsigned char *data, |
| unsigned int data_len); |
| |
| /* Finalize the CMAC state and return the result. */ |
| SECStatus CMAC_Finish(CMACContext *ctx, unsigned char *result, |
| unsigned int *result_len, |
| unsigned int max_result_len); |
| |
| /* Note: CMAC_Clone isn't implemented here because AES doesn't expose a |
| * context-cloning operation. */ |
| |
| /* Destroy a CMAC context, optionally freeing it. */ |
| void CMAC_Destroy(CMACContext *ctx, PRBool free_it); |
| |
| SEC_END_PROTOS |
| |
| #endif |