From 5ef832f175301ece8f8facb6c77ce2c1260791d5 Mon Sep 17 00:00:00 2001 From: Arnau B Date: Thu, 15 Oct 2020 18:42:55 +0200 Subject: [PATCH] Add scanner/valuer interface to babyjub.SignatureComp --- babyjub/eddsa.go | 18 ++++++++++++++++++ babyjub/eddsa_test.go | 19 +++++++++++++++---- go.sum | 1 + 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/babyjub/eddsa.go b/babyjub/eddsa.go index b931cd6..8952364 100644 --- a/babyjub/eddsa.go +++ b/babyjub/eddsa.go @@ -177,6 +177,24 @@ func (s *SignatureComp) Decompress() (*Signature, error) { return new(Signature).Decompress(*s) } +// Scan implements Scanner for database/sql. +func (s *SignatureComp) Scan(src interface{}) error { + srcB, ok := src.([]byte) + if !ok { + return fmt.Errorf("can't scan %T into Signature", src) + } + if len(srcB) != 64 { + return fmt.Errorf("can't scan []byte of len %d into Signature, want %d", len(srcB), 64) + } + copy(s[:], srcB[:]) + return nil +} + +// Value implements valuer for database/sql. +func (s SignatureComp) Value() (driver.Value, error) { + return s[:], nil +} + // Scan implements Scanner for database/sql. func (s *Signature) Scan(src interface{}) error { srcB, ok := src.([]byte) diff --git a/babyjub/eddsa_test.go b/babyjub/eddsa_test.go index 2e81fe4..504beb0 100644 --- a/babyjub/eddsa_test.go +++ b/babyjub/eddsa_test.go @@ -135,6 +135,17 @@ func TestCompressDecompress(t *testing.T) { } } +func TestSignatureCompScannerValuer(t *testing.T) { + privK := NewRandPrivKey() + var value driver.Valuer //nolint:gosimple this is done to ensure interface compability + value = privK.SignPoseidon(big.NewInt(674238462)).Compress() + scan := privK.SignPoseidon(big.NewInt(1)).Compress() + fromDB, err := value.Value() + assert.Nil(t, err) + assert.Nil(t, scan.Scan(fromDB)) + assert.Equal(t, value, scan) +} + func TestSignatureScannerValuer(t *testing.T) { privK := NewRandPrivKey() var value driver.Valuer @@ -142,8 +153,8 @@ func TestSignatureScannerValuer(t *testing.T) { value = privK.SignPoseidon(big.NewInt(674238462)) scan = privK.SignPoseidon(big.NewInt(1)) fromDB, err := value.Value() - assert.NoError(t, err) - assert.NoError(t, scan.Scan(fromDB)) + assert.Nil(t, err) + assert.Nil(t, scan.Scan(fromDB)) assert.Equal(t, value, scan) } @@ -157,8 +168,8 @@ func TestPubKeyScannerValuer(t *testing.T) { value = pubKValue scan = pubKScan fromDB, err := value.Value() - assert.NoError(t, err) - assert.NoError(t, scan.Scan(fromDB)) + assert.Nil(t, err) + assert.Nil(t, scan.Scan(fromDB)) assert.Equal(t, value, scan) } diff --git a/go.sum b/go.sum index ff15655..b63d775 100644 --- a/go.sum +++ b/go.sum @@ -126,6 +126,7 @@ github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1 github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 h1:njlZPzLwU639dk2kqnCPPv+wNjq7Xb6EfUxe/oX0/NM= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=