1 #include "tommath_private.h" 2 #ifdef BN_MP_TO_UNSIGNED_BIN_C 3 /* LibTomMath, multiple-precision integer library -- Tom St Denis 4 * 5 * LibTomMath is a library that provides multiple-precision 6 * integer arithmetic as well as number theoretic functionality. 7 * 8 * The library was designed directly after the MPI library by 9 * Michael Fromberger but has been written from scratch with 10 * additional optimizations in place. 11 * 12 * SPDX-License-Identifier: Unlicense 13 */ 14 15 /* store in unsigned [big endian] format */ mp_to_unsigned_bin(const mp_int * a,unsigned char * b)16int mp_to_unsigned_bin(const mp_int *a, unsigned char *b) 17 { 18 int x, res; 19 mp_int t; 20 21 if ((res = mp_init_copy(&t, a)) != MP_OKAY) { 22 return res; 23 } 24 25 x = 0; 26 while (mp_iszero(&t) == MP_NO) { 27 #ifndef MP_8BIT 28 b[x++] = (unsigned char)(t.dp[0] & 255u); 29 #else 30 b[x++] = (unsigned char)(t.dp[0] | ((t.dp[1] & 1u) << 7)); 31 #endif 32 if ((res = mp_div_2d(&t, 8, &t, NULL)) != MP_OKAY) { 33 mp_clear(&t); 34 return res; 35 } 36 } 37 bn_reverse(b, x); 38 mp_clear(&t); 39 return MP_OKAY; 40 } 41 #endif 42 43 /* ref: $Format:%D$ */ 44 /* git commit: $Format:%H$ */ 45 /* commit time: $Format:%ai$ */ 46