def double
bend-collections-laws-crypto@1.0.0.0 · spec/crypto/ed25519.bend:69
import bend-collections-laws-crypto@1.0.0.0/spec/crypto/ed25519.bend as Ed25519
import Base
import bend-collections-laws-crypto@1.0.0.0/spec/crypto/curve25519/field.bend as FS
69
70
71def double(+p: Nat, a: EPt) -> EPt:
72 match a:
73 case EPt{+x1, +y1, +z1, t1}:
74 +ea = FS.fmul(p, x1, x1)
75 +eb = FS.fmul(p, y1, y1)
76 +zz = FS.fmul(p, z1, z1)
77 +ec = FS.fadd(p, zz, zz)
78 +eh = FS.fadd(p, ea, eb)
79 +xy = FS.fadd(p, x1, y1)
80 +ee = FS.fsub(p, eh, FS.fmul(p, xy, xy))
81 +eg = FS.fsub(p, ea, eb)
82 +ef = FS.fadd(p, ec, eg)
83 EPt{FS.fmul(p, ee, ef), FS.fmul(p, eg, eh), FS.fmul(p, ef, eg), FS.fmul(p, ee, eh)}