diff options
author | Gökhan Şengün <gsengun@linux-5d7d.site> | 2012-03-30 23:09:47 +0300 |
---|---|---|
committer | Steve Holme <steve_holme@hotmail.com> | 2012-03-31 22:31:16 +0100 |
commit | 004d7251ab1abca0b3e1c6e632eef12e335f3aaa (patch) | |
tree | 78f4fd6db5aae6ef5e030a9e00e05c7c4adfc461 /lib/md5.c | |
parent | 33d044a8628ac40418e1e5e698b0fd90c722a07f (diff) | |
download | curl-004d7251ab1abca0b3e1c6e632eef12e335f3aaa.tar.gz |
md5: Add support for calculating the md5 sum of buffers incrementally
It is now possible to calculate the md5 sum as the stream of buffers
becomes known where as previously it was only possible to calculate the
md5 sum of a pre-prepared buffer.
Diffstat (limited to 'lib/md5.c')
-rw-r--r-- | lib/md5.c | 50 |
1 files changed, 50 insertions, 0 deletions
@@ -407,6 +407,15 @@ const HMAC_params Curl_HMAC_MD5[] = { } }; +const MD5_params Curl_DIGEST_MD5[] = { + { + (Curl_MD5_init_func) MD5_Init, /* Digest initialization function */ + (Curl_MD5_update_func) MD5_Update, /* Digest update function */ + (Curl_MD5_final_func) MD5_Final, /* Digest computation end function */ + sizeof(MD5_CTX), /* Size of digest context struct */ + 16 /* Result size */ + } +}; void Curl_md5it(unsigned char *outbuffer, /* 16 bytes */ const unsigned char *input) @@ -417,4 +426,45 @@ void Curl_md5it(unsigned char *outbuffer, /* 16 bytes */ MD5_Final(outbuffer, &ctx); } +MD5_context * Curl_MD5_init(const MD5_params *md5params) +{ + MD5_context* ctxt; + + /* Create MD5 context */ + ctxt = malloc(sizeof *ctxt); + + if(!ctxt) + return ctxt; + + ctxt->md5_hashctx = malloc(md5params->md5_ctxtsize); + + if(!ctxt->md5_hashctx) + return ctxt->md5_hashctx; + + ctxt->md5_hash = md5params; + + (*md5params->md5_init)(ctxt->md5_hashctx); + + return ctxt; +} + +int Curl_MD5_update(MD5_context *context, + const unsigned char *data, + unsigned int len) +{ + (*context->md5_hash->md5_update)(context->md5_hashctx, data, len); + + return 0; +} + +int Curl_MD5_final(MD5_context *context, unsigned char *result) +{ + (*context->md5_hash->md5_final)(result, context->md5_hashctx); + + free(context->md5_hashctx); + free(context); + + return 0; +} + #endif /* CURL_DISABLE_CRYPTO_AUTH */ |