From a366175021136a38c5f6b4dd64b91214baa8757f Mon Sep 17 00:00:00 2001 From: arnaucube Date: Fri, 18 Dec 2020 20:44:29 +0100 Subject: [PATCH] Add scanner/valuer interface to babyjub.PublicKeyComp --- babyjub/eddsa.go | 18 ++++++++++++++++++ babyjub/eddsa_test.go | 17 ++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/babyjub/eddsa.go b/babyjub/eddsa.go index 55f250c..feee8ca 100644 --- a/babyjub/eddsa.go +++ b/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 +} diff --git a/babyjub/eddsa_test.go b/babyjub/eddsa_test.go index 978c428..495f990 100644 --- a/babyjub/eddsa_test.go +++ b/babyjub/eddsa_test.go @@ -160,7 +160,7 @@ func TestSignatureScannerValuer(t *testing.T) { assert.Equal(t, value, scan) } -func TestPubKeyScannerValuer(t *testing.T) { +func TestPublicKeyScannerValuer(t *testing.T) { privKValue := NewRandPrivKey() pubKValue := privKValue.Public() privKScan := NewRandPrivKey() @@ -175,6 +175,21 @@ func TestPubKeyScannerValuer(t *testing.T) { 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)) + assert.Equal(t, value, scan) +} + func BenchmarkBabyjubEddsa(b *testing.B) { var k PrivateKey _, err := hex.Decode(k[:],