arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/edwards_curve/eddsa25519_test.go
edwards_curve/eddsa25519_test.goRaw
 1package edwards_curve
 2
 3import (
 4	"testing"
 5	"encoding/hex"
 6
 7	"github.com/consensys/gnark/frontend"
 8	"github.com/consensys/gnark/test"
 9)
10
11type Eddsa25519Circuit struct {
12	m []frontend.Variable
13	pk []frontend.Variable
14	sig []frontend.Variable
15}
16
17func (circuit *Eddsa25519Circuit) Define(api frontend.API) error {
18	c, err := New[Ed25519, Ed25519Scalars](api)
19	if err != nil {
20		return err
21	}
22	CheckValid(c, circuit.sig, circuit.m, circuit.pk)
23	return nil
24}
25
26func TestEddsa25519(t *testing.T) {
27	assert := test.NewAssert(t)
28
29	m := "53756363696e6374204c616273"
30	pk := "f7ec1c43f4de9d49556de87b86b26a98942cb078486fdb44de38b80864c39731"
31	sig := "35c323757c20640a294345c89c0bfcebe3d554fdb0c7b7a0bdb72222c531b1ec849fed99a053e0f5b02dd9a25bb6eb018885526d9f583cdbde0b1e9f6329da09"
32
33	circuit := Eddsa25519Circuit {
34		m: hexToBits(m),
35		pk: hexToBits(pk),
36		sig: hexToBits(sig),
37	}
38	witness := Eddsa25519Circuit {
39		m: hexToBits(m),
40		pk: hexToBits(pk),
41		sig: hexToBits(sig),
42	}
43
44	err := test.IsSolved(&circuit, &witness, testCurve.ScalarField())
45	assert.NoError(err)
46}
47
48func hexToBits(h string) []frontend.Variable {
49	b, err := hex.DecodeString(h)
50	if err != nil {
51		panic(err)
52	}
53	result := make([]frontend.Variable, len(b) * 8)
54	for i, v := range b {
55		for j := 0; j < 8; j++ {
56			if (v & (1 << j)) != 0 {
57				result[i*8+j] = 1
58			} else {
59				result[i*8+j] = 0
60			}
61		}
62	}
63	return result
64}
65