From f08b5bb49dc9c78f8d9aad7d33278a9e899a2c1d Mon Sep 17 00:00:00 2001 From: Vlad <88586482+vladfdp@users.noreply.github.com> Date: Wed, 3 Jul 2024 09:07:43 +0200 Subject: [PATCH 1/9] fixed fromAffine and toProj in golang --- wrappers/golang/core/internal/mock_curve.go | 20 ++++++++++++++++--- wrappers/golang/curves/bls12377/curve.go | 20 ++++++++++++++++--- wrappers/golang/curves/bls12377/g2/curve.go | 20 ++++++++++++++++--- wrappers/golang/curves/bls12381/curve.go | 20 ++++++++++++++++--- wrappers/golang/curves/bls12381/g2/curve.go | 20 ++++++++++++++++--- wrappers/golang/curves/bn254/curve.go | 20 ++++++++++++++++--- wrappers/golang/curves/bn254/g2/curve.go | 20 ++++++++++++++++--- wrappers/golang/curves/bw6761/curve.go | 20 ++++++++++++++++--- wrappers/golang/curves/bw6761/g2/curve.go | 20 ++++++++++++++++--- wrappers/golang/curves/grumpkin/curve.go | 20 ++++++++++++++++--- .../generator/curves/templates/curve.go.tmpl | 16 ++++++++++++++- 11 files changed, 185 insertions(+), 31 deletions(-) diff --git a/wrappers/golang/core/internal/mock_curve.go b/wrappers/golang/core/internal/mock_curve.go index 0a6fe8be..a980aeb3 100644 --- a/wrappers/golang/core/internal/mock_curve.go +++ b/wrappers/golang/core/internal/mock_curve.go @@ -32,9 +32,15 @@ func (p *MockProjective) FromAffine(a MockAffine) MockProjective { z := MockBaseField{} z.One() - p.X = a.X - p.Y = a.Y - p.Z = z + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + } else { + p.X = a.X + p.Y = a.Y + p.Z = z.One() + } return *p } @@ -68,6 +74,14 @@ func (a *MockAffine) FromLimbs(x, y []uint32) MockAffine { func (a MockAffine) ToProjective() MockProjective { var z MockBaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return MockProjective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return MockProjective{ X: a.X, Y: a.Y, diff --git a/wrappers/golang/curves/bls12377/curve.go b/wrappers/golang/curves/bls12377/curve.go index e21dd580..c24c7173 100644 --- a/wrappers/golang/curves/bls12377/curve.go +++ b/wrappers/golang/curves/bls12377/curve.go @@ -43,9 +43,15 @@ func (p *Projective) FromAffine(a Affine) Projective { z := BaseField{} z.One() - p.X = a.X - p.Y = a.Y - p.Z = z + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + } else { + p.X = a.X + p.Y = a.Y + p.Z = z.One() + } return *p } @@ -109,6 +115,14 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { func (a Affine) ToProjective() Projective { var z BaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return Projective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return Projective{ X: a.X, Y: a.Y, diff --git a/wrappers/golang/curves/bls12377/g2/curve.go b/wrappers/golang/curves/bls12377/g2/curve.go index 50ac2a11..433e8364 100644 --- a/wrappers/golang/curves/bls12377/g2/curve.go +++ b/wrappers/golang/curves/bls12377/g2/curve.go @@ -43,9 +43,15 @@ func (p *G2Projective) FromAffine(a G2Affine) G2Projective { z := G2BaseField{} z.One() - p.X = a.X - p.Y = a.Y - p.Z = z + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + } else { + p.X = a.X + p.Y = a.Y + p.Z = z.One() + } return *p } @@ -109,6 +115,14 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine { func (a G2Affine) ToProjective() G2Projective { var z G2BaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return G2Projective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return G2Projective{ X: a.X, Y: a.Y, diff --git a/wrappers/golang/curves/bls12381/curve.go b/wrappers/golang/curves/bls12381/curve.go index d376c5c2..f4646914 100644 --- a/wrappers/golang/curves/bls12381/curve.go +++ b/wrappers/golang/curves/bls12381/curve.go @@ -43,9 +43,15 @@ func (p *Projective) FromAffine(a Affine) Projective { z := BaseField{} z.One() - p.X = a.X - p.Y = a.Y - p.Z = z + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + } else { + p.X = a.X + p.Y = a.Y + p.Z = z.One() + } return *p } @@ -109,6 +115,14 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { func (a Affine) ToProjective() Projective { var z BaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return Projective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return Projective{ X: a.X, Y: a.Y, diff --git a/wrappers/golang/curves/bls12381/g2/curve.go b/wrappers/golang/curves/bls12381/g2/curve.go index 2b8caa00..70151331 100644 --- a/wrappers/golang/curves/bls12381/g2/curve.go +++ b/wrappers/golang/curves/bls12381/g2/curve.go @@ -43,9 +43,15 @@ func (p *G2Projective) FromAffine(a G2Affine) G2Projective { z := G2BaseField{} z.One() - p.X = a.X - p.Y = a.Y - p.Z = z + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + } else { + p.X = a.X + p.Y = a.Y + p.Z = z.One() + } return *p } @@ -109,6 +115,14 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine { func (a G2Affine) ToProjective() G2Projective { var z G2BaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return G2Projective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return G2Projective{ X: a.X, Y: a.Y, diff --git a/wrappers/golang/curves/bn254/curve.go b/wrappers/golang/curves/bn254/curve.go index 80a844c7..c91ee0cd 100644 --- a/wrappers/golang/curves/bn254/curve.go +++ b/wrappers/golang/curves/bn254/curve.go @@ -43,9 +43,15 @@ func (p *Projective) FromAffine(a Affine) Projective { z := BaseField{} z.One() - p.X = a.X - p.Y = a.Y - p.Z = z + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + } else { + p.X = a.X + p.Y = a.Y + p.Z = z.One() + } return *p } @@ -109,6 +115,14 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { func (a Affine) ToProjective() Projective { var z BaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return Projective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return Projective{ X: a.X, Y: a.Y, diff --git a/wrappers/golang/curves/bn254/g2/curve.go b/wrappers/golang/curves/bn254/g2/curve.go index 586d2383..58456188 100644 --- a/wrappers/golang/curves/bn254/g2/curve.go +++ b/wrappers/golang/curves/bn254/g2/curve.go @@ -43,9 +43,15 @@ func (p *G2Projective) FromAffine(a G2Affine) G2Projective { z := G2BaseField{} z.One() - p.X = a.X - p.Y = a.Y - p.Z = z + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + } else { + p.X = a.X + p.Y = a.Y + p.Z = z.One() + } return *p } @@ -109,6 +115,14 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine { func (a G2Affine) ToProjective() G2Projective { var z G2BaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return G2Projective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return G2Projective{ X: a.X, Y: a.Y, diff --git a/wrappers/golang/curves/bw6761/curve.go b/wrappers/golang/curves/bw6761/curve.go index 90797140..7d881dd9 100644 --- a/wrappers/golang/curves/bw6761/curve.go +++ b/wrappers/golang/curves/bw6761/curve.go @@ -43,9 +43,15 @@ func (p *Projective) FromAffine(a Affine) Projective { z := BaseField{} z.One() - p.X = a.X - p.Y = a.Y - p.Z = z + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + } else { + p.X = a.X + p.Y = a.Y + p.Z = z.One() + } return *p } @@ -109,6 +115,14 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { func (a Affine) ToProjective() Projective { var z BaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return Projective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return Projective{ X: a.X, Y: a.Y, diff --git a/wrappers/golang/curves/bw6761/g2/curve.go b/wrappers/golang/curves/bw6761/g2/curve.go index 4167674e..dcb523e3 100644 --- a/wrappers/golang/curves/bw6761/g2/curve.go +++ b/wrappers/golang/curves/bw6761/g2/curve.go @@ -43,9 +43,15 @@ func (p *G2Projective) FromAffine(a G2Affine) G2Projective { z := G2BaseField{} z.One() - p.X = a.X - p.Y = a.Y - p.Z = z + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + } else { + p.X = a.X + p.Y = a.Y + p.Z = z.One() + } return *p } @@ -109,6 +115,14 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine { func (a G2Affine) ToProjective() G2Projective { var z G2BaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return G2Projective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return G2Projective{ X: a.X, Y: a.Y, diff --git a/wrappers/golang/curves/grumpkin/curve.go b/wrappers/golang/curves/grumpkin/curve.go index 653cbc8e..d23ff241 100644 --- a/wrappers/golang/curves/grumpkin/curve.go +++ b/wrappers/golang/curves/grumpkin/curve.go @@ -43,9 +43,15 @@ func (p *Projective) FromAffine(a Affine) Projective { z := BaseField{} z.One() - p.X = a.X - p.Y = a.Y - p.Z = z + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + } else { + p.X = a.X + p.Y = a.Y + p.Z = z.One() + } return *p } @@ -109,6 +115,14 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { func (a Affine) ToProjective() Projective { var z BaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return Projective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return Projective{ X: a.X, Y: a.Y, diff --git a/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl b/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl index e6bd59d5..15eecef9 100644 --- a/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl +++ b/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl @@ -43,9 +43,15 @@ func (p *{{.CurvePrefix}}Projective) FromAffine(a {{.CurvePrefix}}Affine) {{.Cur z := {{.CurvePrefix}}BaseField{} z.One() + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + p.X = z.Zero() + p.Y = z.One() + p.Z = z.Zero() + }else{ p.X = a.X p.Y = a.Y - p.Z = z + p.Z = z.One() + } return *p } @@ -109,6 +115,14 @@ func (a *{{.CurvePrefix}}Affine) FromLimbs(x, y []uint32) {{.CurvePrefix}}Affine func (a {{.CurvePrefix}}Affine) ToProjective() {{.CurvePrefix}}Projective { var z {{.CurvePrefix}}BaseField + if (a.X == z.Zero()) && (a.Y == z.Zero()) { + return {{.CurvePrefix}}Projective{ + X: z.Zero(), + Y: z.One(), + Z: z.Zero(), + } + } + return {{.CurvePrefix}}Projective{ X: a.X, Y: a.Y, From 9e057c835dafd72f8e265eb9b3bb032c08ae559d Mon Sep 17 00:00:00 2001 From: Vlad <88586482+vladfdp@users.noreply.github.com> Date: Wed, 3 Jul 2024 09:18:41 +0200 Subject: [PATCH 2/9] fixed to_projective in rust --- wrappers/rust/icicle-core/src/curve.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/wrappers/rust/icicle-core/src/curve.rs b/wrappers/rust/icicle-core/src/curve.rs index 89bec1c2..c0b82d11 100644 --- a/wrappers/rust/icicle-core/src/curve.rs +++ b/wrappers/rust/icicle-core/src/curve.rs @@ -79,6 +79,9 @@ impl Affine { } pub fn to_projective(&self) -> Projective { + if *self == Self::zero() { + return Projective::::zero(); + } Projective { x: self.x, y: self.y, From 17732ea013729170add5a97c5ac2dadca8af621f Mon Sep 17 00:00:00 2001 From: Vlad <88586482+vladfdp@users.noreply.github.com> Date: Wed, 3 Jul 2024 10:36:14 +0200 Subject: [PATCH 3/9] use zero method of projective in fromAffine Co-authored-by: Jeremy Felder --- .../golang/internal/generator/curves/templates/curve.go.tmpl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl b/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl index 15eecef9..a43bee98 100644 --- a/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl +++ b/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl @@ -44,9 +44,7 @@ func (p *{{.CurvePrefix}}Projective) FromAffine(a {{.CurvePrefix}}Affine) {{.Cur z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() }else{ p.X = a.X p.Y = a.Y From 81644fc28c2c4d35b12b83146821a5861fff4658 Mon Sep 17 00:00:00 2001 From: Vlad <88586482+vladfdp@users.noreply.github.com> Date: Wed, 3 Jul 2024 10:37:02 +0200 Subject: [PATCH 4/9] use zero method of projective in toProjective Co-authored-by: Jeremy Felder --- .../internal/generator/curves/templates/curve.go.tmpl | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl b/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl index a43bee98..d02fe6a9 100644 --- a/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl +++ b/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl @@ -114,11 +114,8 @@ func (a {{.CurvePrefix}}Affine) ToProjective() {{.CurvePrefix}}Projective { var z {{.CurvePrefix}}BaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return {{.CurvePrefix}}Projective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p {{.CurvePrefix}}Projective + return p.Zero() } return {{.CurvePrefix}}Projective{ From 279cdc66e05c434244b99890e764c2c68d371101 Mon Sep 17 00:00:00 2001 From: Vlad <88586482+vladfdp@users.noreply.github.com> Date: Wed, 3 Jul 2024 10:41:32 +0200 Subject: [PATCH 5/9] generated go files --- wrappers/golang/core/internal/mock_curve.go | 11 +++-------- wrappers/golang/curves/bls12377/curve.go | 11 +++-------- wrappers/golang/curves/bls12377/g2/curve.go | 11 +++-------- wrappers/golang/curves/bls12381/curve.go | 11 +++-------- wrappers/golang/curves/bls12381/g2/curve.go | 11 +++-------- wrappers/golang/curves/bn254/curve.go | 11 +++-------- wrappers/golang/curves/bn254/g2/curve.go | 11 +++-------- wrappers/golang/curves/bw6761/curve.go | 11 +++-------- wrappers/golang/curves/bw6761/g2/curve.go | 11 +++-------- wrappers/golang/curves/grumpkin/curve.go | 11 +++-------- 10 files changed, 30 insertions(+), 80 deletions(-) diff --git a/wrappers/golang/core/internal/mock_curve.go b/wrappers/golang/core/internal/mock_curve.go index a980aeb3..de21b3d9 100644 --- a/wrappers/golang/core/internal/mock_curve.go +++ b/wrappers/golang/core/internal/mock_curve.go @@ -33,9 +33,7 @@ func (p *MockProjective) FromAffine(a MockAffine) MockProjective { z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() } else { p.X = a.X p.Y = a.Y @@ -75,11 +73,8 @@ func (a MockAffine) ToProjective() MockProjective { var z MockBaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return MockProjective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p MockProjective + return p.Zero() } return MockProjective{ diff --git a/wrappers/golang/curves/bls12377/curve.go b/wrappers/golang/curves/bls12377/curve.go index c24c7173..8083669a 100644 --- a/wrappers/golang/curves/bls12377/curve.go +++ b/wrappers/golang/curves/bls12377/curve.go @@ -44,9 +44,7 @@ func (p *Projective) FromAffine(a Affine) Projective { z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() } else { p.X = a.X p.Y = a.Y @@ -116,11 +114,8 @@ func (a Affine) ToProjective() Projective { var z BaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return Projective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p Projective + return p.Zero() } return Projective{ diff --git a/wrappers/golang/curves/bls12377/g2/curve.go b/wrappers/golang/curves/bls12377/g2/curve.go index 433e8364..7da1d271 100644 --- a/wrappers/golang/curves/bls12377/g2/curve.go +++ b/wrappers/golang/curves/bls12377/g2/curve.go @@ -44,9 +44,7 @@ func (p *G2Projective) FromAffine(a G2Affine) G2Projective { z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() } else { p.X = a.X p.Y = a.Y @@ -116,11 +114,8 @@ func (a G2Affine) ToProjective() G2Projective { var z G2BaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return G2Projective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p G2Projective + return p.Zero() } return G2Projective{ diff --git a/wrappers/golang/curves/bls12381/curve.go b/wrappers/golang/curves/bls12381/curve.go index f4646914..02cee7b6 100644 --- a/wrappers/golang/curves/bls12381/curve.go +++ b/wrappers/golang/curves/bls12381/curve.go @@ -44,9 +44,7 @@ func (p *Projective) FromAffine(a Affine) Projective { z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() } else { p.X = a.X p.Y = a.Y @@ -116,11 +114,8 @@ func (a Affine) ToProjective() Projective { var z BaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return Projective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p Projective + return p.Zero() } return Projective{ diff --git a/wrappers/golang/curves/bls12381/g2/curve.go b/wrappers/golang/curves/bls12381/g2/curve.go index 70151331..d4fced65 100644 --- a/wrappers/golang/curves/bls12381/g2/curve.go +++ b/wrappers/golang/curves/bls12381/g2/curve.go @@ -44,9 +44,7 @@ func (p *G2Projective) FromAffine(a G2Affine) G2Projective { z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() } else { p.X = a.X p.Y = a.Y @@ -116,11 +114,8 @@ func (a G2Affine) ToProjective() G2Projective { var z G2BaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return G2Projective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p G2Projective + return p.Zero() } return G2Projective{ diff --git a/wrappers/golang/curves/bn254/curve.go b/wrappers/golang/curves/bn254/curve.go index c91ee0cd..3bc94a8f 100644 --- a/wrappers/golang/curves/bn254/curve.go +++ b/wrappers/golang/curves/bn254/curve.go @@ -44,9 +44,7 @@ func (p *Projective) FromAffine(a Affine) Projective { z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() } else { p.X = a.X p.Y = a.Y @@ -116,11 +114,8 @@ func (a Affine) ToProjective() Projective { var z BaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return Projective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p Projective + return p.Zero() } return Projective{ diff --git a/wrappers/golang/curves/bn254/g2/curve.go b/wrappers/golang/curves/bn254/g2/curve.go index 58456188..7ee0ec7f 100644 --- a/wrappers/golang/curves/bn254/g2/curve.go +++ b/wrappers/golang/curves/bn254/g2/curve.go @@ -44,9 +44,7 @@ func (p *G2Projective) FromAffine(a G2Affine) G2Projective { z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() } else { p.X = a.X p.Y = a.Y @@ -116,11 +114,8 @@ func (a G2Affine) ToProjective() G2Projective { var z G2BaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return G2Projective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p G2Projective + return p.Zero() } return G2Projective{ diff --git a/wrappers/golang/curves/bw6761/curve.go b/wrappers/golang/curves/bw6761/curve.go index 7d881dd9..2e8518be 100644 --- a/wrappers/golang/curves/bw6761/curve.go +++ b/wrappers/golang/curves/bw6761/curve.go @@ -44,9 +44,7 @@ func (p *Projective) FromAffine(a Affine) Projective { z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() } else { p.X = a.X p.Y = a.Y @@ -116,11 +114,8 @@ func (a Affine) ToProjective() Projective { var z BaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return Projective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p Projective + return p.Zero() } return Projective{ diff --git a/wrappers/golang/curves/bw6761/g2/curve.go b/wrappers/golang/curves/bw6761/g2/curve.go index dcb523e3..1433602a 100644 --- a/wrappers/golang/curves/bw6761/g2/curve.go +++ b/wrappers/golang/curves/bw6761/g2/curve.go @@ -44,9 +44,7 @@ func (p *G2Projective) FromAffine(a G2Affine) G2Projective { z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() } else { p.X = a.X p.Y = a.Y @@ -116,11 +114,8 @@ func (a G2Affine) ToProjective() G2Projective { var z G2BaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return G2Projective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p G2Projective + return p.Zero() } return G2Projective{ diff --git a/wrappers/golang/curves/grumpkin/curve.go b/wrappers/golang/curves/grumpkin/curve.go index d23ff241..1079ce2e 100644 --- a/wrappers/golang/curves/grumpkin/curve.go +++ b/wrappers/golang/curves/grumpkin/curve.go @@ -44,9 +44,7 @@ func (p *Projective) FromAffine(a Affine) Projective { z.One() if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.X = z.Zero() - p.Y = z.One() - p.Z = z.Zero() + p.Zero() } else { p.X = a.X p.Y = a.Y @@ -116,11 +114,8 @@ func (a Affine) ToProjective() Projective { var z BaseField if (a.X == z.Zero()) && (a.Y == z.Zero()) { - return Projective{ - X: z.Zero(), - Y: z.One(), - Z: z.Zero(), - } + var p Projective + return p.Zero() } return Projective{ From 6336e74d5a0944e7f782563d7ce2c41db386d9c1 Mon Sep 17 00:00:00 2001 From: Vlad <88586482+vladfdp@users.noreply.github.com> Date: Thu, 4 Jul 2024 11:03:58 +0200 Subject: [PATCH 6/9] refactor from_affine with C link --- icicle/src/curves/extern.cu | 5 +++ icicle/src/curves/extern_g2.cu | 5 +++ wrappers/golang/core/internal/mock_curve.go | 30 ------------- wrappers/golang/curves/bls12377/curve.go | 31 ++++--------- wrappers/golang/curves/bls12377/g2/curve.go | 31 ++++--------- .../golang/curves/bls12377/g2/include/curve.h | 1 + .../golang/curves/bls12377/include/curve.h | 1 + wrappers/golang/curves/bls12381/curve.go | 31 ++++--------- wrappers/golang/curves/bls12381/g2/curve.go | 31 ++++--------- .../golang/curves/bls12381/g2/include/curve.h | 1 + .../golang/curves/bls12381/include/curve.h | 1 + wrappers/golang/curves/bn254/curve.go | 31 ++++--------- wrappers/golang/curves/bn254/g2/curve.go | 31 ++++--------- .../golang/curves/bn254/g2/include/curve.h | 1 + wrappers/golang/curves/bn254/include/curve.h | 1 + wrappers/golang/curves/bw6761/curve.go | 31 ++++--------- wrappers/golang/curves/bw6761/g2/curve.go | 31 ++++--------- .../golang/curves/bw6761/g2/include/curve.h | 1 + wrappers/golang/curves/bw6761/include/curve.h | 1 + wrappers/golang/curves/grumpkin/curve.go | 31 ++++--------- .../golang/curves/grumpkin/include/curve.h | 1 + .../generator/curves/templates/curve.go.tmpl | 43 ++++++++----------- .../generator/curves/templates/curve.h.tmpl | 1 + wrappers/rust/icicle-core/src/curve.rs | 30 ++++++------- 24 files changed, 132 insertions(+), 270 deletions(-) diff --git a/icicle/src/curves/extern.cu b/icicle/src/curves/extern.cu index 8ea5bce2..a40d24ff 100644 --- a/icicle/src/curves/extern.cu +++ b/icicle/src/curves/extern.cu @@ -20,6 +20,11 @@ extern "C" void CONCAT_EXPAND(CURVE, to_affine)(projective_t* point, affine_t* p *point_out = projective_t::to_affine(*point); } +extern "C" void CONCAT_EXPAND(CURVE, from_affine)(affine_t* point, projective_t* point_out) +{ + *point_out = projective_t::from_affine(*point); +} + extern "C" void CONCAT_EXPAND(CURVE, generate_projective_points)(projective_t* points, int size) { projective_t::rand_host_many(points, size); diff --git a/icicle/src/curves/extern_g2.cu b/icicle/src/curves/extern_g2.cu index e8daa5e1..6d1e4414 100644 --- a/icicle/src/curves/extern_g2.cu +++ b/icicle/src/curves/extern_g2.cu @@ -20,6 +20,11 @@ extern "C" void CONCAT_EXPAND(CURVE, g2_to_affine)(g2_projective_t* point, g2_af *point_out = g2_projective_t::to_affine(*point); } +extern "C" void CONCAT_EXPAND(CURVE, g2_from_affine)(g2_affine_t* point, g2_projective_t* point_out) +{ + *point_out = g2_projective_t::from_affine(*point); +} + extern "C" void CONCAT_EXPAND(CURVE, g2_generate_projective_points)(g2_projective_t* points, int size) { g2_projective_t::rand_host_many(points, size); diff --git a/wrappers/golang/core/internal/mock_curve.go b/wrappers/golang/core/internal/mock_curve.go index de21b3d9..dddbddee 100644 --- a/wrappers/golang/core/internal/mock_curve.go +++ b/wrappers/golang/core/internal/mock_curve.go @@ -28,21 +28,6 @@ func (p *MockProjective) FromLimbs(x, y, z []uint32) MockProjective { return *p } -func (p *MockProjective) FromAffine(a MockAffine) MockProjective { - z := MockBaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - } else { - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } - - return *p -} - type MockAffine struct { X, Y MockBaseField } @@ -68,18 +53,3 @@ func (a *MockAffine) FromLimbs(x, y []uint32) MockAffine { return *a } - -func (a MockAffine) ToProjective() MockProjective { - var z MockBaseField - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p MockProjective - return p.Zero() - } - - return MockProjective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } -} diff --git a/wrappers/golang/curves/bls12377/curve.go b/wrappers/golang/curves/bls12377/curve.go index 8083669a..43184ff5 100644 --- a/wrappers/golang/curves/bls12377/curve.go +++ b/wrappers/golang/curves/bls12377/curve.go @@ -40,17 +40,10 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { } func (p *Projective) FromAffine(a Affine) Projective { - z := BaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - } else { - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } + cA := (*C.affine_t)(unsafe.Pointer(&a)) + cP := (*C.projective_t)(unsafe.Pointer(p)) + C.bls12_377_from_affine(cA, cP) return *p } @@ -65,7 +58,7 @@ func (p *Projective) ProjectiveToAffine() Affine { var a Affine cA := (*C.affine_t)(unsafe.Pointer(&a)) - cP := (*C.projective_t)(unsafe.Pointer(&p)) + cP := (*C.projective_t)(unsafe.Pointer(p)) C.bls12_377_to_affine(cP, cA) return a } @@ -111,18 +104,12 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { } func (a Affine) ToProjective() Projective { - var z BaseField + var p Projective - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p Projective - return p.Zero() - } - - return Projective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } + cA := (*C.affine_t)(unsafe.Pointer(&a)) + cP := (*C.projective_t)(unsafe.Pointer(&p)) + C.bls12_377_from_affine(cA, cP) + return p } func AffineFromProjective(p *Projective) Affine { diff --git a/wrappers/golang/curves/bls12377/g2/curve.go b/wrappers/golang/curves/bls12377/g2/curve.go index 7da1d271..4544e973 100644 --- a/wrappers/golang/curves/bls12377/g2/curve.go +++ b/wrappers/golang/curves/bls12377/g2/curve.go @@ -40,17 +40,10 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective { } func (p *G2Projective) FromAffine(a G2Affine) G2Projective { - z := G2BaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - } else { - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } + cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) + cP := (*C.g2_projective_t)(unsafe.Pointer(p)) + C.bls12_377_g2_from_affine(cA, cP) return *p } @@ -65,7 +58,7 @@ func (p *G2Projective) ProjectiveToAffine() G2Affine { var a G2Affine cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) - cP := (*C.g2_projective_t)(unsafe.Pointer(&p)) + cP := (*C.g2_projective_t)(unsafe.Pointer(p)) C.bls12_377_g2_to_affine(cP, cA) return a } @@ -111,18 +104,12 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine { } func (a G2Affine) ToProjective() G2Projective { - var z G2BaseField + var p G2Projective - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p G2Projective - return p.Zero() - } - - return G2Projective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } + cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) + cP := (*C.g2_projective_t)(unsafe.Pointer(&p)) + C.bls12_377_g2_from_affine(cA, cP) + return p } func G2AffineFromProjective(p *G2Projective) G2Affine { diff --git a/wrappers/golang/curves/bls12377/g2/include/curve.h b/wrappers/golang/curves/bls12377/g2/include/curve.h index b136de9a..57d5e148 100644 --- a/wrappers/golang/curves/bls12377/g2/include/curve.h +++ b/wrappers/golang/curves/bls12377/g2/include/curve.h @@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext; bool bls12_377_g2_eq(g2_projective_t* point1, g2_projective_t* point2); void bls12_377_g2_to_affine(g2_projective_t* point, g2_affine_t* point_out); +void bls12_377_g2_from_affine(g2_affine_t* point, g2_projective_t* point_out); void bls12_377_g2_generate_projective_points(g2_projective_t* points, int size); void bls12_377_g2_generate_affine_points(g2_affine_t* points, int size); cudaError_t bls12_377_g2_affine_convert_montgomery(g2_affine_t* points, size_t n, bool is_into, DeviceContext* ctx); diff --git a/wrappers/golang/curves/bls12377/include/curve.h b/wrappers/golang/curves/bls12377/include/curve.h index 87a0229b..6f32d1c3 100644 --- a/wrappers/golang/curves/bls12377/include/curve.h +++ b/wrappers/golang/curves/bls12377/include/curve.h @@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext; bool bls12_377_eq(projective_t* point1, projective_t* point2); void bls12_377_to_affine(projective_t* point, affine_t* point_out); +void bls12_377_from_affine(affine_t* point, projective_t* point_out); void bls12_377_generate_projective_points(projective_t* points, int size); void bls12_377_generate_affine_points(affine_t* points, int size); cudaError_t bls12_377_affine_convert_montgomery(affine_t* points, size_t n, bool is_into, DeviceContext* ctx); diff --git a/wrappers/golang/curves/bls12381/curve.go b/wrappers/golang/curves/bls12381/curve.go index 02cee7b6..3b1b59ea 100644 --- a/wrappers/golang/curves/bls12381/curve.go +++ b/wrappers/golang/curves/bls12381/curve.go @@ -40,17 +40,10 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { } func (p *Projective) FromAffine(a Affine) Projective { - z := BaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - } else { - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } + cA := (*C.affine_t)(unsafe.Pointer(&a)) + cP := (*C.projective_t)(unsafe.Pointer(p)) + C.bls12_381_from_affine(cA, cP) return *p } @@ -65,7 +58,7 @@ func (p *Projective) ProjectiveToAffine() Affine { var a Affine cA := (*C.affine_t)(unsafe.Pointer(&a)) - cP := (*C.projective_t)(unsafe.Pointer(&p)) + cP := (*C.projective_t)(unsafe.Pointer(p)) C.bls12_381_to_affine(cP, cA) return a } @@ -111,18 +104,12 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { } func (a Affine) ToProjective() Projective { - var z BaseField + var p Projective - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p Projective - return p.Zero() - } - - return Projective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } + cA := (*C.affine_t)(unsafe.Pointer(&a)) + cP := (*C.projective_t)(unsafe.Pointer(&p)) + C.bls12_381_from_affine(cA, cP) + return p } func AffineFromProjective(p *Projective) Affine { diff --git a/wrappers/golang/curves/bls12381/g2/curve.go b/wrappers/golang/curves/bls12381/g2/curve.go index d4fced65..b9256e00 100644 --- a/wrappers/golang/curves/bls12381/g2/curve.go +++ b/wrappers/golang/curves/bls12381/g2/curve.go @@ -40,17 +40,10 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective { } func (p *G2Projective) FromAffine(a G2Affine) G2Projective { - z := G2BaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - } else { - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } + cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) + cP := (*C.g2_projective_t)(unsafe.Pointer(p)) + C.bls12_381_g2_from_affine(cA, cP) return *p } @@ -65,7 +58,7 @@ func (p *G2Projective) ProjectiveToAffine() G2Affine { var a G2Affine cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) - cP := (*C.g2_projective_t)(unsafe.Pointer(&p)) + cP := (*C.g2_projective_t)(unsafe.Pointer(p)) C.bls12_381_g2_to_affine(cP, cA) return a } @@ -111,18 +104,12 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine { } func (a G2Affine) ToProjective() G2Projective { - var z G2BaseField + var p G2Projective - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p G2Projective - return p.Zero() - } - - return G2Projective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } + cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) + cP := (*C.g2_projective_t)(unsafe.Pointer(&p)) + C.bls12_381_g2_from_affine(cA, cP) + return p } func G2AffineFromProjective(p *G2Projective) G2Affine { diff --git a/wrappers/golang/curves/bls12381/g2/include/curve.h b/wrappers/golang/curves/bls12381/g2/include/curve.h index b7710244..274f3ec1 100644 --- a/wrappers/golang/curves/bls12381/g2/include/curve.h +++ b/wrappers/golang/curves/bls12381/g2/include/curve.h @@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext; bool bls12_381_g2_eq(g2_projective_t* point1, g2_projective_t* point2); void bls12_381_g2_to_affine(g2_projective_t* point, g2_affine_t* point_out); +void bls12_381_g2_from_affine(g2_affine_t* point, g2_projective_t* point_out); void bls12_381_g2_generate_projective_points(g2_projective_t* points, int size); void bls12_381_g2_generate_affine_points(g2_affine_t* points, int size); cudaError_t bls12_381_g2_affine_convert_montgomery(g2_affine_t* points, size_t n, bool is_into, DeviceContext* ctx); diff --git a/wrappers/golang/curves/bls12381/include/curve.h b/wrappers/golang/curves/bls12381/include/curve.h index 1cb3bd61..b9a50675 100644 --- a/wrappers/golang/curves/bls12381/include/curve.h +++ b/wrappers/golang/curves/bls12381/include/curve.h @@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext; bool bls12_381_eq(projective_t* point1, projective_t* point2); void bls12_381_to_affine(projective_t* point, affine_t* point_out); +void bls12_381_from_affine(affine_t* point, projective_t* point_out); void bls12_381_generate_projective_points(projective_t* points, int size); void bls12_381_generate_affine_points(affine_t* points, int size); cudaError_t bls12_381_affine_convert_montgomery(affine_t* points, size_t n, bool is_into, DeviceContext* ctx); diff --git a/wrappers/golang/curves/bn254/curve.go b/wrappers/golang/curves/bn254/curve.go index 3bc94a8f..c2b6b1b8 100644 --- a/wrappers/golang/curves/bn254/curve.go +++ b/wrappers/golang/curves/bn254/curve.go @@ -40,17 +40,10 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { } func (p *Projective) FromAffine(a Affine) Projective { - z := BaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - } else { - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } + cA := (*C.affine_t)(unsafe.Pointer(&a)) + cP := (*C.projective_t)(unsafe.Pointer(p)) + C.bn254_from_affine(cA, cP) return *p } @@ -65,7 +58,7 @@ func (p *Projective) ProjectiveToAffine() Affine { var a Affine cA := (*C.affine_t)(unsafe.Pointer(&a)) - cP := (*C.projective_t)(unsafe.Pointer(&p)) + cP := (*C.projective_t)(unsafe.Pointer(p)) C.bn254_to_affine(cP, cA) return a } @@ -111,18 +104,12 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { } func (a Affine) ToProjective() Projective { - var z BaseField + var p Projective - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p Projective - return p.Zero() - } - - return Projective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } + cA := (*C.affine_t)(unsafe.Pointer(&a)) + cP := (*C.projective_t)(unsafe.Pointer(&p)) + C.bn254_from_affine(cA, cP) + return p } func AffineFromProjective(p *Projective) Affine { diff --git a/wrappers/golang/curves/bn254/g2/curve.go b/wrappers/golang/curves/bn254/g2/curve.go index 7ee0ec7f..72245e02 100644 --- a/wrappers/golang/curves/bn254/g2/curve.go +++ b/wrappers/golang/curves/bn254/g2/curve.go @@ -40,17 +40,10 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective { } func (p *G2Projective) FromAffine(a G2Affine) G2Projective { - z := G2BaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - } else { - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } + cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) + cP := (*C.g2_projective_t)(unsafe.Pointer(p)) + C.bn254_g2_from_affine(cA, cP) return *p } @@ -65,7 +58,7 @@ func (p *G2Projective) ProjectiveToAffine() G2Affine { var a G2Affine cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) - cP := (*C.g2_projective_t)(unsafe.Pointer(&p)) + cP := (*C.g2_projective_t)(unsafe.Pointer(p)) C.bn254_g2_to_affine(cP, cA) return a } @@ -111,18 +104,12 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine { } func (a G2Affine) ToProjective() G2Projective { - var z G2BaseField + var p G2Projective - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p G2Projective - return p.Zero() - } - - return G2Projective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } + cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) + cP := (*C.g2_projective_t)(unsafe.Pointer(&p)) + C.bn254_g2_from_affine(cA, cP) + return p } func G2AffineFromProjective(p *G2Projective) G2Affine { diff --git a/wrappers/golang/curves/bn254/g2/include/curve.h b/wrappers/golang/curves/bn254/g2/include/curve.h index e8863f1e..c24deb30 100644 --- a/wrappers/golang/curves/bn254/g2/include/curve.h +++ b/wrappers/golang/curves/bn254/g2/include/curve.h @@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext; bool bn254_g2_eq(g2_projective_t* point1, g2_projective_t* point2); void bn254_g2_to_affine(g2_projective_t* point, g2_affine_t* point_out); +void bn254_g2_from_affine(g2_affine_t* point, g2_projective_t* point_out); void bn254_g2_generate_projective_points(g2_projective_t* points, int size); void bn254_g2_generate_affine_points(g2_affine_t* points, int size); cudaError_t bn254_g2_affine_convert_montgomery(g2_affine_t* points, size_t n, bool is_into, DeviceContext* ctx); diff --git a/wrappers/golang/curves/bn254/include/curve.h b/wrappers/golang/curves/bn254/include/curve.h index 069600aa..ce29f587 100644 --- a/wrappers/golang/curves/bn254/include/curve.h +++ b/wrappers/golang/curves/bn254/include/curve.h @@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext; bool bn254_eq(projective_t* point1, projective_t* point2); void bn254_to_affine(projective_t* point, affine_t* point_out); +void bn254_from_affine(affine_t* point, projective_t* point_out); void bn254_generate_projective_points(projective_t* points, int size); void bn254_generate_affine_points(affine_t* points, int size); cudaError_t bn254_affine_convert_montgomery(affine_t* points, size_t n, bool is_into, DeviceContext* ctx); diff --git a/wrappers/golang/curves/bw6761/curve.go b/wrappers/golang/curves/bw6761/curve.go index 2e8518be..33449944 100644 --- a/wrappers/golang/curves/bw6761/curve.go +++ b/wrappers/golang/curves/bw6761/curve.go @@ -40,17 +40,10 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { } func (p *Projective) FromAffine(a Affine) Projective { - z := BaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - } else { - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } + cA := (*C.affine_t)(unsafe.Pointer(&a)) + cP := (*C.projective_t)(unsafe.Pointer(p)) + C.bw6_761_from_affine(cA, cP) return *p } @@ -65,7 +58,7 @@ func (p *Projective) ProjectiveToAffine() Affine { var a Affine cA := (*C.affine_t)(unsafe.Pointer(&a)) - cP := (*C.projective_t)(unsafe.Pointer(&p)) + cP := (*C.projective_t)(unsafe.Pointer(p)) C.bw6_761_to_affine(cP, cA) return a } @@ -111,18 +104,12 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { } func (a Affine) ToProjective() Projective { - var z BaseField + var p Projective - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p Projective - return p.Zero() - } - - return Projective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } + cA := (*C.affine_t)(unsafe.Pointer(&a)) + cP := (*C.projective_t)(unsafe.Pointer(&p)) + C.bw6_761_from_affine(cA, cP) + return p } func AffineFromProjective(p *Projective) Affine { diff --git a/wrappers/golang/curves/bw6761/g2/curve.go b/wrappers/golang/curves/bw6761/g2/curve.go index 1433602a..f38bf134 100644 --- a/wrappers/golang/curves/bw6761/g2/curve.go +++ b/wrappers/golang/curves/bw6761/g2/curve.go @@ -40,17 +40,10 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective { } func (p *G2Projective) FromAffine(a G2Affine) G2Projective { - z := G2BaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - } else { - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } + cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) + cP := (*C.g2_projective_t)(unsafe.Pointer(p)) + C.bw6_761_g2_from_affine(cA, cP) return *p } @@ -65,7 +58,7 @@ func (p *G2Projective) ProjectiveToAffine() G2Affine { var a G2Affine cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) - cP := (*C.g2_projective_t)(unsafe.Pointer(&p)) + cP := (*C.g2_projective_t)(unsafe.Pointer(p)) C.bw6_761_g2_to_affine(cP, cA) return a } @@ -111,18 +104,12 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine { } func (a G2Affine) ToProjective() G2Projective { - var z G2BaseField + var p G2Projective - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p G2Projective - return p.Zero() - } - - return G2Projective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } + cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) + cP := (*C.g2_projective_t)(unsafe.Pointer(&p)) + C.bw6_761_g2_from_affine(cA, cP) + return p } func G2AffineFromProjective(p *G2Projective) G2Affine { diff --git a/wrappers/golang/curves/bw6761/g2/include/curve.h b/wrappers/golang/curves/bw6761/g2/include/curve.h index b57b55cf..8d113fc9 100644 --- a/wrappers/golang/curves/bw6761/g2/include/curve.h +++ b/wrappers/golang/curves/bw6761/g2/include/curve.h @@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext; bool bw6_761_g2_eq(g2_projective_t* point1, g2_projective_t* point2); void bw6_761_g2_to_affine(g2_projective_t* point, g2_affine_t* point_out); +void bw6_761_g2_from_affine(g2_affine_t* point, g2_projective_t* point_out); void bw6_761_g2_generate_projective_points(g2_projective_t* points, int size); void bw6_761_g2_generate_affine_points(g2_affine_t* points, int size); cudaError_t bw6_761_g2_affine_convert_montgomery(g2_affine_t* points, size_t n, bool is_into, DeviceContext* ctx); diff --git a/wrappers/golang/curves/bw6761/include/curve.h b/wrappers/golang/curves/bw6761/include/curve.h index cc6e401c..ba243029 100644 --- a/wrappers/golang/curves/bw6761/include/curve.h +++ b/wrappers/golang/curves/bw6761/include/curve.h @@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext; bool bw6_761_eq(projective_t* point1, projective_t* point2); void bw6_761_to_affine(projective_t* point, affine_t* point_out); +void bw6_761_from_affine(affine_t* point, projective_t* point_out); void bw6_761_generate_projective_points(projective_t* points, int size); void bw6_761_generate_affine_points(affine_t* points, int size); cudaError_t bw6_761_affine_convert_montgomery(affine_t* points, size_t n, bool is_into, DeviceContext* ctx); diff --git a/wrappers/golang/curves/grumpkin/curve.go b/wrappers/golang/curves/grumpkin/curve.go index 1079ce2e..1411a246 100644 --- a/wrappers/golang/curves/grumpkin/curve.go +++ b/wrappers/golang/curves/grumpkin/curve.go @@ -40,17 +40,10 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { } func (p *Projective) FromAffine(a Affine) Projective { - z := BaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - } else { - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } + cA := (*C.affine_t)(unsafe.Pointer(&a)) + cP := (*C.projective_t)(unsafe.Pointer(p)) + C.grumpkin_from_affine(cA, cP) return *p } @@ -65,7 +58,7 @@ func (p *Projective) ProjectiveToAffine() Affine { var a Affine cA := (*C.affine_t)(unsafe.Pointer(&a)) - cP := (*C.projective_t)(unsafe.Pointer(&p)) + cP := (*C.projective_t)(unsafe.Pointer(p)) C.grumpkin_to_affine(cP, cA) return a } @@ -111,18 +104,12 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { } func (a Affine) ToProjective() Projective { - var z BaseField + var p Projective - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p Projective - return p.Zero() - } - - return Projective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } + cA := (*C.affine_t)(unsafe.Pointer(&a)) + cP := (*C.projective_t)(unsafe.Pointer(&p)) + C.grumpkin_from_affine(cA, cP) + return p } func AffineFromProjective(p *Projective) Affine { diff --git a/wrappers/golang/curves/grumpkin/include/curve.h b/wrappers/golang/curves/grumpkin/include/curve.h index 8466982e..6005b280 100644 --- a/wrappers/golang/curves/grumpkin/include/curve.h +++ b/wrappers/golang/curves/grumpkin/include/curve.h @@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext; bool grumpkin_eq(projective_t* point1, projective_t* point2); void grumpkin_to_affine(projective_t* point, affine_t* point_out); +void grumpkin_from_affine(affine_t* point, projective_t* point_out); void grumpkin_generate_projective_points(projective_t* points, int size); void grumpkin_generate_affine_points(affine_t* points, int size); cudaError_t grumpkin_affine_convert_montgomery(affine_t* points, size_t n, bool is_into, DeviceContext* ctx); diff --git a/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl b/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl index d02fe6a9..1378557e 100644 --- a/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl +++ b/wrappers/golang/internal/generator/curves/templates/curve.go.tmpl @@ -39,21 +39,16 @@ func (p *{{.CurvePrefix}}Projective) FromLimbs(x, y, z []uint32) {{.CurvePrefix} return *p } + +{{if ne .CurvePrefix "Mock"}} func (p *{{.CurvePrefix}}Projective) FromAffine(a {{.CurvePrefix}}Affine) {{.CurvePrefix}}Projective { - z := {{.CurvePrefix}}BaseField{} - z.One() - - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - p.Zero() - }else{ - p.X = a.X - p.Y = a.Y - p.Z = z.One() - } - + + cA := (*C.{{toCName .CurvePrefix}}affine_t)(unsafe.Pointer(&a)) + cP := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(p)) + C.{{.Curve}}{{toCNameBackwards .CurvePrefix}}_from_affine(cA, cP) return *p } -{{if ne .CurvePrefix "Mock"}} + func (p {{.CurvePrefix}}Projective) ProjectiveEq(p2 *{{.CurvePrefix}}Projective) bool { cP := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(&p)) cP2 := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(&p2)) @@ -65,7 +60,7 @@ func (p *{{.CurvePrefix}}Projective) ProjectiveToAffine() {{.CurvePrefix}}Affine var a {{.CurvePrefix}}Affine cA := (*C.{{toCName .CurvePrefix}}affine_t)(unsafe.Pointer(&a)) - cP := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(&p)) + cP := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(p)) C.{{.Curve}}{{toCNameBackwards .CurvePrefix}}_to_affine(cP, cA) return a } @@ -110,21 +105,17 @@ func (a *{{.CurvePrefix}}Affine) FromLimbs(x, y []uint32) {{.CurvePrefix}}Affine return *a } -func (a {{.CurvePrefix}}Affine) ToProjective() {{.CurvePrefix}}Projective { - var z {{.CurvePrefix}}BaseField - if (a.X == z.Zero()) && (a.Y == z.Zero()) { - var p {{.CurvePrefix}}Projective - return p.Zero() - } - - return {{.CurvePrefix}}Projective{ - X: a.X, - Y: a.Y, - Z: z.One(), - } -} {{if ne .CurvePrefix "Mock"}} +func (a {{.CurvePrefix}}Affine) ToProjective() {{.CurvePrefix}}Projective { + var p {{.CurvePrefix}}Projective + + cA := (*C.{{toCName .CurvePrefix}}affine_t)(unsafe.Pointer(&a)) + cP := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(&p)) + C.{{.Curve}}{{toCNameBackwards .CurvePrefix}}_from_affine(cA, cP) + return p +} + func {{.CurvePrefix}}AffineFromProjective(p *{{.CurvePrefix}}Projective) {{.CurvePrefix}}Affine { return p.ProjectiveToAffine() } diff --git a/wrappers/golang/internal/generator/curves/templates/curve.h.tmpl b/wrappers/golang/internal/generator/curves/templates/curve.h.tmpl index 22179e6f..0dffd240 100644 --- a/wrappers/golang/internal/generator/curves/templates/curve.h.tmpl +++ b/wrappers/golang/internal/generator/curves/templates/curve.h.tmpl @@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext; bool {{.Curve}}{{toCNameBackwards .CurvePrefix}}_eq({{toCName .CurvePrefix}}projective_t* point1, {{toCName .CurvePrefix}}projective_t* point2); void {{.Curve}}{{toCNameBackwards .CurvePrefix}}_to_affine({{toCName .CurvePrefix}}projective_t* point, {{toCName .CurvePrefix}}affine_t* point_out); +void {{.Curve}}{{toCNameBackwards .CurvePrefix}}_from_affine({{toCName .CurvePrefix}}affine_t* point, {{toCName .CurvePrefix}}projective_t* point_out); void {{.Curve}}{{toCNameBackwards .CurvePrefix}}_generate_projective_points({{toCName .CurvePrefix}}projective_t* points, int size); void {{.Curve}}{{toCNameBackwards .CurvePrefix}}_generate_affine_points({{toCName .CurvePrefix}}affine_t* points, int size); cudaError_t {{.Curve}}{{toCNameBackwards .CurvePrefix}}_affine_convert_montgomery({{toCName .CurvePrefix}}affine_t* points, size_t n, bool is_into, DeviceContext* ctx); diff --git a/wrappers/rust/icicle-core/src/curve.rs b/wrappers/rust/icicle-core/src/curve.rs index c0b82d11..a0bf70bc 100644 --- a/wrappers/rust/icicle-core/src/curve.rs +++ b/wrappers/rust/icicle-core/src/curve.rs @@ -22,6 +22,8 @@ pub trait Curve: Debug + PartialEq + Copy + Clone { #[doc(hidden)] fn to_affine(point: *const Projective, point_aff: *mut Affine); #[doc(hidden)] + fn from_affine(point: *const Affine, point_proj: *mut Projective); + #[doc(hidden)] fn generate_random_projective_points(size: usize) -> Vec>; #[doc(hidden)] fn generate_random_affine_points(size: usize) -> Vec>; @@ -79,27 +81,17 @@ impl Affine { } pub fn to_projective(&self) -> Projective { - if *self == Self::zero() { - return Projective::::zero(); - } - Projective { - x: self.x, - y: self.y, - z: C::BaseField::one(), - } + let mut proj = Projective::::zero(); + C::from_affine(self as *const Self, &mut proj as *mut Projective); + proj } } impl From> for Projective { fn from(item: Affine) -> Self { - if item == (Affine::::zero()) { - return Self::zero(); - } - Self { - x: item.x, - y: item.y, - z: C::BaseField::one(), - } + let mut proj = Self::zero(); + C::from_affine(&item as *const Affine, &mut proj as *mut Self); + proj } } @@ -282,6 +274,8 @@ macro_rules! impl_curve { pub(crate) fn eq(point1: *const $projective_type, point2: *const $projective_type) -> bool; #[link_name = concat!($curve_prefix, "_to_affine")] pub(crate) fn proj_to_affine(point: *const $projective_type, point_out: *mut $affine_type); + #[link_name = concat!($curve_prefix, "_from_affine")] + pub(crate) fn proj_from_affine(point: *const $affine_type, point_out: *mut $projective_type); #[link_name = concat!($curve_prefix, "_generate_projective_points")] pub(crate) fn generate_projective_points(points: *mut $projective_type, size: usize); #[link_name = concat!($curve_prefix, "_generate_affine_points")] @@ -315,6 +309,10 @@ macro_rules! impl_curve { unsafe { $curve_prefix_ident::proj_to_affine(point, point_out) }; } + fn from_affine(point: *const $affine_type, point_out: *mut $projective_type) { + unsafe { $curve_prefix_ident::proj_from_affine(point, point_out) }; + } + fn generate_random_projective_points(size: usize) -> Vec<$projective_type> { let mut res = vec![$projective_type::zero(); size]; unsafe { From e4eda8938d513d82225d0f1a65ab14b79b3e370b Mon Sep 17 00:00:00 2001 From: Vlad <88586482+vladfdp@users.noreply.github.com> Date: Fri, 5 Jul 2024 21:29:44 +0200 Subject: [PATCH 7/9] go fmt --- wrappers/golang/curves/bls12377/curve.go | 3 +-- wrappers/golang/curves/bn254/curve.go | 1 - wrappers/golang/curves/bw6761/curve.go | 1 - wrappers/golang/curves/grumpkin/curve.go | 1 - 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/wrappers/golang/curves/bls12377/curve.go b/wrappers/golang/curves/bls12377/curve.go index 7691e83a..43184ff5 100644 --- a/wrappers/golang/curves/bls12377/curve.go +++ b/wrappers/golang/curves/bls12377/curve.go @@ -41,7 +41,6 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { func (p *Projective) FromAffine(a Affine) Projective { - cA := (*C.affine_t)(unsafe.Pointer(&a)) cP := (*C.projective_t)(unsafe.Pointer(p)) C.bls12_377_from_affine(cA, cP) @@ -106,7 +105,7 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { func (a Affine) ToProjective() Projective { var p Projective - + cA := (*C.affine_t)(unsafe.Pointer(&a)) cP := (*C.projective_t)(unsafe.Pointer(&p)) C.bls12_377_from_affine(cA, cP) diff --git a/wrappers/golang/curves/bn254/curve.go b/wrappers/golang/curves/bn254/curve.go index fe55536b..f78e0284 100644 --- a/wrappers/golang/curves/bn254/curve.go +++ b/wrappers/golang/curves/bn254/curve.go @@ -41,7 +41,6 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { func (p *Projective) FromAffine(a Affine) Projective { - cA := (*C.affine_t)(unsafe.Pointer(&a)) cP := (*C.projective_t)(unsafe.Pointer(p)) C.bn254_from_affine(cA, cP) diff --git a/wrappers/golang/curves/bw6761/curve.go b/wrappers/golang/curves/bw6761/curve.go index 21486af4..38a68fd9 100644 --- a/wrappers/golang/curves/bw6761/curve.go +++ b/wrappers/golang/curves/bw6761/curve.go @@ -41,7 +41,6 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { func (p *Projective) FromAffine(a Affine) Projective { - cA := (*C.affine_t)(unsafe.Pointer(&a)) cP := (*C.projective_t)(unsafe.Pointer(p)) C.bw6_761_from_affine(cA, cP) diff --git a/wrappers/golang/curves/grumpkin/curve.go b/wrappers/golang/curves/grumpkin/curve.go index 13e9b99a..4ad6e232 100644 --- a/wrappers/golang/curves/grumpkin/curve.go +++ b/wrappers/golang/curves/grumpkin/curve.go @@ -41,7 +41,6 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { func (p *Projective) FromAffine(a Affine) Projective { - cA := (*C.affine_t)(unsafe.Pointer(&a)) cP := (*C.projective_t)(unsafe.Pointer(p)) C.grumpkin_from_affine(cA, cP) From 46e6c2044093b93a8bb7ff1e5776fdfb07d2ac48 Mon Sep 17 00:00:00 2001 From: Vlad <88586482+vladfdp@users.noreply.github.com> Date: Fri, 5 Jul 2024 21:29:44 +0200 Subject: [PATCH 8/9] go fmt --- wrappers/golang/curves/bls12377/curve.go | 3 +-- wrappers/golang/curves/bn254/curve.go | 1 - wrappers/golang/curves/bw6761/curve.go | 1 - wrappers/golang/curves/grumpkin/curve.go | 1 - 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/wrappers/golang/curves/bls12377/curve.go b/wrappers/golang/curves/bls12377/curve.go index 7691e83a..43184ff5 100644 --- a/wrappers/golang/curves/bls12377/curve.go +++ b/wrappers/golang/curves/bls12377/curve.go @@ -41,7 +41,6 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { func (p *Projective) FromAffine(a Affine) Projective { - cA := (*C.affine_t)(unsafe.Pointer(&a)) cP := (*C.projective_t)(unsafe.Pointer(p)) C.bls12_377_from_affine(cA, cP) @@ -106,7 +105,7 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine { func (a Affine) ToProjective() Projective { var p Projective - + cA := (*C.affine_t)(unsafe.Pointer(&a)) cP := (*C.projective_t)(unsafe.Pointer(&p)) C.bls12_377_from_affine(cA, cP) diff --git a/wrappers/golang/curves/bn254/curve.go b/wrappers/golang/curves/bn254/curve.go index fe55536b..f78e0284 100644 --- a/wrappers/golang/curves/bn254/curve.go +++ b/wrappers/golang/curves/bn254/curve.go @@ -41,7 +41,6 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { func (p *Projective) FromAffine(a Affine) Projective { - cA := (*C.affine_t)(unsafe.Pointer(&a)) cP := (*C.projective_t)(unsafe.Pointer(p)) C.bn254_from_affine(cA, cP) diff --git a/wrappers/golang/curves/bw6761/curve.go b/wrappers/golang/curves/bw6761/curve.go index 21486af4..38a68fd9 100644 --- a/wrappers/golang/curves/bw6761/curve.go +++ b/wrappers/golang/curves/bw6761/curve.go @@ -41,7 +41,6 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { func (p *Projective) FromAffine(a Affine) Projective { - cA := (*C.affine_t)(unsafe.Pointer(&a)) cP := (*C.projective_t)(unsafe.Pointer(p)) C.bw6_761_from_affine(cA, cP) diff --git a/wrappers/golang/curves/grumpkin/curve.go b/wrappers/golang/curves/grumpkin/curve.go index 13e9b99a..4ad6e232 100644 --- a/wrappers/golang/curves/grumpkin/curve.go +++ b/wrappers/golang/curves/grumpkin/curve.go @@ -41,7 +41,6 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective { func (p *Projective) FromAffine(a Affine) Projective { - cA := (*C.affine_t)(unsafe.Pointer(&a)) cP := (*C.projective_t)(unsafe.Pointer(p)) C.grumpkin_from_affine(cA, cP) From 877018c84cd165d47f75f1c1cd9b991bbb581c2d Mon Sep 17 00:00:00 2001 From: Vlad <88586482+vladfdp@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:55:40 +0200 Subject: [PATCH 9/9] more go fmt --- wrappers/golang/core/internal/mock_curve.go | 2 -- wrappers/golang/curves/bls12377/g2/curve.go | 1 - wrappers/golang/curves/bls12381/g2/curve.go | 2 +- wrappers/golang/curves/bn254/g2/curve.go | 1 - wrappers/golang/curves/bw6761/g2/curve.go | 1 - 5 files changed, 1 insertion(+), 6 deletions(-) diff --git a/wrappers/golang/core/internal/mock_curve.go b/wrappers/golang/core/internal/mock_curve.go index 98739df7..dddbddee 100644 --- a/wrappers/golang/core/internal/mock_curve.go +++ b/wrappers/golang/core/internal/mock_curve.go @@ -28,7 +28,6 @@ func (p *MockProjective) FromLimbs(x, y, z []uint32) MockProjective { return *p } - type MockAffine struct { X, Y MockBaseField } @@ -54,4 +53,3 @@ func (a *MockAffine) FromLimbs(x, y []uint32) MockAffine { return *a } - diff --git a/wrappers/golang/curves/bls12377/g2/curve.go b/wrappers/golang/curves/bls12377/g2/curve.go index 31d290aa..4544e973 100644 --- a/wrappers/golang/curves/bls12377/g2/curve.go +++ b/wrappers/golang/curves/bls12377/g2/curve.go @@ -41,7 +41,6 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective { func (p *G2Projective) FromAffine(a G2Affine) G2Projective { - cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) cP := (*C.g2_projective_t)(unsafe.Pointer(p)) C.bls12_377_g2_from_affine(cA, cP) diff --git a/wrappers/golang/curves/bls12381/g2/curve.go b/wrappers/golang/curves/bls12381/g2/curve.go index db368887..b711be65 100644 --- a/wrappers/golang/curves/bls12381/g2/curve.go +++ b/wrappers/golang/curves/bls12381/g2/curve.go @@ -105,7 +105,7 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine { func (a G2Affine) ToProjective() G2Projective { var p G2Projective - + cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) cP := (*C.g2_projective_t)(unsafe.Pointer(&p)) C.bls12_381_g2_from_affine(cA, cP) diff --git a/wrappers/golang/curves/bn254/g2/curve.go b/wrappers/golang/curves/bn254/g2/curve.go index cd568d37..72245e02 100644 --- a/wrappers/golang/curves/bn254/g2/curve.go +++ b/wrappers/golang/curves/bn254/g2/curve.go @@ -41,7 +41,6 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective { func (p *G2Projective) FromAffine(a G2Affine) G2Projective { - cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) cP := (*C.g2_projective_t)(unsafe.Pointer(p)) C.bn254_g2_from_affine(cA, cP) diff --git a/wrappers/golang/curves/bw6761/g2/curve.go b/wrappers/golang/curves/bw6761/g2/curve.go index c18d6fcb..f38bf134 100644 --- a/wrappers/golang/curves/bw6761/g2/curve.go +++ b/wrappers/golang/curves/bw6761/g2/curve.go @@ -41,7 +41,6 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective { func (p *G2Projective) FromAffine(a G2Affine) G2Projective { - cA := (*C.g2_affine_t)(unsafe.Pointer(&a)) cP := (*C.g2_projective_t)(unsafe.Pointer(p)) C.bw6_761_g2_from_affine(cA, cP)