if ((b-i) & 1) bn[j][w-i/2] |= byte;
if (i & 1) bn[j][1+i/2] |= byte<<8;
int makekey(unsigned char *data, struct RSAKey *result,	    unsigned char **keystr) {    unsigned char *p = data;    Bignum bn[2];    int i, j;    int w, b;    result->bits = 0;    for (i=0; i<4; i++)	result->bits = (result->bits << 8) + *p++;    for (j=0; j<2; j++) {	w = 0;	for (i=0; i<2; i++)	    w = (w << 8) + *p++;	result->bytes = b = (w+7)/8;   /* bits -> bytes */	w = (w+15)/16;		       /* bits -> words */	bn[j] = newbn(w);	if (keystr) *keystr = p;       /* point at key string, second time */	for (i=1; i<=w; i++)	    bn[j][i] = 0;	for (i=0; i<b; i++) {	    unsigned char byte = *p++;	    if ((b-i) & 1)		bn[j][w-i/2] |= byte;	    else		bn[j][w-i/2] |= byte<<8;	}	debug(bn[j]);    }    result->exponent = bn[0];    result->modulus = bn[1];    return p - data;}