Add XXX_PROCESS_ALT mecchanism

This commit is contained in:
Manuel Pégourié-Gonnard 2015-03-31 18:32:50 +02:00
parent 26c9f90cae
commit 427b672551
9 changed files with 52 additions and 4 deletions

View File

@ -4,6 +4,9 @@ mbed TLS ChangeLog (Sorted per branch, date)
Features Features
* Support for DTLS 1.0 and 1.2 (RFC 6347). * Support for DTLS 1.0 and 1.2 (RFC 6347).
* Ability to override xxx_process() function from a md/sha module with
custom implementation (eg hardware accelerated), complementing the ability
to override the whole module.
API Changes API Changes
* ecdsa_write_signature() gained an addtional md_alg argument and * ecdsa_write_signature() gained an addtional md_alg argument and

View File

@ -231,20 +231,23 @@
//#define POLARSSL_TIMING_ALT //#define POLARSSL_TIMING_ALT
/** /**
* \def POLARSSL_XXX_ALT * \def POLARSSL__MODULE_NAME__ALT
* *
* Uncomment a macro to let mbed TLS use your alternate core implementation of * Uncomment a macro to let mbed TLS use your alternate core implementation of
* a symmetric or hash algorithm (e.g. platform specific assembly optimized * a symmetric or hash module (e.g. platform specific assembly optimized
* implementations). Keep in mind that the function prototypes should remain * implementations). Keep in mind that the function prototypes should remain
* the same. * the same.
* *
* This replaces the whole module. If you only want to replace one of the
* functions, use one of the POLARSSL__FUNCTION_NAME__ALT flags.
*
* Example: In case you uncomment POLARSSL_AES_ALT, mbed TLS will no longer * Example: In case you uncomment POLARSSL_AES_ALT, mbed TLS will no longer
* provide the "struct aes_context" definition and omit the base function * provide the "struct aes_context" definition and omit the base function
* declarations and implementations. "aes_alt.h" will be included from * declarations and implementations. "aes_alt.h" will be included from
* "aes.h" to include the new function definitions. * "aes.h" to include the new function definitions.
* *
* Uncomment a macro to enable alternate implementation for core algorithm * Uncomment a macro to enable alternate implementation of the corresponding
* functions * module.
*/ */
//#define POLARSSL_AES_ALT //#define POLARSSL_AES_ALT
//#define POLARSSL_ARC4_ALT //#define POLARSSL_ARC4_ALT
@ -260,6 +263,34 @@
//#define POLARSSL_SHA256_ALT //#define POLARSSL_SHA256_ALT
//#define POLARSSL_SHA512_ALT //#define POLARSSL_SHA512_ALT
/**
* \def POLARSSL__FUNCTION_NAME__ALT
*
* Uncomment a macro to let mbed TLS use you alternate core implementation of
* symmetric of hash function. Keep in mind that function prototypes should
* remain the same.
*
* This replaces only one function. The header file from mbed TLS is still
* used, in contrast to the POLARSSL__MODULE_NAME__ALT flags.
*
* Example: In case you uncomment POLARSSL_SHA256_PROCESS_ALT, mbed TLS will
* no longer provide the sha1_process() function, but it will still provide
* the other function (using your sha1_process() function) and the definition
* of sha1_context, so your implementation of sha1_process must be compatible
* with this definition.
*
*
* Uncomment a macro to enable alternate implementation of the corresponding
* function.
*/
//#define POLARSSL_MD2_PROCESS_ALT
//#define POLARSSL_MD4_PROCESS_ALT
//#define POLARSSL_MD5_PROCESS_ALT
//#define POLARSSL_RIPEMD160_PROCESS_ALT
//#define POLARSSL_SHA1_PROCESS_ALT
//#define POLARSSL_SHA256_PROCESS_ALT
//#define POLARSSL_SHA512_PROCESS_ALT
/** /**
* \def POLARSSL_AES_ROM_TABLES * \def POLARSSL_AES_ROM_TABLES
* *

View File

@ -112,6 +112,7 @@ void md2_starts( md2_context *ctx )
ctx->left = 0; ctx->left = 0;
} }
#if !defined(POLARSSL_MD2_PROCESS_ALT)
void md2_process( md2_context *ctx ) void md2_process( md2_context *ctx )
{ {
int i, j; int i, j;
@ -145,6 +146,7 @@ void md2_process( md2_context *ctx )
t = ctx->cksum[i]; t = ctx->cksum[i];
} }
} }
#endif /* !POLARSSL_MD2_PROCESS_ALT */
/* /*
* MD2 process buffer * MD2 process buffer

View File

@ -108,6 +108,7 @@ void md4_starts( md4_context *ctx )
ctx->state[3] = 0x10325476; ctx->state[3] = 0x10325476;
} }
#if !defined(POLARSSL_MD4_PROCESS_ALT)
void md4_process( md4_context *ctx, const unsigned char data[64] ) void md4_process( md4_context *ctx, const unsigned char data[64] )
{ {
uint32_t X[16], A, B, C, D; uint32_t X[16], A, B, C, D;
@ -210,6 +211,7 @@ void md4_process( md4_context *ctx, const unsigned char data[64] )
ctx->state[2] += C; ctx->state[2] += C;
ctx->state[3] += D; ctx->state[3] += D;
} }
#endif /* !POLARSSL_MD4_PROCESS_ALT */
/* /*
* MD4 process buffer * MD4 process buffer

View File

@ -107,6 +107,7 @@ void md5_starts( md5_context *ctx )
ctx->state[3] = 0x10325476; ctx->state[3] = 0x10325476;
} }
#if !defined(POLARSSL_MD5_PROCESS_ALT)
void md5_process( md5_context *ctx, const unsigned char data[64] ) void md5_process( md5_context *ctx, const unsigned char data[64] )
{ {
uint32_t X[16], A, B, C, D; uint32_t X[16], A, B, C, D;
@ -229,6 +230,7 @@ void md5_process( md5_context *ctx, const unsigned char data[64] )
ctx->state[2] += C; ctx->state[2] += C;
ctx->state[3] += D; ctx->state[3] += D;
} }
#endif /* !POLARSSL_MD5_PROCESS_ALT */
/* /*
* MD5 process buffer * MD5 process buffer

View File

@ -107,6 +107,7 @@ void ripemd160_starts( ripemd160_context *ctx )
ctx->state[4] = 0xC3D2E1F0; ctx->state[4] = 0xC3D2E1F0;
} }
#if !defined(POLARSSL_RIPEMD160_PROCESS_ALT)
/* /*
* Process one block * Process one block
*/ */
@ -286,6 +287,7 @@ void ripemd160_process( ripemd160_context *ctx, const unsigned char data[64] )
ctx->state[4] = ctx->state[0] + B + Cp; ctx->state[4] = ctx->state[0] + B + Cp;
ctx->state[0] = C; ctx->state[0] = C;
} }
#endif /* !POLARSSL_RIPEMD160_PROCESS_ALT */
/* /*
* RIPEMD-160 process buffer * RIPEMD-160 process buffer

View File

@ -108,6 +108,7 @@ void sha1_starts( sha1_context *ctx )
ctx->state[4] = 0xC3D2E1F0; ctx->state[4] = 0xC3D2E1F0;
} }
#if !defined(POLARSSL_SHA1_PROCESS_ALT)
void sha1_process( sha1_context *ctx, const unsigned char data[64] ) void sha1_process( sha1_context *ctx, const unsigned char data[64] )
{ {
uint32_t temp, W[16], A, B, C, D, E; uint32_t temp, W[16], A, B, C, D, E;
@ -263,6 +264,7 @@ void sha1_process( sha1_context *ctx, const unsigned char data[64] )
ctx->state[3] += D; ctx->state[3] += D;
ctx->state[4] += E; ctx->state[4] += E;
} }
#endif /* !POLARSSL_SHA1_PROCESS_ALT */
/* /*
* SHA-1 process buffer * SHA-1 process buffer

View File

@ -129,6 +129,7 @@ void sha256_starts( sha256_context *ctx, int is224 )
ctx->is224 = is224; ctx->is224 = is224;
} }
#if !defined(POLARSSL_SHA256_PROCESS_ALT)
void sha256_process( sha256_context *ctx, const unsigned char data[64] ) void sha256_process( sha256_context *ctx, const unsigned char data[64] )
{ {
uint32_t temp1, temp2, W[64]; uint32_t temp1, temp2, W[64];
@ -259,6 +260,7 @@ void sha256_process( sha256_context *ctx, const unsigned char data[64] )
ctx->state[6] += G; ctx->state[6] += G;
ctx->state[7] += H; ctx->state[7] += H;
} }
#endif /* !POLARSSL_SHA256_PROCESS_ALT */
/* /*
* SHA-256 process buffer * SHA-256 process buffer

View File

@ -190,6 +190,7 @@ void sha512_starts( sha512_context *ctx, int is384 )
ctx->is384 = is384; ctx->is384 = is384;
} }
#if !defined(POLARSSL_SHA512_PROCESS_ALT)
void sha512_process( sha512_context *ctx, const unsigned char data[128] ) void sha512_process( sha512_context *ctx, const unsigned char data[128] )
{ {
int i; int i;
@ -258,6 +259,7 @@ void sha512_process( sha512_context *ctx, const unsigned char data[128] )
ctx->state[6] += G; ctx->state[6] += G;
ctx->state[7] += H; ctx->state[7] += H;
} }
#endif /* !POLARSSL_SHA512_PROCESS_ALT */
/* /*
* SHA-512 process buffer * SHA-512 process buffer