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