@@ -134,7 +134,8 @@ impl ExtensionField for BabyBearExt3x16 {
134134 #[ inline( always) ]
135135 fn mul_by_x ( & self ) -> Self {
136136 Self {
137- v : [ self . v [ 2 ] * BabyBearx16 :: from ( Self :: W ) , self . v [ 0 ] , self . v [ 1 ] ] ,
137+ // Note: W = 2
138+ v : [ self . v [ 2 ] . double ( ) , self . v [ 0 ] , self . v [ 1 ] ] ,
138139 }
139140 }
140141}
@@ -249,10 +250,10 @@ impl Mul<BabyBearExt3> for BabyBearExt3x16 {
249250 // + {(a0 b1 + a1 b0) + w * a2 b2} x
250251 // + {(a0 b2 + a1 b1 + a2 b0)} x^2
251252
252- let w = BabyBear :: from ( BabyBearExt3x16 :: W ) ;
253+ // Note: W = 2
253254 let mut res = [ BabyBearx16 :: ZERO ; 3 ] ;
254- res[ 0 ] = self . v [ 0 ] * rhs. v [ 0 ] + ( self . v [ 1 ] * rhs. v [ 2 ] + self . v [ 2 ] * rhs. v [ 1 ] ) * w ;
255- res[ 1 ] = self . v [ 0 ] * rhs. v [ 1 ] + self . v [ 1 ] * rhs. v [ 0 ] + self . v [ 2 ] * rhs. v [ 2 ] * w ;
255+ res[ 0 ] = self . v [ 0 ] * rhs. v [ 0 ] + ( self . v [ 1 ] * rhs. v [ 2 ] + self . v [ 2 ] * rhs. v [ 1 ] ) . double ( ) ;
256+ res[ 1 ] = self . v [ 0 ] * rhs. v [ 1 ] + self . v [ 1 ] * rhs. v [ 0 ] + self . v [ 2 ] * rhs. v [ 2 ] . double ( ) ;
256257 res[ 2 ] = self . v [ 0 ] * rhs. v [ 2 ] + self . v [ 1 ] * rhs. v [ 1 ] + self . v [ 2 ] * rhs. v [ 0 ] ;
257258 Self { v : res }
258259 }
@@ -336,9 +337,9 @@ fn mul_internal(a: &BabyBearExt3x16, b: &BabyBearExt3x16) -> BabyBearExt3x16 {
336337 let a = & a. v ;
337338 let b = & b. v ;
338339 let mut res = [ BabyBearx16 :: default ( ) ; 3 ] ;
339- let w = BabyBear :: from ( BabyBearExt3x16 :: W ) ;
340- res[ 0 ] = a[ 0 ] * b[ 0 ] + ( a[ 1 ] * b[ 2 ] + a[ 2 ] * b[ 1 ] ) * w ;
341- res[ 1 ] = ( a[ 0 ] * b[ 1 ] + a[ 1 ] * b[ 0 ] ) + a[ 2 ] * b[ 2 ] * w ;
340+ // Note: W = 2
341+ res[ 0 ] = a[ 0 ] * b[ 0 ] + ( a[ 1 ] * b[ 2 ] + a[ 2 ] * b[ 1 ] ) . double ( ) ;
342+ res[ 1 ] = ( a[ 0 ] * b[ 1 ] + a[ 1 ] * b[ 0 ] ) + a[ 2 ] * b[ 2 ] . double ( ) ;
342343 res[ 2 ] = a[ 0 ] * b[ 2 ] + a[ 1 ] * b[ 1 ] + a[ 2 ] * b[ 0 ] ;
343344
344345 BabyBearExt3x16 { v : res }
@@ -347,9 +348,9 @@ fn mul_internal(a: &BabyBearExt3x16, b: &BabyBearExt3x16) -> BabyBearExt3x16 {
347348#[ inline( always) ]
348349fn square_internal ( a : & [ BabyBearx16 ; 3 ] ) -> [ BabyBearx16 ; 3 ] {
349350 let mut res = [ BabyBearx16 :: default ( ) ; 3 ] ;
350- let w = BabyBear :: from ( BabyBearExt3x16 :: W ) ;
351- res[ 0 ] = a[ 0 ] . square ( ) + ( a[ 1 ] * a[ 2 ] ) . double ( ) * w ;
352- res[ 1 ] = ( a[ 0 ] * a[ 1 ] ) . double ( ) + a[ 2 ] . square ( ) * w ;
351+ // Note: W = 2
352+ res[ 0 ] = a[ 0 ] . square ( ) + ( a[ 1 ] * a[ 2 ] ) . double ( ) . double ( ) ;
353+ res[ 1 ] = ( a[ 0 ] * a[ 1 ] ) . double ( ) + a[ 2 ] . square ( ) . double ( ) ;
353354 res[ 2 ] = a[ 0 ] * a[ 2 ] . double ( ) + a[ 1 ] . square ( ) ;
354355
355356 res
0 commit comments