#include "os.h" | |
#include <libsec.h> | |
char* | |
md5pickle(MD5state *s) | |
{ | |
char *p; | |
int m, n; | |
m = 17+4*9+4*((s->blen+3)/3); | |
p = malloc(m); | |
if(p == nil) | |
return p; | |
n = sprint(p, "%16.16llux %8.8ux %8.8ux %8.8ux %8.8ux ", | |
s->len, | |
s->state[0], s->state[1], s->state[2], | |
s->state[3]); | |
enc64(p+n, m-n, s->buf, s->blen); | |
return p; | |
} | |
MD5state* | |
md5unpickle(char *p) | |
{ | |
MD5state *s; | |
s = malloc(sizeof(*s)); | |
if(s == nil) | |
return nil; | |
s->len = strtoull(p, &p, 16); | |
s->state[0] = strtoul(p, &p, 16); | |
s->state[1] = strtoul(p, &p, 16); | |
s->state[2] = strtoul(p, &p, 16); | |
s->state[3] = strtoul(p, &p, 16); | |
s->blen = dec64(s->buf, sizeof(s->buf), p, strlen(p)); | |
s->malloced = 1; | |
s->seeded = 1; | |
return s; | |
} |