comparison bn_mp_cnt_lsb.c @ 2:86e0b50a9b58 libtommath-orig ltm-0.30-orig

ltm 0.30 orig import
author Matt Johnston <matt@ucc.asn.au>
date Mon, 31 May 2004 18:25:22 +0000
parents
children d29b64170cf0
comparison
equal deleted inserted replaced
-1:000000000000 2:86e0b50a9b58
1 /* LibTomMath, multiple-precision integer library -- Tom St Denis
2 *
3 * LibTomMath is a library that provides multiple-precision
4 * integer arithmetic as well as number theoretic functionality.
5 *
6 * The library was designed directly after the MPI library by
7 * Michael Fromberger but has been written from scratch with
8 * additional optimizations in place.
9 *
10 * The library is free for all purposes without any express
11 * guarantee it works.
12 *
13 * Tom St Denis, [email protected], http://math.libtomcrypt.org
14 */
15 #include <tommath.h>
16
17 static const int lnz[16] = {
18 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
19 };
20
21 /* Counts the number of lsbs which are zero before the first zero bit */
22 int mp_cnt_lsb(mp_int *a)
23 {
24 int x;
25 mp_digit q, qq;
26
27 /* easy out */
28 if (mp_iszero(a) == 1) {
29 return 0;
30 }
31
32 /* scan lower digits until non-zero */
33 for (x = 0; x < a->used && a->dp[x] == 0; x++);
34 q = a->dp[x];
35 x *= DIGIT_BIT;
36
37 /* now scan this digit until a 1 is found */
38 if ((q & 1) == 0) {
39 do {
40 qq = q & 15;
41 x += lnz[qq];
42 q >>= 4;
43 } while (qq == 0);
44 }
45 return x;
46 }
47