1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-12-02 01:17:52 +03:00

dh: Use ssh_string_new() in make_bignum_string().

This commit is contained in:
Andreas Schneider
2011-09-08 19:58:59 +02:00
parent 81017b0fc2
commit 77e71ae3b5

View File

@@ -346,8 +346,11 @@ ssh_string make_bignum_string(bignum num) {
unsigned int len = bignum_num_bytes(num); unsigned int len = bignum_num_bytes(num);
unsigned int bits = bignum_num_bits(num); unsigned int bits = bignum_num_bits(num);
/* Remember if the fist bit is set, it is considered as a if (len == 0) {
* negative number. So 0's must be appended */ return NULL;
}
/* If the first bit is set we have a negative number */
if (!(bits % 8) && bignum_is_bit_set(num, bits - 1)) { if (!(bits % 8) && bignum_is_bit_set(num, bits - 1)) {
pad++; pad++;
} }
@@ -355,12 +358,13 @@ ssh_string make_bignum_string(bignum num) {
#ifdef DEBUG_CRYPTO #ifdef DEBUG_CRYPTO
fprintf(stderr, "%d bits, %d bytes, %d padding\n", bits, len, pad); fprintf(stderr, "%d bits, %d bytes, %d padding\n", bits, len, pad);
#endif /* DEBUG_CRYPTO */ #endif /* DEBUG_CRYPTO */
/* TODO: fix that crap !! */
ptr = malloc(sizeof(struct ssh_string_struct) + len + pad); ptr = ssh_string_new(len + pad);
if (ptr == NULL) { if (ptr == NULL) {
return NULL; return NULL;
} }
ptr->size = htonl(len + pad);
/* We have a negative number so we need a leading zero */
if (pad) { if (pad) {
ptr->data[0] = 0; ptr->data[0] = 0;
} }