openvm_pairing_guest/pairing/operations/fp2.rs
1use openvm_algebra_guest::{Field, IntMod};
2
3pub(crate) fn fp2_invert_assign<F: Field + IntMod>(c: &mut [F; 2]) {
4 let mut t1 = c[1].clone();
5 <F as Field>::square_assign(&mut t1);
6 let mut t0 = c[0].clone();
7 <F as Field>::square_assign(&mut t0);
8 t0 += &t1;
9 t0 = <F as Field>::ONE.div_unsafe(&t0);
10 let mut tmp = [c[0].clone(), c[1].clone()];
11 tmp[0] *= &t0;
12 tmp[1] *= &t0;
13 tmp[1].neg_assign();
14
15 *c = tmp;
16}