@@ -454,18 +454,15 @@ void secp256k1_fe_sqr_inner(uint32_t *r, const uint32_t *a);
454454
455455#else 
456456
457- #ifdef  VERIFY 
458- #define  VERIFY_BITS (x , n ) VERIFY_CHECK(((x) >> (n)) == 0)
459- #else 
460- #define  VERIFY_BITS (x , n ) do { } while(0)
461- #endif 
462- 
463457SECP256K1_INLINE  static  void  secp256k1_fe_mul_inner (uint32_t  * r , const  uint32_t  * a , const  uint32_t  *  SECP256K1_RESTRICT  b ) {
464458    uint64_t  c , d ;
465459    uint64_t  u0 , u1 , u2 , u3 , u4 , u5 , u6 , u7 , u8 ;
466460    uint32_t  t9 , t1 , t0 , t2 , t3 , t4 , t5 , t6 , t7 ;
467461    const  uint32_t  M  =  0x3FFFFFFUL , R0  =  0x3D10UL , R1  =  0x400UL ;
468462
463+     VERIFY_BITS (R0 , 14 );
464+     VERIFY_BITS (R1 , 11 );
465+ 
469466    VERIFY_BITS (a [0 ], 30 );
470467    VERIFY_BITS (a [1 ], 30 );
471468    VERIFY_BITS (a [2 ], 30 );
@@ -765,14 +762,14 @@ SECP256K1_INLINE static void secp256k1_fe_mul_inner(uint32_t *r, const uint32_t
765762    /* [d 0 0 0 0 0 0 0 -d*R1 r9+(c<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ 
766763    /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ 
767764
768-     d     =  c   *  ( R0  >> 4 ) +  t0 ;
765+     d     =  MUL_64X64_63 ( c ,  R0  >> 4 ) +  t0 ;
769766    VERIFY_BITS (d , 56 );
770767    /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 d-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ 
771768    r [0 ] =  d  &  M ; d  >>= 26 ;
772769    VERIFY_BITS (r [0 ], 26 );
773770    VERIFY_BITS (d , 30 );
774771    /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1+d r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ 
775-     d    +=  c   *  ( R1  >> 4 ) +  t1 ;
772+     d    +=  MUL_64X64_63 ( c ,  R1  >> 4 ) +  t1 ;
776773    VERIFY_BITS (d , 53 );
777774    VERIFY_CHECK (d  <= 0x10000003FFFFBFULL );
778775    /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 d-c*R1>>4 r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ 
@@ -1039,14 +1036,14 @@ SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint32_t *r, const uint32_t
10391036    /* [d 0 0 0 0 0 0 0 -d*R1 r9+(c<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ 
10401037    /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ 
10411038
1042-     d     =  c   *  ( R0  >> 4 ) +  t0 ;
1039+     d     =  MUL_64X64_63 ( c ,  R0  >> 4 ) +  t0 ;
10431040    VERIFY_BITS (d , 56 );
10441041    /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 d-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ 
10451042    r [0 ] =  d  &  M ; d  >>= 26 ;
10461043    VERIFY_BITS (r [0 ], 26 );
10471044    VERIFY_BITS (d , 30 );
10481045    /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1+d r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ 
1049-     d    +=  c   *  ( R1  >> 4 ) +  t1 ;
1046+     d    +=  MUL_64X64_63 ( c ,  R1  >> 4 ) +  t1 ;
10501047    VERIFY_BITS (d , 53 );
10511048    VERIFY_CHECK (d  <= 0x10000003FFFFBFULL );
10521049    /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 d-c*R1>>4 r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ 
0 commit comments