dsakey proof of concept (needs cleanup)
[epoint] / dsakey / dsakey_test.go
index 9245199..29ba725 100644 (file)
@@ -2,7 +2,7 @@ package dsakey
 
 import (
        "crypto/openpgp"
-//     "fmt"
+       "fmt"
        "bytes"
        "time"
        "testing"
@@ -19,7 +19,7 @@ func testSignAndVerify(t *testing.T, priv *openpgp.Entity) {
 
        _, err = openpgp.CheckDetachedSignature(openpgp.EntityList{priv}, bytes.NewBuffer(msg), w)
        if err != nil {
-               t.Errorf("Verify failed")
+               t.Errorf("Verify failed: %s", err)
        }
 }
 
@@ -36,3 +36,83 @@ func TestKey(t *testing.T) {
                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)
+       }
+}