version 1.32.2.1, 2005/03/10 17:15:04 |
version 1.39, 2006/03/25 13:17:01 |
|
|
|
/* $OpenBSD$ */ |
/* |
/* |
* Author: Tatu Ylonen <ylo@cs.hut.fi> |
* Author: Tatu Ylonen <ylo@cs.hut.fi> |
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
|
|
*/ |
*/ |
|
|
#include "includes.h" |
#include "includes.h" |
RCSID("$OpenBSD$"); |
|
|
|
#include <openssl/bn.h> |
#include <openssl/bn.h> |
#include "bufaux.h" |
#include "bufaux.h" |
|
|
if (oi != bin_size) { |
if (oi != bin_size) { |
error("buffer_put_bignum_ret: BN_bn2bin() failed: oi %d != bin_size %d", |
error("buffer_put_bignum_ret: BN_bn2bin() failed: oi %d != bin_size %d", |
oi, bin_size); |
oi, bin_size); |
|
xfree(buf); |
return (-1); |
return (-1); |
} |
} |
|
|
|
|
buf[0] = 0x00; |
buf[0] = 0x00; |
/* Get the value of in binary */ |
/* Get the value of in binary */ |
oi = BN_bn2bin(value, buf+1); |
oi = BN_bn2bin(value, buf+1); |
if (oi != bytes-1) { |
if (oi < 0 || (u_int)oi != bytes - 1) { |
error("buffer_put_bignum2_ret: BN_bn2bin() failed: " |
error("buffer_put_bignum2_ret: BN_bn2bin() failed: " |
"oi %d != bin_size %d", oi, bytes); |
"oi %d != bin_size %d", oi, bytes); |
xfree(buf); |
xfree(buf); |
|
|
{ |
{ |
u_int len; |
u_int len; |
u_char *bin; |
u_char *bin; |
|
|
if ((bin = buffer_get_string_ret(buffer, &len)) == NULL) { |
if ((bin = buffer_get_string_ret(buffer, &len)) == NULL) { |
error("buffer_get_bignum2_ret: invalid bignum"); |
error("buffer_get_bignum2_ret: invalid bignum"); |
return (-1); |
return (-1); |
|
|
|
|
if (len > 0 && (bin[0] & 0x80)) { |
if (len > 0 && (bin[0] & 0x80)) { |
error("buffer_get_bignum2_ret: negative numbers not supported"); |
error("buffer_get_bignum2_ret: negative numbers not supported"); |
|
xfree(bin); |
return (-1); |
return (-1); |
} |
} |
if (len > 8 * 1024) { |
if (len > 8 * 1024) { |
error("buffer_get_bignum2_ret: cannot handle BN of size %d", len); |
error("buffer_get_bignum2_ret: cannot handle BN of size %d", len); |
|
xfree(bin); |
return (-1); |
return (-1); |
} |
} |
BN_bin2bn(bin, len, value); |
BN_bin2bn(bin, len, value); |