Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
da0b396
add gnark-crypto lib
ccorcoveanu Jun 19, 2024
aa218a7
added g1 files
ccorcoveanu Jun 26, 2024
d58a354
implemented bls12381 scalar
ccorcoveanu Aug 7, 2024
1e4ef7c
partial update
ccorcoveanu Nov 14, 2024
a3ea5ea
bls cureves implemented (missing tests)
ccorcoveanu Mar 28, 2025
29745d4
add BN254 curve (no tests)
ccorcoveanu Mar 28, 2025
6f47da5
test for bls12381
cosmatudor Apr 10, 2025
39caa8f
test for bls12377 + bls12381
cosmatudor Apr 11, 2025
94bf23f
delete prints
cosmatudor Apr 11, 2025
aa518fe
tests for bn254 + fixes
cosmatudor Apr 14, 2025
bbacf48
integration test + small changes
cosmatudor Apr 15, 2025
7433a3f
add mcl-to-gnark-conversion
ccorcoveanu Apr 25, 2025
5564222
add interop from bls to mcl
cosmatudor Apr 25, 2025
183602b
begin new integration test
cosmatudor Apr 28, 2025
f077b64
refactored integration test
cosmatudor Apr 28, 2025
4980bcd
partial fix - fixed point conversions, operations still need to be ro…
ccorcoveanu May 2, 2025
ead4ad2
add groth16 and plonk verifiers
ccorcoveanu May 9, 2025
ac17aad
implemented all needed EC operation for low level ZK verifiers
ccorcoveanu May 26, 2025
4de090b
merged main
ccorcoveanu May 27, 2025
d23afbe
Merge branch 'main' into add-zk-verifiers
sasurobert Aug 20, 2025
f6e4815
go lint fixes
sasurobert Aug 20, 2025
bab275d
go lint fixes
sasurobert Aug 20, 2025
c7f780f
go lint fixes
sasurobert Aug 20, 2025
b20deeb
go lint fixes
sasurobert Aug 20, 2025
caef4f7
adding comments
sasurobert Aug 21, 2025
d846fda
adding test and making the fix for element separation.
sasurobert Aug 21, 2025
49affe7
go lint
sasurobert Aug 21, 2025
bbf8b96
cleanup constants
sasurobert Aug 21, 2025
c724ab2
make sure that verify does not panic.
sasurobert Aug 21, 2025
216aa95
invalid input checks and tests
sasurobert Aug 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions curves/bls/bls12377/g1.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package bls12377

import (
"github.com/consensys/gnark-crypto/ecc/bls12-377/fp"
"github.com/consensys/gnark-crypto/ecc/bls12-377/fr"
crypto "github.com/multiversx/mx-chain-crypto-go"
)

type groupG1 struct {
}

// String returns the string for the group
func (g1 *groupG1) String() string {
return "BLS12-377 G1"
}

// ScalarLen returns the maximum length of scalars in bytes
func (g1 *groupG1) ScalarLen() int {
return fr.Bytes
}

// CreateScalar creates a new Scalar initialized with base point on G1
func (g1 *groupG1) CreateScalar() crypto.Scalar {
return NewScalar()
}

// PointLen returns the max length of point in nb of bytes
func (g1 *groupG1) PointLen() int {
return fp.Bytes
}

// CreatePoint creates a new point
func (g1 *groupG1) CreatePoint() crypto.Point {
return NewPointG1()
}

// CreatePointForScalar creates a new point corresponding to the given scalarInt
func (g1 *groupG1) CreatePointForScalar(scalar crypto.Scalar) crypto.Point {
var p crypto.Point
var err error
p = NewPointG1()
p, err = p.Mul(scalar)
if err != nil {
log.Error("groupG1 CreatePointForScalar", "error", err.Error())
}
return p
}

// IsInterfaceNil returns true if there is no value under the interface
func (g1 *groupG1) IsInterfaceNil() bool {
return g1 == nil
}
160 changes: 160 additions & 0 deletions curves/bls/bls12377/g1_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
package bls12377

import (
gnark "github.com/consensys/gnark-crypto/ecc/bls12-377"
"github.com/consensys/gnark-crypto/ecc/bls12-377/fr"
"github.com/stretchr/testify/require"
"math/big"
"testing"
)

func TestGroupG1_String(t *testing.T) {
t.Parallel()

grG1 := &groupG1{}

str := grG1.String()
require.Equal(t, "BLS12-377 G1", str)
}

func TestGroupG1_ScalarLen(t *testing.T) {
t.Parallel()

grG1 := &groupG1{}

x := grG1.ScalarLen()
require.Equal(t, fr.Bytes, x)
}

func TestGroupG1_PointLen(t *testing.T) {
t.Parallel()

grG1 := &groupG1{}

x := grG1.PointLen()
require.Equal(t, 48, x)
}

func TestGroupG1_CreatePoint(t *testing.T) {
t.Parallel()

grG1 := &groupG1{}

g1Gen, _, _, _ := gnark.Generators()
point := &PointG1{
G1: &g1Gen,
}

x := grG1.CreatePoint()
require.NotNil(t, x)
bls12381Point, ok := x.GetUnderlyingObj().(*gnark.G1Jac)
require.True(t, ok)
require.True(t, bls12381Point.IsOnCurve())
require.Equal(t, point.G1, bls12381Point)
}

func TestGroupG1_CreateScalar(t *testing.T) {
t.Parallel()

grG1 := &groupG1{}

sc := grG1.CreateScalar()
require.NotNil(t, sc)

bls12381Scalar, ok := sc.GetUnderlyingObj().(*fr.Element)
require.True(t, ok)
require.False(t, bls12381Scalar.IsZero())
require.False(t, bls12381Scalar.IsOne())
}

func TestGroupG1_CreatePointForScalar(t *testing.T) {
t.Parallel()

grG1 := &groupG1{}

scalar := grG1.CreateScalar()
bls12381Scalar, ok := scalar.GetUnderlyingObj().(*fr.Element)
require.True(t, ok)
require.False(t, bls12381Scalar.IsZero())
require.False(t, bls12381Scalar.IsOne())

pG1 := grG1.CreatePointForScalar(scalar)
require.NotNil(t, pG1)

bls12381PointG1, ok := pG1.GetUnderlyingObj().(*gnark.G1Jac)
require.True(t, ok)
require.True(t, bls12381PointG1.IsOnCurve())

bG1 := NewPointG1().G1
var scalarBigInt big.Int
bls12381Scalar.BigInt(&scalarBigInt)
computedG1 := bG1.ScalarMultiplication(bG1, &scalarBigInt)

require.True(t, bls12381PointG1.Equal(computedG1))
}

func TestGroupG1_CreatePointForScalarZero(t *testing.T) {
t.Parallel()

grG1 := &groupG1{}

scalar := grG1.CreateScalar()
scalar.SetInt64(0)
bls12381Scalar, ok := scalar.GetUnderlyingObj().(*fr.Element)
require.True(t, ok)
require.True(t, bls12381Scalar.IsZero())

pG1 := grG1.CreatePointForScalar(scalar)
require.NotNil(t, pG1)

bls12381PointG1, ok := pG1.GetUnderlyingObj().(*gnark.G1Jac)
require.True(t, ok)
require.True(t, bls12381PointG1.Z.IsZero())
require.True(t, bls12381PointG1.IsOnCurve())

bG1 := NewPointG1().G1
var scalarBigInt big.Int
bls12381Scalar.BigInt(&scalarBigInt)
computedG1 := bG1.ScalarMultiplication(bG1, &scalarBigInt)

require.True(t, bls12381PointG1.Equal(computedG1))

}

func TestGroupG1_CreatePointForScalarOne(t *testing.T) {
t.Parallel()

grG1 := &groupG1{}

scalar := grG1.CreateScalar()
scalar.SetInt64(1)
bls12381Scalar, ok := scalar.GetUnderlyingObj().(*fr.Element)
require.True(t, ok)
require.True(t, bls12381Scalar.IsOne())

pG1 := grG1.CreatePointForScalar(scalar)
require.NotNil(t, pG1)

baseG1 := NewPointG1().G1
bls12381PointG1, ok := pG1.GetUnderlyingObj().(*gnark.G1Jac)
require.True(t, ok)
require.True(t, bls12381PointG1.Equal(baseG1))
}

func TestGroupG1_CreatePointForScalarNil(t *testing.T) {
t.Parallel()

grG1 := &groupG1{}
pG1 := grG1.CreatePointForScalar(nil)
require.Equal(t, nil, pG1)
}

func TestGroupG1_IsInterfaceNil(t *testing.T) {
t.Parallel()

var grG1 *groupG1

require.True(t, grG1.IsInterfaceNil())
grG1 = &groupG1{}
require.False(t, grG1.IsInterfaceNil())
}
52 changes: 52 additions & 0 deletions curves/bls/bls12377/g2.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package bls12377

import (
"github.com/consensys/gnark-crypto/ecc/bls12-377/fp"
"github.com/consensys/gnark-crypto/ecc/bls12-377/fr"
crypto "github.com/multiversx/mx-chain-crypto-go"
)

type groupG2 struct {
}

// String returns the string for the group
func (g2 *groupG2) String() string {
return "BLS12-377 G2"
}

// ScalarLen returns the maximum length of scalars in bytes
func (g2 *groupG2) ScalarLen() int {
return fr.Bytes
}

// CreateScalar creates a new Scalar initialized with base point on G2
func (g2 *groupG2) CreateScalar() crypto.Scalar {
return NewScalar()
}

// PointLen returns the max length of point in nb of bytes
func (g2 *groupG2) PointLen() int {
return fp.Bytes * 2
}

// CreatePoint creates a new point
func (g2 *groupG2) CreatePoint() crypto.Point {
return NewPointG2()
}

// CreatePointForScalar creates a new point corresponding to the given scalarInt
func (g2 *groupG2) CreatePointForScalar(scalar crypto.Scalar) crypto.Point {
var p crypto.Point
var err error
p = NewPointG2()
p, err = p.Mul(scalar)
if err != nil {
log.Error("groupG2 CreatePointForScalar", "error", err.Error())
}
return p
}

// IsInterfaceNil returns true if there is no value under the interface
func (g2 *groupG2) IsInterfaceNil() bool {
return g2 == nil
}
Loading
Loading