arnaucube
arnaucube/go-iden3-cryptoPublic Self-hosted repository
Merge pull request #33 from iden3/feature/pkcomp-scanvalue

Add scanner/valuer interface to babyjub.PublicKeyComp
Eduard S eduard@iden3.io
Mon, 21 Dec 2020 10:31:37 +0100
commit

0a5c6acba32bef64806f998598317d11032f1656

parent

a2015adb2f1be0aefb90c95d833fafe86f546c35

2 files changed, 34 insertions(+), 1 deletions(-)

jump to
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))