1 /* hmac.h 2 * 3 * Copyright (C) 2006-2021 wolfSSL Inc. 4 * 5 * This file is part of wolfSSL. 6 * 7 * wolfSSL is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * wolfSSL is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA 20 */ 21 22 23 24 /* hmac.h defines mini hamc openssl compatibility layer 25 * 26 */ 27 28 29 #ifndef WOLFSSL_HMAC_H_ 30 #define WOLFSSL_HMAC_H_ 31 32 #include <wolfssl/wolfcrypt/settings.h> 33 34 #ifdef WOLFSSL_PREFIX 35 #include "prefix_hmac.h" 36 #endif 37 38 #include <wolfssl/openssl/compat_types.h> 39 #include <wolfssl/openssl/opensslv.h> 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 46 WOLFSSL_API unsigned char* wolfSSL_HMAC(const WOLFSSL_EVP_MD* evp_md, 47 const void* key, int key_len, 48 const unsigned char* d, int n, unsigned char* md, 49 unsigned int* md_len); 50 51 WOLFSSL_API WOLFSSL_HMAC_CTX* wolfSSL_HMAC_CTX_new(void); 52 WOLFSSL_API int wolfSSL_HMAC_CTX_Init(WOLFSSL_HMAC_CTX* ctx); 53 WOLFSSL_API int wolfSSL_HMAC_CTX_copy(WOLFSSL_HMAC_CTX* des, 54 WOLFSSL_HMAC_CTX* src); 55 WOLFSSL_LOCAL int wolfSSL_HmacCopy(Hmac* des, Hmac* src); 56 WOLFSSL_API int wolfSSL_HMAC_Init(WOLFSSL_HMAC_CTX* ctx, const void* key, 57 int keylen, const WOLFSSL_EVP_MD* type); 58 WOLFSSL_API int wolfSSL_HMAC_Init_ex(WOLFSSL_HMAC_CTX* ctx, const void* key, 59 int keylen, const EVP_MD* type, WOLFSSL_ENGINE* e); 60 WOLFSSL_API int wolfSSL_HMAC_Update(WOLFSSL_HMAC_CTX* ctx, 61 const unsigned char* data, int len); 62 WOLFSSL_API int wolfSSL_HMAC_Final(WOLFSSL_HMAC_CTX* ctx, unsigned char* hash, 63 unsigned int* len); 64 WOLFSSL_API int wolfSSL_HMAC_cleanup(WOLFSSL_HMAC_CTX* ctx); 65 WOLFSSL_API void wolfSSL_HMAC_CTX_cleanup(WOLFSSL_HMAC_CTX* ctx); 66 WOLFSSL_API void wolfSSL_HMAC_CTX_free(WOLFSSL_HMAC_CTX* ctx); 67 WOLFSSL_API size_t wolfSSL_HMAC_size(const WOLFSSL_HMAC_CTX *ctx); 68 WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_HMAC_CTX_get_md(const WOLFSSL_HMAC_CTX *ctx); 69 70 typedef struct WOLFSSL_HMAC_CTX HMAC_CTX; 71 72 #define HMAC(a,b,c,d,e,f,g) wolfSSL_HMAC((a),(b),(c),(d),(e),(f),(g)) 73 74 #define HMAC_CTX_new wolfSSL_HMAC_CTX_new 75 #define HMAC_CTX_init wolfSSL_HMAC_CTX_Init 76 #define HMAC_CTX_copy wolfSSL_HMAC_CTX_copy 77 #define HMAC_CTX_free wolfSSL_HMAC_CTX_free 78 #define HMAC_CTX_cleanup wolfSSL_HMAC_CTX_cleanup 79 #define HMAC_CTX_reset wolfSSL_HMAC_cleanup 80 #define HMAC_Init_ex wolfSSL_HMAC_Init_ex 81 #define HMAC_Init wolfSSL_HMAC_Init 82 #define HMAC_Update wolfSSL_HMAC_Update 83 #define HMAC_Final wolfSSL_HMAC_Final 84 #define HMAC_cleanup wolfSSL_HMAC_cleanup 85 #define HMAC_size wolfSSL_HMAC_size 86 #define HMAC_CTX_get_md wolfSSL_HMAC_CTX_get_md 87 88 89 #ifdef __cplusplus 90 } /* extern "C" */ 91 #endif 92 93 94 #endif /* WOLFSSL_HMAC_H_ */ 95