@@ -5,8 +5,8 @@ use crate::tables::{
55 BASE4_PARTIAL_CHOOSE_DECODE_5BIT_TABLE , BASE4_POWERS , BASE4_XOR_DECODE_5BIT_TABLE ,
66};
77
8- unconstrained fn decompose_e (e : Field ) -> [Field ; 9 ] {
9- let mut r : [Field ; 9 ] = [0 ; 9 ];
8+ unconstrained fn decompose_e (e : Field ) -> [u32 ; 9 ] {
9+ let mut r : [u32 ; 9 ] = [0 ; 9 ];
1010 let mut bytes = e .to_le_bytes ::<8 >();
1111 let b8to14 = bytes [1 ] & 63 ;
1212 let b14to16 = bytes [1 ] >> 6 ;
@@ -15,35 +15,35 @@ unconstrained fn decompose_e(e: Field) -> [Field; 9] {
1515 let b40to41 = bytes [5 ] & 1 ;
1616 let b41to48 = bytes [5 ] >> 1 ;
1717
18- r [0 ] = bytes [0 ] as Field ; // 0-8
19- r [1 ] = b8to14 as Field ; // 8-14
20- r [2 ] = (b14to16 + (b16to18 << 2 )) as Field ; // 14-18
21- r [3 ] = b18to24 as Field ;
22- r [4 ] = bytes [3 ] as Field ;
23- r [5 ] = bytes [4 ] as Field + (b40to41 as Field ) * 256 ;
24- r [6 ] = b41to48 as Field ;
25- r [7 ] = bytes [6 ] as Field ;
26- r [8 ] = bytes [7 ] as Field ;
18+ r [0 ] = bytes [0 ] as u32 ; // 0-8
19+ r [1 ] = b8to14 as u32 ; // 8-14
20+ r [2 ] = (b14to16 + (b16to18 << 2 )) as u32 ; // 14-18
21+ r [3 ] = b18to24 as u32 ;
22+ r [4 ] = bytes [3 ] as u32 ;
23+ r [5 ] = bytes [4 ] as u32 + (b40to41 as u32 ) * 256 ;
24+ r [6 ] = b41to48 as u32 ;
25+ r [7 ] = bytes [6 ] as u32 ;
26+ r [8 ] = bytes [7 ] as u32 ;
2727 r
2828}
2929
30- unconstrained fn decompose_a (a : Field ) -> [Field ; 9 ] {
31- let mut r : [Field ; 9 ] = [0 ; 9 ];
30+ unconstrained fn decompose_a (a : Field ) -> [u32 ; 9 ] {
31+ let mut r : [u32 ; 9 ] = [0 ; 9 ];
3232 let mut bytes = a .to_le_bytes ::<8 >();
3333 let b24to28 = bytes [3 ] & 15 ;
3434 let b28to32 = bytes [3 ] >> 4 ;
3535 let b32to34 = bytes [4 ] & 3 ;
3636 let b34to39 = (bytes [4 ] >> 2 ) & 31 ;
3737 let b39to40 = bytes [4 ] >> 7 ;
38- r [0 ] = bytes [0 ] as Field ;
39- r [1 ] = bytes [1 ] as Field ;
40- r [2 ] = bytes [2 ] as Field ;
41- r [3 ] = b24to28 as Field ;
42- r [4 ] = (b28to32 + (b32to34 << 4 )) as Field ;
43- r [5 ] = b34to39 as Field ;
44- r [6 ] = b39to40 as Field + (bytes [5 ] as Field * 2 );
45- r [7 ] = bytes [6 ] as Field ;
46- r [8 ] = bytes [7 ] as Field ;
38+ r [0 ] = bytes [0 ] as u32 ;
39+ r [1 ] = bytes [1 ] as u32 ;
40+ r [2 ] = bytes [2 ] as u32 ;
41+ r [3 ] = b24to28 as u32 ;
42+ r [4 ] = (b28to32 + (b32to34 << 4 )) as u32 ;
43+ r [5 ] = b34to39 as u32 ;
44+ r [6 ] = b39to40 as u32 + (bytes [5 ] as u32 * 2 );
45+ r [7 ] = bytes [6 ] as u32 ;
46+ r [8 ] = bytes [7 ] as u32 ;
4747 r
4848 /*
4949 let mut a64 = a as u64;
@@ -112,34 +112,34 @@ impl EncodedWitness {
112112 }
113113}
114114
115- unconstrained fn __decompose_witness (w : Field ) -> [Field ; 12 ] {
115+ unconstrained fn __decompose_witness (w : Field ) -> [u32 ; 12 ] {
116116 // 1, 5, 1, 1, 8, 3, 8, 8, 8, 9, 9, 3
117117 let mut acc : u64 = w as u64 ;
118- let mut r : [Field ; 12 ] = [0 ; 12 ];
118+ let mut r : [u32 ; 12 ] = [0 ; 12 ];
119119
120- r [0 ] = (acc & 1 ) as Field ;
120+ r [0 ] = (acc & 1 ) as u32 ;
121121 acc >>= 1 ;
122- r [1 ] = (acc & 31 ) as Field ;
122+ r [1 ] = (acc & 31 ) as u32 ;
123123 acc >>= 5 ;
124- r [2 ] = (acc & 1 ) as Field ;
124+ r [2 ] = (acc & 1 ) as u32 ;
125125 acc >>= 1 ;
126- r [3 ] = (acc & 1 ) as Field ;
126+ r [3 ] = (acc & 1 ) as u32 ;
127127 acc >>= 1 ;
128- r [4 ] = (acc & 255 ) as Field ;
128+ r [4 ] = (acc & 255 ) as u32 ;
129129 acc >>= 8 ;
130- r [5 ] = (acc & 7 ) as Field ;
130+ r [5 ] = (acc & 7 ) as u32 ;
131131 acc >>= 3 ;
132- r [6 ] = (acc & 255 ) as Field ;
132+ r [6 ] = (acc & 255 ) as u32 ;
133133 acc >>= 8 ;
134- r [7 ] = (acc & 255 ) as Field ;
134+ r [7 ] = (acc & 255 ) as u32 ;
135135 acc >>= 8 ;
136- r [8 ] = (acc & 255 ) as Field ;
136+ r [8 ] = (acc & 255 ) as u32 ;
137137 acc >>= 8 ;
138- r [9 ] = (acc & 511 ) as Field ;
138+ r [9 ] = (acc & 511 ) as u32 ;
139139 acc >>= 9 ;
140- r [10 ] = (acc & 511 ) as Field ;
140+ r [10 ] = (acc & 511 ) as u32 ;
141141 acc >>= 9 ;
142- r [11 ] = (acc & 7 ) as Field ;
142+ r [11 ] = (acc & 7 ) as u32 ;
143143 r
144144}
145145
@@ -268,31 +268,31 @@ pub(crate) fn encode_message_extension(w: Field) -> EncodedWitness {
268268 // We need to validate the correctness of these slice claims by asserting their sum equals `w`,
269269 // and we also need to validate the bit range of each slice
270270 // (we get an implicit range constraint for free by indexing our BASE4_ENCODE_TABLE lookup tables)
271- let s : [Field ; 12 ] = unsafe { __decompose_witness (w ) };
271+ let s : [u32 ; 12 ] = unsafe { __decompose_witness (w ) };
272272
273- let mut reconstructed = s [11 ];
273+ let mut reconstructed : Field = s [11 ] as Field ;
274274 reconstructed *= 512 ;
275- reconstructed += s [10 ];
275+ reconstructed += s [10 ] as Field ;
276276 reconstructed *= 512 ;
277- reconstructed += s [9 ];
277+ reconstructed += s [9 ] as Field ;
278278 reconstructed *= 256 ;
279- reconstructed += s [8 ];
279+ reconstructed += s [8 ] as Field ;
280280 reconstructed *= 256 ;
281- reconstructed += s [7 ];
281+ reconstructed += s [7 ] as Field ;
282282 reconstructed *= 256 ;
283- reconstructed += s [6 ];
283+ reconstructed += s [6 ] as Field ;
284284 reconstructed *= 8 ;
285- reconstructed += s [5 ];
285+ reconstructed += s [5 ] as Field ;
286286 reconstructed *= 256 ;
287- reconstructed += s [4 ];
287+ reconstructed += s [4 ] as Field ;
288288 reconstructed *= 2 ;
289- reconstructed += s [3 ];
289+ reconstructed += s [3 ] as Field ;
290290 reconstructed *= 2 ;
291- reconstructed += s [2 ];
291+ reconstructed += s [2 ] as Field ;
292292 reconstructed *= 32 ;
293- reconstructed += s [1 ];
293+ reconstructed += s [1 ] as Field ;
294294 reconstructed *= 2 ;
295- reconstructed += s [0 ];
295+ reconstructed += s [0 ] as Field ;
296296 assert_eq (reconstructed , w );
297297
298298 let mut base4_encoded_slices : [Field ; 12 ] = [0 ; 12 ];
@@ -373,23 +373,23 @@ pub(crate) fn encode_e(e: Field) -> EncodedChoose {
373373 // (we get an implicit range constraint for free by indexing our BASE4_ENCODE_TABLE lookup tables)
374374 let s = unsafe { decompose_e (e ) };
375375
376- let mut reconstructed = s [8 ];
376+ let mut reconstructed : Field = s [8 ] as Field ;
377377 reconstructed *= 256 ;
378- reconstructed += s [7 ];
378+ reconstructed += s [7 ] as Field ;
379379 reconstructed *= 128 ;
380- reconstructed += s [6 ];
380+ reconstructed += s [6 ] as Field ;
381381 reconstructed *= 512 ;
382- reconstructed += s [5 ];
382+ reconstructed += s [5 ] as Field ;
383383 reconstructed *= 256 ;
384- reconstructed += s [4 ];
384+ reconstructed += s [4 ] as Field ;
385385 reconstructed *= 64 ;
386- reconstructed += s [3 ];
386+ reconstructed += s [3 ] as Field ;
387387 reconstructed *= 16 ;
388- reconstructed += s [2 ];
388+ reconstructed += s [2 ] as Field ;
389389 reconstructed *= 64 ;
390- reconstructed += s [1 ];
390+ reconstructed += s [1 ] as Field ;
391391 reconstructed *= 256 ;
392- reconstructed += s [0 ];
392+ reconstructed += s [0 ] as Field ;
393393 assert_eq (reconstructed , e ); // 7 gates?
394394
395395 // 8, 6, 4, 6, 8, 9, 7, 8, 8
@@ -458,23 +458,23 @@ pub(crate) fn encode_a(a: Field) -> EncodedMajority {
458458
459459 // 8,8,8,4,6,5,9,8,8
460460 // 7 gates?
461- let mut reconstructed = s [8 ];
461+ let mut reconstructed : Field = s [8 ] as Field ;
462462 reconstructed *= 256 ;
463- reconstructed += s [7 ];
463+ reconstructed += s [7 ] as Field ;
464464 reconstructed *= 512 ;
465- reconstructed += s [6 ];
465+ reconstructed += s [6 ] as Field ;
466466 reconstructed *= 32 ;
467- reconstructed += s [5 ];
467+ reconstructed += s [5 ] as Field ;
468468 reconstructed *= 64 ;
469- reconstructed += s [4 ];
469+ reconstructed += s [4 ] as Field ;
470470 reconstructed *= 16 ;
471- reconstructed += s [3 ];
471+ reconstructed += s [3 ] as Field ;
472472 reconstructed *= 256 ;
473- reconstructed += s [2 ];
473+ reconstructed += s [2 ] as Field ;
474474 reconstructed *= 256 ;
475- reconstructed += s [1 ];
475+ reconstructed += s [1 ] as Field ;
476476 reconstructed *= 256 ;
477- reconstructed += s [0 ];
477+ reconstructed += s [0 ] as Field ;
478478 assert_eq (reconstructed , a );
479479
480480 let mut base4_encoded_slices : [Field ; 9 ] = [0 ; 9 ];
@@ -525,13 +525,13 @@ pub(crate) fn encode_a(a: Field) -> EncodedMajority {
525525 EncodedMajority { raw : a , a : a_ror0 , ror28 , ror34 , ror39 }
526526}
527527
528- unconstrained fn __split_into_base4_5bit_slices (encoded : Field ) -> [Field ; 13 ] {
528+ unconstrained fn __split_into_base4_5bit_slices (encoded : Field ) -> [u32 ; 13 ] {
529529 let mut acc = encoded as u128 ;
530530
531- let mut slices : [Field ; 13 ] = [0 ; 13 ];
531+ let mut slices : [u32 ; 13 ] = [0 ; 13 ];
532532
533533 for i in 0 ..13 {
534- slices [i ] = (acc & 1023 ) as Field ;
534+ slices [i ] = (acc & 1023 ) as u32 ;
535535 acc >>= 10 ;
536536 }
537537
@@ -548,7 +548,7 @@ pub(crate) fn decode_majority(a: Field, b: Field, c: Field) -> Field {
548548 let mut decoded : Field = 0 ;
549549 for i in 0 ..13 {
550550 reconstructed *= 1024 ;
551- reconstructed += slices [12 - i ];
551+ reconstructed += slices [12 - i ] as Field ;
552552 decoded *= 32 ;
553553 decoded += BASE4_MAJORITY_DECODE_5BIT_TABLE [slices [12 - i ]];
554554 }
@@ -568,7 +568,7 @@ pub(crate) fn decode_choose(e: Field, f: Field, g: Field) -> Field {
568568 let mut decoded_lhs : Field = 0 ;
569569 for i in 0 ..13 {
570570 reconstructed *= 1024 ;
571- reconstructed += lhs_slices [12 - i ];
571+ reconstructed += lhs_slices [12 - i ] as Field ;
572572 decoded_lhs *= 32 ;
573573 decoded_lhs += BASE4_PARTIAL_CHOOSE_DECODE_5BIT_TABLE [lhs_slices [12 - i ]];
574574 }
@@ -582,7 +582,7 @@ pub(crate) fn decode_choose(e: Field, f: Field, g: Field) -> Field {
582582 let mut decoded_rhs : Field = 0 ;
583583 for i in 0 ..13 {
584584 reconstructed *= 1024 ;
585- reconstructed += rhs_slices [12 - i ];
585+ reconstructed += rhs_slices [12 - i ] as Field ;
586586 decoded_rhs *= 32 ;
587587 decoded_rhs += BASE4_MAJORITY_DECODE_5BIT_TABLE [rhs_slices [12 - i ]];
588588 }
@@ -604,7 +604,7 @@ pub(crate) fn decode_xor(encoded: Field) -> Field {
604604 let mut decoded : Field = 0 ;
605605 for i in 0 ..13 {
606606 reconstructed *= 1024 ;
607- reconstructed += slices [12 - i ];
607+ reconstructed += slices [12 - i ] as Field ;
608608 decoded *= 32 ;
609609 decoded += BASE4_XOR_DECODE_5BIT_TABLE [slices [12 - i ]];
610610 }
0 commit comments