From 7a4f988727103a5a20b5b91f1c914c71b38c065b Mon Sep 17 00:00:00 2001 From: Konrad Feldmeier Date: Mon, 6 Nov 2023 14:51:40 +0100 Subject: [PATCH 1/8] Add crypto consensus test infrastructure This adds the commands ``` rolling-shutter crypto testdata [output_file] rolling-shutter crypto jsontests -f input_file ``` that will generate or execute tests for the methods ``` shcrypto.Encrypt shcrypto.EncryptedMessage.Decrypt shcrypto.VerifyEpochSecret ``` The output from `testdata` is a json file with test specifications similar to ``` [ { "name": "decryption 2", "id": "3", "description": "A 1 byte message.", "type": "decryption", "test_data": { "cipher": "0x20b1bd1817ead1ccf50b04ef9b77fac4c6d9b60b63436b54483f642128df31fb204d9460355ab724eb255fba7459b170306f42fd2dd7d5acc43b9c96287602760ed9138b682a195489749669573a8492b615e9c1b5185fc272a1268fad8c035e03162b507b968a34d211f168e5c1e9e3df975974e242d36d6be99ba88dcb0944fdcb3887b2fda72ce25f0dfcd8ef6d7de49a1c4d66de07ed591aa84caf406c42c1c88417d5cee83b3ef00da832d3ed35017ddc602c3a24c7deac3af725f27266", "epoch_secret_key": "0x144e428af1602d58bfb9a12bb31597f45c6c2c9d227b7a6d3f35f37d333548eb0888206e52d7cb2c6b1de7770fc2ce475a08e6cf4e95a608ec5bd93efafed6f3", "expected": "0x11" } }, ... ] ``` There are three test types corresponding to the crypto methods from above: `decryption, encryption, verification`. For `decryption` and `encryption` tests, an `expected` value of `0x` means that the result should be empty (i.e. a failure, with the exception of the special case of an empty encrypted message). For verification tests the `expected` value is a boolean `true/false`. --- rolling-shutter/cmd/cryptocmd/cryptocmd.go | 6 +- rolling-shutter/cmd/cryptocmd/jsontests.go | 593 ++++++++++++++++++ .../docs/rolling-shutter_crypto.md | 5 +- .../docs/rolling-shutter_crypto_jsontests.md | 27 + .../docs/rolling-shutter_crypto_testdata.md | 27 + 5 files changed, 656 insertions(+), 2 deletions(-) create mode 100644 rolling-shutter/cmd/cryptocmd/jsontests.go create mode 100644 rolling-shutter/docs/rolling-shutter_crypto_jsontests.md create mode 100644 rolling-shutter/docs/rolling-shutter_crypto_testdata.md diff --git a/rolling-shutter/cmd/cryptocmd/cryptocmd.go b/rolling-shutter/cmd/cryptocmd/cryptocmd.go index 7d8840b02..4111c7b73 100644 --- a/rolling-shutter/cmd/cryptocmd/cryptocmd.go +++ b/rolling-shutter/cmd/cryptocmd/cryptocmd.go @@ -20,6 +20,7 @@ var ( epochIDFlag string sigmaFlag string threshold uint64 + filename string ) func Cmd() *cobra.Command { @@ -27,12 +28,15 @@ func Cmd() *cobra.Command { Use: "crypto", Short: "CLI tool to access crypto functions", Long: `This command provides utility functions to manually encrypt messages with an eon -key, decrypt them with a decryption key, and check that a decryption key is correct.`, +key, decrypt them with a decryption key, and check that a decryption key is correct. It also hosts +a tool to generate and run crypto tests in a JSON formatted collection.`, } cmd.AddCommand(encryptCmd()) cmd.AddCommand(decryptCmd()) cmd.AddCommand(verifyKeyCmd()) cmd.AddCommand(aggregateCmd()) + cmd.AddCommand(GenerateTestdata()) + cmd.AddCommand(RunJSONTests()) return cmd } diff --git a/rolling-shutter/cmd/cryptocmd/jsontests.go b/rolling-shutter/cmd/cryptocmd/jsontests.go new file mode 100644 index 000000000..640760b01 --- /dev/null +++ b/rolling-shutter/cmd/cryptocmd/jsontests.go @@ -0,0 +1,593 @@ +package cryptocmd + +import ( + "bytes" + "crypto/rand" + "encoding/json" + "errors" + "fmt" + "io" + "os" + + "github.com/ethereum/go-ethereum/common/hexutil" + bn256 "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare" + "github.com/spf13/cobra" + + "github.com/shutter-network/shutter/shlib/shcrypto" + + "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/epochid" + "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/testkeygen" +) + +func GenerateTestdata() *cobra.Command { + cmd := &cobra.Command{ + Use: "testdata", + Short: "Generate testdata in json format to test crypto implementations", + Args: cobra.RangeArgs(0, 1), + RunE: func(cmd *cobra.Command, args []string) error { + var w io.Writer + if len(args) == 0 { + w = os.Stdout + } else { + f, err := os.OpenFile(args[0], os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o600) + if err != nil { + panic(err) + } + defer f.Close() + w = f + } + + enc := &testEncoder{ + w: w, + e: 1, + d: 1, + v: 1, + } + enc.start() + CreateJSONTests(*enc) + + enc.flush() + return nil + }, + } + cmd.PersistentFlags().StringVarP(&filename, "filename", "f", "", "filename to write result") + + return cmd +} + +func RunJSONTests() *cobra.Command { + cmd := &cobra.Command{ + Use: "jsontests", + Short: "Use testdata in json format to test crypto implementations", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + errs := ReadTestcases(filename) + + return errs[0] + }, + } + + cmd.PersistentFlags().StringVarP(&filename, "filename", "f", "", "filename to write result") + return cmd +} + +type testEncoder struct { + w io.Writer + i int + e int + d int + v int +} + +func (enc *testEncoder) addTest(tc *testCase) { + tc.ID = fmt.Sprint(enc.i) + switch tc.TestType { + case ENCRYPTION: + tc.Name = fmt.Sprintf("%s %d", ENCRYPTION, enc.e) + enc.e++ + case DECRYPTION: + tc.Name = fmt.Sprintf("%s %d", DECRYPTION, enc.d) + enc.d++ + case VERIFICATION: + tc.Name = fmt.Sprintf("%s %d", VERIFICATION, enc.v) + enc.v++ + default: + panic(fmt.Errorf("unknown test type")) + } + + const indent = " " + encoded, err := json.MarshalIndent(tc, indent, indent) + if err != nil { + panic(fmt.Errorf("can't encode test case: %v", err)) + } + + var buf bytes.Buffer + if enc.i > 0 { + buf.WriteString(",\n") + } + buf.WriteString(indent) + buf.Write(encoded) + if _, err := buf.WriteTo(enc.w); err != nil { + panic(err) + } + + enc.i++ +} + +func (enc *testEncoder) start() { + _, err := io.WriteString(enc.w, "[\n") + if err != nil { + panic(err) + } +} + +func (enc *testEncoder) flush() { + _, err := io.WriteString(enc.w, "\n]\n") + if err != nil { + panic(err) + } +} + +type testCase struct { + testCaseMeta + Test testData `json:"test_data"` +} + +type testCaseMeta struct { + Name string `json:"name"` + ID string `json:"id"` + Description string `json:"description"` + TestType string `json:"type"` +} + +type testData interface { + Run() error +} + +func (tc *testCase) UnmarshalJSON(b []byte) error { + if err := json.Unmarshal(b, &tc.testCaseMeta); err != nil { + return err + } + switch tc.TestType { + case ENCRYPTION: + tc.Test = new(encryptionTest) + case DECRYPTION: + tc.Test = new(decryptionTest) + case VERIFICATION: + tc.Test = new(verificationTest) + default: + return fmt.Errorf("invalid test type %q", tc.Test) + } + + var testRaw struct { + Data json.RawMessage `json:"test_data"` + } + if err := json.Unmarshal(b, &testRaw); err != nil { + return err + } + return json.Unmarshal(testRaw.Data, tc.Test) +} + +const ( + ENCRYPTION = "encryption" + DECRYPTION = "decryption" + VERIFICATION = "verification" +) + +type encryptionTest struct { + Message hexutil.Bytes `json:"message"` + EonPublicKey *shcrypto.EonPublicKey `json:"eon_public_key"` + EpochID epochid.EpochID `json:"epoch_id"` + Sigma shcrypto.Block `json:"sigma"` + Expected *shcrypto.EncryptedMessage `json:"expected"` +} + +type decryptionTest struct { + Cipher shcrypto.EncryptedMessage `json:"cipher"` + EpochSecretKey shcrypto.EpochSecretKey `json:"epoch_secret_key"` + Expected hexutil.Bytes `json:"expected"` +} + +type verificationTest struct { + EpochSecretKey shcrypto.EpochSecretKey `json:"epoch_secret_key"` + EonPublicKey shcrypto.EonPublicKey `json:"eon_public_key"` + EpochID epochid.EpochID `json:"epoch_id"` + Expected bool `json:"expected"` +} + +func ReadTestcases(filename string) []error { + var testcases []*testCase + + f, err := os.OpenFile(filename, os.O_RDONLY, 0o600) + if err != nil { + panic(err) + } + defer f.Close() + decoder := json.NewDecoder(f) + + err = decoder.Decode(&testcases) + if err != nil { + panic(err) + } + var failed int + errs := make([]error, len(testcases)) + for i, testcase := range testcases { + fmt.Printf( + "[%03d/%03d] '%-14s': %-42s ID: % 3s", + i+1, len(testcases), + testcase.Name, + testcase.Description, + testcase.ID, + ) + err = testcase.Test.Run() + + if err != nil { + failed++ + errs = append(errs, err) + fmt.Printf(" FAIL (%s)\n", err) + } else { + fmt.Printf(" PASS\n") + } + } + fmt.Printf("%03d tests failed.\n", failed) + return errs +} + +const ( + RANDOM = "random" + FIXED = "fixed" + TAMPERED = "tampered" + VERIFYING = "verifying" + NONVERIFYING = "nonverifying" +) + +var testSpecs = []struct { + description string + payload []byte + style string +}{ + { + "A zero byte message.", + make([]byte, 0), + RANDOM, + }, + { + "A 1 byte message.", + make([]byte, 1), + RANDOM, + }, + { + "A 31 byte message.", + make([]byte, 31), + RANDOM, + }, + { + "A 32 byte message.", + make([]byte, 32), + RANDOM, + }, + { + "A 33 byte message.", + make([]byte, 33), + RANDOM, + }, + { + "A 319 byte message.", + make([]byte, 319), + RANDOM, + }, + { + "A 320 byte message.", + make([]byte, 320), + RANDOM, + }, + { + "A 321 byte message.", + make([]byte, 321), + RANDOM, + }, + { + "The message 'A message'", + []byte("A message"), + FIXED, + }, /* + { + "An illegal modification of the encrypted message 'A message'", + []byte("A message"), + TAMPERED, + },*/ + { + "Verification of a random 32 byte epochID", + make([]byte, 32), + VERIFYING, + }, + { + "A failed verification", + make([]byte, 32), + NONVERIFYING, + }, +} + +func CreateJSONTests(enc testEncoder) { + keygen := testkeygen.NewKeyGenerator(12, 10) + var err error + for i := range testSpecs { + testSpec := testSpecs[i] + + switch testSpec.style { + case RANDOM, FIXED: + + if testSpec.style == RANDOM { + _, err = rand.Read(testSpec.payload) + } + if err != nil { + panic(err) + } + et, err := createEncryptionTest(keygen, testSpec.payload) + if err != nil { + panic(err) + } + testcase := testCase{ + testCaseMeta: testCaseMeta{ + Description: testSpec.description, + TestType: ENCRYPTION, + }, + Test: et, + } + if err := verifyTestCase(&testcase); err != nil { + panic(err) + } + enc.addTest(&testcase) + + dt := createDecryptionTest(keygen, *et) + testcase = testCase{ + testCaseMeta: testCaseMeta{ + Description: testSpec.description, + TestType: DECRYPTION, + }, + Test: &dt, + } + + if err = verifyTestCase(&testcase); err != nil { + panic(err) + } + enc.addTest(&testcase) + + case TAMPERED: + et, err := createEncryptionTest(keygen, testSpec.payload) + if err != nil { + panic(err) + } + tamperedEt := tamperEncryptedMessage(keygen, *et) + + dt := createDecryptionTest(keygen, tamperedEt) + dt.Expected, _ = hexutil.Decode("0x") + testcase := testCase{ + testCaseMeta: testCaseMeta{ + Description: testSpec.description, + TestType: DECRYPTION, + }, + Test: &dt, + } + if err := verifyTestCase(&testcase); err != nil { + panic(err) + } + enc.addTest(&testcase) + case VERIFYING, NONVERIFYING: + var err error + var vt verificationTest + if testSpec.style == VERIFYING { + vt, err = createVerificationTest(keygen, testSpec.payload) + } else { + vt, err = createFailedVerificationTest(keygen, testSpec.payload) + } + if err != nil { + panic(err) + } + testcase := testCase{ + testCaseMeta: testCaseMeta{ + Description: testSpec.description, + TestType: VERIFICATION, + }, + Test: &vt, + } + if err := verifyTestCase(&testcase); err != nil { + panic(err) + } + enc.addTest(&testcase) + + default: + panic("no test style defined") + } + } +} + +func verifyTestCase(tc *testCase) error { + if err := testMarshalingRoundtrip(tc); err != nil { + return err + } + return tc.Test.Run() +} + +func createEncryptionTest(keygen *testkeygen.KeyGenerator, message []byte) (*encryptionTest, error) { + epochID := keygen.RandomEpochID(make([]byte, 32)) + + et := encryptionTest{} + + et.Message = message + + et.EonPublicKey = keygen.EonPublicKey(epochID) + et.EpochID = epochID + sigma, err := keygen.RandomSigma() + if err != nil { + return &et, err + } + et.Sigma = sigma + + epochIDPoint := shcrypto.ComputeEpochID(epochID.Bytes()) + + encryptedMessage := shcrypto.Encrypt( + et.Message, + keygen.EonPublicKey(epochID), + epochIDPoint, + sigma, + ) + + et.Expected = encryptedMessage + + if et.Expected.C1 == nil { + return &et, errors.New("failed to marshal") + } + + err = et.Run() + return &et, err +} + +// tamperEncryptedMessage changes the C1 value of EncryptedMessage, which allows to test for malleability issues. +func tamperEncryptedMessage(keygen *testkeygen.KeyGenerator, et encryptionTest) encryptionTest { + decryptionKey := keygen.EpochSecretKey(et.EpochID) + var c1 *bn256.G2 + var err error + + for i := 1; i <= 10000; i++ { + c1 = et.Expected.C1 + c1.Add(c1, c1) + et.Expected.C1 = c1 + sigma := et.Expected.Sigma(decryptionKey) + decryptedBlocks := shcrypto.DecryptBlocks(et.Expected.C3, sigma) + _, err = shcrypto.UnpadMessage(decryptedBlocks) + + if err == nil { + break + } + } + return et +} + +func createDecryptionTest(keygen *testkeygen.KeyGenerator, et encryptionTest) decryptionTest { + dt := decryptionTest{} + epochSecretKey := keygen.EpochSecretKey(et.EpochID) + dt.EpochSecretKey = *epochSecretKey + + dt.Cipher = *et.Expected + + dt.Expected = et.Message + + return dt +} + +func createVerificationTest(keygen *testkeygen.KeyGenerator, payload []byte) (verificationTest, error) { + var err error + vt := verificationTest{} + epochID := keygen.RandomEpochID(payload) + vt.EpochID = epochID + vt.EpochSecretKey = *keygen.EpochSecretKey(epochID) + vt.EonPublicKey = *keygen.EonPublicKey(epochID) + vt.Expected, err = shcrypto.VerifyEpochSecretKey( + &vt.EpochSecretKey, + &vt.EonPublicKey, + epochID.Bytes(), + ) + return vt, err +} + +func createFailedVerificationTest(keygen *testkeygen.KeyGenerator, _ []byte) (verificationTest, error) { + var err error + vt := verificationTest{} + epochID := keygen.RandomEpochID(make([]byte, 32)) + mismatch := keygen.RandomEpochID(make([]byte, 32)) + vt.EpochID = epochID + vt.EpochSecretKey = *keygen.EpochSecretKey(epochID) + vt.EonPublicKey = *keygen.EonPublicKey(mismatch) + vt.Expected, err = shcrypto.VerifyEpochSecretKey( + &vt.EpochSecretKey, + &vt.EonPublicKey, + epochID.Bytes(), + ) + return vt, err +} + +func (et *encryptionTest) Run() error { + result := shcrypto.Encrypt( + et.Message, + et.EonPublicKey, + shcrypto.ComputeEpochID(et.EpochID.Bytes()), + et.Sigma, + ) + + encoded, err := result.MarshalText() + if err != nil { + return fmt.Errorf("failed encryption test on encoding result: %s", err) + } + expectation, err := et.Expected.MarshalText() + if err != nil { + return fmt.Errorf("failed encryption test on encoding expected: %s", err) + } + if !bytes.Equal(encoded, expectation) { + return fmt.Errorf("failed encryption test on equal results: %s != %s", encoded, et.Expected) + } + return nil +} + +func (dt *decryptionTest) Run() error { + expectation, err := dt.Expected.MarshalText() + if err != nil { + return err + } + + result, err := dt.Cipher.Decrypt( + &dt.EpochSecretKey, + ) + if err != nil { + if !bytes.Equal(expectation, []byte("0x")) { + return fmt.Errorf("failed decryption test with error: %s", err) + } + return nil + } + encoded := hexutil.Encode(result) + + if !bytes.Equal(result, dt.Expected) { + return fmt.Errorf("failed decryption test on equal results: %s != %s", encoded, expectation) + } + return nil +} + +func (vt *verificationTest) Run() error { + result, err := shcrypto.VerifyEpochSecretKey( + &vt.EpochSecretKey, + &vt.EonPublicKey, + vt.EpochID[:], + ) + if err != nil { + return fmt.Errorf("failed verification test with error: %s", err) + } + if result != vt.Expected { + return fmt.Errorf("failed verification test on expected result: expected (%t) != result (%t)", vt.Expected, result) + } + return nil +} + +func testMarshalingRoundtrip(tc *testCase) error { + marshaled, err := json.Marshal(tc) + if err != nil { + return err + } + var unmarshaled testCase + err = json.Unmarshal(marshaled, &unmarshaled) + if err != nil { + return err + } + + roundtrip, err := json.Marshal(&unmarshaled) + if err != nil { + return err + } + if !bytes.Equal(marshaled, roundtrip) { + println(len(marshaled)) + println(len(roundtrip)) + println("m:", string(marshaled)) + println("u:", string(roundtrip)) + return errors.New("roundtrip marshaling failed") + } + return nil +} diff --git a/rolling-shutter/docs/rolling-shutter_crypto.md b/rolling-shutter/docs/rolling-shutter_crypto.md index 4f5eed852..ee4f7a4db 100644 --- a/rolling-shutter/docs/rolling-shutter_crypto.md +++ b/rolling-shutter/docs/rolling-shutter_crypto.md @@ -5,7 +5,8 @@ CLI tool to access crypto functions ### Synopsis This command provides utility functions to manually encrypt messages with an eon -key, decrypt them with a decryption key, and check that a decryption key is correct. +key, decrypt them with a decryption key, and check that a decryption key is correct. It also hosts +a tool to generate and run crypto tests in a JSON formatted collection. ### Options @@ -27,5 +28,7 @@ key, decrypt them with a decryption key, and check that a decryption key is corr * [rolling-shutter crypto aggregate](rolling-shutter_crypto_aggregate.md) - Aggregate key shares to construct a decryption key * [rolling-shutter crypto decrypt](rolling-shutter_crypto_decrypt.md) - Decrypt the message given as positional argument * [rolling-shutter crypto encrypt](rolling-shutter_crypto_encrypt.md) - Encrypt the message given as positional argument +* [rolling-shutter crypto jsontests](rolling-shutter_crypto_jsontests.md) - Use testdata in json format to test crypto implementations +* [rolling-shutter crypto testdata](rolling-shutter_crypto_testdata.md) - Generate testdata in json format to test crypto implementations * [rolling-shutter crypto verify-key](rolling-shutter_crypto_verify-key.md) - Check that the decryption key given as positional argument is correct diff --git a/rolling-shutter/docs/rolling-shutter_crypto_jsontests.md b/rolling-shutter/docs/rolling-shutter_crypto_jsontests.md new file mode 100644 index 000000000..8868ced0d --- /dev/null +++ b/rolling-shutter/docs/rolling-shutter_crypto_jsontests.md @@ -0,0 +1,27 @@ +## rolling-shutter crypto jsontests + +Use testdata in json format to test crypto implementations + +``` +rolling-shutter crypto jsontests [flags] +``` + +### Options + +``` + -f, --filename string filename to write result + -h, --help help for jsontests +``` + +### Options inherited from parent commands + +``` + --logformat string set log format, possible values: min, short, long, max (default "long") + --loglevel string set log level, possible values: warn, info, debug (default "info") + --no-color do not write colored logs +``` + +### SEE ALSO + +* [rolling-shutter crypto](rolling-shutter_crypto.md) - CLI tool to access crypto functions + diff --git a/rolling-shutter/docs/rolling-shutter_crypto_testdata.md b/rolling-shutter/docs/rolling-shutter_crypto_testdata.md new file mode 100644 index 000000000..184001b83 --- /dev/null +++ b/rolling-shutter/docs/rolling-shutter_crypto_testdata.md @@ -0,0 +1,27 @@ +## rolling-shutter crypto testdata + +Generate testdata in json format to test crypto implementations + +``` +rolling-shutter crypto testdata [flags] +``` + +### Options + +``` + -f, --filename string filename to write result + -h, --help help for testdata +``` + +### Options inherited from parent commands + +``` + --logformat string set log format, possible values: min, short, long, max (default "long") + --loglevel string set log level, possible values: warn, info, debug (default "info") + --no-color do not write colored logs +``` + +### SEE ALSO + +* [rolling-shutter crypto](rolling-shutter_crypto.md) - CLI tool to access crypto functions + From 34d2fe77161d3e6eb7f8ebe83ac9f6e76006d499 Mon Sep 17 00:00:00 2001 From: Konrad Feldmeier Date: Thu, 9 Nov 2023 13:25:21 +0100 Subject: [PATCH 2/8] PR style changes --- rolling-shutter/cmd/cryptocmd/jsontests.go | 128 +++++++++++---------- 1 file changed, 67 insertions(+), 61 deletions(-) diff --git a/rolling-shutter/cmd/cryptocmd/jsontests.go b/rolling-shutter/cmd/cryptocmd/jsontests.go index 640760b01..b9b8e67fd 100644 --- a/rolling-shutter/cmd/cryptocmd/jsontests.go +++ b/rolling-shutter/cmd/cryptocmd/jsontests.go @@ -38,10 +38,10 @@ func GenerateTestdata() *cobra.Command { } enc := &testEncoder{ - w: w, - e: 1, - d: 1, - v: 1, + w: w, + etCounter: 1, + dtCounter: 1, + vtCounter: 1, } enc.start() CreateJSONTests(*enc) @@ -72,25 +72,25 @@ func RunJSONTests() *cobra.Command { } type testEncoder struct { - w io.Writer - i int - e int - d int - v int + w io.Writer + idCounter int + etCounter int + dtCounter int + vtCounter int } func (enc *testEncoder) addTest(tc *testCase) { - tc.ID = fmt.Sprint(enc.i) + tc.ID = fmt.Sprint(enc.idCounter) switch tc.TestType { - case ENCRYPTION: - tc.Name = fmt.Sprintf("%s %d", ENCRYPTION, enc.e) - enc.e++ - case DECRYPTION: - tc.Name = fmt.Sprintf("%s %d", DECRYPTION, enc.d) - enc.d++ - case VERIFICATION: - tc.Name = fmt.Sprintf("%s %d", VERIFICATION, enc.v) - enc.v++ + case encryption: + tc.Name = fmt.Sprintf("%s %d", encryption, enc.etCounter) + enc.etCounter++ + case decryption: + tc.Name = fmt.Sprintf("%s %d", decryption, enc.dtCounter) + enc.dtCounter++ + case verification: + tc.Name = fmt.Sprintf("%s %d", verification, enc.vtCounter) + enc.vtCounter++ default: panic(fmt.Errorf("unknown test type")) } @@ -102,16 +102,22 @@ func (enc *testEncoder) addTest(tc *testCase) { } var buf bytes.Buffer - if enc.i > 0 { - buf.WriteString(",\n") + if enc.idCounter > 0 { + if _, err := buf.WriteString(",\n"); err != nil { + panic(err) + } + } + if _, err := buf.WriteString(indent); err != nil { + panic(err) + } + if _, err := buf.Write(encoded); err != nil { + panic(err) } - buf.WriteString(indent) - buf.Write(encoded) if _, err := buf.WriteTo(enc.w); err != nil { panic(err) } - enc.i++ + enc.idCounter++ } func (enc *testEncoder) start() { @@ -149,11 +155,11 @@ func (tc *testCase) UnmarshalJSON(b []byte) error { return err } switch tc.TestType { - case ENCRYPTION: + case encryption: tc.Test = new(encryptionTest) - case DECRYPTION: + case decryption: tc.Test = new(decryptionTest) - case VERIFICATION: + case verification: tc.Test = new(verificationTest) default: return fmt.Errorf("invalid test type %q", tc.Test) @@ -169,9 +175,9 @@ func (tc *testCase) UnmarshalJSON(b []byte) error { } const ( - ENCRYPTION = "encryption" - DECRYPTION = "decryption" - VERIFICATION = "verification" + encryption = "encryption" + decryption = "decryption" + verification = "verification" ) type encryptionTest struct { @@ -234,11 +240,11 @@ func ReadTestcases(filename string) []error { } const ( - RANDOM = "random" - FIXED = "fixed" - TAMPERED = "tampered" - VERIFYING = "verifying" - NONVERIFYING = "nonverifying" + random = "random" + fixed = "fixed" + tampered = "tampered" + verifying = "verifying" + nonVerifying = "nonverifying" ) var testSpecs = []struct { @@ -249,62 +255,62 @@ var testSpecs = []struct { { "A zero byte message.", make([]byte, 0), - RANDOM, + random, }, { "A 1 byte message.", make([]byte, 1), - RANDOM, + random, }, { "A 31 byte message.", make([]byte, 31), - RANDOM, + random, }, { "A 32 byte message.", make([]byte, 32), - RANDOM, + random, }, { "A 33 byte message.", make([]byte, 33), - RANDOM, + random, }, { "A 319 byte message.", make([]byte, 319), - RANDOM, + random, }, { "A 320 byte message.", make([]byte, 320), - RANDOM, + random, }, { "A 321 byte message.", make([]byte, 321), - RANDOM, + random, }, { "The message 'A message'", []byte("A message"), - FIXED, - }, /* - { - "An illegal modification of the encrypted message 'A message'", - []byte("A message"), - TAMPERED, - },*/ + fixed, + }, + /*{ + "An illegal modification of the encrypted message 'A message'", + []byte("A message"), + tampered, + },*/ { "Verification of a random 32 byte epochID", make([]byte, 32), - VERIFYING, + verifying, }, { "A failed verification", make([]byte, 32), - NONVERIFYING, + nonVerifying, }, } @@ -315,9 +321,9 @@ func CreateJSONTests(enc testEncoder) { testSpec := testSpecs[i] switch testSpec.style { - case RANDOM, FIXED: + case random, fixed: - if testSpec.style == RANDOM { + if testSpec.style == random { _, err = rand.Read(testSpec.payload) } if err != nil { @@ -330,7 +336,7 @@ func CreateJSONTests(enc testEncoder) { testcase := testCase{ testCaseMeta: testCaseMeta{ Description: testSpec.description, - TestType: ENCRYPTION, + TestType: encryption, }, Test: et, } @@ -343,7 +349,7 @@ func CreateJSONTests(enc testEncoder) { testcase = testCase{ testCaseMeta: testCaseMeta{ Description: testSpec.description, - TestType: DECRYPTION, + TestType: decryption, }, Test: &dt, } @@ -353,7 +359,7 @@ func CreateJSONTests(enc testEncoder) { } enc.addTest(&testcase) - case TAMPERED: + case tampered: et, err := createEncryptionTest(keygen, testSpec.payload) if err != nil { panic(err) @@ -365,7 +371,7 @@ func CreateJSONTests(enc testEncoder) { testcase := testCase{ testCaseMeta: testCaseMeta{ Description: testSpec.description, - TestType: DECRYPTION, + TestType: decryption, }, Test: &dt, } @@ -373,10 +379,10 @@ func CreateJSONTests(enc testEncoder) { panic(err) } enc.addTest(&testcase) - case VERIFYING, NONVERIFYING: + case verifying, nonVerifying: var err error var vt verificationTest - if testSpec.style == VERIFYING { + if testSpec.style == verifying { vt, err = createVerificationTest(keygen, testSpec.payload) } else { vt, err = createFailedVerificationTest(keygen, testSpec.payload) @@ -387,7 +393,7 @@ func CreateJSONTests(enc testEncoder) { testcase := testCase{ testCaseMeta: testCaseMeta{ Description: testSpec.description, - TestType: VERIFICATION, + TestType: verification, }, Test: &vt, } From bf41886160e3940cece60a61cd0e1368a7b56094 Mon Sep 17 00:00:00 2001 From: Konrad Feldmeier Date: Thu, 9 Nov 2023 13:40:57 +0100 Subject: [PATCH 3/8] Change all CI cache keys --- .circleci/rolling-shutter.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.circleci/rolling-shutter.yml b/.circleci/rolling-shutter.yml index 5dfcb3b06..2dfb41f89 100644 --- a/.circleci/rolling-shutter.yml +++ b/.circleci/rolling-shutter.yml @@ -7,7 +7,7 @@ jobs: path: ~/src - restore_cache: keys: - - rs-generate-v18-{{ checksum "go.sum" }}-{{checksum "go.mod"}} + - rs-generate-v19-{{ checksum "go.sum" }}-{{checksum "go.mod"}} - install-asdf - run: name: "Install asdf plugins" @@ -33,7 +33,7 @@ jobs: find ./docs -name '*.md' -delete - run: make generate - save_cache: - key: rs-generate-v18-{{ checksum "go.sum" }}-{{checksum "go.mod"}} + key: rs-generate-v19-{{ checksum "go.sum" }}-{{checksum "go.mod"}} paths: - "~/go/pkg/mod" - "~/.cache/go-build" @@ -51,10 +51,10 @@ jobs: path: ~/src - restore_cache: keys: - - go-mod-v7-{{ checksum "go.sum" }}-{{ checksum "go.mod" }} + - go-mod-v8-{{ checksum "go.sum" }}-{{ checksum "go.mod" }} - run: go get -d ./... - save_cache: - key: go-mod-v7-{{ checksum "go.sum" }}-{{ checksum "go.mod" }} + key: go-mod-v8-{{ checksum "go.sum" }}-{{ checksum "go.mod" }} paths: - ~/go/pkg/ - restore_cache: @@ -90,7 +90,7 @@ jobs: - store_test_results: path: report - save_cache: - key: rs-build-<< parameters.go-version >>-v4-{{ checksum "go.sum" }}-{{ checksum "go.mod" }} + key: rs-build-<< parameters.go-version >>-v5-{{ checksum "go.sum" }}-{{ checksum "go.mod" }} paths: - "~/.cache/go-build" @@ -200,7 +200,7 @@ jobs: - run: | make lint-changes - save_cache: - key: rs-lint-v13-{{ checksum "go.sum" }}-{{ checksum "go.mod" }} + key: rs-lint-v14-{{ checksum "go.sum" }}-{{ checksum "go.mod" }} paths: - "~/.cache/go-build" - "~/.cache/golangci-lint" From ca1ac4e2930aa9eceef8b9f59ba647f4682e349c Mon Sep 17 00:00:00 2001 From: Konrad Feldmeier Date: Thu, 9 Nov 2023 13:46:01 +0100 Subject: [PATCH 4/8] Add missing file --- .../medley/testkeygen/testgenerator.go | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 rolling-shutter/medley/testkeygen/testgenerator.go diff --git a/rolling-shutter/medley/testkeygen/testgenerator.go b/rolling-shutter/medley/testkeygen/testgenerator.go new file mode 100644 index 000000000..4aeabc95a --- /dev/null +++ b/rolling-shutter/medley/testkeygen/testgenerator.go @@ -0,0 +1,96 @@ +package testkeygen + +import ( + "crypto/rand" + + "github.com/shutter-network/shutter/shlib/shcrypto" + + "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/epochid" +) + +// KeyGenerator is a helper tool to generate secret and public eon and epoch keys and key +// shares. It will generate a new eon key every eonInterval epochs. +type KeyGenerator struct { + eonInterval uint64 + eonKeyGen map[uint64]*EonKeys + NumKeypers uint64 + Threshold uint64 +} + +func NewKeyGenerator(numKeypers uint64, threshold uint64) *KeyGenerator { + return &KeyGenerator{ + eonInterval: 100, // 0 stands for infinity + eonKeyGen: make(map[uint64]*EonKeys), + NumKeypers: numKeypers, + Threshold: threshold, + } +} + +// getEonIndex computes the index of the EON key to be used for the given epochID. We generate a new +// eon key every eonInterval epochs. +func (kg *KeyGenerator) getEonIndex(epochID epochid.EpochID) uint64 { + if kg.eonInterval == 0 { + return 0 + } + + return epochID.Big().Uint64() / kg.eonInterval +} + +func (kg *KeyGenerator) EonKeysForEpoch(epochID epochid.EpochID) *EonKeys { + eonIndex := kg.getEonIndex(epochID) + res, ok := kg.eonKeyGen[eonIndex] + var err error + if !ok { + res, err = NewEonKeys( + rand.Reader, + kg.NumKeypers, + kg.Threshold, + ) + if err != nil { + return nil + } + kg.eonKeyGen[eonIndex] = res + } + return res +} + +func (kg *KeyGenerator) EonPublicKeyShare(epochID epochid.EpochID, keyperIndex uint64) *shcrypto.EonPublicKeyShare { + return kg.EonKeysForEpoch(epochID).keyperShares[keyperIndex].eonPublicKeyShare +} + +func (kg *KeyGenerator) EonPublicKey(epochID epochid.EpochID) *shcrypto.EonPublicKey { + return kg.EonKeysForEpoch(epochID).publicKey +} + +func (kg *KeyGenerator) EonSecretKeyShare(epochID epochid.EpochID, keyperIndex uint64) *shcrypto.EonSecretKeyShare { + return kg.EonKeysForEpoch(epochID).keyperShares[keyperIndex].eonSecretKeyShare +} + +func (kg *KeyGenerator) EpochSecretKeyShare(epochID epochid.EpochID, keyperIndex uint64) *shcrypto.EpochSecretKeyShare { + return kg.EonKeysForEpoch(epochID).keyperShares[keyperIndex].ComputeEpochSecretKeyShare(epochID) +} + +func (kg *KeyGenerator) EpochSecretKey(epochID epochid.EpochID) *shcrypto.EpochSecretKey { + epochSecretKey, err := kg.EonKeysForEpoch(epochID).EpochSecretKey(epochID) + if err != nil { + panic(err) + } + return epochSecretKey +} + +func (kg *KeyGenerator) RandomEpochID(epochbytes []byte) epochid.EpochID { + _, err := rand.Read(epochbytes) + if err != nil { + panic(err) + } + + epochID, err := epochid.BytesToEpochID(epochbytes) + if err != nil { + panic(err) + } + return epochID +} + +func (kg *KeyGenerator) RandomSigma() (shcrypto.Block, error) { + return shcrypto.RandomSigma(rand.Reader) +} From 749e786c60e6c59bb339865bf40d8647c275815e Mon Sep 17 00:00:00 2001 From: Konrad Feldmeier Date: Tue, 14 Nov 2023 11:30:09 +0100 Subject: [PATCH 5/8] Change visibility --- rolling-shutter/cmd/cryptocmd/jsontests.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rolling-shutter/cmd/cryptocmd/jsontests.go b/rolling-shutter/cmd/cryptocmd/jsontests.go index b9b8e67fd..8ef90f13e 100644 --- a/rolling-shutter/cmd/cryptocmd/jsontests.go +++ b/rolling-shutter/cmd/cryptocmd/jsontests.go @@ -44,7 +44,7 @@ func GenerateTestdata() *cobra.Command { vtCounter: 1, } enc.start() - CreateJSONTests(*enc) + createJSONTests(*enc) enc.flush() return nil @@ -61,7 +61,7 @@ func RunJSONTests() *cobra.Command { Short: "Use testdata in json format to test crypto implementations", Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { - errs := ReadTestcases(filename) + errs := readTestcases(filename) return errs[0] }, @@ -201,7 +201,7 @@ type verificationTest struct { Expected bool `json:"expected"` } -func ReadTestcases(filename string) []error { +func readTestcases(filename string) []error { var testcases []*testCase f, err := os.OpenFile(filename, os.O_RDONLY, 0o600) @@ -314,7 +314,7 @@ var testSpecs = []struct { }, } -func CreateJSONTests(enc testEncoder) { +func createJSONTests(enc testEncoder) { keygen := testkeygen.NewKeyGenerator(12, 10) var err error for i := range testSpecs { From 56383a2e6984cfddb92bc2dfe037077af37603b1 Mon Sep 17 00:00:00 2001 From: Konrad Feldmeier Date: Thu, 23 Nov 2023 11:28:49 +0100 Subject: [PATCH 6/8] Upgrade shlib and enable malleability test --- rolling-shutter/cmd/cryptocmd/jsontests.go | 4 +- rolling-shutter/go.mod | 19 ++++++-- rolling-shutter/go.sum | 56 +++++++++++++++------- 3 files changed, 56 insertions(+), 23 deletions(-) diff --git a/rolling-shutter/cmd/cryptocmd/jsontests.go b/rolling-shutter/cmd/cryptocmd/jsontests.go index 8ef90f13e..f56e73619 100644 --- a/rolling-shutter/cmd/cryptocmd/jsontests.go +++ b/rolling-shutter/cmd/cryptocmd/jsontests.go @@ -297,11 +297,11 @@ var testSpecs = []struct { []byte("A message"), fixed, }, - /*{ + { "An illegal modification of the encrypted message 'A message'", []byte("A message"), tampered, - },*/ + }, { "Verification of a random 32 byte epochID", make([]byte, 32), diff --git a/rolling-shutter/go.mod b/rolling-shutter/go.mod index f657f33f2..4b30acfb5 100644 --- a/rolling-shutter/go.mod +++ b/rolling-shutter/go.mod @@ -53,20 +53,26 @@ require ( require ( github.com/DataDog/zstd v1.5.2 // indirect - github.com/VictoriaMetrics/fastcache v1.6.0 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/VictoriaMetrics/fastcache v1.12.1 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bits-and-blooms/bitset v1.7.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cockroachdb/errors v1.9.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 // indirect + github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 // indirect github.com/cockroachdb/redact v1.1.3 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/cosmos/gogoproto v1.4.1 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect + github.com/crate-crypto/go-kzg-4844 v0.3.0 // indirect github.com/creachadair/taskgroup v0.3.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect @@ -78,6 +84,7 @@ require ( github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/elastic/gosigar v0.14.2 // indirect + github.com/ethereum/c-kzg-4844 v0.3.1 // indirect github.com/fjl/memsize v0.0.1 // indirect github.com/flynn/noise v1.0.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect @@ -116,7 +123,7 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.2.3 // indirect - github.com/huin/goupnp v1.2.0 // indirect + github.com/huin/goupnp v1.3.0 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/ipfs/go-cid v0.4.1 // indirect github.com/ipfs/go-datastore v0.6.0 // indirect @@ -167,6 +174,7 @@ require ( github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/minio/sha256-simd v1.0.1 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mr-tron/base58 v1.2.0 // indirect @@ -206,6 +214,7 @@ require ( github.com/spf13/cast v1.5.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect + github.com/supranational/blst v0.3.11 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/tendermint/tm-db v0.6.7 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect @@ -218,7 +227,7 @@ require ( go.uber.org/fx v1.20.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.25.0 // indirect - golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/net v0.14.0 // indirect golang.org/x/sys v0.14.0 // indirect @@ -227,9 +236,9 @@ require ( google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect google.golang.org/grpc v1.54.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect lukechampine.com/blake3 v1.2.1 // indirect + rsc.io/tmplfunc v0.0.3 // indirect ) replace github.com/bitwurx/jrpc2 => github.com/ulope/jrpc2 v0.0.0-20230706135348-a95cf3d96bd2 diff --git a/rolling-shutter/go.sum b/rolling-shutter/go.sum index 50c96c086..ed58e7e64 100644 --- a/rolling-shutter/go.sum +++ b/rolling-shutter/go.sum @@ -65,8 +65,8 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8 github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= +github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= @@ -85,6 +85,8 @@ github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZx github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= +github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= @@ -119,18 +121,25 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoGMWEhDvS3zToKcDpRsLuRolQJBVGdozk= -github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811/go.mod h1:Nb5lgvnQ2+oGlE/EyZy4+2/CxRh9KfvCXnag1vtpxVM= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593/go.mod h1:6hk1eMY/u5t+Cf18q5lFMUA1Rc+Sm5I6Ra1QuPyxXCo= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= @@ -158,6 +167,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-kzg-4844 v0.3.0 h1:UBlWE0CgyFqqzTI+IFyCzA7A3Zw4iip6uzRv5NIXG0A= +github.com/crate-crypto/go-kzg-4844 v0.3.0/go.mod h1:SBP7ikXEgDnUPONgm33HtuDZEDtWa3L4QtN1ocJSEQ4= github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -209,8 +220,10 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/ethereum/go-ethereum v1.12.0 h1:bdnhLPtqETd4m3mS8BGMNvBTf36bO5bx/hxE2zljOa0= -github.com/ethereum/go-ethereum v1.12.0/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= +github.com/ethereum/c-kzg-4844 v0.3.1 h1:sR65+68+WdnMKxseNWxSJuAv2tsUrihTpVBTfM/U5Zg= +github.com/ethereum/c-kzg-4844 v0.3.1/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.13.4 h1:25HJnaWVg3q1O7Z62LaaI6S9wVq8QCw3K88g8wEzrcM= +github.com/ethereum/go-ethereum v1.13.4/go.mod h1:I0U5VewuuTzvBtVzKo7b3hJzDhXOUtn9mJW7SsIPB0Q= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= @@ -406,6 +419,7 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBBos92HalKpaGKHrp+3Uo6yTodo= github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -445,13 +459,15 @@ github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvH github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY= -github.com/huin/goupnp v1.2.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -596,6 +612,8 @@ github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= @@ -705,6 +723,9 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.1 h1:ZhBBeX8tSlRpu/FFhXH4RC4OJzFlqsQhoHZAz4x7TIw= github.com/mitchellh/pointerstructure v1.2.1/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -938,6 +959,8 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -1092,8 +1115,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ= -golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1171,8 +1194,8 @@ golang.org/x/net v0.0.0-20210913180222-943fd674d43e/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1255,7 +1278,6 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1368,8 +1390,8 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 h1:Vve/L0v7CXXuxUmaMGIEK/dEeq7uiqb5qBgQrZzIE7E= -golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1547,5 +1569,7 @@ lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= From 339373dd55e65b9424aabb6728c2812a0b511dee Mon Sep 17 00:00:00 2001 From: Konrad Feldmeier Date: Thu, 23 Nov 2023 12:34:06 +0100 Subject: [PATCH 7/8] Rebase after identitypreimage refactor --- rolling-shutter/cmd/cryptocmd/jsontests.go | 24 +++++++++---------- .../identitypreimage/identitypreimage.go | 10 ++++++++ .../medley/testkeygen/testgenerator.go | 23 ++++++++---------- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/rolling-shutter/cmd/cryptocmd/jsontests.go b/rolling-shutter/cmd/cryptocmd/jsontests.go index f56e73619..732b14487 100644 --- a/rolling-shutter/cmd/cryptocmd/jsontests.go +++ b/rolling-shutter/cmd/cryptocmd/jsontests.go @@ -15,7 +15,7 @@ import ( "github.com/shutter-network/shutter/shlib/shcrypto" - "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/epochid" + "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/identitypreimage" "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/testkeygen" ) @@ -181,11 +181,11 @@ const ( ) type encryptionTest struct { - Message hexutil.Bytes `json:"message"` - EonPublicKey *shcrypto.EonPublicKey `json:"eon_public_key"` - EpochID epochid.EpochID `json:"epoch_id"` - Sigma shcrypto.Block `json:"sigma"` - Expected *shcrypto.EncryptedMessage `json:"expected"` + Message hexutil.Bytes `json:"message"` + EonPublicKey *shcrypto.EonPublicKey `json:"eon_public_key"` + EpochID identitypreimage.IdentityPreimage `json:"epoch_id"` + Sigma shcrypto.Block `json:"sigma"` + Expected *shcrypto.EncryptedMessage `json:"expected"` } type decryptionTest struct { @@ -195,10 +195,10 @@ type decryptionTest struct { } type verificationTest struct { - EpochSecretKey shcrypto.EpochSecretKey `json:"epoch_secret_key"` - EonPublicKey shcrypto.EonPublicKey `json:"eon_public_key"` - EpochID epochid.EpochID `json:"epoch_id"` - Expected bool `json:"expected"` + EpochSecretKey shcrypto.EpochSecretKey `json:"epoch_secret_key"` + EonPublicKey shcrypto.EonPublicKey `json:"eon_public_key"` + EpochID identitypreimage.IdentityPreimage `json:"epoch_id"` + Expected bool `json:"expected"` } func readTestcases(filename string) []error { @@ -591,8 +591,8 @@ func testMarshalingRoundtrip(tc *testCase) error { if !bytes.Equal(marshaled, roundtrip) { println(len(marshaled)) println(len(roundtrip)) - println("m:", string(marshaled)) - println("u:", string(roundtrip)) + println("before:", string(marshaled)) + println("after:", string(roundtrip)) return errors.New("roundtrip marshaling failed") } return nil diff --git a/rolling-shutter/medley/identitypreimage/identitypreimage.go b/rolling-shutter/medley/identitypreimage/identitypreimage.go index 40e411302..5b1e34ecd 100644 --- a/rolling-shutter/medley/identitypreimage/identitypreimage.go +++ b/rolling-shutter/medley/identitypreimage/identitypreimage.go @@ -50,3 +50,13 @@ func (e IdentityPreimage) String() string { func Equal(a, b IdentityPreimage) bool { return bytes.Equal(a.Bytes(), b.Bytes()) } + +func (e IdentityPreimage) MarshalText() ([]byte, error) { //nolint:unparam + return []byte(e.Hex()), nil +} + +func (e *IdentityPreimage) UnmarshalText(input []byte) error { + val, err := HexToIdentityPreimage(string(input)) + *e = val.Bytes() + return err +} diff --git a/rolling-shutter/medley/testkeygen/testgenerator.go b/rolling-shutter/medley/testkeygen/testgenerator.go index 4aeabc95a..4e127386c 100644 --- a/rolling-shutter/medley/testkeygen/testgenerator.go +++ b/rolling-shutter/medley/testkeygen/testgenerator.go @@ -5,7 +5,7 @@ import ( "github.com/shutter-network/shutter/shlib/shcrypto" - "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/epochid" + "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/identitypreimage" ) // KeyGenerator is a helper tool to generate secret and public eon and epoch keys and key @@ -28,7 +28,7 @@ func NewKeyGenerator(numKeypers uint64, threshold uint64) *KeyGenerator { // getEonIndex computes the index of the EON key to be used for the given epochID. We generate a new // eon key every eonInterval epochs. -func (kg *KeyGenerator) getEonIndex(epochID epochid.EpochID) uint64 { +func (kg *KeyGenerator) getEonIndex(epochID identitypreimage.IdentityPreimage) uint64 { if kg.eonInterval == 0 { return 0 } @@ -36,7 +36,7 @@ func (kg *KeyGenerator) getEonIndex(epochID epochid.EpochID) uint64 { return epochID.Big().Uint64() / kg.eonInterval } -func (kg *KeyGenerator) EonKeysForEpoch(epochID epochid.EpochID) *EonKeys { +func (kg *KeyGenerator) EonKeysForEpoch(epochID identitypreimage.IdentityPreimage) *EonKeys { eonIndex := kg.getEonIndex(epochID) res, ok := kg.eonKeyGen[eonIndex] var err error @@ -54,23 +54,23 @@ func (kg *KeyGenerator) EonKeysForEpoch(epochID epochid.EpochID) *EonKeys { return res } -func (kg *KeyGenerator) EonPublicKeyShare(epochID epochid.EpochID, keyperIndex uint64) *shcrypto.EonPublicKeyShare { +func (kg *KeyGenerator) EonPublicKeyShare(epochID identitypreimage.IdentityPreimage, keyperIndex uint64) *shcrypto.EonPublicKeyShare { return kg.EonKeysForEpoch(epochID).keyperShares[keyperIndex].eonPublicKeyShare } -func (kg *KeyGenerator) EonPublicKey(epochID epochid.EpochID) *shcrypto.EonPublicKey { +func (kg *KeyGenerator) EonPublicKey(epochID identitypreimage.IdentityPreimage) *shcrypto.EonPublicKey { return kg.EonKeysForEpoch(epochID).publicKey } -func (kg *KeyGenerator) EonSecretKeyShare(epochID epochid.EpochID, keyperIndex uint64) *shcrypto.EonSecretKeyShare { +func (kg *KeyGenerator) EonSecretKeyShare(epochID identitypreimage.IdentityPreimage, keyperIndex uint64) *shcrypto.EonSecretKeyShare { return kg.EonKeysForEpoch(epochID).keyperShares[keyperIndex].eonSecretKeyShare } -func (kg *KeyGenerator) EpochSecretKeyShare(epochID epochid.EpochID, keyperIndex uint64) *shcrypto.EpochSecretKeyShare { +func (kg *KeyGenerator) EpochSecretKeyShare(epochID identitypreimage.IdentityPreimage, keyperIndex uint64) *shcrypto.EpochSecretKeyShare { return kg.EonKeysForEpoch(epochID).keyperShares[keyperIndex].ComputeEpochSecretKeyShare(epochID) } -func (kg *KeyGenerator) EpochSecretKey(epochID epochid.EpochID) *shcrypto.EpochSecretKey { +func (kg *KeyGenerator) EpochSecretKey(epochID identitypreimage.IdentityPreimage) *shcrypto.EpochSecretKey { epochSecretKey, err := kg.EonKeysForEpoch(epochID).EpochSecretKey(epochID) if err != nil { panic(err) @@ -78,16 +78,13 @@ func (kg *KeyGenerator) EpochSecretKey(epochID epochid.EpochID) *shcrypto.EpochS return epochSecretKey } -func (kg *KeyGenerator) RandomEpochID(epochbytes []byte) epochid.EpochID { +func (kg *KeyGenerator) RandomEpochID(epochbytes []byte) identitypreimage.IdentityPreimage { _, err := rand.Read(epochbytes) if err != nil { panic(err) } - epochID, err := epochid.BytesToEpochID(epochbytes) - if err != nil { - panic(err) - } + epochID := identitypreimage.IdentityPreimage(epochbytes) return epochID } From 4f6c49dc02a2c4aed67792347988861d46ba3ff8 Mon Sep 17 00:00:00 2001 From: Konrad Feldmeier Date: Mon, 4 Dec 2023 13:12:22 +0100 Subject: [PATCH 8/8] Match dependencies of rolling-shutter/main --- rolling-shutter/go.mod | 19 ++++---------- rolling-shutter/go.sum | 56 ++++++++++++------------------------------ 2 files changed, 21 insertions(+), 54 deletions(-) diff --git a/rolling-shutter/go.mod b/rolling-shutter/go.mod index 4b30acfb5..f657f33f2 100644 --- a/rolling-shutter/go.mod +++ b/rolling-shutter/go.mod @@ -53,26 +53,20 @@ require ( require ( github.com/DataDog/zstd v1.5.2 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/VictoriaMetrics/fastcache v1.12.1 // indirect + github.com/VictoriaMetrics/fastcache v1.6.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.7.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cockroachdb/errors v1.9.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 // indirect + github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 // indirect github.com/cockroachdb/redact v1.1.3 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/consensys/bavard v0.1.13 // indirect - github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/cosmos/gogoproto v1.4.1 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect - github.com/crate-crypto/go-kzg-4844 v0.3.0 // indirect github.com/creachadair/taskgroup v0.3.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect @@ -84,7 +78,6 @@ require ( github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/elastic/gosigar v0.14.2 // indirect - github.com/ethereum/c-kzg-4844 v0.3.1 // indirect github.com/fjl/memsize v0.0.1 // indirect github.com/flynn/noise v1.0.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect @@ -123,7 +116,7 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.2.3 // indirect - github.com/huin/goupnp v1.3.0 // indirect + github.com/huin/goupnp v1.2.0 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/ipfs/go-cid v0.4.1 // indirect github.com/ipfs/go-datastore v0.6.0 // indirect @@ -174,7 +167,6 @@ require ( github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/minio/sha256-simd v1.0.1 // indirect - github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mr-tron/base58 v1.2.0 // indirect @@ -214,7 +206,6 @@ require ( github.com/spf13/cast v1.5.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect - github.com/supranational/blst v0.3.11 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/tendermint/tm-db v0.6.7 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect @@ -227,7 +218,7 @@ require ( go.uber.org/fx v1.20.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.25.0 // indirect - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/net v0.14.0 // indirect golang.org/x/sys v0.14.0 // indirect @@ -236,9 +227,9 @@ require ( google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect google.golang.org/grpc v1.54.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect lukechampine.com/blake3 v1.2.1 // indirect - rsc.io/tmplfunc v0.0.3 // indirect ) replace github.com/bitwurx/jrpc2 => github.com/ulope/jrpc2 v0.0.0-20230706135348-a95cf3d96bd2 diff --git a/rolling-shutter/go.sum b/rolling-shutter/go.sum index ed58e7e64..50c96c086 100644 --- a/rolling-shutter/go.sum +++ b/rolling-shutter/go.sum @@ -65,8 +65,8 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8 github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= -github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= +github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= +github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= @@ -85,8 +85,6 @@ github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZx github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= -github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= @@ -121,25 +119,18 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= -github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593/go.mod h1:6hk1eMY/u5t+Cf18q5lFMUA1Rc+Sm5I6Ra1QuPyxXCo= +github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoGMWEhDvS3zToKcDpRsLuRolQJBVGdozk= +github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811/go.mod h1:Nb5lgvnQ2+oGlE/EyZy4+2/CxRh9KfvCXnag1vtpxVM= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= -github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= -github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= @@ -167,8 +158,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-kzg-4844 v0.3.0 h1:UBlWE0CgyFqqzTI+IFyCzA7A3Zw4iip6uzRv5NIXG0A= -github.com/crate-crypto/go-kzg-4844 v0.3.0/go.mod h1:SBP7ikXEgDnUPONgm33HtuDZEDtWa3L4QtN1ocJSEQ4= github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -220,10 +209,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/ethereum/c-kzg-4844 v0.3.1 h1:sR65+68+WdnMKxseNWxSJuAv2tsUrihTpVBTfM/U5Zg= -github.com/ethereum/c-kzg-4844 v0.3.1/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.13.4 h1:25HJnaWVg3q1O7Z62LaaI6S9wVq8QCw3K88g8wEzrcM= -github.com/ethereum/go-ethereum v1.13.4/go.mod h1:I0U5VewuuTzvBtVzKo7b3hJzDhXOUtn9mJW7SsIPB0Q= +github.com/ethereum/go-ethereum v1.12.0 h1:bdnhLPtqETd4m3mS8BGMNvBTf36bO5bx/hxE2zljOa0= +github.com/ethereum/go-ethereum v1.12.0/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= @@ -419,7 +406,6 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBBos92HalKpaGKHrp+3Uo6yTodo= github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -459,15 +445,13 @@ github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvH github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= -github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= -github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= +github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY= +github.com/huin/goupnp v1.2.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -612,8 +596,6 @@ github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= -github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= @@ -723,9 +705,6 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.1 h1:ZhBBeX8tSlRpu/FFhXH4RC4OJzFlqsQhoHZAz4x7TIw= github.com/mitchellh/pointerstructure v1.2.1/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= -github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= -github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -959,8 +938,6 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= -github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -1115,8 +1092,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ= +golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1194,8 +1171,8 @@ golang.org/x/net v0.0.0-20210913180222-943fd674d43e/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1278,6 +1255,7 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1390,8 +1368,8 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 h1:Vve/L0v7CXXuxUmaMGIEK/dEeq7uiqb5qBgQrZzIE7E= +golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1569,7 +1547,5 @@ lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=