| plan 9 kernel history: overview | file list | diff list |
1996/0223/port/devssl.c (diff list | history)
| 1996/0202/sys/src/9/port/devssl.c:10,16 – 1996/0223/sys/src/9/port/devssl.c:10,15 (short | long | prev | next) | ||
| 1995/1213 | #include "../port/error.h" #include <libcrypt.h> | |
| 1996/0202/sys/src/9/port/devssl.c:191,222 – 1996/0223/sys/src/9/port/devssl.c:190,195 | ||
| 1995/1213 | } } | |
| 1995/1217 | Block* sslbread(Chan *c, long n, ulong offset) | |
| 1995/1213 | { | |
| 1996/0202/sys/src/9/port/devssl.c:301,394 – 1996/0223/sys/src/9/port/devssl.c:274,301 | ||
| 1995/1213 | } long | |
| 1995/1218 |
| |
| 1996/0223 | sslread(Chan *c, void *a, long n, ulong offset) | |
| 1995/1213 | { | |
| 1995/1218 |
| |
| 1995/1213 | switch(c->qid.path & ~CHDIR){ | |
| 1996/0223 | case Qdir: return devdirread(c, a, n, digesttab, Ndigesttab, devgen); | |
| 1995/1213 | } | |
| 1996/0223 | b = sslbread(c, n, offset); | |
| 1995/1213 |
| |
| 1996/0202 |
| |
| 1995/1213 |
| |
| 1995/1218 |
| |
| 1995/1213 |
| |
| 1995/1218 |
| |
| 1995/1213 |
| |
| 1995/1218 |
| |
| 1995/1213 |
| |
| 1995/1218 |
| |
| 1995/1213 |
| |
| 1995/1218 |
| |
| 1995/1213 |
| |
| 1995/1218 |
| |
| 1995/1213 |
| |
| 1996/0223 | if(waserror()){ freeb(b); nexterror(); | |
| 1995/1213 | } | |
| 1996/0223 | n = BLEN(b); memmove(a, b->rp, n); freeb(b); poperror(); | |
| 1995/1213 | return n; } | |
| 1996/0202/sys/src/9/port/devssl.c:483,488 – 1996/0223/sys/src/9/port/devssl.c:390,487 | ||
| 1995/1215 | poperror(); return rv; | |
| 1996/0223 | } long sslwrite(Chan *c, void *a, long n, ulong offset) { Dstate *s; Block *b; int m; char *p, *e, buf[32]; switch(c->qid.path & ~CHDIR){ case Qclone: break; default: error(Ebadusefd); } s = c->aux; if(s == 0) error(Ebadusefd); switch(s->state){ case Algwait: /* get algorithm */ if(n >= sizeof(buf)) error(Ebadarg); strncpy(buf, a, n); buf[n] = 0; s->blocklen = 1; s->diglen = 0; if(strcmp(buf, "md5") == 0){ s->hf = md5; s->diglen = MD5dlen; } else if(strcmp(buf, "sha") == 0){ s->hf = sha; s->diglen = SHAdlen; } else if(strcmp(buf, "descbc") == 0){ s->encryptalg = DESCBC; s->blocklen = 8; } else if(strcmp(buf, "desecb") == 0){ s->encryptalg = DESECB; s->blocklen = 8; } else error(Ebadarg); s->state = Fdwait; break; case Fdwait: /* get communications channel */ s->c = buftochan(a, n); s->state = Secretinwait; break; case Secretinwait: /* get secret for incoming messages */ setsecret(s, &s->in, a, n); s->state = Secretoutwait; break; case Secretoutwait: /* get secret for outgoing messages */ setsecret(s, &s->out, a, n); if(s->blocklen != 1){ s->max = (1<<15) - s->diglen; s->max -= s->max % s->blocklen; s->maxpad = (1<<14) - s->diglen; s->maxpad -= s->maxpad % s->blocklen; } else s->maxpad = s->max = (1<<15) - s->diglen; s->state = Established; break; case Established: p = a; for(e = p + n; p < e; p += m){ m = e - p; if(m > s->max) m = s->max; b = allocb(m); if(waserror()){ freeb(b); nexterror(); } memmove(b->wp, p, m); poperror(); b->wp += m; sslbwrite(c, b, offset); } break; default: error(Ebadusefd); } return n; | |
| 1995/1213 | } /* | |