diff options
author | Steffen Jaeckel <s_jaeckel@gmx.de> | 2019-09-16 15:50:38 +0200 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2019-09-16 21:50:38 +0800 |
commit | 615ed4e46a52b6bfe0bfc581b8c2fbcc6cc488d1 (patch) | |
tree | 12b2ba29ae4c42fc65d64d43968c5d03ab3f4452 /libtommath/bn_mp_get_bit.c | |
parent | fa116e983b4931010e1082dd5c8bf38bbc77718c (diff) |
update ltm to 1.1.0 and enable FIPS 186.4 compliant key-generation (#79)
* make key-generation compliant to FIPS 186.4
* fix includes in tommath_class.h
* update fuzzcorpus instead of error-out
* fixup fuzzing make-targets
* update Makefile.in
* apply necessary patches to ltm sources
* clean-up not required ltm files
* update to vanilla ltm 1.1.0
this already only contains the required files
* remove set/get double
Diffstat (limited to 'libtommath/bn_mp_get_bit.c')
-rw-r--r-- | libtommath/bn_mp_get_bit.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/libtommath/bn_mp_get_bit.c b/libtommath/bn_mp_get_bit.c new file mode 100644 index 0000000..fc2d76e --- /dev/null +++ b/libtommath/bn_mp_get_bit.c @@ -0,0 +1,54 @@ +#include "tommath_private.h" +#ifdef BN_MP_GET_BIT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * SPDX-License-Identifier: Unlicense + */ + +/* Checks the bit at position b and returns MP_YES + if the bit is 1, MP_NO if it is 0 and MP_VAL + in case of error */ +int mp_get_bit(const mp_int *a, int b) +{ + int limb; + mp_digit bit, isset; + + if (b < 0) { + return MP_VAL; + } + + limb = b / DIGIT_BIT; + + /* + * Zero is a special value with the member "used" set to zero. + * Needs to be tested before the check for the upper boundary + * otherwise (limb >= a->used) would be true for a = 0 + */ + + if (mp_iszero(a) != MP_NO) { + return MP_NO; + } + + if (limb >= a->used) { + return MP_VAL; + } + + bit = (mp_digit)(1) << (b % DIGIT_BIT); + + isset = a->dp[limb] & bit; + return (isset != 0u) ? MP_YES : MP_NO; +} + +#endif + +/* ref: HEAD -> master, tag: v1.1.0 */ +/* git commit: 08549ad6bc8b0cede0b357a9c341c5c6473a9c55 */ +/* commit time: 2019-01-28 20:32:32 +0100 */ |