package dsakey import ( "crypto/openpgp" "fmt" "bytes" "time" "testing" ) 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) } }