diff --git a/bn.c b/bn.c index 6526ea7..2c204cb 100644 --- a/bn.c +++ b/bn.c @@ -147,14 +147,22 @@ void bignum_to_string(struct bn* n, char* str, int nbytes) j += 1; } - /* Move string j places ahead, effectively skipping leading zeros */ - for (i = 0; i < (nbytes - j); ++i) + /* Detect whether bignum is zero or not */ + if (j == 2*BIG_NUM_BYTES) { - str[i] = str[i + j]; + str[0] = '0'; + str[1] = 0; + } + else + { + /* Move string j places ahead, effectively skipping leading zeros */ + for (i = 0; i < (nbytes - j); ++i) + { + str[i] = str[i + j]; + } + /* Zero-terminate string */ + str[i] = 0; } - - /* Zero-terminate string */ - str[i] = 0; } diff --git a/bn.h b/bn.h index 940ffe7..6fd4872 100644 --- a/bn.h +++ b/bn.h @@ -29,8 +29,12 @@ There may well be room for performance-optimizations and improvements. #define WORD_SIZE 4 #endif +#ifndef BIG_NUM_BYTES + #define BIG_NUM_BYTES 128 +#endif + /* Size of big-numbers in bytes */ -#define BN_ARRAY_SIZE (128 / WORD_SIZE) +#define BN_ARRAY_SIZE (BIG_NUM_BYTES / WORD_SIZE) /* Here comes the compile-time specialization for how large the underlying array size should be. */