This repository was archived by the owner on Jun 11, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathheader.go
More file actions
79 lines (59 loc) · 1.26 KB
/
header.go
File metadata and controls
79 lines (59 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package autocrypt
import (
"bytes"
"encoding/base64"
"fmt"
"golang.org/x/crypto/openpgp"
)
type Attr string
type TypeOption int
const (
TypeOpenPGP TypeOption = iota
TypeInvalid
)
var (
typeMap = map[TypeOption]string{
TypeOpenPGP: "p",
TypeInvalid: "invalid",
}
preferEncryptedMap = map[bool]string{
true: "yes",
false: "no",
}
)
type Header struct {
To string
Key *openpgp.Entity
PreferEncrypted bool
Type TypeOption
Uncritical map[string]string
}
func (h *Header) String() string {
str := ""
str += fmt.Sprintf("%s=%s;", attrTo, h.To)
str += fmt.Sprintf("%s=%s;", attrPreferEncrypted, preferEncryptedMap[h.PreferEncrypted])
str += fmt.Sprintf("%s=%s;", attrType, typeMap[h.Type])
for k, v := range h.Uncritical {
str += fmt.Sprintf("%s=%s;", k, v)
}
if h.Key != nil {
buf := bytes.NewBuffer(nil)
h.Key.Serialize(
base64.NewEncoder(base64.StdEncoding, buf))
str += fmt.Sprintf("%s=%s;", attrKey, wrap(buf.String()))
}
return fmt.Sprintf("%s: %s", autocryptHeader, str)
}
const nCols = 76
func wrap(s string) string {
buf := bytes.NewBuffer(nil)
for len(s) > 0 {
c := nCols
if len(s) < nCols {
c = len(s)
}
fmt.Fprintf(buf, "\n %s", s[:c])
s = s[c:]
}
return buf.String()
}