Official Go implementation of the Ethereum protocol
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
package whisper
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"crypto/elliptic"
|
|
|
|
"fmt"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/crypto"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestSign(t *testing.T) {
|
|
|
|
prv, _ := crypto.GenerateKey()
|
|
|
|
msg := NewMessage([]byte("hello world"))
|
|
|
|
msg.sign(prv)
|
|
|
|
|
|
|
|
pubKey := msg.Recover()
|
|
|
|
p1 := elliptic.Marshal(crypto.S256(), prv.PublicKey.X, prv.PublicKey.Y)
|
|
|
|
p2 := elliptic.Marshal(crypto.S256(), pubKey.X, pubKey.Y)
|
|
|
|
|
|
|
|
if !bytes.Equal(p1, p2) {
|
|
|
|
t.Error("recovered pub key did not match")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMessageEncryptDecrypt(t *testing.T) {
|
|
|
|
prv1, _ := crypto.GenerateKey()
|
|
|
|
prv2, _ := crypto.GenerateKey()
|
|
|
|
|
|
|
|
data := []byte("hello world")
|
|
|
|
msg := NewMessage(data)
|
|
|
|
envelope, err := msg.Seal(DefaultPow, Opts{
|
|
|
|
From: prv1,
|
|
|
|
To: &prv2.PublicKey,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
t.FailNow()
|
|
|
|
}
|
|
|
|
|
|
|
|
msg1, err := envelope.Open(prv2)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
t.FailNow()
|
|
|
|
}
|
|
|
|
|
|
|
|
if !bytes.Equal(msg1.Payload, data) {
|
|
|
|
t.Error("encryption error. data did not match")
|
|
|
|
}
|
|
|
|
}
|