Commit afb4ea6a authored by Adrian Sutton's avatar Adrian Sutton Committed by GitHub

op-preimage: Update verification for sha256 and blobs (#9432)

parent 9f5269e3
package preimage package preimage
import ( import (
"crypto/sha256"
"errors" "errors"
"fmt" "fmt"
"slices" "slices"
...@@ -28,6 +29,15 @@ func WithVerification(source PreimageGetter) PreimageGetter { ...@@ -28,6 +29,15 @@ func WithVerification(source PreimageGetter) PreimageGetter {
return nil, fmt.Errorf("%w for key %v, hash: %v data: %x", ErrIncorrectData, key, hash, data) return nil, fmt.Errorf("%w for key %v, hash: %v data: %x", ErrIncorrectData, key, hash, data)
} }
return data, nil return data, nil
case Sha256KeyType:
hash := sha256.Sum256(data)
if !slices.Equal(hash[1:], key[1:]) {
return nil, fmt.Errorf("%w for key %v, hash: %v data: %x", ErrIncorrectData, key, hash, data)
}
return data, nil
case BlobKeyType:
// Can't verify an individual field element without having a kzg proof
return data, nil
default: default:
return nil, fmt.Errorf("%w: %v", ErrUnsupportedKeyType, key[0]) return nil, fmt.Errorf("%w: %v", ErrUnsupportedKeyType, key[0])
} }
......
package preimage package preimage
import ( import (
"crypto/sha256"
"errors" "errors"
"fmt"
"reflect"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
...@@ -10,16 +13,20 @@ import ( ...@@ -10,16 +13,20 @@ import (
func TestWithVerification(t *testing.T) { func TestWithVerification(t *testing.T) {
validData := []byte{1, 2, 3, 4, 5, 6} validData := []byte{1, 2, 3, 4, 5, 6}
keccak256Key := Keccak256Key(Keccak256(validData)) keccak256Key := Keccak256Key(Keccak256(validData))
sha256Key := Sha256Key(sha256.Sum256(validData))
anError := errors.New("boom") anError := errors.New("boom")
tests := []struct { validKeys := []Key{keccak256Key, sha256Key}
type testData struct {
name string name string
key Key key Key
data []byte data []byte
err error err error
expectedErr error expectedErr error
expectedData []byte expectedData []byte
}{ }
tests := []testData{
{ {
name: "LocalKey NoVerification", name: "LocalKey NoVerification",
key: LocalIndexKey(1), key: LocalIndexKey(1),
...@@ -27,29 +34,10 @@ func TestWithVerification(t *testing.T) { ...@@ -27,29 +34,10 @@ func TestWithVerification(t *testing.T) {
expectedData: []byte{4, 3, 5, 7, 3}, expectedData: []byte{4, 3, 5, 7, 3},
}, },
{ {
name: "Keccak256 Valid", name: "BlobKey NoVerification",
key: keccak256Key, key: BlobKey([32]byte{1, 2, 3, 4}),
data: validData, data: []byte{4, 3, 5, 7, 3},
expectedData: validData, expectedData: []byte{4, 3, 5, 7, 3},
},
{
name: "Keccak256 Error",
key: keccak256Key,
data: validData,
err: anError,
expectedErr: anError,
},
{
name: "Keccak256 InvalidData",
key: keccak256Key,
data: []byte{6, 7, 8},
expectedErr: ErrIncorrectData,
},
{
name: "EmptyData",
key: keccak256Key,
data: []byte{},
expectedErr: ErrIncorrectData,
}, },
{ {
name: "UnknownKey", name: "UnknownKey",
...@@ -59,6 +47,36 @@ func TestWithVerification(t *testing.T) { ...@@ -59,6 +47,36 @@ func TestWithVerification(t *testing.T) {
}, },
} }
for _, key := range validKeys {
name := reflect.TypeOf(key).Name()
tests = append(tests,
testData{
name: fmt.Sprintf("%v-Valid", name),
key: key,
data: validData,
expectedData: validData,
},
testData{
name: fmt.Sprintf("%v-Error", name),
key: key,
data: validData,
err: anError,
expectedErr: anError,
},
testData{
name: fmt.Sprintf("%v-InvalidData", name),
key: key,
data: []byte{6, 7, 8},
expectedErr: ErrIncorrectData,
},
testData{
name: fmt.Sprintf("%v-EmptyData", name),
key: key,
data: []byte{},
expectedErr: ErrIncorrectData,
})
}
for _, test := range tests { for _, test := range tests {
test := test test := test
t.Run(test.name, func(t *testing.T) { t.Run(test.name, func(t *testing.T) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment