mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
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.
This commit is contained in:
parent
33d044a862
commit
004d7251ab
@ -25,10 +25,39 @@
|
||||
#ifndef CURL_DISABLE_CRYPTO_AUTH
|
||||
#include "curl_hmac.h"
|
||||
|
||||
#define MD5_DIGEST_LEN 16
|
||||
|
||||
typedef void (* Curl_MD5_init_func)(void *context);
|
||||
typedef void (* Curl_MD5_update_func)(void *context,
|
||||
const unsigned char *data,
|
||||
unsigned int len);
|
||||
typedef void (* Curl_MD5_final_func)(unsigned char *result, void *context);
|
||||
|
||||
typedef struct {
|
||||
Curl_MD5_init_func md5_init; /* Initialize context procedure */
|
||||
Curl_MD5_update_func md5_update; /* Update context with data */
|
||||
Curl_MD5_final_func md5_final; /* Get final result procedure */
|
||||
unsigned int md5_ctxtsize; /* Context structure size */
|
||||
unsigned int md5_resultlen; /* Result length (bytes) */
|
||||
} MD5_params;
|
||||
|
||||
typedef struct {
|
||||
const MD5_params *md5_hash; /* Hash function definition */
|
||||
void *md5_hashctx; /* Hash function context */
|
||||
} MD5_context;
|
||||
|
||||
extern const MD5_params Curl_DIGEST_MD5[1];
|
||||
extern const HMAC_params Curl_HMAC_MD5[1];
|
||||
|
||||
void Curl_md5it(unsigned char *output,
|
||||
const unsigned char *input);
|
||||
|
||||
MD5_context * Curl_MD5_init(const MD5_params *md5params);
|
||||
int Curl_MD5_update(MD5_context *context,
|
||||
const unsigned char *data,
|
||||
unsigned int len);
|
||||
int Curl_MD5_final(MD5_context *context, unsigned char *result);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_MD5_H */
|
||||
|
50
lib/md5.c
50
lib/md5.c
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user