Skip to content

Commit 607378c

Browse files
authored
Merge pull request StarknetCongo#35 from Grandi0z/fix_field_function
fixed sample and primitive_nth_root
2 parents 7e9b80f + f8a894b commit 607378c

1 file changed

Lines changed: 23 additions & 20 deletions

File tree

baby-stark/src/field.rs

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff 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
}

0 commit comments

Comments
 (0)