-/*
- * Stores an BIGNUM in the buffer in SSH2 format.
- */
-void
-buffer_put_bignum2(Buffer *buffer, BIGNUM *value)
-{
- int bytes = BN_num_bytes(value) + 1;
- u_char *buf = xmalloc(bytes);
- int oi;
- int hasnohigh = 0;
- buf[0] = '\0';
- /* Get the value of in binary */
- oi = BN_bn2bin(value, buf+1);
- if (oi != bytes-1)
- fatal("buffer_put_bignum: BN_bn2bin() failed: oi %d != bin_size %d",
- oi, bytes);
- hasnohigh = (buf[1] & 0x80) ? 0 : 1;
- if (value->neg) {
- /**XXX should be two's-complement */
- int i, carry;
- u_char *uc = buf;
- log("negativ!");
- for (i = bytes-1, carry = 1; i>=0; i--) {
- uc[i] ^= 0xff;
- if (carry)
- carry = !++uc[i];
- }
- }
- buffer_put_string(buffer, buf+hasnohigh, bytes-hasnohigh);
- memset(buf, 0, bytes);
- xfree(buf);