1*72c33676SMaxim Ag /* $OpenBSD: cmac.h,v 1.3 2014/06/21 13:42:14 jsing Exp $ */ 2f5b1c8a1SJohn Marino /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 3f5b1c8a1SJohn Marino * project. 4f5b1c8a1SJohn Marino */ 5f5b1c8a1SJohn Marino /* ==================================================================== 6f5b1c8a1SJohn Marino * Copyright (c) 2010 The OpenSSL Project. All rights reserved. 7f5b1c8a1SJohn Marino * 8f5b1c8a1SJohn Marino * Redistribution and use in source and binary forms, with or without 9f5b1c8a1SJohn Marino * modification, are permitted provided that the following conditions 10f5b1c8a1SJohn Marino * are met: 11f5b1c8a1SJohn Marino * 12f5b1c8a1SJohn Marino * 1. Redistributions of source code must retain the above copyright 13f5b1c8a1SJohn Marino * notice, this list of conditions and the following disclaimer. 14f5b1c8a1SJohn Marino * 15f5b1c8a1SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 16f5b1c8a1SJohn Marino * notice, this list of conditions and the following disclaimer in 17f5b1c8a1SJohn Marino * the documentation and/or other materials provided with the 18f5b1c8a1SJohn Marino * distribution. 19f5b1c8a1SJohn Marino * 20f5b1c8a1SJohn Marino * 3. All advertising materials mentioning features or use of this 21f5b1c8a1SJohn Marino * software must display the following acknowledgment: 22f5b1c8a1SJohn Marino * "This product includes software developed by the OpenSSL Project 23f5b1c8a1SJohn Marino * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 24f5b1c8a1SJohn Marino * 25f5b1c8a1SJohn Marino * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 26f5b1c8a1SJohn Marino * endorse or promote products derived from this software without 27f5b1c8a1SJohn Marino * prior written permission. For written permission, please contact 28f5b1c8a1SJohn Marino * licensing@OpenSSL.org. 29f5b1c8a1SJohn Marino * 30f5b1c8a1SJohn Marino * 5. Products derived from this software may not be called "OpenSSL" 31f5b1c8a1SJohn Marino * nor may "OpenSSL" appear in their names without prior written 32f5b1c8a1SJohn Marino * permission of the OpenSSL Project. 33f5b1c8a1SJohn Marino * 34f5b1c8a1SJohn Marino * 6. Redistributions of any form whatsoever must retain the following 35f5b1c8a1SJohn Marino * acknowledgment: 36f5b1c8a1SJohn Marino * "This product includes software developed by the OpenSSL Project 37f5b1c8a1SJohn Marino * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 38f5b1c8a1SJohn Marino * 39f5b1c8a1SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 40f5b1c8a1SJohn Marino * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41f5b1c8a1SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 42f5b1c8a1SJohn Marino * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 43f5b1c8a1SJohn Marino * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44f5b1c8a1SJohn Marino * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 45f5b1c8a1SJohn Marino * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 46f5b1c8a1SJohn Marino * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47f5b1c8a1SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 48f5b1c8a1SJohn Marino * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 49f5b1c8a1SJohn Marino * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 50f5b1c8a1SJohn Marino * OF THE POSSIBILITY OF SUCH DAMAGE. 51f5b1c8a1SJohn Marino * ==================================================================== 52f5b1c8a1SJohn Marino */ 53f5b1c8a1SJohn Marino 54f5b1c8a1SJohn Marino 55f5b1c8a1SJohn Marino #ifndef HEADER_CMAC_H 56f5b1c8a1SJohn Marino #define HEADER_CMAC_H 57f5b1c8a1SJohn Marino 58f5b1c8a1SJohn Marino #ifdef __cplusplus 59f5b1c8a1SJohn Marino extern "C" { 60f5b1c8a1SJohn Marino #endif 61f5b1c8a1SJohn Marino 62f5b1c8a1SJohn Marino #include <openssl/evp.h> 63f5b1c8a1SJohn Marino 64f5b1c8a1SJohn Marino /* Opaque */ 65f5b1c8a1SJohn Marino typedef struct CMAC_CTX_st CMAC_CTX; 66f5b1c8a1SJohn Marino 67f5b1c8a1SJohn Marino CMAC_CTX *CMAC_CTX_new(void); 68f5b1c8a1SJohn Marino void CMAC_CTX_cleanup(CMAC_CTX *ctx); 69f5b1c8a1SJohn Marino void CMAC_CTX_free(CMAC_CTX *ctx); 70f5b1c8a1SJohn Marino EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); 71f5b1c8a1SJohn Marino int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); 72f5b1c8a1SJohn Marino 73f5b1c8a1SJohn Marino int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, 74f5b1c8a1SJohn Marino const EVP_CIPHER *cipher, ENGINE *impl); 75f5b1c8a1SJohn Marino int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); 76f5b1c8a1SJohn Marino int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); 77f5b1c8a1SJohn Marino int CMAC_resume(CMAC_CTX *ctx); 78f5b1c8a1SJohn Marino 79f5b1c8a1SJohn Marino #ifdef __cplusplus 80f5b1c8a1SJohn Marino } 81f5b1c8a1SJohn Marino #endif 82f5b1c8a1SJohn Marino #endif 83