mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-11 02:38:09 +09:00
bignum: Add ssh_make_unpadded_bignum_string.
Signed-off-by: Simon Josefsson <simon@josefsson.org> Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org> Reviewed-by: Sahana Prasad <sahana@redhat.com>
This commit is contained in:
@@ -31,6 +31,7 @@ extern "C" {
|
|||||||
|
|
||||||
bignum ssh_make_string_bn(ssh_string string);
|
bignum ssh_make_string_bn(ssh_string string);
|
||||||
ssh_string ssh_make_bignum_string(bignum num);
|
ssh_string ssh_make_bignum_string(bignum num);
|
||||||
|
ssh_string ssh_make_padded_bignum_string(bignum num, size_t pad_len);
|
||||||
void ssh_print_bignum(const char *which, const_bignum num);
|
void ssh_print_bignum(const char *which, const_bignum num);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
22
src/bignum.c
22
src/bignum.c
@@ -27,21 +27,21 @@
|
|||||||
#include "libssh/bignum.h"
|
#include "libssh/bignum.h"
|
||||||
#include "libssh/string.h"
|
#include "libssh/string.h"
|
||||||
|
|
||||||
ssh_string ssh_make_bignum_string(bignum num)
|
static ssh_string make_bignum_string(bignum num, size_t pad_to_len)
|
||||||
{
|
{
|
||||||
ssh_string ptr = NULL;
|
ssh_string ptr = NULL;
|
||||||
size_t pad = 0;
|
size_t pad = 0;
|
||||||
size_t len = bignum_num_bytes(num);
|
size_t len = bignum_num_bytes(num);
|
||||||
size_t bits = bignum_num_bits(num);
|
size_t bits = bignum_num_bits(num);
|
||||||
|
|
||||||
if (len == 0) {
|
if (pad_to_len == 0) {
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If the first bit is set we have a negative number */
|
/* 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++;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
pad = pad_to_len - bignum_num_bytes(num);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_CRYPTO
|
#ifdef DEBUG_CRYPTO
|
||||||
SSH_LOG(SSH_LOG_TRACE, "%zu bits, %zu bytes, %zu padding", bits, len, pad);
|
SSH_LOG(SSH_LOG_TRACE, "%zu bits, %zu bytes, %zu padding", bits, len, pad);
|
||||||
@@ -54,7 +54,7 @@ ssh_string ssh_make_bignum_string(bignum num)
|
|||||||
|
|
||||||
/* We have a negative number so we need a leading zero */
|
/* We have a negative number so we need a leading zero */
|
||||||
if (pad) {
|
if (pad) {
|
||||||
ptr->data[0] = 0;
|
memset(ptr->data, 0, pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
bignum_bn2bin(num, len, ptr->data + pad);
|
bignum_bn2bin(num, len, ptr->data + pad);
|
||||||
@@ -62,6 +62,16 @@ ssh_string ssh_make_bignum_string(bignum num)
|
|||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ssh_string ssh_make_bignum_string(bignum num)
|
||||||
|
{
|
||||||
|
return make_bignum_string(num, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ssh_string ssh_make_padded_bignum_string(bignum num, size_t pad_len)
|
||||||
|
{
|
||||||
|
return make_bignum_string(num, pad_len);
|
||||||
|
}
|
||||||
|
|
||||||
bignum ssh_make_string_bn(ssh_string string)
|
bignum ssh_make_string_bn(ssh_string string)
|
||||||
{
|
{
|
||||||
bignum bn = NULL;
|
bignum bn = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user