md5pickle was documented, but not declared. it didn't work either. (didn't archive state->len, missed out the terminating null for enc64) Reference: /n/sources/patch/applied/md5pickle Date: Mon Apr 5 23:18:24 CES 2004 --- /sys/src/libsec/port/md5pickle.c Mon Apr 5 23:18:24 2004 +++ /sys/src/libsec/port/md5pickle.c Mon Apr 5 23:18:24 2004 @@ -7,11 +7,12 @@ char *p; int m, n; - m = 4*9+4*((s->blen+3)/3); + m = 17+4*9+4*((s->blen+3)/3 + 1); p = malloc(m); if(p == nil) return p; - n = sprint(p, "%8.8ux %8.8ux %8.8ux %8.8ux ", + n = sprint(p, "%16.16ullx %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); @@ -26,6 +27,7 @@ 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); --- /sys/include/libsec.h Mon Apr 5 23:18:24 2004 +++ /sys/include/libsec.h Mon Apr 5 23:18:24 2004 @@ -150,6 +150,8 @@ DigestState* sha1(uchar*, ulong, uchar*, DigestState*); DigestState* hmac_md5(uchar*, ulong, uchar*, ulong, uchar*, DigestState*); DigestState* hmac_sha1(uchar*, ulong, uchar*, ulong, uchar*, DigestState*); +char* md5pickle(MD5state*); +MD5state* md5unpickle(char*); char* sha1pickle(SHA1state*); SHA1state* sha1unpickle(char*);