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}