Index: mpnumber.c =================================================================== RCS file: /cvsroot/beecrypt/beecrypt/mpnumber.c,v retrieving revision 1.12 diff -u -r1.12 mpnumber.c --- mpnumber.c 7 Jan 2006 08:48:07 -0000 1.12 +++ mpnumber.c 9 Nov 2009 08:54:30 -0000 @@ -227,16 +227,16 @@ size_t sigbits = mpbits(n->size, n->data); size_t offset = 0; - if (sigbits < bits) + if (sigbits <= bits) { /* no need to truncate */ return sigbits; } else { - size_t allbits = MP_BITS_TO_WORDS(n->size + MP_WBITS - 1); + size_t allbits = MP_WORDS_TO_BITS(n->size); - while ((allbits - bits) > MP_WBITS) + while ((allbits - bits) >= MP_WBITS) { /* zero a word */ n->data[offset++] = 0; @@ -247,19 +247,12 @@ { /* mask the next word */ n->data[offset] &= (MP_ALLMASK >> (MP_WBITS - bits)); - - /* resize the number */ - mpnsize(n, n->size - offset); - - /* finally return the number of remaining bits */ - return bits; - } - else - { - /* nothing remains */ - mpnsetw(n, 0); - return 0; } + /* resize the number */ + mpnsize(n, n->size - offset); + + /* finally return the number of remaining bits */ + return mpbits(n->size, n->data); } }