Skip to content

Commit

Permalink
tests: fix tests due to refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
jack0 committed Jul 12, 2018
1 parent 4b8486f commit 1ccc7f2
Show file tree
Hide file tree
Showing 26 changed files with 103 additions and 110 deletions.
6 changes: 4 additions & 2 deletions crypto/hashing/blake2b.go → crypto/blake2b/blake2b.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package hashing
package blake2b

import (
"github.com/perlin-network/noise/crypto"

blake2blib "golang.org/x/crypto/blake2b"
)

type Blake2b struct{}

var (
_ HashPolicy = (*Blake2b)(nil)
_ crypto.HashPolicy = (*Blake2b)(nil)
)

func NewBlake2b() *Blake2b {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package hashing
package blake2b

import (
"bytes"
"math/big"
"testing"

"github.com/perlin-network/noise/crypto"
)

func TestHash(t *testing.T) {
t.Parallel()
hp := NewBlake2b()

r := Hash(hp, big.NewInt(123))
r := crypto.Hash(hp, big.NewInt(123))

n := new(big.Int)
n, ok := n.SetString("89391711502145780362310349925943903708999319576398061903082165979787487688967", 10)
Expand Down
21 changes: 17 additions & 4 deletions crypto/signing/ed25519.go → crypto/ed25519/ed25519.go
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
package signing
package ed25519

import (
"crypto/rand"

"github.com/perlin-network/noise/crypto"

ed25519lib "golang.org/x/crypto/ed25519"
)

type Ed25519 struct {
}

var (
_ SignaturePolicy = (*Ed25519)(nil)
_ crypto.SignaturePolicy = (*Ed25519)(nil)
)

func NewEd25519() *Ed25519 {
p := &Ed25519{}
return p
return &Ed25519{}
}

func (p *Ed25519) GenerateKeys() ([]byte, []byte, error) {
Expand Down Expand Up @@ -51,3 +52,15 @@ func (p *Ed25519) Verify(publicKey []byte, message []byte, signature []byte) boo
}
return ed25519lib.Verify(publicKey, message, signature)
}

func RandomKeyPair() *crypto.KeyPair {
p := NewEd25519()
publicKey, privateKey, err := p.GenerateKeys()
if err != nil {
panic(err)
}
return &crypto.KeyPair{
PublicKey: publicKey,
PrivateKey: privateKey,
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package signing
package ed25519

import (
"reflect"
Expand Down
15 changes: 0 additions & 15 deletions crypto/hashing/policy.go

This file was deleted.

44 changes: 9 additions & 35 deletions crypto/keypair.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,45 +4,25 @@ import (
"encoding/hex"
"errors"
"fmt"

"github.com/perlin-network/noise/crypto/hashing"
"github.com/perlin-network/noise/crypto/signing"
)

type KeyPair struct {
hp hashing.HashPolicy
sp signing.SignaturePolicy
PrivateKey []byte
PublicKey []byte
}

func NewKeyPair(sp signing.SignaturePolicy, hp hashing.HashPolicy) *KeyPair {
privateKey, publicKey, err := sp.GenerateKeys()
if err != nil {
panic(err)
}
// generate keys if no private key present in signature policy
p := &KeyPair{
hp: hp,
sp: sp,
PrivateKey: privateKey,
PublicKey: publicKey,
}
return p
}

func newErrPrivKeySize(length int, sp signing.SignaturePolicy) error {
func newErrPrivKeySize(length int, sp SignaturePolicy) error {
return errors.New(fmt.Sprintf("private key length %d does not equal expected key length %d", length, sp.PrivateKeySize()))
}

func (k *KeyPair) Sign(message []byte) ([]byte, error) {
if len(k.PublicKey) != k.sp.PrivateKeySize() {
return nil, newErrPrivKeySize(len(k.PrivateKey), k.sp)
func (k *KeyPair) Sign(sp SignaturePolicy, hp HashPolicy, message []byte) ([]byte, error) {
if len(k.PublicKey) != sp.PrivateKeySize() {
return nil, newErrPrivKeySize(len(k.PrivateKey), sp)
}

message = k.hp.HashBytes(message)
message = hp.HashBytes(message)

signature := k.sp.Sign(k.PrivateKey, message)
signature := sp.Sign(k.PrivateKey, message)
return signature, nil
}

Expand All @@ -58,11 +38,7 @@ func (k *KeyPair) String() (string, string) {
return k.PrivateKeyHex(), k.PublicKeyHex()
}

func (k *KeyPair) Verify(message []byte, signature []byte) bool {
return Verify(k.sp, k.hp, k.PublicKey, message, signature)
}

func FromPrivateKey(sp signing.SignaturePolicy, hp hashing.HashPolicy, privateKey string) (*KeyPair, error) {
func FromPrivateKey(sp SignaturePolicy, hp HashPolicy, privateKey string) (*KeyPair, error) {
rawPrivateKey, err := hex.DecodeString(privateKey)
if err != nil {
return nil, err
Expand All @@ -71,7 +47,7 @@ func FromPrivateKey(sp signing.SignaturePolicy, hp hashing.HashPolicy, privateKe
return FromPrivateKeyBytes(sp, hp, rawPrivateKey)
}

func FromPrivateKeyBytes(sp signing.SignaturePolicy, hp hashing.HashPolicy, rawPrivateKey []byte) (*KeyPair, error) {
func FromPrivateKeyBytes(sp SignaturePolicy, hp HashPolicy, rawPrivateKey []byte) (*KeyPair, error) {
if len(rawPrivateKey) != sp.PrivateKeySize() {
return nil, newErrPrivKeySize(len(rawPrivateKey), sp)
}
Expand All @@ -82,16 +58,14 @@ func FromPrivateKeyBytes(sp signing.SignaturePolicy, hp hashing.HashPolicy, rawP
}

keyPair := &KeyPair{
sp: sp,
hp: hp,
PrivateKey: rawPrivateKey,
PublicKey: rawPublicKey,
}

return keyPair, nil
}

func Verify(sp signing.SignaturePolicy, hp hashing.HashPolicy, publicKey []byte, message []byte, signature []byte) bool {
func Verify(sp SignaturePolicy, hp HashPolicy, publicKey []byte, message []byte, signature []byte) bool {
// Public key must be a set size.
if len(publicKey) != sp.PublicKeySize() {
return false
Expand Down
16 changes: 10 additions & 6 deletions crypto/keypair_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,25 +30,27 @@ func TestKeyPair(t *testing.T) {
signature := []byte("signed test message")

// setup expected mock return values
sp.EXPECT().GenerateKeys().Return(privateKey, publicKey, nil).Times(1)
sp.EXPECT().PrivateKeySize().Return(len(privateKey)).AnyTimes()
sp.EXPECT().PublicKeySize().Return(len(publicKey)).AnyTimes()
sp.EXPECT().Sign(privateKey, hashed).Return(signature).Times(1)
sp.EXPECT().Verify(publicKey, hashed, signature).Return(true).Times(1)

hp.EXPECT().HashBytes(message).Return(hashed).AnyTimes()

kp := NewKeyPair(sp, hp)
kp := KeyPair{
PrivateKey: privateKey,
PublicKey: publicKey,
}

sig, err := kp.Sign(message)
sig, err := kp.Sign(sp, hp, message)
if err != nil {
t.Errorf("Sign() = %v, expected <nil>", err)
}
if !bytes.Equal(sig, []byte("signed test message")) {
t.Errorf("Sign() = '%s', expected '%s'", sig, []byte("signed test message"))
}

if !kp.Verify(message, signature) {
if !Verify(sp, hp, publicKey, message, signature) {
t.Errorf("Verify('%s', '%s') = false, expected true", message, signature)
}

Expand Down Expand Up @@ -81,11 +83,13 @@ func TestFromPrivateKey(t *testing.T) {
publicKey := []byte("0987654321")

// setup expected mock return values
sp.EXPECT().GenerateKeys().Return(privateKeyHexBytes, publicKey, nil).Times(1)
sp.EXPECT().PrivateKeySize().Return(len(privateKeyHexBytes)).Times(1)
sp.EXPECT().PrivateToPublic(privateKeyHexBytes).Return(publicKey, nil).Times(1)

kp1 := NewKeyPair(sp, hp)
kp1 := &KeyPair{
PrivateKey: privateKeyHexBytes,
PublicKey: publicKey,
}

kp2, err := FromPrivateKey(sp, hp, privateKey)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion crypto/mocks/mock_hash_policy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion crypto/mocks/mock_signature_policy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions crypto/policy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//go:generate mockgen -destination=mocks/mock_signature_policy.go -package=mocks github.com/perlin-network/noise/crypto SignaturePolicy
//go:generate mockgen -destination=mocks/mock_hash_policy.go -package=mocks github.com/perlin-network/noise/crypto HashPolicy

package crypto

import (
"math/big"
)

type SignaturePolicy interface {
GenerateKeys() ([]byte, []byte, error)
PrivateKeySize() int
PrivateToPublic(privateKey []byte) ([]byte, error)
PublicKeySize() int
Sign(privateKey []byte, message []byte) []byte
Verify(publicKey []byte, message []byte, signature []byte) bool
}

type HashPolicy interface {
HashBytes(b []byte) []byte
}

func Hash(hp HashPolicy, s *big.Int) *big.Int {
return s.SetBytes(hp.HashBytes(s.Bytes()))
}
12 changes: 0 additions & 12 deletions crypto/signing/policy.go

This file was deleted.

2 changes: 1 addition & 1 deletion examples/basic/example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"fmt"
"time"

"github.com/perlin-network/noise/crypto/signing/ed25519"
"github.com/perlin-network/noise/crypto/ed25519"
"github.com/perlin-network/noise/examples/basic/messages"
"github.com/perlin-network/noise/network"
"github.com/perlin-network/noise/network/discovery"
Expand Down
4 changes: 2 additions & 2 deletions examples/chat/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"strings"

"github.com/golang/glog"
"github.com/perlin-network/noise/crypto/signing"
"github.com/perlin-network/noise/crypto/ed25519"
"github.com/perlin-network/noise/examples/chat/messages"
"github.com/perlin-network/noise/network"
"github.com/perlin-network/noise/network/discovery"
Expand Down Expand Up @@ -40,7 +40,7 @@ func main() {
protocol := *protocolFlag
peers := strings.Split(*peersFlag, ",")

keys := signing.RandomEd25519KeyPair()
keys := ed25519.RandomKeyPair()

glog.Infof("Private Key: %s", keys.PrivateKeyHex())
glog.Infof("Public Key: %s", keys.PublicKeyHex())
Expand Down
4 changes: 2 additions & 2 deletions examples/cluster_benchmark/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"time"

"github.com/golang/glog"
"github.com/perlin-network/noise/crypto/signing"
"github.com/perlin-network/noise/crypto/ed25519"
"github.com/perlin-network/noise/examples/cluster_benchmark/messages"
"github.com/perlin-network/noise/network"
"github.com/perlin-network/noise/network/backoff"
Expand Down Expand Up @@ -90,7 +90,7 @@ func main() {
protocol := *protocolFlag
peers := strings.Split(*peersFlag, ",")

keys := signing.NewEd25519()
keys := ed25519.NewEd25519()

go setupPPROF(*portFlag)

Expand Down
2 changes: 1 addition & 1 deletion examples/getting_started/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"strings"

"github.com/golang/glog"
"github.com/perlin-network/noise/crypto/signing/ed25519"
"github.com/perlin-network/noise/crypto/ed25519"
"github.com/perlin-network/noise/network"
"github.com/perlin-network/noise/network/backoff"
"github.com/perlin-network/noise/network/discovery"
Expand Down
3 changes: 2 additions & 1 deletion examples/local_benchmark/receiver/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import _ "net/http/pprof"
import (
"flag"
"fmt"
"github.com/perlin-network/noise/crypto/signing/ed25519"
"github.com/perlin-network/noise/crypto"
"github.com/perlin-network/noise/crypto/ed25519"
"github.com/perlin-network/noise/examples/local_benchmark/messages"
"github.com/perlin-network/noise/network"
"log"
Expand Down
2 changes: 1 addition & 1 deletion examples/local_benchmark/sender/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import _ "net/http/pprof"
import (
"flag"
"fmt"
"github.com/perlin-network/noise/crypto/signing/ed25519"
"github.com/perlin-network/noise/crypto/ed25519"
"github.com/perlin-network/noise/examples/local_benchmark/messages"
"github.com/perlin-network/noise/network"
"log"
Expand Down
2 changes: 1 addition & 1 deletion examples/proxy/proxy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"
"time"

"github.com/perlin-network/noise/crypto/signing/ed25519"
"github.com/perlin-network/noise/crypto/ed25519"
"github.com/perlin-network/noise/examples/proxy/messages"
"github.com/perlin-network/noise/network"
"github.com/perlin-network/noise/network/discovery"
Expand Down
2 changes: 1 addition & 1 deletion examples/stream/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"time"

"github.com/golang/glog"
"github.com/perlin-network/noise/crypto/signing/ed25519"
"github.com/perlin-network/noise/crypto/ed25519"
"github.com/perlin-network/noise/network"
"github.com/perlin-network/noise/network/discovery"
"github.com/xtaci/smux"
Expand Down
2 changes: 1 addition & 1 deletion examples/topologies/topologies.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"testing"
"time"

"github.com/perlin-network/noise/crypto/signing/ed25519"
"github.com/perlin-network/noise/crypto/ed25519"
"github.com/perlin-network/noise/examples/topologies/messages"
"github.com/perlin-network/noise/network"
)
Expand Down
Loading

0 comments on commit 1ccc7f2

Please sign in to comment.