diff options
| author | Michael Brown | 2025-01-20 16:55:13 +0100 |
|---|---|---|
| committer | Michael Brown | 2025-01-20 17:00:44 +0100 |
| commit | cc38d7dd3e379f3f93bcc97390137bbfd4049d60 (patch) | |
| tree | 16b62e9ae4cb6f5c9f962cb92bab4f1d7a7e0a36 /src/include | |
| parent | [crypto] Extract bigint_reduce_supremum() from bigint_mod_exp() (diff) | |
| download | ipxe-cc38d7dd3e379f3f93bcc97390137bbfd4049d60.tar.gz ipxe-cc38d7dd3e379f3f93bcc97390137bbfd4049d60.tar.xz ipxe-cc38d7dd3e379f3f93bcc97390137bbfd4049d60.zip | |
[crypto] Add bigint_ntoa() for transcribing big integers
In debug messages, big integers are currently printed as hex dumps.
This is quite verbose and cumbersome to check against external
sources.
Add bigint_ntoa() to transcribe big integers into a static buffer
(following the model of inet_ntoa(), eth_ntoa(), uuid_ntoa(), etc).
Abbreviate big integers that will not fit within the static buffer,
showing both the most significant and least significant digits in the
transcription. This is generally the most useful form when visually
comparing against external sources (such as test vectors, or results
produced by high-level languages).
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/ipxe/bigint.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/include/ipxe/bigint.h b/src/include/ipxe/bigint.h index 2dd99380d..1cc606b89 100644 --- a/src/include/ipxe/bigint.h +++ b/src/include/ipxe/bigint.h @@ -41,6 +41,17 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); ( sizeof ( *(bigint) ) / sizeof ( (bigint)->element[0] ) ) /** + * Transcribe big integer (for debugging) + * + * @v value Big integer to be transcribed + * @ret string Big integer in string form (may be abbreviated) + */ +#define bigint_ntoa( value ) ( { \ + unsigned int size = bigint_size (value); \ + bigint_ntoa_raw ( (value)->element, size ); \ + } ) + +/** * Initialise big integer * * @v value Big integer to initialise @@ -360,6 +371,8 @@ bigint_msb_is_set_raw ( const bigint_element_t *value0, unsigned int size ) { return ( !! ( value->element[index] & ( 1UL << subindex ) ) ); } +const char * bigint_ntoa_raw ( const bigint_element_t *value0, + unsigned int size ); void bigint_init_raw ( bigint_element_t *value0, unsigned int size, const void *data, size_t len ); void bigint_done_raw ( const bigint_element_t *value0, unsigned int size, |
