comparison libtommath/bn_mp_to_unsigned_bin.c @ 1655:f52919ffd3b1

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
author Steffen Jaeckel <s_jaeckel@gmx.de>
date Mon, 16 Sep 2019 15:50:38 +0200
parents 8bba51a55704
children
comparison
equal deleted inserted replaced
1654:cc0fc5131c5c 1655:f52919ffd3b1
1 #include <tommath_private.h> 1 #include "tommath_private.h"
2 #ifdef BN_MP_TO_UNSIGNED_BIN_C 2 #ifdef BN_MP_TO_UNSIGNED_BIN_C
3 /* LibTomMath, multiple-precision integer library -- Tom St Denis 3 /* LibTomMath, multiple-precision integer library -- Tom St Denis
4 * 4 *
5 * LibTomMath is a library that provides multiple-precision 5 * LibTomMath is a library that provides multiple-precision
6 * integer arithmetic as well as number theoretic functionality. 6 * integer arithmetic as well as number theoretic functionality.
7 * 7 *
8 * The library was designed directly after the MPI library by 8 * The library was designed directly after the MPI library by
9 * Michael Fromberger but has been written from scratch with 9 * Michael Fromberger but has been written from scratch with
10 * additional optimizations in place. 10 * additional optimizations in place.
11 * 11 *
12 * The library is free for all purposes without any express 12 * SPDX-License-Identifier: Unlicense
13 * guarantee it works.
14 *
15 * Tom St Denis, [email protected], http://libtom.org
16 */ 13 */
17 14
18 /* store in unsigned [big endian] format */ 15 /* store in unsigned [big endian] format */
19 int mp_to_unsigned_bin (mp_int * a, unsigned char *b) 16 int mp_to_unsigned_bin(const mp_int *a, unsigned char *b)
20 { 17 {
21 int x, res; 18 int x, res;
22 mp_int t; 19 mp_int t;
23 20
24 if ((res = mp_init_copy (&t, a)) != MP_OKAY) { 21 if ((res = mp_init_copy(&t, a)) != MP_OKAY) {
25 return res; 22 return res;
26 } 23 }
27 24
28 x = 0; 25 x = 0;
29 while (mp_iszero (&t) == MP_NO) { 26 while (mp_iszero(&t) == MP_NO) {
30 #ifndef MP_8BIT 27 #ifndef MP_8BIT
31 b[x++] = (unsigned char) (t.dp[0] & 255); 28 b[x++] = (unsigned char)(t.dp[0] & 255u);
32 #else 29 #else
33 b[x++] = (unsigned char) (t.dp[0] | ((t.dp[1] & 0x01) << 7)); 30 b[x++] = (unsigned char)(t.dp[0] | ((t.dp[1] & 1u) << 7));
34 #endif 31 #endif
35 if ((res = mp_div_2d (&t, 8, &t, NULL)) != MP_OKAY) { 32 if ((res = mp_div_2d(&t, 8, &t, NULL)) != MP_OKAY) {
36 mp_clear (&t); 33 mp_clear(&t);
37 return res; 34 return res;
38 } 35 }
39 } 36 }
40 bn_reverse (b, x); 37 bn_reverse(b, x);
41 mp_clear (&t); 38 mp_clear(&t);
42 return MP_OKAY; 39 return MP_OKAY;
43 } 40 }
44 #endif 41 #endif
45 42
46 /* ref: $Format:%D$ */ 43 /* ref: HEAD -> master, tag: v1.1.0 */
47 /* git commit: $Format:%H$ */ 44 /* git commit: 08549ad6bc8b0cede0b357a9c341c5c6473a9c55 */
48 /* commit time: $Format:%ai$ */ 45 /* commit time: 2019-01-28 20:32:32 +0100 */