ARM Shanghai IoT Team (Internal) / newMiniTLS-GPL

Fork of MiniTLS-GPL by Donatien Garnier

Committer:
MiniTLS
Date:
Fri Jun 06 10:49:02 2014 +0000
Revision:
0:35aa5be3b78d
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MiniTLS 0:35aa5be3b78d 1 /* TomsFastMath, a fast ISO C bignum library.
MiniTLS 0:35aa5be3b78d 2 *
MiniTLS 0:35aa5be3b78d 3 * This project is meant to fill in where LibTomMath
MiniTLS 0:35aa5be3b78d 4 * falls short. That is speed ;-)
MiniTLS 0:35aa5be3b78d 5 *
MiniTLS 0:35aa5be3b78d 6 * This project is public domain and free for all purposes.
MiniTLS 0:35aa5be3b78d 7 *
MiniTLS 0:35aa5be3b78d 8 * Tom St Denis, tomstdenis@gmail.com
MiniTLS 0:35aa5be3b78d 9 */
MiniTLS 0:35aa5be3b78d 10 #include <tfm.h>
MiniTLS 0:35aa5be3b78d 11
MiniTLS 0:35aa5be3b78d 12 int fp_radix_size(fp_int *a, int radix, int *size)
MiniTLS 0:35aa5be3b78d 13 {
MiniTLS 0:35aa5be3b78d 14 int digs;
MiniTLS 0:35aa5be3b78d 15 fp_int t;
MiniTLS 0:35aa5be3b78d 16 fp_digit d;
MiniTLS 0:35aa5be3b78d 17
MiniTLS 0:35aa5be3b78d 18 *size = 0;
MiniTLS 0:35aa5be3b78d 19
MiniTLS 0:35aa5be3b78d 20 /* check range of the radix */
MiniTLS 0:35aa5be3b78d 21 if (radix < 2 || radix > 64) {
MiniTLS 0:35aa5be3b78d 22 return FP_VAL;
MiniTLS 0:35aa5be3b78d 23 }
MiniTLS 0:35aa5be3b78d 24
MiniTLS 0:35aa5be3b78d 25 /* quick out if its zero */
MiniTLS 0:35aa5be3b78d 26 if (fp_iszero(a) == 1) {
MiniTLS 0:35aa5be3b78d 27 *size = 2;
MiniTLS 0:35aa5be3b78d 28 return FP_OKAY;
MiniTLS 0:35aa5be3b78d 29 }
MiniTLS 0:35aa5be3b78d 30
MiniTLS 0:35aa5be3b78d 31 fp_init_copy(&t, a);
MiniTLS 0:35aa5be3b78d 32
MiniTLS 0:35aa5be3b78d 33 /* if it is negative output a - */
MiniTLS 0:35aa5be3b78d 34 if (t.sign == FP_NEG) {
MiniTLS 0:35aa5be3b78d 35 (*size)++;
MiniTLS 0:35aa5be3b78d 36 t.sign = FP_ZPOS;
MiniTLS 0:35aa5be3b78d 37 }
MiniTLS 0:35aa5be3b78d 38
MiniTLS 0:35aa5be3b78d 39 digs = 0;
MiniTLS 0:35aa5be3b78d 40 while (fp_iszero (&t) == FP_NO) {
MiniTLS 0:35aa5be3b78d 41 fp_div_d (&t, (fp_digit) radix, &t, &d);
MiniTLS 0:35aa5be3b78d 42 (*size)++;
MiniTLS 0:35aa5be3b78d 43 }
MiniTLS 0:35aa5be3b78d 44
MiniTLS 0:35aa5be3b78d 45 /* append a NULL so the string is properly terminated */
MiniTLS 0:35aa5be3b78d 46 (*size)++;
MiniTLS 0:35aa5be3b78d 47 return FP_OKAY;
MiniTLS 0:35aa5be3b78d 48
MiniTLS 0:35aa5be3b78d 49 }
MiniTLS 0:35aa5be3b78d 50
MiniTLS 0:35aa5be3b78d 51 /* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_radix_size.c,v $ */
MiniTLS 0:35aa5be3b78d 52 /* $Revision: 1.1 $ */
MiniTLS 0:35aa5be3b78d 53 /* $Date: 2006/12/31 21:25:53 $ */