+
+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)
+ }
+}