Incorporate baseline addition chain for Fq generated by ValarDragon

This commit is contained in:
Eirik Ogilvie-Wigley 2018-09-19 14:27:17 -06:00
parent df7e4711d3
commit e5bee08e80
1 changed files with 306 additions and 6 deletions

312
src/fq.rs
View File

@ -290,12 +290,312 @@ impl Fq {
/// effect of inverting the element if it is
/// nonzero.
pub fn pow_q_minus_2(&self) -> Self {
self.pow(&[
0xfffffffeffffffff,
0x53bda402fffe5bfe,
0x3339d80809a1d805,
0x73eda753299d7d48,
])
# found using https://github.com/kwantam/addchain
t10 = input
t0 = sqr(t10)
t1 = t0 * t10
t16 = sqr(t0)
t6 = sqr(t16)
t5 = t6 * t0
t0 = t6 * t16
t12 = t5 * t16
t2 = sqr(t6)
t7 = t5 * t6
t15 = t0 * t5
t17 = sqr(t12)
t1 = t17 * t1
t3 = t7 * t2
t8 = t1 * t17
t4 = t8 * t2
t9 = t8 * t7
t7 = t4 * t5
t11 = t4 * t17
t5 = t9 * t17
t14 = t7 * t15
t13 = t11 * t12
t12 = t11 * t17
t15 = t12 * t15
t16 = t15 * t16
t3 = t16 * t3
t17 = t3 * t17
t0 = t17 * t0
t6 = t0 * t6
t2 = t6 * t2
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t17
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t16
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t15
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t15
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t14
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t13
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t12
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t11
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t8
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t10
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t9
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t8
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t7
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t6
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t5
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t3
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t2
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t4
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t2
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t3
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t2
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t2
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t2
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t3
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t2
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t2
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t1
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = sqr(t0)
t0 = t0 * t1
}
#[inline(always)]