plan 9 kernel history: overview | file list | diff list

1997/0327/port/devssl.c (diff list | history)

1996/1029/sys/src/9/port/devssl.c:108,1191997/0327/sys/src/9/port/devssl.c:108,114 (short | long | prev | next)
1996/1029    
static Dstate*	dsclone(Chan *c); 
static void	dsnew(Chan *c, Dstate **); 
1995/1217    
 
1995/1213    
void 
sslreset(void) 
{ 
} 
                 
1996/1029    
int 
1997/0327    
static int 
1996/1029    
sslgen(Chan *c, Dirtab *d, int nd, int s, Dir *dp) 
{ 
	Qid q; 
1996/1029/sys/src/9/port/devssl.c:173,1791997/0327/sys/src/9/port/devssl.c:168,174
1996/1029    
	return -1; 
} 
 
1995/1213    
void 
1997/0327    
static void 
1995/1213    
sslinit(void) 
{ 
1996/1029    
	if((dstate = malloc(sizeof(Dstate*) * maxdstate)) == 0) 
1996/1029/sys/src/9/port/devssl.c:180,1861997/0327/sys/src/9/port/devssl.c:175,181
1996/1029    
		panic("sslinit"); 
1995/1213    
} 
 
Chan * 
1997/0327    
static Chan* 
1996/0531    
sslattach(void *spec) 
1995/1213    
{ 
1996/1029    
	Chan *c; 
1996/1029/sys/src/9/port/devssl.c:191,2151997/0327/sys/src/9/port/devssl.c:186,204
1996/1029    
	return c; 
1995/1213    
} 
 
Chan * 
sslclone(Chan *c, Chan *nc) 
{ 
	return devclone(c, nc); 
} 
                 
int 
1997/0327    
static int 
1995/1213    
sslwalk(Chan *c, char *name) 
{ 
1996/1029    
	return devwalk(c, name, 0, 0, sslgen); 
1995/1213    
} 
 
void 
1997/0327    
static void 
1995/1213    
sslstat(Chan *c, char *db) 
{ 
1996/1029    
	devstat(c, db, 0, 0, sslgen); 
1995/1213    
} 
 
Chan * 
1997/0327    
static Chan* 
1995/1213    
sslopen(Chan *c, int omode) 
{ 
1996/1029    
	Dstate *s, **pp; 
1996/1029/sys/src/9/port/devssl.c:273,2961997/0327/sys/src/9/port/devssl.c:262,268
1996/1029    
	return c; 
1995/1213    
} 
 
void 
sslcreate(Chan *c, char *name, int omode, ulong perm) 
{ 
1996/0531    
	USED(c); 
	USED(name); 
	USED(omode); 
	USED(perm); 
1995/1213    
	error(Eperm); 
} 
                 
void 
sslremove(Chan *c) 
{ 
	USED(c); 
	error(Eperm); 
} 
                 
void 
1997/0327    
static void 
1995/1213    
sslwstat(Chan *c, char *dp) 
{ 
1996/1029    
	Dir d; 
1996/1029/sys/src/9/port/devssl.c:308,3141997/0327/sys/src/9/port/devssl.c:280,286
1996/1029    
	s->perm = d.mode; 
1995/1213    
} 
 
void 
1997/0327    
static void 
1995/1213    
sslclose(Chan *c) 
{ 
	Dstate *s; 
1996/1029/sys/src/9/port/devssl.c:335,3411997/0327/sys/src/9/port/devssl.c:307,313
1996/1029    
 
		sslhangup(s); 
1995/1213    
		if(s->c) 
1996/0601    
			close(s->c); 
1997/0327    
			cclose(s->c); 
1995/1213    
		if(s->in.secret) 
			free(s->in.secret); 
		if(s->out.secret) 
1996/1029/sys/src/9/port/devssl.c:349,3641997/0327/sys/src/9/port/devssl.c:321,326
1995/1213    
	} 
} 
 
1996/1029    
static int 
blen(Block *bp) 
{ 
	int i = 0; 
                 
	for(; bp; bp = bp->next) 
		i += BLEN(bp); 
	return i; 
} 
                 
/* 
 *  make sure we have at least 'n' bytes in list 'l' 
 */ 
1996/1029/sys/src/9/port/devssl.c:377,3831997/0327/sys/src/9/port/devssl.c:339,345
1996/1029    
	} 
 
	while(sofar < n){ 
		bl = (*devtab[s->c->type].bread)(s->c, Maxdmsg, 0); 
1997/0327    
		bl = devtab[s->c->type]->bread(s->c, Maxdmsg, 0); 
1996/1029    
		if(bl == 0) 
			error(Ehungup); 
		*l = bl; 
1996/1029/sys/src/9/port/devssl.c:419,4381997/0327/sys/src/9/port/devssl.c:381,386
1996/1029    
	} 
} 
 
/*  
 *  free a list of blocks 
 */ 
void 
freeblist(Block *b) 
{ 
	Block *next; 
                 
	for(; b != 0; b = next){ 
		next = b->next; 
		freeb(b); 
	} 
} 
                 
/* 
 *  remove at most n bytes from the queue, if discard is set 
 *  dump the remainder 
1996/1029/sys/src/9/port/devssl.c:481,4871997/0327/sys/src/9/port/devssl.c:429,435
1996/1029    
	return first; 
} 
 
1995/1217    
Block* 
1997/0327    
static Block* 
1995/1217    
sslbread(Chan *c, long n, ulong offset) 
1995/1213    
{ 
1996/0531    
	volatile struct { Dstate *s; } s; 
1996/1029/sys/src/9/port/devssl.c:560,5661997/0327/sys/src/9/port/devssl.c:508,514
1995/1217    
	return b; 
1995/1213    
} 
 
long 
1997/0327    
static long 
1996/0223    
sslread(Chan *c, void *a, long n, ulong offset) 
1995/1213    
{ 
1996/0531    
	volatile struct { Block *b; } b; 
1996/1029/sys/src/9/port/devssl.c:627,6331997/0327/sys/src/9/port/devssl.c:575,581
1996/1029    
/* 
1995/1215    
 *  use SSL record format, add in count and digest or encrypt 
 */ 
long 
1997/0327    
static long 
1995/1215    
sslbwrite(Chan *c, Block *b, ulong offset) 
1995/1213    
{ 
1996/0531    
	volatile struct { Dstate *s; } s; 
1996/1029/sys/src/9/port/devssl.c:718,7241997/0327/sys/src/9/port/devssl.c:666,672
1996/1029    
		} 
1995/1213    
 
1996/1029    
		m = BLEN(nb); 
		(*devtab[s.s->c->type].bwrite)(s.s->c, nb, s.s->c->offset); 
1997/0327    
		devtab[s.s->c->type]->bwrite(s.s->c, nb, s.s->c->offset); 
1996/1029    
		s.s->c->offset += m; 
1995/1215    
	} 
1996/0531    
	qunlock(&s.s->out.q); 
1996/1029/sys/src/9/port/devssl.c:776,7821997/0327/sys/src/9/port/devssl.c:724,730
1996/1029    
	setupRC4state(w->state, w->secret, w->slen); 
} 
 
1996/0223    
long 
1997/0327    
static long 
1996/0223    
sslwrite(Chan *c, void *a, long n, ulong offset) 
{ 
1996/1029    
	volatile struct { Dstate *s; } s; 
1996/1029/sys/src/9/port/devssl.c:930,9351997/0327/sys/src/9/port/devssl.c:878,900
1996/1029    
	return n; 
1995/1213    
} 
 
1997/0327    
Dev ssldevtab = { 
	devreset, 
	sslinit, 
	sslattach, 
	devclone, 
	sslwalk, 
	sslstat, 
	sslopen, 
	devcreate, 
	sslclose, 
	sslread, 
	sslbread, 
	sslwrite, 
	sslbwrite, 
	devremove, 
	sslwstat, 
}; 
1995/1213    
 
1995/1217    
static Block* 
encryptb(Dstate *s, Block *b, int offset) 
1996/1029/sys/src/9/port/devssl.c:1039,10461997/0327/sys/src/9/port/devssl.c:1004,1011
1995/1215    
	n = BLEN(b) - h; 
1995/1213    
 
1995/1215    
	/* hash secret + message */ 
	(*s->hf)(w->secret, w->slen, 0, &ss); 
1995/1218    
	(*s->hf)(b->rp + h, n, 0, &ss); 
1997/0327    
	s->hf(w->secret, w->slen, 0, &ss); 
	s->hf(b->rp + h, n, 0, &ss); 
1995/1213    
 
1995/1215    
	/* hash message id */ 
	p = msgid; 
1996/1029/sys/src/9/port/devssl.c:1049,10551997/0327/sys/src/9/port/devssl.c:1014,1020
1995/1215    
	*p++ = n>>16; 
	*p++ = n>>8; 
	*p = n; 
1995/1218    
	(*s->hf)(msgid, 4, b->rp + offset, &ss); 
1997/0327    
	s->hf(msgid, 4, b->rp + offset, &ss); 
1995/1217    
 
1995/1218    
	return b; 
1995/1215    
} 
1996/1029/sys/src/9/port/devssl.c:1070,10761997/0327/sys/src/9/port/devssl.c:1035,1041
1995/1217    
	memset(&ss, 0, sizeof(ss)); 
 
1996/1029    
	/* hash secret */ 
1995/1217    
	(*s->hf)(w->secret, w->slen, 0, &ss); 
1997/0327    
	s->hf(w->secret, w->slen, 0, &ss); 
1995/1217    
 
1996/1029    
	/* hash message */ 
	h = s->diglen; 
1996/1029/sys/src/9/port/devssl.c:1078,10841997/0327/sys/src/9/port/devssl.c:1043,1049
1996/1029    
		n = BLEN(b) - h; 
		if(n < 0) 
			panic("checkdigestb"); 
		(*s->hf)(b->rp + h, n, 0, &ss); 
1997/0327    
		s->hf(b->rp + h, n, 0, &ss); 
1996/1029    
		h = 0; 
	} 
 
1996/1029/sys/src/9/port/devssl.c:1089,10951997/0327/sys/src/9/port/devssl.c:1054,1060
1995/1217    
	*p++ = n>>16; 
	*p++ = n>>8; 
	*p = n; 
1995/1218    
	(*s->hf)(msgid, 4, digest, &ss); 
1997/0327    
	s->hf(msgid, 4, digest, &ss); 
1995/1217    
 
1996/1029    
	if(memcmp(digest, inb->rp, s->diglen) != 0) 
1995/1217    
		error("bad digest"); 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)