version 1.17.4.1, 2002/03/07 17:37:46 |
version 1.19, 2001/12/19 07:18:56 |
|
|
/* |
/* |
* Retrieves an BIGNUM from the buffer. |
* Retrieves an BIGNUM from the buffer. |
*/ |
*/ |
void |
int |
buffer_get_bignum(Buffer *buffer, BIGNUM *value) |
buffer_get_bignum(Buffer *buffer, BIGNUM *value) |
{ |
{ |
int bits, bytes; |
int bits, bytes; |
|
|
bytes = (bits + 7) / 8; |
bytes = (bits + 7) / 8; |
if (buffer_len(buffer) < bytes) |
if (buffer_len(buffer) < bytes) |
fatal("buffer_get_bignum: input buffer too small"); |
fatal("buffer_get_bignum: input buffer too small"); |
bin = buffer_ptr(buffer); |
bin = (u_char *) buffer_ptr(buffer); |
BN_bin2bn(bin, bytes, value); |
BN_bin2bn(bin, bytes, value); |
buffer_consume(buffer, bytes); |
buffer_consume(buffer, bytes); |
|
|
|
return 2 + bytes; |
} |
} |
|
|
/* |
/* |
|
|
xfree(buf); |
xfree(buf); |
} |
} |
|
|
void |
int |
buffer_get_bignum2(Buffer *buffer, BIGNUM *value) |
buffer_get_bignum2(Buffer *buffer, BIGNUM *value) |
{ |
{ |
/**XXX should be two's-complement */ |
/**XXX should be two's-complement */ |
int len; |
int len; |
u_char *bin = buffer_get_string(buffer, (u_int *)&len); |
u_char *bin = (u_char *)buffer_get_string(buffer, (u_int *)&len); |
BN_bin2bn(bin, len, value); |
BN_bin2bn(bin, len, value); |
xfree(bin); |
xfree(bin); |
|
return len; |
} |
} |
|
|
/* |
/* |
|
|
* will be stored there. A null character will be automatically appended |
* will be stored there. A null character will be automatically appended |
* to the returned string, and is not counted in length. |
* to the returned string, and is not counted in length. |
*/ |
*/ |
void * |
char * |
buffer_get_string(Buffer *buffer, u_int *length_ptr) |
buffer_get_string(Buffer *buffer, u_int *length_ptr) |
{ |
{ |
u_int len; |
u_int len; |
u_char *value; |
char *value; |
/* Get the length. */ |
/* Get the length. */ |
len = buffer_get_int(buffer); |
len = buffer_get_int(buffer); |
if (len > 256 * 1024) |
if (len > 256 * 1024) |