Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
SSL/library/md.c@0:796d0f61a05b, 2018-09-27 (annotated)
- 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?
| User | Revision | Line number | New 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 |