Add scanner/valuer interface to babyjub.PublicKeyComp
arnaucube root@arnaucube.com
Fri, 18 Dec 2020 20:44:29 +0100
2 files changed,
34 insertions(+),
1 deletions(-)
M
babyjub/eddsa.go
→
babyjub/eddsa.go
@@ -354,3 +354,21 @@ func (pk PublicKey) Value() (driver.Value, error) {
comp := pk.Compress() return comp[:], nil } + +// Scan implements Scanner for database/sql. +func (pkComp *PublicKeyComp) Scan(src interface{}) error { + srcB, ok := src.([]byte) + if !ok { + return fmt.Errorf("can't scan %T into PublicKeyComp", src) + } + if len(srcB) != 32 { + return fmt.Errorf("can't scan []byte of len %d into PublicKeyComp, want %d", len(srcB), 32) + } + copy(pkComp[:], srcB) + return nil +} + +// Value implements valuer for database/sql. +func (pkComp PublicKeyComp) Value() (driver.Value, error) { + return pkComp[:], nil +}
M
babyjub/eddsa_test.go
→
babyjub/eddsa_test.go
@@ -160,7 +160,7 @@ assert.Nil(t, scan.Scan(fromDB))
assert.Equal(t, value, scan) } -func TestPubKeyScannerValuer(t *testing.T) { +func TestPublicKeyScannerValuer(t *testing.T) { privKValue := NewRandPrivKey() pubKValue := privKValue.Public() privKScan := NewRandPrivKey()@@ -169,6 +169,21 @@ var value driver.Valuer
var scan sql.Scanner value = pubKValue scan = pubKScan + fromDB, err := value.Value() + assert.Nil(t, err) + assert.Nil(t, scan.Scan(fromDB)) + assert.Equal(t, value, scan) +} + +func TestPublicKeyCompScannerValuer(t *testing.T) { + privKValue := NewRandPrivKey() + pubKCompValue := privKValue.Public().Compress() + privKScan := NewRandPrivKey() + pubKCompScan := privKScan.Public().Compress() + var value driver.Valuer + var scan sql.Scanner + value = &pubKCompValue + scan = &pubKCompScan fromDB, err := value.Value() assert.Nil(t, err) assert.Nil(t, scan.Scan(fromDB))