@@ -12,6 +12,8 @@ use crate::field::{
1212use crate :: traits:: { AsBytes , ByteConversion } ;
1313
1414impl ByteConversion for [ FpE ; 2 ] {
15+ const BYTE_LEN : usize = 16 ;
16+
1517 #[ cfg( feature = "alloc" ) ]
1618 fn to_bytes_be ( & self ) -> alloc:: vec:: Vec < u8 > {
1719 unimplemented ! ( )
@@ -38,6 +40,8 @@ impl ByteConversion for [FpE; 2] {
3840}
3941
4042impl ByteConversion for [ FpE ; 3 ] {
43+ const BYTE_LEN : usize = 24 ;
44+
4145 #[ cfg( feature = "alloc" ) ]
4246 fn to_bytes_be ( & self ) -> alloc:: vec:: Vec < u8 > {
4347 let mut bytes = ByteConversion :: to_bytes_be ( & self [ 2 ] ) ;
@@ -470,6 +474,17 @@ impl Fp3E {
470474// =====================================================
471475
472476impl ByteConversion for FieldElement < Degree3GoldilocksExtensionField > {
477+ const BYTE_LEN : usize = 24 ;
478+
479+ #[ inline( always) ]
480+ fn write_bytes_be ( & self , buf : & mut [ u8 ] ) {
481+ debug_assert ! ( buf. len( ) >= 24 ) ;
482+ let components = self . value ( ) ;
483+ components[ 0 ] . write_bytes_be ( & mut buf[ 0 ..8 ] ) ;
484+ components[ 1 ] . write_bytes_be ( & mut buf[ 8 ..16 ] ) ;
485+ components[ 2 ] . write_bytes_be ( & mut buf[ 16 ..24 ] ) ;
486+ }
487+
473488 #[ cfg( feature = "alloc" ) ]
474489 fn to_bytes_be ( & self ) -> alloc:: vec:: Vec < u8 > {
475490 let mut byte_slice = ByteConversion :: to_bytes_be ( & self . value ( ) [ 0 ] ) ;
@@ -554,3 +569,27 @@ impl HasDefaultTranscript for Degree3GoldilocksExtensionField {
554569fn mul_by_7 ( a : & FpE ) -> FpE {
555570 FpE :: from_raw ( mul_by_7_raw ( * a. value ( ) ) )
556571}
572+
573+ #[ cfg( test) ]
574+ mod tests {
575+ use super :: * ;
576+ use crate :: traits:: ByteConversion ;
577+
578+ #[ test]
579+ fn write_bytes_be_matches_as_bytes ( ) {
580+ let cases = [
581+ FieldElement :: < Degree3GoldilocksExtensionField > :: zero ( ) ,
582+ FieldElement :: < Degree3GoldilocksExtensionField > :: one ( ) ,
583+ FieldElement :: < Degree3GoldilocksExtensionField > :: new ( [
584+ FpE :: from ( 1u64 ) ,
585+ FpE :: from ( 2u64 ) ,
586+ FpE :: from ( 3u64 ) ,
587+ ] ) ,
588+ ] ;
589+ for elem in & cases {
590+ let mut buf = [ 0u8 ; 24 ] ;
591+ elem. write_bytes_be ( & mut buf) ;
592+ assert_eq ! ( & buf[ ..] , elem. as_bytes( ) . as_slice( ) ) ;
593+ }
594+ }
595+ }
0 commit comments