package edwards_curve import ( "testing" "encoding/hex" "github.com/consensys/gnark/frontend" "github.com/consensys/gnark/test" ) type Eddsa25519Circuit struct { m []frontend.Variable pk []frontend.Variable sig []frontend.Variable } func (circuit *Eddsa25519Circuit) Define(api frontend.API) error { c, err := New[Ed25519, Ed25519Scalars](api) if err != nil { return err } CheckValid(c, circuit.sig, circuit.m, circuit.pk) return nil } func TestEddsa25519(t *testing.T) { assert := test.NewAssert(t) m := "53756363696e6374204c616273" pk := "f7ec1c43f4de9d49556de87b86b26a98942cb078486fdb44de38b80864c39731" sig := "35c323757c20640a294345c89c0bfcebe3d554fdb0c7b7a0bdb72222c531b1ec849fed99a053e0f5b02dd9a25bb6eb018885526d9f583cdbde0b1e9f6329da09" circuit := Eddsa25519Circuit { m: hexToBits(m), pk: hexToBits(pk), sig: hexToBits(sig), } witness := Eddsa25519Circuit { m: hexToBits(m), pk: hexToBits(pk), sig: hexToBits(sig), } err := test.IsSolved(&circuit, &witness, testCurve.ScalarField()) assert.NoError(err) } func hexToBits(h string) []frontend.Variable { b, err := hex.DecodeString(h) if err != nil { panic(err) } result := make([]frontend.Variable, len(b) * 8) for i, v := range b { for j := 0; j < 8; j++ { if (v & (1 << j)) != 0 { result[i*8+j] = 1 } else { result[i*8+j] = 0 } } } return result }