--- /dev/null
+package crypto
+
+import (
+ "crypto/rand"
+ "testing"
+)
+
+func TestECDSABasicSignAndVerify(t *testing.T) {
+ priv, pub, err := GenerateECDSAKeyPair(rand.Reader)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ data := []byte("hello! and welcome to some awesome crypto primitives")
+
+ sig, err := priv.Sign(data)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ ok, err := pub.Verify(data, sig)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if !ok {
+ t.Fatal("signature didnt match")
+ }
+
+ // change data
+ data[0] = ^data[0]
+ ok, err = pub.Verify(data, sig)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if ok {
+ t.Fatal("signature matched and shouldn't")
+ }
+}
+
+func TestECDSASignZero(t *testing.T) {
+ priv, pub, err := GenerateECDSAKeyPair(rand.Reader)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ data := make([]byte, 0)
+ sig, err := priv.Sign(data)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ ok, err := pub.Verify(data, sig)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !ok {
+ t.Fatal("signature didn't match")
+ }
+}
+
+func TestECDSAMarshalLoop(t *testing.T) {
+ priv, pub, err := GenerateECDSAKeyPair(rand.Reader)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ privB, err := priv.Bytes()
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ privNew, err := UnmarshalPrivateKey(privB)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if !priv.Equals(privNew) || !privNew.Equals(priv) {
+ t.Fatal("keys are not equal")
+ }
+
+ pubB, err := pub.Bytes()
+ if err != nil {
+ t.Fatal(err)
+ }
+ pubNew, err := UnmarshalPublicKey(pubB)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if !pub.Equals(pubNew) || !pubNew.Equals(pub) {
+ t.Fatal("keys are not equal")
+ }
+
+}