The unified diff between revisions [0dc5b2d6..] and [b14c94b9..] is displayed below. It can also be downloaded as a raw diff.

This diff has been restricted to the following files: 'bn_mp_prime_random_ex.c'

#
#
# patch "bn_mp_prime_random_ex.c"
#  from [31f8a27d870e541417b0ca1a911480e1e060169f]
#    to [4cba143b51b505f3c881caf21f5879695d0dcefa]
#
============================================================
--- bn_mp_prime_random_ex.c	31f8a27d870e541417b0ca1a911480e1e060169f
+++ bn_mp_prime_random_ex.c	4cba143b51b505f3c881caf21f5879695d0dcefa
@@ -47,7 +47,7 @@ int mp_prime_random_ex(mp_int *a, int t,
    }

    /* calc the byte size */
-   bsize = (size>>3)+(size&7?1:0);
+   bsize = (size>>3) + ((size&7)?1:0);

    /* we need a buffer of bsize bytes */
    tmp = OPT_CAST(unsigned char) XMALLOC(bsize);
@@ -56,19 +56,19 @@ int mp_prime_random_ex(mp_int *a, int t,
    }

    /* calc the maskAND value for the MSbyte*/
-   maskAND = 0xFF >> (8 - (size & 7));
+   maskAND = ((size&7) == 0) ? 0xFF : (0xFF >> (8 - (size & 7)));

    /* calc the maskOR_msb */
    maskOR_msb        = 0;
-   maskOR_msb_offset = (size - 2) >> 3;
+   maskOR_msb_offset = ((size & 7) == 1) ? 1 : 0;
    if (flags & LTM_PRIME_2MSB_ON) {
       maskOR_msb     |= 1 << ((size - 2) & 7);
    } else if (flags & LTM_PRIME_2MSB_OFF) {
       maskAND        &= ~(1 << ((size - 2) & 7));
-   }
+   }

    /* get the maskOR_lsb */
-   maskOR_lsb         = 0;
+   maskOR_lsb         = 1;
    if (flags & LTM_PRIME_BBS) {
       maskOR_lsb     |= 3;
    }