30#if !defined(POLARSSL_CONFIG_FILE)
33#include POLARSSL_CONFIG_FILE
36#if defined(POLARSSL_MD_C)
40#if defined(POLARSSL_MD2_C)
44#if defined(POLARSSL_MD4_C)
48#if defined(POLARSSL_MD5_C)
52#if defined(POLARSSL_RIPEMD160_C)
56#if defined(POLARSSL_SHA1_C)
60#if defined(POLARSSL_SHA256_C)
64#if defined(POLARSSL_SHA512_C)
68#if defined(POLARSSL_PLATFORM_C)
71#define polarssl_malloc malloc
72#define polarssl_free free
78static void polarssl_zeroize(
void *v,
size_t n ) {
79 volatile unsigned char *p = v;
while( n-- ) *p++ = 0;
82#if defined(POLARSSL_MD2_C)
84static void md2_starts_wrap(
void *ctx )
89static void md2_update_wrap(
void *ctx,
const unsigned char *input,
95static void md2_finish_wrap(
void *ctx,
unsigned char *output )
100static int md2_file_wrap(
const char *path,
unsigned char *output )
102#if defined(POLARSSL_FS_IO)
111static void md2_hmac_starts_wrap(
void *ctx,
const unsigned char *key,
117static void md2_hmac_update_wrap(
void *ctx,
const unsigned char *input,
123static void md2_hmac_finish_wrap(
void *ctx,
unsigned char *output )
128static void md2_hmac_reset_wrap(
void *ctx )
133static void * md2_ctx_alloc(
void )
138static void md2_ctx_free(
void *ctx )
144static void md2_process_wrap(
void *ctx,
const unsigned char *data )
160 md2_hmac_starts_wrap,
161 md2_hmac_update_wrap,
162 md2_hmac_finish_wrap,
172#if defined(POLARSSL_MD4_C)
174static void md4_starts_wrap(
void *ctx )
179static void md4_update_wrap(
void *ctx,
const unsigned char *input,
185static void md4_finish_wrap(
void *ctx,
unsigned char *output )
190static int md4_file_wrap(
const char *path,
unsigned char *output )
192#if defined(POLARSSL_FS_IO)
201static void md4_hmac_starts_wrap(
void *ctx,
const unsigned char *key,
207static void md4_hmac_update_wrap(
void *ctx,
const unsigned char *input,
213static void md4_hmac_finish_wrap(
void *ctx,
unsigned char *output )
218static void md4_hmac_reset_wrap(
void *ctx )
223static void *md4_ctx_alloc(
void )
228static void md4_ctx_free(
void *ctx )
234static void md4_process_wrap(
void *ctx,
const unsigned char *data )
248 md4_hmac_starts_wrap,
249 md4_hmac_update_wrap,
250 md4_hmac_finish_wrap,
260#if defined(POLARSSL_MD5_C)
262static void md5_starts_wrap(
void *ctx )
267static void md5_update_wrap(
void *ctx,
const unsigned char *input,
273static void md5_finish_wrap(
void *ctx,
unsigned char *output )
278static int md5_file_wrap(
const char *path,
unsigned char *output )
280#if defined(POLARSSL_FS_IO)
289static void md5_hmac_starts_wrap(
void *ctx,
const unsigned char *key,
295static void md5_hmac_update_wrap(
void *ctx,
const unsigned char *input,
301static void md5_hmac_finish_wrap(
void *ctx,
unsigned char *output )
306static void md5_hmac_reset_wrap(
void *ctx )
311static void * md5_ctx_alloc(
void )
316static void md5_ctx_free(
void *ctx )
322static void md5_process_wrap(
void *ctx,
const unsigned char *data )
336 md5_hmac_starts_wrap,
337 md5_hmac_update_wrap,
338 md5_hmac_finish_wrap,
348#if defined(POLARSSL_RIPEMD160_C)
350static void ripemd160_starts_wrap(
void *ctx )
355static void ripemd160_update_wrap(
void *ctx,
const unsigned char *input,
361static void ripemd160_finish_wrap(
void *ctx,
unsigned char *output )
366static int ripemd160_file_wrap(
const char *path,
unsigned char *output )
368#if defined(POLARSSL_FS_IO)
377static void ripemd160_hmac_starts_wrap(
void *ctx,
const unsigned char *key,
383static void ripemd160_hmac_update_wrap(
void *ctx,
const unsigned char *input,
389static void ripemd160_hmac_finish_wrap(
void *ctx,
unsigned char *output )
394static void ripemd160_hmac_reset_wrap(
void *ctx )
399static void * ripemd160_ctx_alloc(
void )
412static void ripemd160_ctx_free(
void *ctx )
418static void ripemd160_process_wrap(
void *ctx,
const unsigned char *data )
427 ripemd160_starts_wrap,
428 ripemd160_update_wrap,
429 ripemd160_finish_wrap,
432 ripemd160_hmac_starts_wrap,
433 ripemd160_hmac_update_wrap,
434 ripemd160_hmac_finish_wrap,
435 ripemd160_hmac_reset_wrap,
439 ripemd160_process_wrap,
444#if defined(POLARSSL_SHA1_C)
446static void sha1_starts_wrap(
void *ctx )
451static void sha1_update_wrap(
void *ctx,
const unsigned char *input,
457static void sha1_finish_wrap(
void *ctx,
unsigned char *output )
462static int sha1_file_wrap(
const char *path,
unsigned char *output )
464#if defined(POLARSSL_FS_IO)
473static void sha1_hmac_starts_wrap(
void *ctx,
const unsigned char *key,
479static void sha1_hmac_update_wrap(
void *ctx,
const unsigned char *input,
485static void sha1_hmac_finish_wrap(
void *ctx,
unsigned char *output )
490static void sha1_hmac_reset_wrap(
void *ctx )
495static void * sha1_ctx_alloc(
void )
508static void sha1_ctx_free(
void *ctx )
514static void sha1_process_wrap(
void *ctx,
const unsigned char *data )
528 sha1_hmac_starts_wrap,
529 sha1_hmac_update_wrap,
530 sha1_hmac_finish_wrap,
531 sha1_hmac_reset_wrap,
543#if defined(POLARSSL_SHA256_C)
545static void sha224_starts_wrap(
void *ctx )
550static void sha224_update_wrap(
void *ctx,
const unsigned char *input,
556static void sha224_finish_wrap(
void *ctx,
unsigned char *output )
561static void sha224_wrap(
const unsigned char *input,
size_t ilen,
562 unsigned char *output )
564 sha256( input, ilen, output, 1 );
567static int sha224_file_wrap(
const char *path,
unsigned char *output )
569#if defined(POLARSSL_FS_IO)
578static void sha224_hmac_starts_wrap(
void *ctx,
const unsigned char *key,
584static void sha224_hmac_update_wrap(
void *ctx,
const unsigned char *input,
590static void sha224_hmac_finish_wrap(
void *ctx,
unsigned char *output )
595static void sha224_hmac_reset_wrap(
void *ctx )
600static void sha224_hmac_wrap(
const unsigned char *key,
size_t keylen,
601 const unsigned char *input,
size_t ilen,
602 unsigned char *output )
604 sha256_hmac( key, keylen, input, ilen, output, 1 );
607static void * sha224_ctx_alloc(
void )
612static void sha224_ctx_free(
void *ctx )
618static void sha224_process_wrap(
void *ctx,
const unsigned char *data )
632 sha224_hmac_starts_wrap,
633 sha224_hmac_update_wrap,
634 sha224_hmac_finish_wrap,
635 sha224_hmac_reset_wrap,
642static void sha256_starts_wrap(
void *ctx )
647static void sha256_update_wrap(
void *ctx,
const unsigned char *input,
653static void sha256_finish_wrap(
void *ctx,
unsigned char *output )
658static void sha256_wrap(
const unsigned char *input,
size_t ilen,
659 unsigned char *output )
661 sha256( input, ilen, output, 0 );
664static int sha256_file_wrap(
const char *path,
unsigned char *output )
666#if defined(POLARSSL_FS_IO)
675static void sha256_hmac_starts_wrap(
void *ctx,
const unsigned char *key,
681static void sha256_hmac_update_wrap(
void *ctx,
const unsigned char *input,
687static void sha256_hmac_finish_wrap(
void *ctx,
unsigned char *output )
692static void sha256_hmac_reset_wrap(
void *ctx )
697static void sha256_hmac_wrap(
const unsigned char *key,
size_t keylen,
698 const unsigned char *input,
size_t ilen,
699 unsigned char *output )
701 sha256_hmac( key, keylen, input, ilen, output, 0 );
704static void * sha256_ctx_alloc(
void )
717static void sha256_ctx_free(
void *ctx )
723static void sha256_process_wrap(
void *ctx,
const unsigned char *data )
737 sha256_hmac_starts_wrap,
738 sha256_hmac_update_wrap,
739 sha256_hmac_finish_wrap,
740 sha256_hmac_reset_wrap,
749#if defined(POLARSSL_SHA512_C)
751static void sha384_starts_wrap(
void *ctx )
756static void sha384_update_wrap(
void *ctx,
const unsigned char *input,
762static void sha384_finish_wrap(
void *ctx,
unsigned char *output )
767static void sha384_wrap(
const unsigned char *input,
size_t ilen,
768 unsigned char *output )
770 sha512( input, ilen, output, 1 );
773static int sha384_file_wrap(
const char *path,
unsigned char *output )
775#if defined(POLARSSL_FS_IO)
784static void sha384_hmac_starts_wrap(
void *ctx,
const unsigned char *key,
790static void sha384_hmac_update_wrap(
void *ctx,
const unsigned char *input,
796static void sha384_hmac_finish_wrap(
void *ctx,
unsigned char *output )
801static void sha384_hmac_reset_wrap(
void *ctx )
806static void sha384_hmac_wrap(
const unsigned char *key,
size_t keylen,
807 const unsigned char *input,
size_t ilen,
808 unsigned char *output )
810 sha512_hmac( key, keylen, input, ilen, output, 1 );
813static void * sha384_ctx_alloc(
void )
818static void sha384_ctx_free(
void *ctx )
824static void sha384_process_wrap(
void *ctx,
const unsigned char *data )
838 sha384_hmac_starts_wrap,
839 sha384_hmac_update_wrap,
840 sha384_hmac_finish_wrap,
841 sha384_hmac_reset_wrap,
848static void sha512_starts_wrap(
void *ctx )
853static void sha512_update_wrap(
void *ctx,
const unsigned char *input,
859static void sha512_finish_wrap(
void *ctx,
unsigned char *output )
864static void sha512_wrap(
const unsigned char *input,
size_t ilen,
865 unsigned char *output )
867 sha512( input, ilen, output, 0 );
870static int sha512_file_wrap(
const char *path,
unsigned char *output )
872#if defined(POLARSSL_FS_IO)
881static void sha512_hmac_starts_wrap(
void *ctx,
const unsigned char *key,
887static void sha512_hmac_update_wrap(
void *ctx,
const unsigned char *input,
893static void sha512_hmac_finish_wrap(
void *ctx,
unsigned char *output )
898static void sha512_hmac_reset_wrap(
void *ctx )
903static void sha512_hmac_wrap(
const unsigned char *key,
size_t keylen,
904 const unsigned char *input,
size_t ilen,
905 unsigned char *output )
907 sha512_hmac( key, keylen, input, ilen, output, 0 );
910static void * sha512_ctx_alloc(
void )
923static void sha512_ctx_free(
void *ctx )
929static void sha512_process_wrap(
void *ctx,
const unsigned char *data )
943 sha512_hmac_starts_wrap,
944 sha512_hmac_update_wrap,
945 sha512_hmac_finish_wrap,
946 sha512_hmac_reset_wrap,
Configuration options (set of defines)
MD2 message digest algorithm (hash function)
void md2_update(md2_context *ctx, const unsigned char *input, size_t ilen)
MD2 process buffer.
void md2_hmac_reset(md2_context *ctx)
MD2 HMAC context reset.
void md2(const unsigned char *input, size_t ilen, unsigned char output[16])
Output = MD2( input buffer )
void md2_hmac_finish(md2_context *ctx, unsigned char output[16])
MD2 HMAC final digest.
void md2_hmac(const unsigned char *key, size_t keylen, const unsigned char *input, size_t ilen, unsigned char output[16])
Output = HMAC-MD2( hmac key, input buffer )
void md2_process(md2_context *ctx)
void md2_hmac_update(md2_context *ctx, const unsigned char *input, size_t ilen)
MD2 HMAC process buffer.
int md2_file(const char *path, unsigned char output[16])
Output = MD2( file contents )
void md2_finish(md2_context *ctx, unsigned char output[16])
MD2 final digest.
void md2_starts(md2_context *ctx)
MD2 context setup.
void md2_hmac_starts(md2_context *ctx, const unsigned char *key, size_t keylen)
MD2 HMAC context setup.
MD4 message digest algorithm (hash function)
void md4_starts(md4_context *ctx)
MD4 context setup.
void md4_process(md4_context *ctx, const unsigned char data[64])
void md4_hmac_reset(md4_context *ctx)
MD4 HMAC context reset.
void md4_update(md4_context *ctx, const unsigned char *input, size_t ilen)
MD4 process buffer.
int md4_file(const char *path, unsigned char output[16])
Output = MD4( file contents )
void md4_hmac(const unsigned char *key, size_t keylen, const unsigned char *input, size_t ilen, unsigned char output[16])
Output = HMAC-MD4( hmac key, input buffer )
void md4_hmac_starts(md4_context *ctx, const unsigned char *key, size_t keylen)
MD4 HMAC context setup.
void md4_finish(md4_context *ctx, unsigned char output[16])
MD4 final digest.
void md4_hmac_update(md4_context *ctx, const unsigned char *input, size_t ilen)
MD4 HMAC process buffer.
void md4_hmac_finish(md4_context *ctx, unsigned char output[16])
MD4 HMAC final digest.
void md4(const unsigned char *input, size_t ilen, unsigned char output[16])
Output = MD4( input buffer )
MD5 message digest algorithm (hash function)
void md5_hmac_finish(md5_context *ctx, unsigned char output[16])
MD5 HMAC final digest.
void md5_hmac(const unsigned char *key, size_t keylen, const unsigned char *input, size_t ilen, unsigned char output[16])
Output = HMAC-MD5( hmac key, input buffer )
void md5_process(md5_context *ctx, const unsigned char data[64])
void md5_update(md5_context *ctx, const unsigned char *input, size_t ilen)
MD5 process buffer.
void md5_finish(md5_context *ctx, unsigned char output[16])
MD5 final digest.
void md5(const unsigned char *input, size_t ilen, unsigned char output[16])
Output = MD5( input buffer )
void md5_hmac_update(md5_context *ctx, const unsigned char *input, size_t ilen)
MD5 HMAC process buffer.
void md5_starts(md5_context *ctx)
MD5 context setup.
int md5_file(const char *path, unsigned char output[16])
Output = MD5( file contents )
void md5_hmac_starts(md5_context *ctx, const unsigned char *key, size_t keylen)
MD5 HMAC context setup.
void md5_hmac_reset(md5_context *ctx)
MD5 HMAC context reset.
#define POLARSSL_ERR_MD_FEATURE_UNAVAILABLE
The selected feature is not available.
const md_info_t sha256_info
const md_info_t sha224_info
const md_info_t ripemd160_info
const md_info_t sha1_info
const md_info_t sha384_info
const md_info_t sha512_info
RIPE MD-160 message digest.
int ripemd160_file(const char *path, unsigned char output[20])
Output = RIPEMD-160( file contents )
void ripemd160_hmac_reset(ripemd160_context *ctx)
RIPEMD-160 HMAC context reset.
void ripemd160_hmac_starts(ripemd160_context *ctx, const unsigned char *key, size_t keylen)
RIPEMD-160 HMAC context setup.
void ripemd160_hmac(const unsigned char *key, size_t keylen, const unsigned char *input, size_t ilen, unsigned char output[20])
Output = HMAC-RIPEMD-160( hmac key, input buffer )
void ripemd160_init(ripemd160_context *ctx)
Initialize RIPEMD-160 context.
void ripemd160_free(ripemd160_context *ctx)
Clear RIPEMD-160 context.
void ripemd160_hmac_finish(ripemd160_context *ctx, unsigned char output[20])
RIPEMD-160 HMAC final digest.
void ripemd160_hmac_update(ripemd160_context *ctx, const unsigned char *input, size_t ilen)
RIPEMD-160 HMAC process buffer.
void ripemd160(const unsigned char *input, size_t ilen, unsigned char output[20])
Output = RIPEMD-160( input buffer )
void ripemd160_starts(ripemd160_context *ctx)
RIPEMD-160 context setup.
void ripemd160_process(ripemd160_context *ctx, const unsigned char data[64])
void ripemd160_finish(ripemd160_context *ctx, unsigned char output[20])
RIPEMD-160 final digest.
void ripemd160_update(ripemd160_context *ctx, const unsigned char *input, size_t ilen)
RIPEMD-160 process buffer.
SHA-1 cryptographic hash function.
void sha1(const unsigned char *input, size_t ilen, unsigned char output[20])
Output = SHA-1( input buffer )
void sha1_starts(sha1_context *ctx)
SHA-1 context setup.
void sha1_hmac(const unsigned char *key, size_t keylen, const unsigned char *input, size_t ilen, unsigned char output[20])
Output = HMAC-SHA-1( hmac key, input buffer )
int sha1_file(const char *path, unsigned char output[20])
Output = SHA-1( file contents )
void sha1_update(sha1_context *ctx, const unsigned char *input, size_t ilen)
SHA-1 process buffer.
void sha1_hmac_finish(sha1_context *ctx, unsigned char output[20])
SHA-1 HMAC final digest.
void sha1_hmac_update(sha1_context *ctx, const unsigned char *input, size_t ilen)
SHA-1 HMAC process buffer.
void sha1_init(sha1_context *ctx)
Initialize SHA-1 context.
void sha1_finish(sha1_context *ctx, unsigned char output[20])
SHA-1 final digest.
void sha1_hmac_starts(sha1_context *ctx, const unsigned char *key, size_t keylen)
SHA-1 HMAC context setup.
void sha1_free(sha1_context *ctx)
Clear SHA-1 context.
void sha1_hmac_reset(sha1_context *ctx)
SHA-1 HMAC context reset.
void sha1_process(sha1_context *ctx, const unsigned char data[64])
SHA-224 and SHA-256 cryptographic hash function.
void sha256_finish(sha256_context *ctx, unsigned char output[32])
SHA-256 final digest.
int sha256_file(const char *path, unsigned char output[32], int is224)
Output = SHA-256( file contents )
void sha256_hmac_finish(sha256_context *ctx, unsigned char output[32])
SHA-256 HMAC final digest.
void sha256_hmac_update(sha256_context *ctx, const unsigned char *input, size_t ilen)
SHA-256 HMAC process buffer.
void sha256_free(sha256_context *ctx)
Clear SHA-256 context.
void sha256(const unsigned char *input, size_t ilen, unsigned char output[32], int is224)
Output = SHA-256( input buffer )
void sha256_process(sha256_context *ctx, const unsigned char data[64])
void sha256_hmac_reset(sha256_context *ctx)
SHA-256 HMAC context reset.
void sha256_hmac_starts(sha256_context *ctx, const unsigned char *key, size_t keylen, int is224)
SHA-256 HMAC context setup.
void sha256_hmac(const unsigned char *key, size_t keylen, const unsigned char *input, size_t ilen, unsigned char output[32], int is224)
Output = HMAC-SHA-256( hmac key, input buffer )
void sha256_update(sha256_context *ctx, const unsigned char *input, size_t ilen)
SHA-256 process buffer.
void sha256_starts(sha256_context *ctx, int is224)
SHA-256 context setup.
void sha256_init(sha256_context *ctx)
Initialize SHA-256 context.
SHA-384 and SHA-512 cryptographic hash function.
void sha512_hmac_reset(sha512_context *ctx)
SHA-512 HMAC context reset.
void sha512_free(sha512_context *ctx)
Clear SHA-512 context.
void sha512_process(sha512_context *ctx, const unsigned char data[128])
void sha512_starts(sha512_context *ctx, int is384)
SHA-512 context setup.
void sha512_hmac_finish(sha512_context *ctx, unsigned char output[64])
SHA-512 HMAC final digest.
void sha512_hmac_update(sha512_context *ctx, const unsigned char *input, size_t ilen)
SHA-512 HMAC process buffer.
void sha512(const unsigned char *input, size_t ilen, unsigned char output[64], int is384)
Output = SHA-512( input buffer )
void sha512_hmac(const unsigned char *key, size_t keylen, const unsigned char *input, size_t ilen, unsigned char output[64], int is384)
Output = HMAC-SHA-512( hmac key, input buffer )
int sha512_file(const char *path, unsigned char output[64], int is384)
Output = SHA-512( file contents )
void sha512_finish(sha512_context *ctx, unsigned char output[64])
SHA-512 final digest.
void sha512_hmac_starts(sha512_context *ctx, const unsigned char *key, size_t keylen, int is384)
SHA-512 HMAC context setup.
void sha512_update(sha512_context *ctx, const unsigned char *input, size_t ilen)
SHA-512 process buffer.
void sha512_init(sha512_context *ctx)
Initialize SHA-512 context.
Message digest information.
RIPEMD-160 context structure.
SHA-256 context structure.
SHA-512 context structure.