mirror of
https://github.com/wiire-a/pixiewps.git
synced 2025-07-28 00:04:38 +02:00
Removed boilerplate from mbedtls sources
This commit is contained in:
parent
9a69827c41
commit
d95bf76f33
5
Makefile
5
Makefile
@ -10,13 +10,10 @@ LIBS = -lpthread
|
|||||||
ifeq ($(OPENSSL),1)
|
ifeq ($(OPENSSL),1)
|
||||||
LIBS += -lcrypto
|
LIBS += -lcrypto
|
||||||
CFLAGS += -DUSE_OPENSSL
|
CFLAGS += -DUSE_OPENSSL
|
||||||
else
|
|
||||||
CRYDIR = $(SRCDIR)/mbedtls
|
|
||||||
CRYPTO = $(CRYDIR)/sha256.c $(CRYDIR)/md.c $(CRYDIR)/md_wrap.c
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
TARGET = pixiewps
|
TARGET = pixiewps
|
||||||
SOURCE = $(SRCDIR)/pixiewps.c $(CRYPTO)
|
SOURCE = $(SRCDIR)/pixiewps.c
|
||||||
|
|
||||||
-include config.mak
|
-include config.mak
|
||||||
|
|
||||||
|
@ -22,9 +22,6 @@
|
|||||||
#define ENDIANNESS_PORTABLE_CONVERSION
|
#define ENDIANNESS_PORTABLE_CONVERSION
|
||||||
#include "endianness.h"
|
#include "endianness.h"
|
||||||
|
|
||||||
#include "mbedtls/md_internal.h"
|
|
||||||
#include "mbedtls/sha256.h"
|
|
||||||
|
|
||||||
#define sha256(i, l, d) sha256_full(i, l, d)
|
#define sha256(i, l, d) sha256_full(i, l, d)
|
||||||
#define hmac_sha256(k, l, i, n, o) \
|
#define hmac_sha256(k, l, i, n, o) \
|
||||||
hmac_sha256_full(k, l, i, n, o)
|
hmac_sha256_full(k, l, i, n, o)
|
||||||
|
@ -5,9 +5,9 @@
|
|||||||
#ifdef USE_OPENSSL
|
#ifdef USE_OPENSSL
|
||||||
# include <openssl/sha.h>
|
# include <openssl/sha.h>
|
||||||
#else
|
#else
|
||||||
# include "../mbedtls/sha256.h"
|
# include "sha256.c"
|
||||||
# define SHA256_CTX mbedtls_sha256_context
|
# define SHA256_CTX mbedtls_sha256_context
|
||||||
# define SHA256_Init(x) do { mbedtls_sha256_init(x); mbedtls_sha256_starts(x, 0); } while(0)
|
# define SHA256_Init(x) do { mbedtls_sha256_starts(x); } while(0)
|
||||||
# define SHA256_Update(x, y, z) mbedtls_sha256_update(x, y, z)
|
# define SHA256_Update(x, y, z) mbedtls_sha256_update(x, y, z)
|
||||||
# define SHA256_Final(y, x) mbedtls_sha256_finish(x, y)
|
# define SHA256_Final(y, x) mbedtls_sha256_finish(x, y)
|
||||||
#endif
|
#endif
|
||||||
@ -99,7 +99,6 @@ static void hmac_sha256_init(struct hmac_ctx *hctx, const uint8_t *key,
|
|||||||
SHA256_Update(&hctx->octx, opad, PAD_SIZE);
|
SHA256_Update(&hctx->octx, opad, PAD_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void hmac_sha256_yield(const struct hmac_ctx *hctx,
|
static void hmac_sha256_yield(const struct hmac_ctx *hctx,
|
||||||
const uint8_t *input, size_t ilen, uint8_t *output)
|
const uint8_t *input, size_t ilen, uint8_t *output)
|
||||||
{
|
{
|
||||||
|
@ -2,19 +2,21 @@
|
|||||||
* FIPS-180-2 compliant SHA-256 implementation
|
* FIPS-180-2 compliant SHA-256 implementation
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: GPL-2.0
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* not use this file except in compliance with the License.
|
* it under the terms of the GNU General Public License as published by
|
||||||
* You may obtain a copy of the License at
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* You should have received a copy of the GNU General Public License along
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
*
|
||||||
* This file is part of mbed TLS (https://tls.mbed.org)
|
* This file is part of mbed TLS (https://tls.mbed.org)
|
||||||
*/
|
*/
|
||||||
@ -23,17 +25,24 @@
|
|||||||
*
|
*
|
||||||
* http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
|
* http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
#include <stdio.h>
|
* This file was modified for use in pixiewps
|
||||||
|
*/
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "sha256.h"
|
/**
|
||||||
|
* \brief SHA-256 context structure
|
||||||
/* Implementation that should never be optimized out by the compiler */
|
*/
|
||||||
static void mbedtls_zeroize( void *v, size_t n ) {
|
typedef struct
|
||||||
volatile unsigned char *p = v; while( n-- ) *p++ = 0;
|
{
|
||||||
|
uint32_t total[2]; /*!< number of bytes processed */
|
||||||
|
uint32_t state[8]; /*!< intermediate digest state */
|
||||||
|
unsigned char buffer[64]; /*!< data block being processed */
|
||||||
}
|
}
|
||||||
|
mbedtls_sha256_context;
|
||||||
|
|
||||||
|
#if !defined(MBEDTLS_SHA256_ALT)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 32-bit integer manipulation macros (big endian)
|
* 32-bit integer manipulation macros (big endian)
|
||||||
@ -63,14 +72,6 @@ void mbedtls_sha256_init( mbedtls_sha256_context *ctx )
|
|||||||
memset( ctx, 0, sizeof( mbedtls_sha256_context ) );
|
memset( ctx, 0, sizeof( mbedtls_sha256_context ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void mbedtls_sha256_free( mbedtls_sha256_context *ctx )
|
|
||||||
{
|
|
||||||
if( ctx == NULL )
|
|
||||||
return;
|
|
||||||
|
|
||||||
mbedtls_zeroize( ctx, sizeof( mbedtls_sha256_context ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
void mbedtls_sha256_clone( mbedtls_sha256_context *dst,
|
void mbedtls_sha256_clone( mbedtls_sha256_context *dst,
|
||||||
const mbedtls_sha256_context *src )
|
const mbedtls_sha256_context *src )
|
||||||
{
|
{
|
||||||
@ -80,37 +81,20 @@ void mbedtls_sha256_clone( mbedtls_sha256_context *dst,
|
|||||||
/*
|
/*
|
||||||
* SHA-256 context setup
|
* SHA-256 context setup
|
||||||
*/
|
*/
|
||||||
void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 )
|
void mbedtls_sha256_starts( mbedtls_sha256_context *ctx )
|
||||||
{
|
{
|
||||||
ctx->total[0] = 0;
|
ctx->total[0] = 0;
|
||||||
ctx->total[1] = 0;
|
ctx->total[1] = 0;
|
||||||
|
|
||||||
if( is224 == 0 )
|
/* SHA-256 */
|
||||||
{
|
ctx->state[0] = 0x6A09E667;
|
||||||
/* SHA-256 */
|
ctx->state[1] = 0xBB67AE85;
|
||||||
ctx->state[0] = 0x6A09E667;
|
ctx->state[2] = 0x3C6EF372;
|
||||||
ctx->state[1] = 0xBB67AE85;
|
ctx->state[3] = 0xA54FF53A;
|
||||||
ctx->state[2] = 0x3C6EF372;
|
ctx->state[4] = 0x510E527F;
|
||||||
ctx->state[3] = 0xA54FF53A;
|
ctx->state[5] = 0x9B05688C;
|
||||||
ctx->state[4] = 0x510E527F;
|
ctx->state[6] = 0x1F83D9AB;
|
||||||
ctx->state[5] = 0x9B05688C;
|
ctx->state[7] = 0x5BE0CD19;
|
||||||
ctx->state[6] = 0x1F83D9AB;
|
|
||||||
ctx->state[7] = 0x5BE0CD19;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* SHA-224 */
|
|
||||||
ctx->state[0] = 0xC1059ED8;
|
|
||||||
ctx->state[1] = 0x367CD507;
|
|
||||||
ctx->state[2] = 0x3070DD17;
|
|
||||||
ctx->state[3] = 0xF70E5939;
|
|
||||||
ctx->state[4] = 0xFFC00B31;
|
|
||||||
ctx->state[5] = 0x68581511;
|
|
||||||
ctx->state[6] = 0x64F98FA7;
|
|
||||||
ctx->state[7] = 0xBEFA4FA4;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx->is224 = is224;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(MBEDTLS_SHA256_PROCESS_ALT)
|
#if !defined(MBEDTLS_SHA256_PROCESS_ALT)
|
||||||
@ -213,6 +197,7 @@ void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char da
|
|||||||
for( i = 0; i < 8; i++ )
|
for( i = 0; i < 8; i++ )
|
||||||
ctx->state[i] += A[i];
|
ctx->state[i] += A[i];
|
||||||
}
|
}
|
||||||
|
#endif /* !MBEDTLS_SHA256_PROCESS_ALT */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SHA-256 process buffer
|
* SHA-256 process buffer
|
||||||
@ -293,8 +278,8 @@ void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32
|
|||||||
PUT_UINT32_BE( ctx->state[5], output, 20 );
|
PUT_UINT32_BE( ctx->state[5], output, 20 );
|
||||||
PUT_UINT32_BE( ctx->state[6], output, 24 );
|
PUT_UINT32_BE( ctx->state[6], output, 24 );
|
||||||
|
|
||||||
if( ctx->is224 == 0 )
|
/* SHA-256*/
|
||||||
PUT_UINT32_BE( ctx->state[7], output, 28 );
|
PUT_UINT32_BE( ctx->state[7], output, 28 );
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* !MBEDTLS_SHA256_ALT */
|
#endif /* !MBEDTLS_SHA256_ALT */
|
||||||
@ -303,13 +288,12 @@ void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32
|
|||||||
* output = SHA-256( input buffer )
|
* output = SHA-256( input buffer )
|
||||||
*/
|
*/
|
||||||
void mbedtls_sha256( const unsigned char *input, size_t ilen,
|
void mbedtls_sha256( const unsigned char *input, size_t ilen,
|
||||||
unsigned char output[32], int is224 )
|
unsigned char output[32] )
|
||||||
{
|
{
|
||||||
mbedtls_sha256_context ctx;
|
mbedtls_sha256_context ctx;
|
||||||
|
|
||||||
mbedtls_sha256_init( &ctx );
|
mbedtls_sha256_init( &ctx );
|
||||||
mbedtls_sha256_starts( &ctx, is224 );
|
mbedtls_sha256_starts( &ctx );
|
||||||
mbedtls_sha256_update( &ctx, input, ilen );
|
mbedtls_sha256_update( &ctx, input, ilen );
|
||||||
mbedtls_sha256_finish( &ctx, output );
|
mbedtls_sha256_finish( &ctx, output );
|
||||||
mbedtls_sha256_free( &ctx );
|
|
||||||
}
|
}
|
369
src/mbedtls/md.c
369
src/mbedtls/md.c
@ -1,369 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file mbedtls_md.c
|
|
||||||
*
|
|
||||||
* \brief Generic message digest wrapper for mbed TLS
|
|
||||||
*
|
|
||||||
* \author Adriaan de Jong <dejong@fox-it.com>
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
* not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* This file is part of mbed TLS (https://tls.mbed.org)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "md.h"
|
|
||||||
#include "md_internal.h"
|
|
||||||
|
|
||||||
#define mbedtls_calloc calloc
|
|
||||||
#define mbedtls_free free
|
|
||||||
|
|
||||||
/* Implementation that should never be optimized out by the compiler */
|
|
||||||
static void mbedtls_zeroize( void *v, size_t n ) {
|
|
||||||
volatile unsigned char *p = v; while( n-- ) *p++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Reminder: update profiles in x509_crt.c when adding a new hash!
|
|
||||||
*/
|
|
||||||
static const int supported_digests[] = {
|
|
||||||
MBEDTLS_MD_SHA256,
|
|
||||||
MBEDTLS_MD_SHA224,
|
|
||||||
MBEDTLS_MD_NONE
|
|
||||||
};
|
|
||||||
|
|
||||||
const int *mbedtls_md_list( void )
|
|
||||||
{
|
|
||||||
return( supported_digests );
|
|
||||||
}
|
|
||||||
|
|
||||||
const mbedtls_md_info_t *mbedtls_md_info_from_string( const char *md_name )
|
|
||||||
{
|
|
||||||
if( NULL == md_name )
|
|
||||||
return( NULL );
|
|
||||||
|
|
||||||
/* Get the appropriate digest information */
|
|
||||||
if( !strcmp( "SHA224", md_name ) )
|
|
||||||
return mbedtls_md_info_from_type( MBEDTLS_MD_SHA224 );
|
|
||||||
if( !strcmp( "SHA256", md_name ) )
|
|
||||||
return mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 );
|
|
||||||
|
|
||||||
return( NULL );
|
|
||||||
}
|
|
||||||
|
|
||||||
const mbedtls_md_info_t *mbedtls_md_info_from_type( mbedtls_md_type_t md_type )
|
|
||||||
{
|
|
||||||
switch( md_type )
|
|
||||||
{
|
|
||||||
case MBEDTLS_MD_SHA224:
|
|
||||||
return( &mbedtls_sha224_info );
|
|
||||||
case MBEDTLS_MD_SHA256:
|
|
||||||
return( &mbedtls_sha256_info );
|
|
||||||
default:
|
|
||||||
return( NULL );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mbedtls_md_init( mbedtls_md_context_t *ctx )
|
|
||||||
{
|
|
||||||
memset( ctx, 0, sizeof( mbedtls_md_context_t ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
void mbedtls_md_free( mbedtls_md_context_t *ctx )
|
|
||||||
{
|
|
||||||
if( ctx == NULL || ctx->md_info == NULL )
|
|
||||||
return;
|
|
||||||
|
|
||||||
if( ctx->md_ctx != NULL )
|
|
||||||
ctx->md_info->ctx_free_func( ctx->md_ctx );
|
|
||||||
|
|
||||||
if( ctx->hmac_ctx != NULL )
|
|
||||||
{
|
|
||||||
mbedtls_zeroize( ctx->hmac_ctx, 2 * ctx->md_info->block_size );
|
|
||||||
mbedtls_free( ctx->hmac_ctx );
|
|
||||||
}
|
|
||||||
|
|
||||||
mbedtls_zeroize( ctx, sizeof( mbedtls_md_context_t ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_md_clone( mbedtls_md_context_t *dst,
|
|
||||||
const mbedtls_md_context_t *src )
|
|
||||||
{
|
|
||||||
if( dst == NULL || dst->md_info == NULL ||
|
|
||||||
src == NULL || src->md_info == NULL ||
|
|
||||||
dst->md_info != src->md_info )
|
|
||||||
{
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
}
|
|
||||||
|
|
||||||
dst->md_info->clone_func( dst->md_ctx, src->md_ctx );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
#if ! defined(MBEDTLS_DEPRECATED_REMOVED)
|
|
||||||
int mbedtls_md_init_ctx( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info )
|
|
||||||
{
|
|
||||||
return mbedtls_md_setup( ctx, md_info, 1 );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int mbedtls_md_setup( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info, int hmac )
|
|
||||||
{
|
|
||||||
if( md_info == NULL || ctx == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
if( ( ctx->md_ctx = md_info->ctx_alloc_func() ) == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_ALLOC_FAILED );
|
|
||||||
|
|
||||||
if( hmac != 0 )
|
|
||||||
{
|
|
||||||
ctx->hmac_ctx = mbedtls_calloc( 2, md_info->block_size );
|
|
||||||
if( ctx->hmac_ctx == NULL )
|
|
||||||
{
|
|
||||||
md_info->ctx_free_func( ctx->md_ctx );
|
|
||||||
return( MBEDTLS_ERR_MD_ALLOC_FAILED );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx->md_info = md_info;
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_md_starts( mbedtls_md_context_t *ctx )
|
|
||||||
{
|
|
||||||
if( ctx == NULL || ctx->md_info == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
ctx->md_info->starts_func( ctx->md_ctx );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen )
|
|
||||||
{
|
|
||||||
if( ctx == NULL || ctx->md_info == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
ctx->md_info->update_func( ctx->md_ctx, input, ilen );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output )
|
|
||||||
{
|
|
||||||
if( ctx == NULL || ctx->md_info == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
ctx->md_info->finish_func( ctx->md_ctx, output );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, size_t ilen,
|
|
||||||
unsigned char *output )
|
|
||||||
{
|
|
||||||
if( md_info == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
md_info->digest_func( input, ilen, output );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_FS_IO)
|
|
||||||
int mbedtls_md_file( const mbedtls_md_info_t *md_info, const char *path, unsigned char *output )
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
FILE *f;
|
|
||||||
size_t n;
|
|
||||||
mbedtls_md_context_t ctx;
|
|
||||||
unsigned char buf[1024];
|
|
||||||
|
|
||||||
if( md_info == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
if( ( f = fopen( path, "rb" ) ) == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_FILE_IO_ERROR );
|
|
||||||
|
|
||||||
mbedtls_md_init( &ctx );
|
|
||||||
|
|
||||||
if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 )
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
md_info->starts_func( ctx.md_ctx );
|
|
||||||
|
|
||||||
while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 )
|
|
||||||
md_info->update_func( ctx.md_ctx, buf, n );
|
|
||||||
|
|
||||||
if( ferror( f ) != 0 )
|
|
||||||
{
|
|
||||||
ret = MBEDTLS_ERR_MD_FILE_IO_ERROR;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
md_info->finish_func( ctx.md_ctx, output );
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
fclose( f );
|
|
||||||
mbedtls_md_free( &ctx );
|
|
||||||
|
|
||||||
return( ret );
|
|
||||||
}
|
|
||||||
#endif /* MBEDTLS_FS_IO */
|
|
||||||
|
|
||||||
int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, size_t keylen )
|
|
||||||
{
|
|
||||||
unsigned char sum[MBEDTLS_MD_MAX_SIZE];
|
|
||||||
unsigned char *ipad, *opad;
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
if( keylen > (size_t) ctx->md_info->block_size )
|
|
||||||
{
|
|
||||||
ctx->md_info->starts_func( ctx->md_ctx );
|
|
||||||
ctx->md_info->update_func( ctx->md_ctx, key, keylen );
|
|
||||||
ctx->md_info->finish_func( ctx->md_ctx, sum );
|
|
||||||
|
|
||||||
keylen = ctx->md_info->size;
|
|
||||||
key = sum;
|
|
||||||
}
|
|
||||||
|
|
||||||
ipad = (unsigned char *) ctx->hmac_ctx;
|
|
||||||
opad = (unsigned char *) ctx->hmac_ctx + ctx->md_info->block_size;
|
|
||||||
|
|
||||||
memset( ipad, 0x36, ctx->md_info->block_size );
|
|
||||||
memset( opad, 0x5C, ctx->md_info->block_size );
|
|
||||||
|
|
||||||
for( i = 0; i < keylen; i++ )
|
|
||||||
{
|
|
||||||
ipad[i] = (unsigned char)( ipad[i] ^ key[i] );
|
|
||||||
opad[i] = (unsigned char)( opad[i] ^ key[i] );
|
|
||||||
}
|
|
||||||
|
|
||||||
mbedtls_zeroize( sum, sizeof( sum ) );
|
|
||||||
|
|
||||||
ctx->md_info->starts_func( ctx->md_ctx );
|
|
||||||
ctx->md_info->update_func( ctx->md_ctx, ipad, ctx->md_info->block_size );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen )
|
|
||||||
{
|
|
||||||
if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
ctx->md_info->update_func( ctx->md_ctx, input, ilen );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output )
|
|
||||||
{
|
|
||||||
unsigned char tmp[MBEDTLS_MD_MAX_SIZE];
|
|
||||||
unsigned char *opad;
|
|
||||||
|
|
||||||
if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
opad = (unsigned char *) ctx->hmac_ctx + ctx->md_info->block_size;
|
|
||||||
|
|
||||||
ctx->md_info->finish_func( ctx->md_ctx, tmp );
|
|
||||||
ctx->md_info->starts_func( ctx->md_ctx );
|
|
||||||
ctx->md_info->update_func( ctx->md_ctx, opad, ctx->md_info->block_size );
|
|
||||||
ctx->md_info->update_func( ctx->md_ctx, tmp, ctx->md_info->size );
|
|
||||||
ctx->md_info->finish_func( ctx->md_ctx, output );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_md_hmac_reset( mbedtls_md_context_t *ctx )
|
|
||||||
{
|
|
||||||
unsigned char *ipad;
|
|
||||||
|
|
||||||
if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
ipad = (unsigned char *) ctx->hmac_ctx;
|
|
||||||
|
|
||||||
ctx->md_info->starts_func( ctx->md_ctx );
|
|
||||||
ctx->md_info->update_func( ctx->md_ctx, ipad, ctx->md_info->block_size );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key, size_t keylen,
|
|
||||||
const unsigned char *input, size_t ilen,
|
|
||||||
unsigned char *output )
|
|
||||||
{
|
|
||||||
mbedtls_md_context_t ctx;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if( md_info == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
mbedtls_md_init( &ctx );
|
|
||||||
|
|
||||||
if( ( ret = mbedtls_md_setup( &ctx, md_info, 1 ) ) != 0 )
|
|
||||||
return( ret );
|
|
||||||
|
|
||||||
mbedtls_md_hmac_starts( &ctx, key, keylen );
|
|
||||||
mbedtls_md_hmac_update( &ctx, input, ilen );
|
|
||||||
mbedtls_md_hmac_finish( &ctx, output );
|
|
||||||
|
|
||||||
mbedtls_md_free( &ctx );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data )
|
|
||||||
{
|
|
||||||
if( ctx == NULL || ctx->md_info == NULL )
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
ctx->md_info->process_func( ctx->md_ctx, data );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char mbedtls_md_get_size( const mbedtls_md_info_t *md_info )
|
|
||||||
{
|
|
||||||
if( md_info == NULL )
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
return md_info->size;
|
|
||||||
}
|
|
||||||
|
|
||||||
mbedtls_md_type_t mbedtls_md_get_type( const mbedtls_md_info_t *md_info )
|
|
||||||
{
|
|
||||||
if( md_info == NULL )
|
|
||||||
return( MBEDTLS_MD_NONE );
|
|
||||||
|
|
||||||
return md_info->type;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *mbedtls_md_get_name( const mbedtls_md_info_t *md_info )
|
|
||||||
{
|
|
||||||
if( md_info == NULL )
|
|
||||||
return( NULL );
|
|
||||||
|
|
||||||
return md_info->name;
|
|
||||||
}
|
|
334
src/mbedtls/md.h
334
src/mbedtls/md.h
@ -1,334 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file mbedtls_md.h
|
|
||||||
*
|
|
||||||
* \brief Generic message digest wrapper
|
|
||||||
*
|
|
||||||
* \author Adriaan de Jong <dejong@fox-it.com>
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
* not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* This file is part of mbed TLS (https://tls.mbed.org)
|
|
||||||
*/
|
|
||||||
#ifndef MBEDTLS_MD_H
|
|
||||||
#define MBEDTLS_MD_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#define MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE -0x5080 /**< The selected feature is not available. */
|
|
||||||
#define MBEDTLS_ERR_MD_BAD_INPUT_DATA -0x5100 /**< Bad input parameters to function. */
|
|
||||||
#define MBEDTLS_ERR_MD_ALLOC_FAILED -0x5180 /**< Failed to allocate memory. */
|
|
||||||
#define MBEDTLS_ERR_MD_FILE_IO_ERROR -0x5200 /**< Opening or reading of file failed. */
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
MBEDTLS_MD_NONE = 0,
|
|
||||||
MBEDTLS_MD_SHA224,
|
|
||||||
MBEDTLS_MD_SHA256,
|
|
||||||
} mbedtls_md_type_t;
|
|
||||||
|
|
||||||
#define MBEDTLS_MD_MAX_SIZE 32 /* longest known is SHA256 or less */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opaque struct defined in md_internal.h
|
|
||||||
*/
|
|
||||||
typedef struct mbedtls_md_info_t mbedtls_md_info_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generic message digest context.
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
/** Information about the associated message digest */
|
|
||||||
const mbedtls_md_info_t *md_info;
|
|
||||||
|
|
||||||
/** Digest-specific context */
|
|
||||||
void *md_ctx;
|
|
||||||
|
|
||||||
/** HMAC part of the context */
|
|
||||||
void *hmac_ctx;
|
|
||||||
} mbedtls_md_context_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Returns the list of digests supported by the generic digest module.
|
|
||||||
*
|
|
||||||
* \return a statically allocated array of digests, the last entry
|
|
||||||
* is 0.
|
|
||||||
*/
|
|
||||||
const int *mbedtls_md_list( void );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Returns the message digest information associated with the
|
|
||||||
* given digest name.
|
|
||||||
*
|
|
||||||
* \param md_name Name of the digest to search for.
|
|
||||||
*
|
|
||||||
* \return The message digest information associated with md_name or
|
|
||||||
* NULL if not found.
|
|
||||||
*/
|
|
||||||
const mbedtls_md_info_t *mbedtls_md_info_from_string( const char *md_name );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Returns the message digest information associated with the
|
|
||||||
* given digest type.
|
|
||||||
*
|
|
||||||
* \param md_type type of digest to search for.
|
|
||||||
*
|
|
||||||
* \return The message digest information associated with md_type or
|
|
||||||
* NULL if not found.
|
|
||||||
*/
|
|
||||||
const mbedtls_md_info_t *mbedtls_md_info_from_type( mbedtls_md_type_t md_type );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Initialize a md_context (as NONE)
|
|
||||||
* This should always be called first.
|
|
||||||
* Prepares the context for mbedtls_md_setup() or mbedtls_md_free().
|
|
||||||
*/
|
|
||||||
void mbedtls_md_init( mbedtls_md_context_t *ctx );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Free and clear the internal structures of ctx.
|
|
||||||
* Can be called at any time after mbedtls_md_init().
|
|
||||||
* Mandatory once mbedtls_md_setup() has been called.
|
|
||||||
*/
|
|
||||||
void mbedtls_md_free( mbedtls_md_context_t *ctx );
|
|
||||||
|
|
||||||
#if ! defined(MBEDTLS_DEPRECATED_REMOVED)
|
|
||||||
#if defined(MBEDTLS_DEPRECATED_WARNING)
|
|
||||||
#define MBEDTLS_DEPRECATED __attribute__((deprecated))
|
|
||||||
#else
|
|
||||||
#define MBEDTLS_DEPRECATED
|
|
||||||
#endif
|
|
||||||
/**
|
|
||||||
* \brief Select MD to use and allocate internal structures.
|
|
||||||
* Should be called after mbedtls_md_init() or mbedtls_md_free().
|
|
||||||
* Makes it necessary to call mbedtls_md_free() later.
|
|
||||||
*
|
|
||||||
* \deprecated Superseded by mbedtls_md_setup() in 2.0.0
|
|
||||||
*
|
|
||||||
* \param ctx Context to set up.
|
|
||||||
* \param md_info Message digest to use.
|
|
||||||
*
|
|
||||||
* \returns \c 0 on success,
|
|
||||||
* \c MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter failure,
|
|
||||||
* \c MBEDTLS_ERR_MD_ALLOC_FAILED memory allocation failure.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_init_ctx( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info ) MBEDTLS_DEPRECATED;
|
|
||||||
#undef MBEDTLS_DEPRECATED
|
|
||||||
#endif /* MBEDTLS_DEPRECATED_REMOVED */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Select MD to use and allocate internal structures.
|
|
||||||
* Should be called after mbedtls_md_init() or mbedtls_md_free().
|
|
||||||
* Makes it necessary to call mbedtls_md_free() later.
|
|
||||||
*
|
|
||||||
* \param ctx Context to set up.
|
|
||||||
* \param md_info Message digest to use.
|
|
||||||
* \param hmac 0 to save some memory if HMAC will not be used,
|
|
||||||
* non-zero is HMAC is going to be used with this context.
|
|
||||||
*
|
|
||||||
* \returns \c 0 on success,
|
|
||||||
* \c MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter failure,
|
|
||||||
* \c MBEDTLS_ERR_MD_ALLOC_FAILED memory allocation failure.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_setup( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info, int hmac );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Clone the state of an MD context
|
|
||||||
*
|
|
||||||
* \note The two contexts must have been setup to the same type
|
|
||||||
* (cloning from SHA-256 to SHA-512 make no sense).
|
|
||||||
*
|
|
||||||
* \warning Only clones the MD state, not the HMAC state! (for now)
|
|
||||||
*
|
|
||||||
* \param dst The destination context
|
|
||||||
* \param src The context to be cloned
|
|
||||||
*
|
|
||||||
* \return \c 0 on success,
|
|
||||||
* \c MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter failure.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_clone( mbedtls_md_context_t *dst,
|
|
||||||
const mbedtls_md_context_t *src );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Returns the size of the message digest output.
|
|
||||||
*
|
|
||||||
* \param md_info message digest info
|
|
||||||
*
|
|
||||||
* \return size of the message digest output in bytes.
|
|
||||||
*/
|
|
||||||
unsigned char mbedtls_md_get_size( const mbedtls_md_info_t *md_info );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Returns the type of the message digest output.
|
|
||||||
*
|
|
||||||
* \param md_info message digest info
|
|
||||||
*
|
|
||||||
* \return type of the message digest output.
|
|
||||||
*/
|
|
||||||
mbedtls_md_type_t mbedtls_md_get_type( const mbedtls_md_info_t *md_info );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Returns the name of the message digest output.
|
|
||||||
*
|
|
||||||
* \param md_info message digest info
|
|
||||||
*
|
|
||||||
* \return name of the message digest output.
|
|
||||||
*/
|
|
||||||
const char *mbedtls_md_get_name( const mbedtls_md_info_t *md_info );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Prepare the context to digest a new message.
|
|
||||||
* Generally called after mbedtls_md_setup() or mbedtls_md_finish().
|
|
||||||
* Followed by mbedtls_md_update().
|
|
||||||
*
|
|
||||||
* \param ctx generic message digest context.
|
|
||||||
*
|
|
||||||
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
|
|
||||||
* verification fails.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_starts( mbedtls_md_context_t *ctx );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Generic message digest process buffer
|
|
||||||
* Called between mbedtls_md_starts() and mbedtls_md_finish().
|
|
||||||
* May be called repeatedly.
|
|
||||||
*
|
|
||||||
* \param ctx Generic message digest context
|
|
||||||
* \param input buffer holding the datal
|
|
||||||
* \param ilen length of the input data
|
|
||||||
*
|
|
||||||
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
|
|
||||||
* verification fails.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Generic message digest final digest
|
|
||||||
* Called after mbedtls_md_update().
|
|
||||||
* Usually followed by mbedtls_md_free() or mbedtls_md_starts().
|
|
||||||
*
|
|
||||||
* \param ctx Generic message digest context
|
|
||||||
* \param output Generic message digest checksum result
|
|
||||||
*
|
|
||||||
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
|
|
||||||
* verification fails.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Output = message_digest( input buffer )
|
|
||||||
*
|
|
||||||
* \param md_info message digest info
|
|
||||||
* \param input buffer holding the data
|
|
||||||
* \param ilen length of the input data
|
|
||||||
* \param output Generic message digest checksum result
|
|
||||||
*
|
|
||||||
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
|
|
||||||
* verification fails.
|
|
||||||
*/
|
|
||||||
int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, size_t ilen,
|
|
||||||
unsigned char *output );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_FS_IO)
|
|
||||||
/**
|
|
||||||
* \brief Output = message_digest( file contents )
|
|
||||||
*
|
|
||||||
* \param md_info message digest info
|
|
||||||
* \param path input file name
|
|
||||||
* \param output generic message digest checksum result
|
|
||||||
*
|
|
||||||
* \return 0 if successful,
|
|
||||||
* MBEDTLS_ERR_MD_FILE_IO_ERROR if file input failed,
|
|
||||||
* MBEDTLS_ERR_MD_BAD_INPUT_DATA if md_info was NULL.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_file( const mbedtls_md_info_t *md_info, const char *path,
|
|
||||||
unsigned char *output );
|
|
||||||
#endif /* MBEDTLS_FS_IO */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Set HMAC key and prepare to authenticate a new message.
|
|
||||||
* Usually called after mbedtls_md_setup() or mbedtls_md_hmac_finish().
|
|
||||||
*
|
|
||||||
* \param ctx HMAC context
|
|
||||||
* \param key HMAC secret key
|
|
||||||
* \param keylen length of the HMAC key in bytes
|
|
||||||
*
|
|
||||||
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
|
|
||||||
* verification fails.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key,
|
|
||||||
size_t keylen );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Generic HMAC process buffer.
|
|
||||||
* Called between mbedtls_md_hmac_starts() or mbedtls_md_hmac_reset()
|
|
||||||
* and mbedtls_md_hmac_finish().
|
|
||||||
* May be called repeatedly.
|
|
||||||
*
|
|
||||||
* \param ctx HMAC context
|
|
||||||
* \param input buffer holding the data
|
|
||||||
* \param ilen length of the input data
|
|
||||||
*
|
|
||||||
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
|
|
||||||
* verification fails.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *input,
|
|
||||||
size_t ilen );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Output HMAC.
|
|
||||||
* Called after mbedtls_md_hmac_update().
|
|
||||||
* Usually followed my mbedtls_md_hmac_reset(), mbedtls_md_hmac_starts(),
|
|
||||||
* or mbedtls_md_free().
|
|
||||||
*
|
|
||||||
* \param ctx HMAC context
|
|
||||||
* \param output Generic HMAC checksum result
|
|
||||||
*
|
|
||||||
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
|
|
||||||
* verification fails.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Prepare to authenticate a new message with the same key.
|
|
||||||
* Called after mbedtls_md_hmac_finish() and before mbedtls_md_hmac_update().
|
|
||||||
*
|
|
||||||
* \param ctx HMAC context to be reset
|
|
||||||
*
|
|
||||||
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
|
|
||||||
* verification fails.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_hmac_reset( mbedtls_md_context_t *ctx );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Output = Generic_HMAC( hmac key, input buffer )
|
|
||||||
*
|
|
||||||
* \param md_info message digest info
|
|
||||||
* \param key HMAC secret key
|
|
||||||
* \param keylen length of the HMAC key in bytes
|
|
||||||
* \param input buffer holding the data
|
|
||||||
* \param ilen length of the input data
|
|
||||||
* \param output Generic HMAC-result
|
|
||||||
*
|
|
||||||
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
|
|
||||||
* verification fails.
|
|
||||||
*/
|
|
||||||
int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key, size_t keylen,
|
|
||||||
const unsigned char *input, size_t ilen,
|
|
||||||
unsigned char *output );
|
|
||||||
|
|
||||||
/* Internal use */
|
|
||||||
int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data );
|
|
||||||
|
|
||||||
#endif /* MBEDTLS_MD_H */
|
|
@ -1,79 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file md_internal.h
|
|
||||||
*
|
|
||||||
* \brief Message digest wrappers.
|
|
||||||
*
|
|
||||||
* \warning This in an internal header. Do not include directly.
|
|
||||||
*
|
|
||||||
* \author Adriaan de Jong <dejong@fox-it.com>
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
* not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* This file is part of mbed TLS (https://tls.mbed.org)
|
|
||||||
*/
|
|
||||||
#ifndef MBEDTLS_MD_WRAP_H
|
|
||||||
#define MBEDTLS_MD_WRAP_H
|
|
||||||
|
|
||||||
#include "md.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Message digest information.
|
|
||||||
* Allows message digest functions to be called in a generic way.
|
|
||||||
*/
|
|
||||||
struct mbedtls_md_info_t
|
|
||||||
{
|
|
||||||
/** Digest identifier */
|
|
||||||
mbedtls_md_type_t type;
|
|
||||||
|
|
||||||
/** Name of the message digest */
|
|
||||||
const char * name;
|
|
||||||
|
|
||||||
/** Output length of the digest function in bytes */
|
|
||||||
int size;
|
|
||||||
|
|
||||||
/** Block length of the digest function in bytes */
|
|
||||||
int block_size;
|
|
||||||
|
|
||||||
/** Digest initialisation function */
|
|
||||||
void (*starts_func)( void *ctx );
|
|
||||||
|
|
||||||
/** Digest update function */
|
|
||||||
void (*update_func)( void *ctx, const unsigned char *input, size_t ilen );
|
|
||||||
|
|
||||||
/** Digest finalisation function */
|
|
||||||
void (*finish_func)( void *ctx, unsigned char *output );
|
|
||||||
|
|
||||||
/** Generic digest function */
|
|
||||||
void (*digest_func)( const unsigned char *input, size_t ilen,
|
|
||||||
unsigned char *output );
|
|
||||||
|
|
||||||
/** Allocate a new context */
|
|
||||||
void * (*ctx_alloc_func)( void );
|
|
||||||
|
|
||||||
/** Free the given context */
|
|
||||||
void (*ctx_free_func)( void *ctx );
|
|
||||||
|
|
||||||
/** Clone state from a context */
|
|
||||||
void (*clone_func)( void *dst, const void *src );
|
|
||||||
|
|
||||||
/** Internal use only */
|
|
||||||
void (*process_func)( void *ctx, const unsigned char *input );
|
|
||||||
};
|
|
||||||
|
|
||||||
extern const mbedtls_md_info_t mbedtls_sha224_info;
|
|
||||||
extern const mbedtls_md_info_t mbedtls_sha256_info;
|
|
||||||
|
|
||||||
#endif /* MBEDTLS_MD_WRAP_H */
|
|
@ -1,122 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file md_wrap.c
|
|
||||||
*
|
|
||||||
* \brief Generic message digest wrapper for mbed TLS
|
|
||||||
*
|
|
||||||
* \author Adriaan de Jong <dejong@fox-it.com>
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
* not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* This file is part of mbed TLS (https://tls.mbed.org)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "md_internal.h"
|
|
||||||
#include "sha256.h"
|
|
||||||
|
|
||||||
#define mbedtls_calloc calloc
|
|
||||||
#define mbedtls_free free
|
|
||||||
|
|
||||||
static void sha224_starts_wrap( void *ctx )
|
|
||||||
{
|
|
||||||
mbedtls_sha256_starts( (mbedtls_sha256_context *) ctx, 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sha224_update_wrap( void *ctx, const unsigned char *input,
|
|
||||||
size_t ilen )
|
|
||||||
{
|
|
||||||
mbedtls_sha256_update( (mbedtls_sha256_context *) ctx, input, ilen );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sha224_finish_wrap( void *ctx, unsigned char *output )
|
|
||||||
{
|
|
||||||
mbedtls_sha256_finish( (mbedtls_sha256_context *) ctx, output );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sha224_wrap( const unsigned char *input, size_t ilen,
|
|
||||||
unsigned char *output )
|
|
||||||
{
|
|
||||||
mbedtls_sha256( input, ilen, output, 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *sha224_ctx_alloc( void )
|
|
||||||
{
|
|
||||||
void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha256_context ) );
|
|
||||||
|
|
||||||
if( ctx != NULL )
|
|
||||||
mbedtls_sha256_init( (mbedtls_sha256_context *) ctx );
|
|
||||||
|
|
||||||
return( ctx );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sha224_ctx_free( void *ctx )
|
|
||||||
{
|
|
||||||
mbedtls_sha256_free( (mbedtls_sha256_context *) ctx );
|
|
||||||
mbedtls_free( ctx );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sha224_clone_wrap( void *dst, const void *src )
|
|
||||||
{
|
|
||||||
mbedtls_sha256_clone( (mbedtls_sha256_context *) dst,
|
|
||||||
(const mbedtls_sha256_context *) src );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sha224_process_wrap( void *ctx, const unsigned char *data )
|
|
||||||
{
|
|
||||||
mbedtls_sha256_process( (mbedtls_sha256_context *) ctx, data );
|
|
||||||
}
|
|
||||||
|
|
||||||
const mbedtls_md_info_t mbedtls_sha224_info = {
|
|
||||||
MBEDTLS_MD_SHA224,
|
|
||||||
"SHA224",
|
|
||||||
28,
|
|
||||||
64,
|
|
||||||
sha224_starts_wrap,
|
|
||||||
sha224_update_wrap,
|
|
||||||
sha224_finish_wrap,
|
|
||||||
sha224_wrap,
|
|
||||||
sha224_ctx_alloc,
|
|
||||||
sha224_ctx_free,
|
|
||||||
sha224_clone_wrap,
|
|
||||||
sha224_process_wrap,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void sha256_starts_wrap( void *ctx )
|
|
||||||
{
|
|
||||||
mbedtls_sha256_starts( (mbedtls_sha256_context *) ctx, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sha256_wrap( const unsigned char *input, size_t ilen,
|
|
||||||
unsigned char *output )
|
|
||||||
{
|
|
||||||
mbedtls_sha256( input, ilen, output, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
const mbedtls_md_info_t mbedtls_sha256_info = {
|
|
||||||
MBEDTLS_MD_SHA256,
|
|
||||||
"SHA256",
|
|
||||||
32,
|
|
||||||
64,
|
|
||||||
sha256_starts_wrap,
|
|
||||||
sha224_update_wrap,
|
|
||||||
sha224_finish_wrap,
|
|
||||||
sha256_wrap,
|
|
||||||
sha224_ctx_alloc,
|
|
||||||
sha224_ctx_free,
|
|
||||||
sha224_clone_wrap,
|
|
||||||
sha224_process_wrap,
|
|
||||||
};
|
|
@ -1,104 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file mbedtls_sha256.h
|
|
||||||
*
|
|
||||||
* \brief SHA-224 and SHA-256 cryptographic hash function
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
* not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* This file is part of mbed TLS (https://tls.mbed.org)
|
|
||||||
*/
|
|
||||||
#ifndef MBEDTLS_SHA256_H
|
|
||||||
#define MBEDTLS_SHA256_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief SHA-256 context structure
|
|
||||||
*/
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint32_t total[2]; /*!< number of bytes processed */
|
|
||||||
uint32_t state[8]; /*!< intermediate digest state */
|
|
||||||
unsigned char buffer[64]; /*!< data block being processed */
|
|
||||||
int is224; /*!< 0 => SHA-256, else SHA-224 */
|
|
||||||
}
|
|
||||||
mbedtls_sha256_context;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Initialize SHA-256 context
|
|
||||||
*
|
|
||||||
* \param ctx SHA-256 context to be initialized
|
|
||||||
*/
|
|
||||||
void mbedtls_sha256_init( mbedtls_sha256_context *ctx );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Clear SHA-256 context
|
|
||||||
*
|
|
||||||
* \param ctx SHA-256 context to be cleared
|
|
||||||
*/
|
|
||||||
void mbedtls_sha256_free( mbedtls_sha256_context *ctx );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Clone (the state of) a SHA-256 context
|
|
||||||
*
|
|
||||||
* \param dst The destination context
|
|
||||||
* \param src The context to be cloned
|
|
||||||
*/
|
|
||||||
void mbedtls_sha256_clone( mbedtls_sha256_context *dst,
|
|
||||||
const mbedtls_sha256_context *src );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief SHA-256 context setup
|
|
||||||
*
|
|
||||||
* \param ctx context to be initialized
|
|
||||||
* \param is224 0 = use SHA256, 1 = use SHA224
|
|
||||||
*/
|
|
||||||
void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief SHA-256 process buffer
|
|
||||||
*
|
|
||||||
* \param ctx SHA-256 context
|
|
||||||
* \param input buffer holding the data
|
|
||||||
* \param ilen length of the input data
|
|
||||||
*/
|
|
||||||
void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *input,
|
|
||||||
size_t ilen );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief SHA-256 final digest
|
|
||||||
*
|
|
||||||
* \param ctx SHA-256 context
|
|
||||||
* \param output SHA-224/256 checksum result
|
|
||||||
*/
|
|
||||||
void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32] );
|
|
||||||
|
|
||||||
/* Internal use */
|
|
||||||
void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char data[64] );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Output = SHA-256( input buffer )
|
|
||||||
*
|
|
||||||
* \param input buffer holding the data
|
|
||||||
* \param ilen length of the input data
|
|
||||||
* \param output SHA-224/256 checksum result
|
|
||||||
* \param is224 0 = use SHA256, 1 = use SHA224
|
|
||||||
*/
|
|
||||||
void mbedtls_sha256( const unsigned char *input, size_t ilen,
|
|
||||||
unsigned char output[32], int is224 );
|
|
||||||
|
|
||||||
#endif /* MBEDTLS_SHA256_H */
|
|
Loading…
x
Reference in New Issue
Block a user