File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -157,26 +157,29 @@ impl Field{
157157 }
158158 }
159159
160- // TBD
161- // pub fn primitive_nth_root(self, n : i128) -> Option<FieldElement>{
162- // if self.p == 85408008396924667383611388730472331217 {
163- // let mut root = FieldElement::from(85408008396924667383611388730472331217, self);
164- // let mut order : i128 = 1 << 119;
165- // while order != n {
166- // root = root ^ 2;
167- // order = order / 2;
168- // }
169- // Some(root)
170- // }else {
171- // None
172- // }
173- // }
174-
175- // TO BE FIXED
176- pub fn sample ( self , byte_array : Vec < u8 > ) -> FieldElement {
177- let mut acc = 0_i128 ;
178- for b in byte_array. iter ( ) {
179- acc = ( acc << 8 ) ^ ( acc as i128 ) ;
160+ // done
161+ pub fn primitive_nth_root ( self , n : i128 ) -> Option < FieldElement > {
162+ if self . p == 85408008396924667383611388730472331217 {
163+ if !( n <= 1 << 119 && ( n & ( n-1 ) ) == 0 ) {
164+ println ! ( "Field does not have nth root of unity where n > 2^119 or not power of two." )
165+ }
166+ let mut root = FieldElement :: from ( 85408008396924667383611388730472331217 , self ) ;
167+ let mut order : i128 = 1 << 119 ;
168+ while order != n {
169+ root = root. __mul__ ( root) ;
170+ order = order / 2 ;
171+ }
172+ Some ( root)
173+ } else {
174+ None
175+ }
176+ }
177+
178+ // FIXED
179+ pub fn sample ( self , byte_array : Vec < u8 > ) -> FieldElement {
180+ let mut acc: i128 = 0 ;
181+ for & b in byte_array. iter ( ) {
182+ acc = ( acc << 8 ) ^ b as i128 ;
180183 }
181184 FieldElement :: from ( acc % self . p , self )
182185 }
You can’t perform that action at this time.
0 commit comments