Hannes Tschofenig / Mbed 2 deprecated aes-gcm-test-program

Dependencies:   mbed

Committer:
HannesTschofenig
Date:
Thu Sep 27 06:34:22 2018 +0000
Revision:
0:796d0f61a05b
Example AES-GCM test program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HannesTschofenig 0:796d0f61a05b 1 /**
HannesTschofenig 0:796d0f61a05b 2 * \file md.c
HannesTschofenig 0:796d0f61a05b 3 *
HannesTschofenig 0:796d0f61a05b 4 * \brief Generic message digest wrapper for PolarSSL
HannesTschofenig 0:796d0f61a05b 5 *
HannesTschofenig 0:796d0f61a05b 6 * \author Adriaan de Jong <dejong@fox-it.com>
HannesTschofenig 0:796d0f61a05b 7 *
HannesTschofenig 0:796d0f61a05b 8 * Copyright (C) 2006-2014, Brainspark B.V.
HannesTschofenig 0:796d0f61a05b 9 *
HannesTschofenig 0:796d0f61a05b 10 * This file is part of PolarSSL (http://www.polarssl.org)
HannesTschofenig 0:796d0f61a05b 11 * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
HannesTschofenig 0:796d0f61a05b 12 *
HannesTschofenig 0:796d0f61a05b 13 * All rights reserved.
HannesTschofenig 0:796d0f61a05b 14 *
HannesTschofenig 0:796d0f61a05b 15 * This program is free software; you can redistribute it and/or modify
HannesTschofenig 0:796d0f61a05b 16 * it under the terms of the GNU General Public License as published by
HannesTschofenig 0:796d0f61a05b 17 * the Free Software Foundation; either version 2 of the License, or
HannesTschofenig 0:796d0f61a05b 18 * (at your option) any later version.
HannesTschofenig 0:796d0f61a05b 19 *
HannesTschofenig 0:796d0f61a05b 20 * This program is distributed in the hope that it will be useful,
HannesTschofenig 0:796d0f61a05b 21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
HannesTschofenig 0:796d0f61a05b 22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
HannesTschofenig 0:796d0f61a05b 23 * GNU General Public License for more details.
HannesTschofenig 0:796d0f61a05b 24 *
HannesTschofenig 0:796d0f61a05b 25 * You should have received a copy of the GNU General Public License along
HannesTschofenig 0:796d0f61a05b 26 * with this program; if not, write to the Free Software Foundation, Inc.,
HannesTschofenig 0:796d0f61a05b 27 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
HannesTschofenig 0:796d0f61a05b 28 */
HannesTschofenig 0:796d0f61a05b 29
HannesTschofenig 0:796d0f61a05b 30 #if !defined(POLARSSL_CONFIG_FILE)
HannesTschofenig 0:796d0f61a05b 31 #include "polarssl/config.h"
HannesTschofenig 0:796d0f61a05b 32 #else
HannesTschofenig 0:796d0f61a05b 33 #include POLARSSL_CONFIG_FILE
HannesTschofenig 0:796d0f61a05b 34 #endif
HannesTschofenig 0:796d0f61a05b 35
HannesTschofenig 0:796d0f61a05b 36 #if defined(POLARSSL_MD_C)
HannesTschofenig 0:796d0f61a05b 37
HannesTschofenig 0:796d0f61a05b 38 #include "polarssl/md.h"
HannesTschofenig 0:796d0f61a05b 39 #include "polarssl/md_wrap.h"
HannesTschofenig 0:796d0f61a05b 40
HannesTschofenig 0:796d0f61a05b 41 #include <stdlib.h>
HannesTschofenig 0:796d0f61a05b 42
HannesTschofenig 0:796d0f61a05b 43 #if defined(_MSC_VER) && !defined strcasecmp && !defined(EFIX64) && \
HannesTschofenig 0:796d0f61a05b 44 !defined(EFI32)
HannesTschofenig 0:796d0f61a05b 45 #define strcasecmp _stricmp
HannesTschofenig 0:796d0f61a05b 46 #endif
HannesTschofenig 0:796d0f61a05b 47
HannesTschofenig 0:796d0f61a05b 48 static const int supported_digests[] = {
HannesTschofenig 0:796d0f61a05b 49
HannesTschofenig 0:796d0f61a05b 50 #if defined(POLARSSL_MD2_C)
HannesTschofenig 0:796d0f61a05b 51 POLARSSL_MD_MD2,
HannesTschofenig 0:796d0f61a05b 52 #endif
HannesTschofenig 0:796d0f61a05b 53
HannesTschofenig 0:796d0f61a05b 54 #if defined(POLARSSL_MD4_C)
HannesTschofenig 0:796d0f61a05b 55 POLARSSL_MD_MD4,
HannesTschofenig 0:796d0f61a05b 56 #endif
HannesTschofenig 0:796d0f61a05b 57
HannesTschofenig 0:796d0f61a05b 58 #if defined(POLARSSL_MD5_C)
HannesTschofenig 0:796d0f61a05b 59 POLARSSL_MD_MD5,
HannesTschofenig 0:796d0f61a05b 60 #endif
HannesTschofenig 0:796d0f61a05b 61
HannesTschofenig 0:796d0f61a05b 62 #if defined(POLARSSL_RIPEMD160_C)
HannesTschofenig 0:796d0f61a05b 63 POLARSSL_MD_RIPEMD160,
HannesTschofenig 0:796d0f61a05b 64 #endif
HannesTschofenig 0:796d0f61a05b 65
HannesTschofenig 0:796d0f61a05b 66 #if defined(POLARSSL_SHA1_C)
HannesTschofenig 0:796d0f61a05b 67 POLARSSL_MD_SHA1,
HannesTschofenig 0:796d0f61a05b 68 #endif
HannesTschofenig 0:796d0f61a05b 69
HannesTschofenig 0:796d0f61a05b 70 #if defined(POLARSSL_SHA256_C)
HannesTschofenig 0:796d0f61a05b 71 POLARSSL_MD_SHA224,
HannesTschofenig 0:796d0f61a05b 72 POLARSSL_MD_SHA256,
HannesTschofenig 0:796d0f61a05b 73 #endif
HannesTschofenig 0:796d0f61a05b 74
HannesTschofenig 0:796d0f61a05b 75 #if defined(POLARSSL_SHA512_C)
HannesTschofenig 0:796d0f61a05b 76 POLARSSL_MD_SHA384,
HannesTschofenig 0:796d0f61a05b 77 POLARSSL_MD_SHA512,
HannesTschofenig 0:796d0f61a05b 78 #endif
HannesTschofenig 0:796d0f61a05b 79
HannesTschofenig 0:796d0f61a05b 80 0
HannesTschofenig 0:796d0f61a05b 81 };
HannesTschofenig 0:796d0f61a05b 82
HannesTschofenig 0:796d0f61a05b 83 const int *md_list( void )
HannesTschofenig 0:796d0f61a05b 84 {
HannesTschofenig 0:796d0f61a05b 85 return supported_digests;
HannesTschofenig 0:796d0f61a05b 86 }
HannesTschofenig 0:796d0f61a05b 87
HannesTschofenig 0:796d0f61a05b 88 const md_info_t *md_info_from_string( const char *md_name )
HannesTschofenig 0:796d0f61a05b 89 {
HannesTschofenig 0:796d0f61a05b 90 if( NULL == md_name )
HannesTschofenig 0:796d0f61a05b 91 return NULL;
HannesTschofenig 0:796d0f61a05b 92
HannesTschofenig 0:796d0f61a05b 93 /* Get the appropriate digest information */
HannesTschofenig 0:796d0f61a05b 94 #if defined(POLARSSL_MD2_C)
HannesTschofenig 0:796d0f61a05b 95 if( !strcasecmp( "MD2", md_name ) )
HannesTschofenig 0:796d0f61a05b 96 return md_info_from_type( POLARSSL_MD_MD2 );
HannesTschofenig 0:796d0f61a05b 97 #endif
HannesTschofenig 0:796d0f61a05b 98 #if defined(POLARSSL_MD4_C)
HannesTschofenig 0:796d0f61a05b 99 if( !strcasecmp( "MD4", md_name ) )
HannesTschofenig 0:796d0f61a05b 100 return md_info_from_type( POLARSSL_MD_MD4 );
HannesTschofenig 0:796d0f61a05b 101 #endif
HannesTschofenig 0:796d0f61a05b 102 #if defined(POLARSSL_MD5_C)
HannesTschofenig 0:796d0f61a05b 103 if( !strcasecmp( "MD5", md_name ) )
HannesTschofenig 0:796d0f61a05b 104 return md_info_from_type( POLARSSL_MD_MD5 );
HannesTschofenig 0:796d0f61a05b 105 #endif
HannesTschofenig 0:796d0f61a05b 106 #if defined(POLARSSL_RIPEMD160_C)
HannesTschofenig 0:796d0f61a05b 107 if( !strcasecmp( "RIPEMD160", md_name ) )
HannesTschofenig 0:796d0f61a05b 108 return md_info_from_type( POLARSSL_MD_RIPEMD160 );
HannesTschofenig 0:796d0f61a05b 109 #endif
HannesTschofenig 0:796d0f61a05b 110 #if defined(POLARSSL_SHA1_C)
HannesTschofenig 0:796d0f61a05b 111 if( !strcasecmp( "SHA1", md_name ) || !strcasecmp( "SHA", md_name ) )
HannesTschofenig 0:796d0f61a05b 112 return md_info_from_type( POLARSSL_MD_SHA1 );
HannesTschofenig 0:796d0f61a05b 113 #endif
HannesTschofenig 0:796d0f61a05b 114 #if defined(POLARSSL_SHA256_C)
HannesTschofenig 0:796d0f61a05b 115 if( !strcasecmp( "SHA224", md_name ) )
HannesTschofenig 0:796d0f61a05b 116 return md_info_from_type( POLARSSL_MD_SHA224 );
HannesTschofenig 0:796d0f61a05b 117 if( !strcasecmp( "SHA256", md_name ) )
HannesTschofenig 0:796d0f61a05b 118 return md_info_from_type( POLARSSL_MD_SHA256 );
HannesTschofenig 0:796d0f61a05b 119 #endif
HannesTschofenig 0:796d0f61a05b 120 #if defined(POLARSSL_SHA512_C)
HannesTschofenig 0:796d0f61a05b 121 if( !strcasecmp( "SHA384", md_name ) )
HannesTschofenig 0:796d0f61a05b 122 return md_info_from_type( POLARSSL_MD_SHA384 );
HannesTschofenig 0:796d0f61a05b 123 if( !strcasecmp( "SHA512", md_name ) )
HannesTschofenig 0:796d0f61a05b 124 return md_info_from_type( POLARSSL_MD_SHA512 );
HannesTschofenig 0:796d0f61a05b 125 #endif
HannesTschofenig 0:796d0f61a05b 126 return NULL;
HannesTschofenig 0:796d0f61a05b 127 }
HannesTschofenig 0:796d0f61a05b 128
HannesTschofenig 0:796d0f61a05b 129 const md_info_t *md_info_from_type( md_type_t md_type )
HannesTschofenig 0:796d0f61a05b 130 {
HannesTschofenig 0:796d0f61a05b 131 switch( md_type )
HannesTschofenig 0:796d0f61a05b 132 {
HannesTschofenig 0:796d0f61a05b 133 #if defined(POLARSSL_MD2_C)
HannesTschofenig 0:796d0f61a05b 134 case POLARSSL_MD_MD2:
HannesTschofenig 0:796d0f61a05b 135 return &md2_info;
HannesTschofenig 0:796d0f61a05b 136 #endif
HannesTschofenig 0:796d0f61a05b 137 #if defined(POLARSSL_MD4_C)
HannesTschofenig 0:796d0f61a05b 138 case POLARSSL_MD_MD4:
HannesTschofenig 0:796d0f61a05b 139 return &md4_info;
HannesTschofenig 0:796d0f61a05b 140 #endif
HannesTschofenig 0:796d0f61a05b 141 #if defined(POLARSSL_MD5_C)
HannesTschofenig 0:796d0f61a05b 142 case POLARSSL_MD_MD5:
HannesTschofenig 0:796d0f61a05b 143 return &md5_info;
HannesTschofenig 0:796d0f61a05b 144 #endif
HannesTschofenig 0:796d0f61a05b 145 #if defined(POLARSSL_RIPEMD160_C)
HannesTschofenig 0:796d0f61a05b 146 case POLARSSL_MD_RIPEMD160:
HannesTschofenig 0:796d0f61a05b 147 return &ripemd160_info;
HannesTschofenig 0:796d0f61a05b 148 #endif
HannesTschofenig 0:796d0f61a05b 149 #if defined(POLARSSL_SHA1_C)
HannesTschofenig 0:796d0f61a05b 150 case POLARSSL_MD_SHA1:
HannesTschofenig 0:796d0f61a05b 151 return &sha1_info;
HannesTschofenig 0:796d0f61a05b 152 #endif
HannesTschofenig 0:796d0f61a05b 153 #if defined(POLARSSL_SHA256_C)
HannesTschofenig 0:796d0f61a05b 154 case POLARSSL_MD_SHA224:
HannesTschofenig 0:796d0f61a05b 155 return &sha224_info;
HannesTschofenig 0:796d0f61a05b 156 case POLARSSL_MD_SHA256:
HannesTschofenig 0:796d0f61a05b 157 return &sha256_info;
HannesTschofenig 0:796d0f61a05b 158 #endif
HannesTschofenig 0:796d0f61a05b 159 #if defined(POLARSSL_SHA512_C)
HannesTschofenig 0:796d0f61a05b 160 case POLARSSL_MD_SHA384:
HannesTschofenig 0:796d0f61a05b 161 return &sha384_info;
HannesTschofenig 0:796d0f61a05b 162 case POLARSSL_MD_SHA512:
HannesTschofenig 0:796d0f61a05b 163 return &sha512_info;
HannesTschofenig 0:796d0f61a05b 164 #endif
HannesTschofenig 0:796d0f61a05b 165 default:
HannesTschofenig 0:796d0f61a05b 166 return NULL;
HannesTschofenig 0:796d0f61a05b 167 }
HannesTschofenig 0:796d0f61a05b 168 }
HannesTschofenig 0:796d0f61a05b 169
HannesTschofenig 0:796d0f61a05b 170 int md_init_ctx( md_context_t *ctx, const md_info_t *md_info )
HannesTschofenig 0:796d0f61a05b 171 {
HannesTschofenig 0:796d0f61a05b 172 if( md_info == NULL || ctx == NULL )
HannesTschofenig 0:796d0f61a05b 173 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 174
HannesTschofenig 0:796d0f61a05b 175 memset( ctx, 0, sizeof( md_context_t ) );
HannesTschofenig 0:796d0f61a05b 176
HannesTschofenig 0:796d0f61a05b 177 if( ( ctx->md_ctx = md_info->ctx_alloc_func() ) == NULL )
HannesTschofenig 0:796d0f61a05b 178 return POLARSSL_ERR_MD_ALLOC_FAILED;
HannesTschofenig 0:796d0f61a05b 179
HannesTschofenig 0:796d0f61a05b 180 ctx->md_info = md_info;
HannesTschofenig 0:796d0f61a05b 181
HannesTschofenig 0:796d0f61a05b 182 md_info->starts_func( ctx->md_ctx );
HannesTschofenig 0:796d0f61a05b 183
HannesTschofenig 0:796d0f61a05b 184 return 0;
HannesTschofenig 0:796d0f61a05b 185 }
HannesTschofenig 0:796d0f61a05b 186
HannesTschofenig 0:796d0f61a05b 187 int md_free_ctx( md_context_t *ctx )
HannesTschofenig 0:796d0f61a05b 188 {
HannesTschofenig 0:796d0f61a05b 189 if( ctx == NULL || ctx->md_info == NULL )
HannesTschofenig 0:796d0f61a05b 190 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 191
HannesTschofenig 0:796d0f61a05b 192 ctx->md_info->ctx_free_func( ctx->md_ctx );
HannesTschofenig 0:796d0f61a05b 193 ctx->md_ctx = NULL;
HannesTschofenig 0:796d0f61a05b 194
HannesTschofenig 0:796d0f61a05b 195 return 0;
HannesTschofenig 0:796d0f61a05b 196 }
HannesTschofenig 0:796d0f61a05b 197
HannesTschofenig 0:796d0f61a05b 198 int md_starts( md_context_t *ctx )
HannesTschofenig 0:796d0f61a05b 199 {
HannesTschofenig 0:796d0f61a05b 200 if( ctx == NULL || ctx->md_info == NULL )
HannesTschofenig 0:796d0f61a05b 201 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 202
HannesTschofenig 0:796d0f61a05b 203 ctx->md_info->starts_func( ctx->md_ctx );
HannesTschofenig 0:796d0f61a05b 204
HannesTschofenig 0:796d0f61a05b 205 return 0;
HannesTschofenig 0:796d0f61a05b 206 }
HannesTschofenig 0:796d0f61a05b 207
HannesTschofenig 0:796d0f61a05b 208 int md_update( md_context_t *ctx, const unsigned char *input, size_t ilen )
HannesTschofenig 0:796d0f61a05b 209 {
HannesTschofenig 0:796d0f61a05b 210 if( ctx == NULL || ctx->md_info == NULL )
HannesTschofenig 0:796d0f61a05b 211 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 212
HannesTschofenig 0:796d0f61a05b 213 ctx->md_info->update_func( ctx->md_ctx, input, ilen );
HannesTschofenig 0:796d0f61a05b 214
HannesTschofenig 0:796d0f61a05b 215 return 0;
HannesTschofenig 0:796d0f61a05b 216 }
HannesTschofenig 0:796d0f61a05b 217
HannesTschofenig 0:796d0f61a05b 218 int md_finish( md_context_t *ctx, unsigned char *output )
HannesTschofenig 0:796d0f61a05b 219 {
HannesTschofenig 0:796d0f61a05b 220 if( ctx == NULL || ctx->md_info == NULL )
HannesTschofenig 0:796d0f61a05b 221 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 222
HannesTschofenig 0:796d0f61a05b 223 ctx->md_info->finish_func( ctx->md_ctx, output );
HannesTschofenig 0:796d0f61a05b 224
HannesTschofenig 0:796d0f61a05b 225 return 0;
HannesTschofenig 0:796d0f61a05b 226 }
HannesTschofenig 0:796d0f61a05b 227
HannesTschofenig 0:796d0f61a05b 228 int md( const md_info_t *md_info, const unsigned char *input, size_t ilen,
HannesTschofenig 0:796d0f61a05b 229 unsigned char *output )
HannesTschofenig 0:796d0f61a05b 230 {
HannesTschofenig 0:796d0f61a05b 231 if ( md_info == NULL )
HannesTschofenig 0:796d0f61a05b 232 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 233
HannesTschofenig 0:796d0f61a05b 234 md_info->digest_func( input, ilen, output );
HannesTschofenig 0:796d0f61a05b 235
HannesTschofenig 0:796d0f61a05b 236 return 0;
HannesTschofenig 0:796d0f61a05b 237 }
HannesTschofenig 0:796d0f61a05b 238
HannesTschofenig 0:796d0f61a05b 239 int md_file( const md_info_t *md_info, const char *path, unsigned char *output )
HannesTschofenig 0:796d0f61a05b 240 {
HannesTschofenig 0:796d0f61a05b 241 #if defined(POLARSSL_FS_IO)
HannesTschofenig 0:796d0f61a05b 242 int ret;
HannesTschofenig 0:796d0f61a05b 243 #endif
HannesTschofenig 0:796d0f61a05b 244
HannesTschofenig 0:796d0f61a05b 245 if( md_info == NULL )
HannesTschofenig 0:796d0f61a05b 246 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 247
HannesTschofenig 0:796d0f61a05b 248 #if defined(POLARSSL_FS_IO)
HannesTschofenig 0:796d0f61a05b 249 ret = md_info->file_func( path, output );
HannesTschofenig 0:796d0f61a05b 250 if( ret != 0 )
HannesTschofenig 0:796d0f61a05b 251 return( POLARSSL_ERR_MD_FILE_IO_ERROR + ret );
HannesTschofenig 0:796d0f61a05b 252
HannesTschofenig 0:796d0f61a05b 253 return( ret );
HannesTschofenig 0:796d0f61a05b 254 #else
HannesTschofenig 0:796d0f61a05b 255 ((void) path);
HannesTschofenig 0:796d0f61a05b 256 ((void) output);
HannesTschofenig 0:796d0f61a05b 257
HannesTschofenig 0:796d0f61a05b 258 return POLARSSL_ERR_MD_FEATURE_UNAVAILABLE;
HannesTschofenig 0:796d0f61a05b 259 #endif /* POLARSSL_FS_IO */
HannesTschofenig 0:796d0f61a05b 260 }
HannesTschofenig 0:796d0f61a05b 261
HannesTschofenig 0:796d0f61a05b 262 int md_hmac_starts( md_context_t *ctx, const unsigned char *key, size_t keylen )
HannesTschofenig 0:796d0f61a05b 263 {
HannesTschofenig 0:796d0f61a05b 264 if( ctx == NULL || ctx->md_info == NULL )
HannesTschofenig 0:796d0f61a05b 265 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 266
HannesTschofenig 0:796d0f61a05b 267 ctx->md_info->hmac_starts_func( ctx->md_ctx, key, keylen);
HannesTschofenig 0:796d0f61a05b 268
HannesTschofenig 0:796d0f61a05b 269 return 0;
HannesTschofenig 0:796d0f61a05b 270 }
HannesTschofenig 0:796d0f61a05b 271
HannesTschofenig 0:796d0f61a05b 272 int md_hmac_update( md_context_t *ctx, const unsigned char *input, size_t ilen )
HannesTschofenig 0:796d0f61a05b 273 {
HannesTschofenig 0:796d0f61a05b 274 if( ctx == NULL || ctx->md_info == NULL )
HannesTschofenig 0:796d0f61a05b 275 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 276
HannesTschofenig 0:796d0f61a05b 277 ctx->md_info->hmac_update_func( ctx->md_ctx, input, ilen );
HannesTschofenig 0:796d0f61a05b 278
HannesTschofenig 0:796d0f61a05b 279 return 0;
HannesTschofenig 0:796d0f61a05b 280 }
HannesTschofenig 0:796d0f61a05b 281
HannesTschofenig 0:796d0f61a05b 282 int md_hmac_finish( md_context_t *ctx, unsigned char *output)
HannesTschofenig 0:796d0f61a05b 283 {
HannesTschofenig 0:796d0f61a05b 284 if( ctx == NULL || ctx->md_info == NULL )
HannesTschofenig 0:796d0f61a05b 285 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 286
HannesTschofenig 0:796d0f61a05b 287 ctx->md_info->hmac_finish_func( ctx->md_ctx, output);
HannesTschofenig 0:796d0f61a05b 288
HannesTschofenig 0:796d0f61a05b 289 return 0;
HannesTschofenig 0:796d0f61a05b 290 }
HannesTschofenig 0:796d0f61a05b 291
HannesTschofenig 0:796d0f61a05b 292 int md_hmac_reset( md_context_t *ctx )
HannesTschofenig 0:796d0f61a05b 293 {
HannesTschofenig 0:796d0f61a05b 294 if( ctx == NULL || ctx->md_info == NULL )
HannesTschofenig 0:796d0f61a05b 295 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 296
HannesTschofenig 0:796d0f61a05b 297 ctx->md_info->hmac_reset_func( ctx->md_ctx);
HannesTschofenig 0:796d0f61a05b 298
HannesTschofenig 0:796d0f61a05b 299 return 0;
HannesTschofenig 0:796d0f61a05b 300 }
HannesTschofenig 0:796d0f61a05b 301
HannesTschofenig 0:796d0f61a05b 302 int md_hmac( const md_info_t *md_info, const unsigned char *key, size_t keylen,
HannesTschofenig 0:796d0f61a05b 303 const unsigned char *input, size_t ilen,
HannesTschofenig 0:796d0f61a05b 304 unsigned char *output )
HannesTschofenig 0:796d0f61a05b 305 {
HannesTschofenig 0:796d0f61a05b 306 if( md_info == NULL )
HannesTschofenig 0:796d0f61a05b 307 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 308
HannesTschofenig 0:796d0f61a05b 309 md_info->hmac_func( key, keylen, input, ilen, output );
HannesTschofenig 0:796d0f61a05b 310
HannesTschofenig 0:796d0f61a05b 311 return 0;
HannesTschofenig 0:796d0f61a05b 312 }
HannesTschofenig 0:796d0f61a05b 313
HannesTschofenig 0:796d0f61a05b 314 int md_process( md_context_t *ctx, const unsigned char *data )
HannesTschofenig 0:796d0f61a05b 315 {
HannesTschofenig 0:796d0f61a05b 316 if( ctx == NULL || ctx->md_info == NULL )
HannesTschofenig 0:796d0f61a05b 317 return POLARSSL_ERR_MD_BAD_INPUT_DATA;
HannesTschofenig 0:796d0f61a05b 318
HannesTschofenig 0:796d0f61a05b 319 ctx->md_info->process_func( ctx->md_ctx, data );
HannesTschofenig 0:796d0f61a05b 320
HannesTschofenig 0:796d0f61a05b 321 return 0;
HannesTschofenig 0:796d0f61a05b 322 }
HannesTschofenig 0:796d0f61a05b 323
HannesTschofenig 0:796d0f61a05b 324 #endif /* POLARSSL_MD_C */
HannesTschofenig 0:796d0f61a05b 325
HannesTschofenig 0:796d0f61a05b 326