From bdc420be66832e8d1ecd3dc6688ddf99d9e06172 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Tue, 7 May 2019 22:55:29 -0700 Subject: [PATCH] internal/ed25519: add addition for Edwards points --- internal/edwards25519/edwards25519.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/internal/edwards25519/edwards25519.go b/internal/edwards25519/edwards25519.go index 3dd7089..6f06378 100644 --- a/internal/edwards25519/edwards25519.go +++ b/internal/edwards25519/edwards25519.go @@ -138,6 +138,24 @@ func (v *AffineCached) FromP3(p *ProjP3) *AffineCached { // (Re)addition and subtraction. +func (v *ProjP3) Add(p, q *ProjP3) *ProjP3 { + result := ProjP1xP1{} + qCached := ProjCached{} + qCached.FromP3(q) + result.Add(p, &qCached) + v.FromP1xP1(&result) + return v +} + +func (v *ProjP3) Sub(p, q *ProjP3) *ProjP3 { + result := ProjP1xP1{} + qCached := ProjCached{} + qCached.FromP3(q) + result.Sub(p, &qCached) + v.FromP1xP1(&result) + return v +} + func (v *ProjP1xP1) Add(p *ProjP3, q *ProjCached) *ProjP1xP1 { var YplusX, YminusX, PP, MM, TT2d, ZZ2 radix51.FieldElement @@ -236,6 +254,8 @@ func (v *ProjP1xP1) Double(p *ProjP2) *ProjP1xP1 { return v } +// Negation. + func (v *ProjP3) Neg(p *ProjP3) *ProjP3 { v.X.Neg(&p.X) v.Y.Set(&p.Y)