type DebitCert struct {
Cert
- Beneficiary string
+ Beneficiary string
}
type CreditCert struct {
Cert
- Drawer string
- DebitCert string
+ Drawer string
+ DebitCert string
}
type BounceCert struct {
References []string
}
+// Common cert part of a debit or credit cert
func ToCert(v interface{}) (cert *Cert, err error) {
cert = new(Cert)
switch x := v.(type) {
return fmt.Sprintf("%040X", h.Sum())
}
-// parse an epoint document without checking the signature and format details
+// Parse an epoint document without checking the signature and format details
func Parse(s []byte) (iv interface{}, c *Signed, err error) {
c, err = ParseSigned(s)
if err != nil {
return
}
-// format and sign an epoint document
+// Format and sign an epoint document
func Format(iv interface{}, key *openpgp.Entity) (s []byte, c *Signed, err error) {
doc, err := FormatStruct(iv)
if err != nil {
return
}
-// verify an epoint document, return the cleaned version as well
-func Verify(c *Signed, key openpgp.KeyRing) (err error) {
+// Verify an epoint document, return the cleaned version as well
+func Verify(c *Signed, keys openpgp.KeyRing) (err error) {
msg := bytes.NewBuffer(c.Body)
sig := bytes.NewBuffer(c.Signature)
- // TODO: verify signature
- _, _ = msg, sig
- // _, err = openpgp.CheckArmoredDetachedSignature(key, msg, sig)
+ _, err = openpgp.CheckArmoredDetachedSignature(keys, msg, sig)
return
}
-// sign body with given secret key
+// Sign body with given secret key
func Sign(body []byte, key *openpgp.Entity) (c *Signed, err error) {
c = new(Signed)
c.Hash = "SHA256"
return
}
+// ParseStruct parses an epoint document and returns a struct representation
func ParseStruct(doc *Document) (iv interface{}, err error) {
switch doc.Type {
case "Draft":
return
}
-// turn a struct into a document
+// FormatStruct turns a struct into a document
func FormatStruct(iv interface{}) (doc *Document, err error) {
v := reflect.ValueOf(iv)
if v.Kind() != reflect.Ptr || v.IsNil() || v.Elem().Kind() != reflect.Struct {
return
}
+// ParseFields parses a key value sequence into a fields map
func ParseFields(s []byte) (fields map[string]string, rest []byte, err error) {
rest = s
fields = make(map[string]string)