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# 5.1.4: A = X1^2, B = Y1^2, C = 2 Z1^2, H = A+B, E = H-(X1+Y1)^2, G = A-B,
70# F = C+G, X3 = EF, Y3 = GH, T3 = EH, Z3 = FG
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)}

Uses (5)

Used by (3)