def step_rel

bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/curve25519/ladder.bend:83

import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/ladder.bend as Ladder
import Base
import bend-collections-laws-crypto@1.0.0.0/spec/crypto/curve25519/field.bend as FS
import bend-collections-laws-crypto@1.0.0.0/spec/crypto/curve25519/x25519.bend as S
import bend-collections-laws-crypto@1.0.0.0/src/crypto/curve25519/field.bend as F
import bend-collections-laws-crypto@1.0.0.0/src/crypto/curve25519/x25519.bend as X
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/word.bend as WD
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/limbs.bend as LM
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/consts.bend as K
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/fieldops.bend as FO
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/cong.bend as G
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/rel.bend as RL
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/mulw.bend as MW

83def step_rel(+one: Nat, +h1: {one == 1n : Nat}, +pp: Nat, +hP: {Nat.add(1n+pp, 19n) == WD.sc(255n, one) : Nat}, +c24: List<&2, U32>, +oc: {LM.okb(32n, c24, 255n) == True{} : Bool}, +hv: {K.valo(one, c24) == S.a24(one) : Nat}, +x1: List<&2, U32>, +X1: Nat, +o1: {LM.okb(32n, x1, 255n) == True{} : Bool}, +c1: G.ceq(pp, FS.value(x1), X1), +x2: List<&2, U32>, +X2: Nat, +o2: {LM.okb(32n, x2, 255n) == True{} : Bool}, +c2: G.ceq(pp, FS.value(x2), X2), +z2: List<&2, U32>, +Z2: Nat, +oz2: {LM.okb(32n, z2, 255n) == True{} : Bool}, +cz2: G.ceq(pp, FS.value(z2), Z2), +x3: List<&2, U32>, +X3: Nat, +o3: {LM.okb(32n, x3, 255n) == True{} : Bool}, +c3: G.ceq(pp, FS.value(x3), X3), +z3: List<&2, U32>, +Z3: Nat, +oz3: {LM.okb(32n, z3, 255n) == True{} : Bool}, +cz3: G.ceq(pp, FS.value(z3), Z3), +kt: U32, +KT: Nat, +hk: {v(kt) == KT : Nat}, +hkb: {Nat.is_le(KT, 1n) == True{} : Bool}) -> Rst(pp, X.step(c24, x1, x2, z2, x3, z3, kt), S.step(one, 1n+pp, X1, X2, Z2, X3, Z3, KT)):
84  +P = {1n+pp : Nat}
85  +A24 = S.a24(one)
86  +cc = a24_c(one, h1, pp, c24, hv)
87  +a = F.add(x2, z2)
88  +A = FS.fadd(P, X2, Z2)
89  +oa = FO.add_okb(one, h1, x2, z2, o2, oz2)
90  +ca = RL.rc_add(one, h1, pp, hP, x2, z2, X2, Z2, o2, c2, oz2, cz2)
91  +aa = F.sq(a)
92  +AA = FS.fmul(P, A, A)
93  +oaa = MW.sq_okb(one, h1, a, oa)
94  +caa = RL.rc_sq(one, h1, pp, hP, a, A, oa, ca)
95  +b = F.sub(x2, z2)
96  +B = FS.fsub(P, X2, Z2)
97  +ob = FO.sub_okb(one, h1, x2, z2, o2, oz2)
98  +cb = RL.rc_sub(one, h1, pp, hP, x2, z2, X2, Z2, o2, c2, oz2, cz2)
99  +bb = F.sq(b)
100  +BB = FS.fmul(P, B, B)
101  +obb = MW.sq_okb(one, h1, b, ob)
102  +cbb = RL.rc_sq(one, h1, pp, hP, b, B, ob, cb)
103  +e = F.sub(aa, bb)
104  +E = FS.fsub(P, AA, BB)
105  +oe = FO.sub_okb(one, h1, aa, bb, oaa, obb)
106  +ce = RL.rc_sub(one, h1, pp, hP, aa, bb, AA, BB, oaa, caa, obb, cbb)
107  +c = F.add(x3, z3)
108  +CC = FS.fadd(P, X3, Z3)
109  +occ = FO.add_okb(one, h1, x3, z3, o3, oz3)
110  +ccc = RL.rc_add(one, h1, pp, hP, x3, z3, X3, Z3, o3, c3, oz3, cz3)
111  +d = F.sub(x3, z3)
112  +D = FS.fsub(P, X3, Z3)
113  +od = FO.sub_okb(one, h1, x3, z3, o3, oz3)
114  +cd = RL.rc_sub(one, h1, pp, hP, x3, z3, X3, Z3, o3, c3, oz3, cz3)
115  +da = F.mul(d, a)
116  +DA = FS.fmul(P, D, A)
117  +oda = MW.mul_okb(one, h1, d, a, od, oa)
118  +cda = RL.rc_mul(one, h1, pp, hP, d, a, D, A, od, cd, oa, ca)
119  +cb2 = F.mul(c, b)
120  +CB = FS.fmul(P, CC, B)
121  +ocb = MW.mul_okb(one, h1, c, b, occ, ob)
122  +ccb = RL.rc_mul(one, h1, pp, hP, c, b, CC, B, occ, ccc, ob, cb)
123  +oo1 = MW.mul_okb(one, h1, aa, bb, oaa, obb)
124  +co1 = RL.rc_mul(one, h1, pp, hP, aa, bb, AA, BB, oaa, caa, obb, cbb)
125  +ec = F.mul(e, c24)
126  +EC = FS.fmul(P, E, A24)
127  +oec = MW.mul_okb(one, h1, e, c24, oe, oc)
128  +cec = RL.rc_mul(one, h1, pp, hP, e, c24, E, A24, oe, ce, oc, cc)
129  +sm = F.add(aa, ec)
130  +SM = FS.fadd(P, AA, EC)
131  +osm = FO.add_okb(one, h1, aa, ec, oaa, oec)
132  +csm = RL.rc_add(one, h1, pp, hP, aa, ec, AA, EC, oaa, caa, oec, cec)
133  +oo2 = MW.mul_okb(one, h1, e, sm, oe, osm)
134  +co2 = RL.rc_mul(one, h1, pp, hP, e, sm, E, SM, oe, ce, osm, csm)
135  +sg = F.add(da, cb2)
136  +SG = FS.fadd(P, DA, CB)
137  +osg = FO.add_okb(one, h1, da, cb2, oda, ocb)
138  +csg = RL.rc_add(one, h1, pp, hP, da, cb2, DA, CB, oda, cda, ocb, ccb)
139  +oo3 = MW.sq_okb(one, h1, sg, osg)
140  +co3 = RL.rc_sq(one, h1, pp, hP, sg, SG, osg, csg)
141  +t = F.sub(da, cb2)
142  +T = FS.fsub(P, DA, CB)
143  +ot = FO.sub_okb(one, h1, da, cb2, oda, ocb)
144  +ct = RL.rc_sub(one, h1, pp, hP, da, cb2, DA, CB, oda, cda, ocb, ccb)
145  +ott = MW.sq_okb(one, h1, t, ot)
146  +ctt = RL.rc_sq(one, h1, pp, hP, t, T, ot, ct)
147  +oo4 = MW.mul_okb(one, h1, x1, F.sq(t), o1, ott)
148  +co4 = RL.rc_mul(one, h1, pp, hP, x1, F.sq(t), X1, FS.fmul(P, T, T), o1, c1, ott, ctt)
149  ((oo1, co1), ((oo2, co2), ((oo3, co3), ((oo4, co4), (hk, hkb)))))

Uses (33)

Used by (1)