if err != nil {
return
}
- err = db.Append("fprlist/64", fpr[len(fpr)-16:], []byte(fpr))
+ err = db.Append("keysby/64", fpr[len(fpr)-16:], []byte(fpr))
if err != nil {
return
}
- err = db.Append("fprlist/32", fpr[len(fpr)-8:], []byte(fpr))
+ err = db.Append("keysby/32", fpr[len(fpr)-8:], []byte(fpr))
if err != nil {
return
}
}
func CertByDraft(draftid string) (d []byte, err error) {
- certid, err := db.Get("certid/debit", draftid)
+ certid, err := db.Get("certby/draft", draftid)
if err != nil {
// TODO: we have the draft but the cert is not ready
return
}
func CertByDebitCert(debitid string) (d []byte, err error) {
- creditid, err := db.Get("certid/credit", debitid)
+ creditid, err := db.Get("certby/debit", debitid)
if err != nil {
// TODO: we have the debit cert but the credit cert is not ready
return
return
}
draftid = document.Id(signed)
-/*
- k, err := db.Get("key", draft.Drawer)
- if err != nil {
- return
- }
- kr, err := openpgp.ReadKeyRing(bytes.NewBuffer(k))
- if err != nil {
- // internal error: pubkey cannot be parsed
- return
- }
- cleaned, err = document.Verify(signed, kr)
- if err != nil {
- return
- }
- // TODO: verify issuer
- _, err = db.Get("key", draft.Beneficiary)
- if err != nil {
- return
- }
-*/
+ /*
+ k, err := db.Get("key", draft.Drawer)
+ if err != nil {
+ return
+ }
+ kr, err := openpgp.ReadKeyRing(bytes.NewBuffer(k))
+ if err != nil {
+ // internal error: pubkey cannot be parsed
+ return
+ }
+ cleaned, err = document.Verify(signed, kr)
+ if err != nil {
+ return
+ }
+ // TODO: verify issuer
+ _, err = db.Get("key", draft.Beneficiary)
+ if err != nil {
+ return
+ }
+ */
// TODO: do various format checks (AuthorizedBy check etc)
if draft.Amount <= 0 || draft.Amount >= IntLimit {
err = fmt.Errorf("draft amount is invalid: %d", draft.Amount)
err = fmt.Errorf("ParseDebitCert: expected a debit docuent")
return
}
-/*
- // TODO: keep our key at hand
- k, err := db.Get("key", cert.AuthorizedBy)
- if err != nil {
- return
- }
- kr, err := openpgp.ReadKeyRing(bytes.NewBuffer(k))
- if err != nil {
- // internal error: pubkey cannot be parsed
- return
- }
- // must clean up to make sure the hash is ok
- cleaned, err = document.Verify(signed, kr)
- if err != nil {
- return
- }
-*/
+ /*
+ // TODO: keep our key at hand
+ k, err := db.Get("key", cert.AuthorizedBy)
+ if err != nil {
+ return
+ }
+ kr, err := openpgp.ReadKeyRing(bytes.NewBuffer(k))
+ if err != nil {
+ // internal error: pubkey cannot be parsed
+ return
+ }
+ // must clean up to make sure the hash is ok
+ cleaned, err = document.Verify(signed, kr)
+ if err != nil {
+ return
+ }
+ */
certid = document.Id(signed)
return
}
cert.Draft = draftid
cert.Beneficiary = draft.Beneficiary
- oid, err := db.Get("certid/last", draft.Drawer)
+ oid, err := db.Get("certby/key", draft.Drawer)
oldcertid := string(oid)
if err != nil {
// first cert: drawer is issuer
cert.Drawer = dcert.Holder
cert.DebitCert = dcertid
- oid, err := db.Get("certid/last", dcert.Beneficiary)
+ oid, err := db.Get("certby/key", dcert.Beneficiary)
oldcertid := string(oid)
if err != nil {
// this is the first cert
return cert, nil
}
-// TODO: draft ref
func EvalDraft(d []byte, sk *openpgp.Entity) (r []byte, err error) {
draft, draftid, err := ParseDraft(d)
if err != nil {
// internal error
return
}
+ // TODO: db.Insert: fails if key exists
+ _, err = db.Get("draftby/nonce", draft.Nonce)
+ if err == nil {
+ err = fmt.Errorf("draft nonce is not unique")
+ return
+ }
+ err = db.Set("draftby/nonce", draft.Nonce, d)
+ if err != nil {
+ // internal error
+ return
+ }
// debit cert
cert, err := NewDebitCert(draftid, draft)
// internal error
return
}
- err = db.Set("certid/debit", draftid, []byte(certid))
+ err = db.Set("certby/draft", draftid, []byte(certid))
if err != nil {
// internal error
return
}
- err = db.Set("certid/last", cert.Holder, []byte(certid))
+ err = db.Set("certby/key", cert.Holder, []byte(certid))
if err != nil {
// internal error
return
}
// TODO: append?
- err = db.Set("certid/all", fmt.Sprintf("%s.%09d", cert.Holder, cert.Serial), []byte(certid))
+ err = db.Set("certby/key.serial", fmt.Sprintf("%s.%09d", cert.Holder, cert.Serial), []byte(certid))
if err != nil {
// internal error
return
// internal error
return
}
- err = db.Set("certid/credit", dcertid, []byte(certid))
+ err = db.Set("certby/debit", dcertid, []byte(certid))
if err != nil {
// internal error
return
}
- err = db.Set("certid/last", cert.Holder, []byte(certid))
+ err = db.Set("certby/key", cert.Holder, []byte(certid))
if err != nil {
// internal error
return
}
// TODO: append?
- err = db.Set("certid/all", fmt.Sprintf("%s.%09d", cert.Holder, cert.Serial), []byte(certid))
+ err = db.Set("certby/key.serial", fmt.Sprintf("%s.%09d", cert.Holder, cert.Serial), []byte(certid))
if err != nil {
// internal error
return
return
}
-func Init() (err error) {
- db, err = store.Open("teststore")
+func Init(rootdir string) (err error) {
+ db, err = store.Open(rootdir)
if err != nil {
return
}
if err != nil {
return
}
- err = db.Ensure("certid/credit")
+ err = db.Ensure("certby/draft")
+ if err != nil {
+ return
+ }
+ err = db.Ensure("certby/debit")
if err != nil {
return
}
- err = db.Ensure("certid/debit")
+ err = db.Ensure("certby/key")
if err != nil {
return
}
- err = db.Ensure("certid/last")
+ err = db.Ensure("certby/key.serial")
if err != nil {
return
}
- err = db.Ensure("certid/all")
+ err = db.Ensure("draftby/nonce")
if err != nil {
return
}
- err = db.Ensure("fprlist/64")
+ err = db.Ensure("keysby/64")
if err != nil {
return
}
- err = db.Ensure("fprlist/32")
+ err = db.Ensure("keysby/32")
if err != nil {
return
}