summaryrefslogtreecommitdiffhomepage
path: root/libtommath/bn_mp_import.c
diff options
context:
space:
mode:
authorSteffen Jaeckel <s_jaeckel@gmx.de>2019-09-16 15:50:38 +0200
committerMatt Johnston <matt@ucc.asn.au>2019-09-16 21:50:38 +0800
commit615ed4e46a52b6bfe0bfc581b8c2fbcc6cc488d1 (patch)
tree12b2ba29ae4c42fc65d64d43968c5d03ab3f4452 /libtommath/bn_mp_import.c
parentfa116e983b4931010e1082dd5c8bf38bbc77718c (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_import.c')
-rw-r--r--libtommath/bn_mp_import.c87
1 files changed, 41 insertions, 46 deletions
diff --git a/libtommath/bn_mp_import.c b/libtommath/bn_mp_import.c
index 2e26261..fb74611 100644
--- a/libtommath/bn_mp_import.c
+++ b/libtommath/bn_mp_import.c
@@ -1,4 +1,4 @@
-#include <tommath_private.h>
+#include "tommath_private.h"
#ifdef BN_MP_IMPORT_C
/* LibTomMath, multiple-precision integer library -- Tom St Denis
*
@@ -9,65 +9,60 @@
* Michael Fromberger but has been written from scratch with
* additional optimizations in place.
*
- * The library is free for all purposes without any express
- * guarantee it works.
- *
- * Tom St Denis, tstdenis82@gmail.com, http://libtom.org
+ * SPDX-License-Identifier: Unlicense
*/
/* based on gmp's mpz_import.
* see http://gmplib.org/manual/Integer-Import-and-Export.html
*/
-int mp_import(mp_int* rop, size_t count, int order, size_t size,
- int endian, size_t nails, const void* op) {
- int result;
- size_t odd_nails, nail_bytes, i, j;
- unsigned char odd_nail_mask;
+int mp_import(mp_int *rop, size_t count, int order, size_t size,
+ int endian, size_t nails, const void *op)
+{
+ int result;
+ size_t odd_nails, nail_bytes, i, j;
+ unsigned char odd_nail_mask;
+
+ mp_zero(rop);
- mp_zero(rop);
+ if (endian == 0) {
+ union {
+ unsigned int i;
+ char c[4];
+ } lint;
+ lint.i = 0x01020304;
- if (endian == 0) {
- union {
- unsigned int i;
- char c[4];
- } lint;
- lint.i = 0x01020304;
-
- endian = (lint.c[0] == 4) ? -1 : 1;
- }
+ endian = (lint.c[0] == '\x04') ? -1 : 1;
+ }
- odd_nails = (nails % 8);
- odd_nail_mask = 0xff;
- for (i = 0; i < odd_nails; ++i) {
- odd_nail_mask ^= (1 << (7 - i));
- }
- nail_bytes = nails / 8;
+ odd_nails = (nails % 8u);
+ odd_nail_mask = 0xff;
+ for (i = 0; i < odd_nails; ++i) {
+ odd_nail_mask ^= (unsigned char)(1u << (7u - i));
+ }
+ nail_bytes = nails / 8u;
- for (i = 0; i < count; ++i) {
- for (j = 0; j < (size - nail_bytes); ++j) {
- unsigned char byte = *(
- (unsigned char*)op +
- (((order == 1) ? i : ((count - 1) - i)) * size) +
- ((endian == 1) ? (j + nail_bytes) : (((size - 1) - j) - nail_bytes))
- );
+ for (i = 0; i < count; ++i) {
+ for (j = 0; j < (size - nail_bytes); ++j) {
+ unsigned char byte = *((unsigned char *)op +
+ (((order == 1) ? i : ((count - 1u) - i)) * size) +
+ ((endian == 1) ? (j + nail_bytes) : (((size - 1u) - j) - nail_bytes)));
- if (
- (result = mp_mul_2d(rop, ((j == 0) ? (8 - odd_nails) : 8), rop)) != MP_OKAY) {
- return result;
- }
+ if ((result = mp_mul_2d(rop, (j == 0u) ? (int)(8u - odd_nails) : 8, rop)) != MP_OKAY) {
+ return result;
+ }
- rop->dp[0] |= (j == 0) ? (byte & odd_nail_mask) : byte;
- rop->used += 1;
- }
- }
+ rop->dp[0] |= (j == 0u) ? (mp_digit)(byte & odd_nail_mask) : (mp_digit)byte;
+ rop->used += 1;
+ }
+ }
- mp_clamp(rop);
+ mp_clamp(rop);
- return MP_OKAY;
+ return MP_OKAY;
}
#endif
-/* ref: $Format:%D$ */
-/* git commit: $Format:%H$ */
-/* commit time: $Format:%ai$ */
+/* ref: HEAD -> master, tag: v1.1.0 */
+/* git commit: 08549ad6bc8b0cede0b357a9c341c5c6473a9c55 */
+/* commit time: 2019-01-28 20:32:32 +0100 */