forked from endophage/gotuf
-
Notifications
You must be signed in to change notification settings - Fork 0
/
keys.go
106 lines (90 loc) · 1.73 KB
/
keys.go
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package data
import (
"crypto/sha256"
"encoding/hex"
"github.com/Sirupsen/logrus"
cjson "github.com/tent/canonical-json-go"
)
type Key interface {
ID() string
Cipher() string
Public() string
Private() string
}
type KeyPair struct {
Public []byte `json:"public"`
Private []byte `json:"private"`
}
type TUFKey struct {
id string `json:"-"`
Type string `json:"keytype"`
Value KeyPair `json:"keyval"`
}
func NewTUFKey(cipher, public, private string) *TUFKey {
return &TUFKey{
Type: cipher,
Value: KeyPair{
Public: []byte(public),
Private: []byte(private),
},
}
}
func (k TUFKey) Cipher() string {
return k.Type
}
func (k *TUFKey) ID() string {
logrus.Debug("Generating Key ID")
if k.id == "" {
logrus.Debug("Generating Key ID")
pubK := NewTUFKey(k.Cipher(), k.Public(), "")
data, err := cjson.Marshal(&pubK)
if err != nil {
logrus.Error("Error generating key ID:", err)
}
digest := sha256.Sum256(data)
k.id = hex.EncodeToString(digest[:])
}
return k.id
}
func (k TUFKey) Public() string {
return string(k.Value.Public)
}
type PublicKey struct {
TUFKey
}
func (k PublicKey) Private() string {
return ""
}
func NewPublicKey(cipher, public string) *PublicKey {
return &PublicKey{
TUFKey{
Type: cipher,
Value: KeyPair{
Public: []byte(public),
Private: []byte(""),
},
},
}
}
func PublicKeyFromPrivate(pk PrivateKey) *PublicKey {
return &PublicKey{
pk.TUFKey,
}
}
type PrivateKey struct {
TUFKey
}
func NewPrivateKey(cipher, public, private string) *PrivateKey {
return &PrivateKey{
TUFKey{
Type: cipher,
Value: KeyPair{
Public: []byte(public),
Private: []byte(private),
},
},
}
}
func (k PrivateKey) Private() string {
return string(k.Value.Private)
}