ref: 373723d4f608c43bc5020cc32f35fa5e43503e73
dir: /sys/src/libsec/port/sha1pickle.c/
#include "os.h" #include <libsec.h> char* sha1pickle(SHA1state *s) { char *p; int m, n; m = 5*9+4*((s->blen+3)/3); p = malloc(m); if(p == nil) return p; n = sprint(p, "%8.8ux %8.8ux %8.8ux %8.8ux %8.8ux ", s->state[0], s->state[1], s->state[2], s->state[3], s->state[4]); enc64(p+n, m-n, s->buf, s->blen); return p; } SHA1state* sha1unpickle(char *p) { SHA1state *s; s = malloc(sizeof(*s)); if(s == nil) return nil; 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->state[4] = strtoul(p, &p, 16); s->blen = dec64(s->buf, sizeof(s->buf), p, strlen(p)); s->malloced = 1; s->seeded = 1; return s; }