Loading lib/curl_md5.h +29 −0 Original line number Diff line number Diff line Loading @@ -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 */ lib/md5.c +50 −0 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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
lib/curl_md5.h +29 −0 Original line number Diff line number Diff line Loading @@ -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 */
lib/md5.c +50 −0 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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 */