/* * Copyright (c) 2002,2005-2007,2010-2012 Apple Inc. All Rights Reserved. * * @APPLE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ */ /* * tls_hmac.h - Declarations of HMAC routines used by TLS */ #ifndef _TLS_HMAC_H_ #define _TLS_HMAC_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl.h" #include "sslPriv.h" /* forward declaration of HMAC object */ struct HMACReference; /* Opaque reference to an HMAC session context */ struct HMACContext; typedef struct HMACContext *HMACContextRef; /* The HMAC algorithms we support */ typedef enum { HA_Null = 0, // i.e., uninitialized HA_SHA1, HA_MD5, HA_SHA256, HA_SHA384 } HMAC_Algs; /* For convenience..the max size of HMAC, in bytes, this module will ever return */ #define TLS_HMAC_MAX_SIZE 48 /* Create an HMAC session */ typedef OSStatus (*HMAC_AllocFcn) ( const struct HMACReference *hmac, SSLContext *ctx, const void *keyPtr, size_t keyLen, HMACContextRef *hmacCtx); // RETURNED /* Free a session */ typedef OSStatus (*HMAC_FreeFcn) ( HMACContextRef hmacCtx); /* Reusable init, using same key */ typedef OSStatus (*HMAC_InitFcn) ( HMACContextRef hmacCtx); /* normal crypt ops */ typedef OSStatus (*HMAC_UpdateFcn) ( HMACContextRef hmacCtx, const void *data, size_t dataLen); typedef OSStatus (*HMAC_FinalFcn) ( HMACContextRef hmacCtx, void *hmac, // mallocd by caller size_t *hmacLen); // IN/OUT /* one-shot */ typedef OSStatus (*HMAC_HmacFcn) ( HMACContextRef hmacCtx, const void *data, size_t dataLen, void *hmac, // mallocd by caller size_t *hmacLen); // IN/OUT typedef struct HMACReference { size_t macSize; HMAC_Algs alg; HMAC_AllocFcn alloc; HMAC_FreeFcn free; HMAC_InitFcn init; HMAC_UpdateFcn update; HMAC_FinalFcn final; HMAC_HmacFcn hmac; } HMACReference; extern const HMACReference TlsHmacNull; extern const HMACReference TlsHmacSHA1; extern const HMACReference TlsHmacMD5; extern const HMACReference TlsHmacSHA256; extern const HMACReference TlsHmacSHA384; #ifdef __cplusplus } #endif #endif /* _TLS_HMAC_H_ */