-openssl/crypto/bn/bn_mul.c 1.36.2.1 -> 1.36.2.2
-
---- openssl/crypto/bn/bn_mul.c 2007/07/08 18:54:30 1.36.2.1
-+++ openssl/crypto/bn/bn_mul.c 2007/11/03 20:09:29 1.36.2.2
-@@ -389,6 +389,7 @@
- * a[0]*b[0]+a[1]*b[1]+(a[0]-a[1])*(b[1]-b[0])
- * a[1]*b[1]
- */
-+/* dnX may not be positive, but n2/2+dnX has to be */
- void bn_mul_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2,
- int dna, int dnb, BN_ULONG *t)
- {
-@@ -398,7 +399,7 @@
- BN_ULONG ln,lo,*p;
-
- # ifdef BN_COUNT
-- fprintf(stderr," bn_mul_recursive %d * %d\n",n2,n2);
-+ fprintf(stderr," bn_mul_recursive %d%+d * %d%+d\n",n2,dna,n2,dnb);
- # endif
- # ifdef BN_MUL_COMBA
- # if 0
-@@ -545,6 +546,7 @@
-
- /* n+tn is the word length
- * t needs to be n*4 is size, as does r */
-+/* tnX may not be negative but less than n */
- void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n,
- int tna, int tnb, BN_ULONG *t)
- {
-@@ -553,8 +555,8 @@
- BN_ULONG ln,lo,*p;
-
- # ifdef BN_COUNT
-- fprintf(stderr," bn_mul_part_recursive (%d+%d) * (%d+%d)\n",
-- tna, n, tnb, n);
-+ fprintf(stderr," bn_mul_part_recursive (%d%+d) * (%d%+d)\n",
-+ n, tna, n, tnb);
- # endif
- if (n < 8)
- {
-@@ -655,16 +657,19 @@
- for (;;)
- {
- i/=2;
-- if (i <= tna && tna == tnb)
-+ /* these simplified conditions work
-+ * exclusively because difference
-+ * between tna and tnb is 1 or 0 */
-+ if (i < tna || i < tnb)
- {
-- bn_mul_recursive(&(r[n2]),
-+ bn_mul_part_recursive(&(r[n2]),
- &(a[n]),&(b[n]),
- i,tna-i,tnb-i,p);
- break;
- }
-- else if (i < tna || i < tnb)
-+ else if (i == tna || i == tnb)
- {
-- bn_mul_part_recursive(&(r[n2]),
-+ bn_mul_recursive(&(r[n2]),
- &(a[n]),&(b[n]),
- i,tna-i,tnb-i,p);
- break;