code reorganization
[epoint] / pkg / key / key_test.go
diff --git a/pkg/key/key_test.go b/pkg/key/key_test.go
new file mode 100644 (file)
index 0000000..34df359
--- /dev/null
@@ -0,0 +1,118 @@
+package dsakey
+
+import (
+       "bytes"
+       "crypto/openpgp"
+       "fmt"
+       "testing"
+       "time"
+)
+
+func testSignAndVerify(t *testing.T, priv *openpgp.Entity) {
+       msg := []byte("testing")
+       w := new(bytes.Buffer)
+       err := openpgp.DetachSign(w, priv, bytes.NewBuffer(msg))
+       if err != nil {
+               t.Errorf("error signing: %s", err)
+               return
+       }
+
+       _, err = openpgp.CheckDetachedSignature(openpgp.EntityList{priv}, bytes.NewBuffer(msg), w)
+       if err != nil {
+               t.Errorf("Verify failed: %s", err)
+       }
+}
+
+func TestKey(t *testing.T) {
+       key, err := GenKey()
+       if err != nil {
+               t.Errorf("gen dsa key failed: %s", err)
+               return
+       }
+       priv, err := NewEntity(key, time.Seconds(), "a", "b", "c")
+       if err != nil {
+               t.Errorf("new entity failed: %s", err)
+       } else {
+               testSignAndVerify(t, priv)
+       }
+}
+
+func TestGenIssuer(t *testing.T) {
+       denomination := "1/100 EUR"
+       priv, err := NewIssuerEntity([]byte("issuer-rand"), denomination)
+       if err != nil {
+               t.Errorf("new entity failed: %s", err)
+       } else {
+               testSignAndVerify(t, priv)
+       }
+       wpriv := new(bytes.Buffer)
+       err = priv.SerializePrivate(wpriv)
+       if err != nil {
+               t.Errorf("priv key serialization failed: %s", err)
+               return
+       }
+       wpub := new(bytes.Buffer)
+       err = priv.Serialize(wpub)
+       if err != nil {
+               t.Errorf("pub key serialization failed: %s", err)
+               return
+       }
+       es, err := openpgp.ReadKeyRing(wpub)
+       if err != nil {
+               t.Errorf("pub key parsing failed: %s", err)
+               return
+       }
+       isIssuer, issuer, denom, err := CheckEntity(es[0])
+       if err != nil {
+               t.Errorf("pub key parsing failed: %s", err)
+               return
+       }
+       if !isIssuer {
+               t.Errorf("expected issuer key got: %v", es[0].Identities)
+       }
+       issuerfpr := fmt.Sprintf("%X", priv.PrimaryKey.Fingerprint)
+       if issuer != issuerfpr {
+               t.Errorf("expected issuer %s got %s", issuerfpr, issuer)
+       }
+       if denom != denomination {
+               t.Errorf("expected denomination %q got %q", denomination, denom)
+       }
+
+       priv, err = NewHolderEntity([]byte("holder-rand"), issuerfpr, denomination)
+       if err != nil {
+               t.Errorf("new entity failed: %s", err)
+       } else {
+               testSignAndVerify(t, priv)
+       }
+       wpriv = new(bytes.Buffer)
+       err = priv.SerializePrivate(wpriv)
+       if err != nil {
+               t.Errorf("priv key serialization failed: %s", err)
+               return
+       }
+       wpub = new(bytes.Buffer)
+       err = priv.Serialize(wpub)
+       if err != nil {
+               t.Errorf("pub key serialization failed: %s", err)
+               return
+       }
+       es, err = openpgp.ReadKeyRing(wpub)
+       if err != nil {
+               t.Errorf("pub key parsing failed: %s", err)
+               return
+       }
+       isIssuer, issuer, denom, err = CheckEntity(es[0])
+       if err != nil {
+               t.Errorf("pub key parsing failed: %s", err)
+               return
+       }
+       if isIssuer {
+               t.Errorf("expected non-issuer key got: %v", es[0].Identities)
+       }
+       if issuer != issuerfpr {
+               t.Errorf("expected issuer %s got %s", issuerfpr, issuer)
+       }
+       if denom != denomination {
+               t.Errorf("expected denomination %q got %q", denomination, denom)
+       }
+}