void gt_md5_encoder_finish(GtMD5Encoder *enc, unsigned char *output, char *outstr) { gt_assert(enc && output); if (enc->status != 2) { if (enc->len > 0) { digest(enc->wbuff, enc->d); enc->d[0]+=enc->d_old[0]; enc->d[1]+=enc->d_old[1]; enc->d[2]+=enc->d_old[2]; enc->d[3]+=enc->d_old[3]; } enc->d_old[0]=enc->d[0]; enc->d_old[1]=enc->d[1]; enc->d_old[2]=enc->d[2]; enc->d_old[3]=enc->d[3]; enc->status = converte(enc->wbuff, NULL, 0, enc->status); gt_assert(enc->status == 2); } put_length(enc->wbuff, enc->len); digest(enc->wbuff, enc->d); enc->d[0]+=enc->d_old[0]; enc->d[1]+=enc->d_old[1]; enc->d[2]+=enc->d_old[2]; enc->d[3]+=enc->d_old[3]; word32tobytes(enc->d, (char*) output); if (outstr) { snprintf(outstr, 33, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", output[0], output[1], output[2], output[3], output[4], output[5], output[6], output[7], output[8], output[9], output[10], output[11], output[12], output[13], output[14], output[15]); } }
void md5 (const char *message, long len, char *output) { WORD32 d[4]; int status = 0; long i = 0; inic_digest(d); while (status != 2) { WORD32 d_old[4]; WORD32 wbuff[16]; int numbytes = (len-i >= 64) ? 64 : len-i; /*salva os valores do vetor digest*/ d_old[0]=d[0]; d_old[1]=d[1]; d_old[2]=d[2]; d_old[3]=d[3]; status = converte(wbuff, message+i, numbytes, status); if (status == 2) put_length(wbuff, len); digest(wbuff, d); d[0]+=d_old[0]; d[1]+=d_old[1]; d[2]+=d_old[2]; d[3]+=d_old[3]; i += numbytes; } word32tobytes(d, output); }
static void md5_stream(lua_State *L, char *output) { WORD32 d[4]; char tmp[64]; size_t lastlen = 0; size_t len = 0; size_t total; lua_pushnil(L); // read_next would pop 1 const char * message = read_next(L, &len); if (message == NULL) { return md5("", 0, output); // empty string } total = len; inic_digest(d); do { lastlen = md5_cat(tmp, lastlen, message, len, d); message = read_next(L, &len); total += len; } while (message != NULL); md5_close(tmp, lastlen, d, total); word32tobytes(d, output); }
static void md5 (const char *message, size_t len, char * output) { WORD32 d[4]; inic_digest(d); md5_close(message, len, d, len); word32tobytes(d, output); }