diff --git a/README.md b/README.md index e653667..a250b5f 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ A verifier for [RISC Zero](https://github.com/risc0/risc0) SNARK proofs written in Go. +Currently, the verifier supports RISC Zero versions v1.0 through v1.3. + ## License This project is licensed under the Apache 2.0 License - see the [LICENSE](./LICENSE) file for details. diff --git a/groth16/verifier_test.go b/groth16/verifier_test.go index 12d9f93..ef1b75b 100644 --- a/groth16/verifier_test.go +++ b/groth16/verifier_test.go @@ -3,9 +3,11 @@ package groth16 import ( "encoding/hex" "testing" + + "github.com/datachainlab/go-risc0-verifier/risc0" ) -func TestVerifyIntegrity(t *testing.T) { +func TestVerifyIntegrityV11(t *testing.T) { claimDigest_, err := hex.DecodeString("9cbe0c90f193cb5e5716c6bc1a780f164ca05254b8bd50485109d9d29544ea33") if err != nil { t.Fatal(err) @@ -25,3 +27,29 @@ func TestVerifyIntegrity(t *testing.T) { t.Fatal(err) } } + +func TestVerifyIntegrityV13(t *testing.T) { + journal, err := hex.DecodeString("0000000300000000050000001100906ed50000a1acc73eb45794fa1734f14d882e91925b6006f79d3bb2460df9d01b333d700900000000679f4f740000000067c6d52915150b07ff800e00000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000070000000000000026ae825ffce1cf9dcdf682614f4d36704e7bca087bbb5264aca9301d7824cec8000000000000000000000000000000000000000000000000000000000000000083d719e77deaca1470f6baf62a4d774303c899db69020f9c70ee1dfc08c7ce9e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ce62d98178a799a876bcb77021ee98d13071c4ab000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e494e54454c2d53412d3030333334000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e494e54454c2d53412d3030363135000000000000000000000000000000000000") + if err != nil { + t.Fatal(err) + } + imageIdBz, err := hex.DecodeString("a8980764a673186b94ec3bd1cc90dc6553b1117014cc387905edc01e53ba0c97") + if err != nil { + t.Fatal(err) + } + var imageId [32]byte + copy(imageId[:], imageIdBz) + claimDigest := risc0.CalculateClaimDigest(imageId, sha256(journal)) + seal, err := hex.DecodeString("922fe23d2cbcd0f7dd6e2dcd125454a25bc7451e3fcfe69bc74c620afbf090685d2445d31e7cd0ea42b87264e8b3d633dcde9df5f4c5c345b07d05b08d6d9ac9e69bdc622a6872889033a687c6090a1ba689b72aac803ea644bb3119f51919339911a8f22d4e15f27a4af490d6fd2bde7b9b9b3d13ec4b547297503b20e4cac86f1f72c60d997cd0d1a79e290c1149321ac16e64b5e0889d9cdd0563329021d0816f17a82a4c50ca405fc8f4e8deeae7f5cc029823c9d7b454e2a55341e5285907c13b661e747895f55dfb2205c72fb08d1a6744a7c15291214d3c7f960ff0e4be9d311f07ddd9562c157139146fe9badd109a48ce3f1cfa0822187f4d384b99471ebe91") + if err != nil { + t.Fatal(err) + } + p, ok := GetVerifierParameters2(seal[:4]) + if !ok { + t.Fatal("GetVerifierParameters2 failed") + } + err = verifyIntegrity(p, seal[4:], claimDigest) + if err != nil { + t.Fatal(err) + } +} diff --git a/risc0/parameters.go b/risc0/parameters.go index 615e3b8..3f92f49 100644 --- a/risc0/parameters.go +++ b/risc0/parameters.go @@ -24,6 +24,11 @@ func init() { "8cdad9242664be3112aba377c5425a4df735eb1c6966472b561d2855932c0469", "c07a65145c3cb48b6101962ea607a4dd93c753bb26975cb47feb00d3666e4404", ) + // https://github.com/risc0/risc0/blob/v1.3.0/risc0/circuit/recursion/src/control_id.rs#L49-L55 + risc0VerifierParameters["1.3"] = buildVerifierParameters( + "6fcbfc564e08874a235c181e75bb53547402b116957f700497bf482e08060a15", + "c07a65145c3cb48b6101962ea607a4dd93c753bb26975cb47feb00d3666e4404", + ) } type VerifierParameters struct {