@@ -12,13 +12,13 @@ import (
12
12
"slices"
13
13
)
14
14
15
- const KeySize = 32
15
+ const SubKeySize = 32
16
16
17
- // a key is either: a public encryption, public signing, private encryption, or private signing key
18
- type key [ KeySize ]byte
17
+ // a subKey is either: a public encryption, public signing, private encryption, or private signing subKey
18
+ type subKey [ SubKeySize ]byte
19
19
20
20
// a subKey is zero if all it's bytes are zero
21
- func (s key ) IsZero () bool {
21
+ func (s subKey ) IsZero () bool {
22
22
for _ , b := range s {
23
23
if b != 0 {
24
24
return false
@@ -27,74 +27,75 @@ func (s key) IsZero() bool {
27
27
return true
28
28
}
29
29
30
- func (s key ) Bytes () []byte {
30
+ func (s subKey ) Bytes () []byte {
31
31
return s [:]
32
32
}
33
33
34
34
func NewPeer () Peer {
35
- return KeyPair {}
35
+ return Key {}
36
36
}
37
37
38
- // a KeyPair is two (specifically one encryption and one signing) keys
39
- type KeyPair [2 ]key
38
+ // a Key is two (specifically one encryption and one signing) keys
39
+ type Key [2 ]subKey
40
40
41
- func (k KeyPair ) MarshalJSON () ([]byte , error ) {
41
+ func (k Key ) MarshalJSON () ([]byte , error ) {
42
42
str := k .ToHex ()
43
43
return json .Marshal (str )
44
44
}
45
45
46
- func (k KeyPair ) MarshalBinary () ([]byte , error ) {
46
+ func (k Key ) MarshalBinary () ([]byte , error ) {
47
47
return k .Bytes (), nil
48
48
}
49
49
50
- func (k * KeyPair ) UnmarshalBinary (b []byte ) error {
51
- copy (k [0 ][:], b [:KeySize ])
52
- copy (k [1 ][:], b [KeySize :])
50
+ func (k * Key ) UnmarshalBinary (b []byte ) error {
51
+ copy (k [0 ][:], b [:SubKeySize ])
52
+ copy (k [1 ][:], b [SubKeySize :])
53
53
return nil
54
54
}
55
55
56
- func (k * KeyPair ) UnmarshalJSON (b []byte ) error {
56
+ func (k * Key ) UnmarshalJSON (b []byte ) error {
57
57
j := KeyFromHex (string (b ))
58
58
copy (k [:], j [:])
59
59
return nil
60
60
}
61
61
62
- func (k KeyPair ) MarshalText () ([]byte , error ) {
62
+ func (k Key ) MarshalText () ([]byte , error ) {
63
63
return []byte (k .ToHex ()), nil
64
64
}
65
65
66
66
// a Key is zero if all it's subKeys are zero
67
- func (k KeyPair ) IsZero () bool {
67
+ func (k Key ) IsZero () bool {
68
68
return k [0 ].IsZero () && k [1 ].IsZero ()
69
69
}
70
70
71
- func (k KeyPair ) From (b []byte ) KeyPair {
72
- var enc key
73
- var sig key
74
- copy (enc [:], b [:KeySize ])
75
- copy (sig [:], b [KeySize :])
76
- var j KeyPair
71
+ func (k Key ) From (b []byte ) Key {
72
+ // TODO: panic or error if the byte slice looks wrong
73
+ var enc subKey
74
+ var sig subKey
75
+ copy (enc [:], b [:SubKeySize ])
76
+ copy (sig [:], b [SubKeySize :])
77
+ var j Key
77
78
j [0 ] = enc
78
79
j [1 ] = sig
79
80
return j
80
81
}
81
82
82
- // a KeyChain is two [KeyPair ]s. One public, one private
83
- type KeyChain [2 ]KeyPair
83
+ // a KeyPair is two [Key ]s. One public, one private
84
+ type KeyPair [2 ]Key
84
85
85
86
// a KeyPair is zero if all it's keys are zero
86
- func (kp KeyChain ) IsZero () bool {
87
+ func (kp KeyPair ) IsZero () bool {
87
88
return kp [0 ].IsZero () && kp [1 ].IsZero ()
88
89
}
89
90
90
- func (k KeyPair ) Bytes () []byte {
91
- b := make ([]byte , 2 * KeySize )
92
- copy (b [:KeySize ], k [0 ][:])
93
- copy (b [KeySize :], k [1 ][:])
91
+ func (k Key ) Bytes () []byte {
92
+ b := make ([]byte , 2 * SubKeySize )
93
+ copy (b [:SubKeySize ], k [0 ][:])
94
+ copy (b [SubKeySize :], k [1 ][:])
94
95
return b
95
96
}
96
97
97
- func (k KeyPair ) ToInt64 () int64 {
98
+ func (k Key ) ToInt64 () int64 {
98
99
var num int64
99
100
buf := bytes .NewReader (k .Bytes ())
100
101
err := binary .Read (buf , binary .BigEndian , & num )
@@ -104,7 +105,7 @@ func (k KeyPair) ToInt64() int64 {
104
105
return num
105
106
}
106
107
107
- func (k KeyPair ) Equal (j KeyPair ) bool {
108
+ func (k Key ) Equal (j Key ) bool {
108
109
for i := range 2 {
109
110
110
111
jslice := j [i ][:]
@@ -122,62 +123,62 @@ func (k KeyPair) Equal(j KeyPair) bool {
122
123
return true
123
124
}
124
125
125
- func (k KeyPair ) Signing () key {
126
+ func (k Key ) Signing () subKey {
126
127
return k [1 ]
127
128
}
128
129
129
- func (k KeyPair ) Encryption () key {
130
+ func (k Key ) Encryption () subKey {
130
131
return k [0 ]
131
132
}
132
133
133
- func (k KeyChain ) Bytes () []byte {
134
- b := make ([]byte , 4 * KeySize )
135
- copy (b [:2 * KeySize ], k [0 ].Bytes ()) // public
136
- copy (b [2 * KeySize :], k [1 ].Bytes ()) // private
134
+ func (k KeyPair ) Bytes () []byte {
135
+ b := make ([]byte , 4 * SubKeySize )
136
+ copy (b [:2 * SubKeySize ], k [0 ].Bytes ()) // public
137
+ copy (b [2 * SubKeySize :], k [1 ].Bytes ()) // private
137
138
return b
138
139
}
139
140
140
- func (k KeyPair ) ToHex () string {
141
+ func (k Key ) ToHex () string {
141
142
return hex .EncodeToString (k .Bytes ())
142
143
}
143
144
144
- func KeyFromHex (str string ) KeyPair {
145
+ func KeyFromHex (str string ) Key {
145
146
bin , err := hex .DecodeString (str )
146
147
if err != nil {
147
- return KeyPair {}
148
+ return Key {}
148
149
}
149
150
return KeyFromBytes (bin )
150
151
}
151
152
152
- func KeyFromBytes (b []byte ) KeyPair {
153
+ func KeyFromBytes (b []byte ) Key {
153
154
154
155
gotSize := len (b )
155
- wantSize := KeySize * 2
156
+ wantSize := SubKeySize * 2
156
157
157
158
if gotSize != wantSize {
158
159
panic (fmt .Sprintf ("wrong length for key. Wanted %d but got %d" , wantSize , gotSize ))
159
160
}
160
- k := KeyPair {}
161
- copy (k [0 ][:], b [:KeySize ])
162
- copy (k [1 ][:], b [KeySize :])
161
+ k := Key {}
162
+ copy (k [0 ][:], b [:SubKeySize ])
163
+ copy (k [1 ][:], b [SubKeySize :])
163
164
return k
164
165
}
165
166
166
- func NewSubKey (randy io.Reader ) key {
167
- sk := key {}
167
+ func NewSubKey (randy io.Reader ) subKey {
168
+ sk := subKey {}
168
169
randy .Read (sk [:])
169
170
return sk
170
171
}
171
172
172
- func NewKey (randy io.Reader ) KeyPair {
173
+ func NewKey (randy io.Reader ) Key {
173
174
if randy == nil {
174
- return KeyPair {}
175
+ return Key {}
175
176
}
176
- return KeyPair {NewSubKey (randy ), NewSubKey (randy )}
177
+ return Key {NewSubKey (randy ), NewSubKey (randy )}
177
178
}
178
179
179
180
// NewKeyPair generates valid ed25519 and X25519 keys
180
- func NewKeyPair (randy io.Reader ) KeyChain {
181
+ func NewKeyPair (randy io.Reader ) KeyPair {
181
182
182
183
/**
183
184
* Layout:
@@ -187,7 +188,7 @@ func NewKeyPair(randy io.Reader) KeyChain {
187
188
* 4th 32 bytes: private signing key
188
189
**/
189
190
190
- var kp KeyChain
191
+ var kp KeyPair
191
192
192
193
// encryption keys
193
194
ed := ecdh .X25519 ()
@@ -197,17 +198,17 @@ func NewKeyPair(randy io.Reader) KeyChain {
197
198
}
198
199
encryptionPub := encryptionPriv .PublicKey ()
199
200
200
- kp [0 ][0 ] = key (encryptionPub .Bytes ())
201
- kp [1 ][0 ] = key (encryptionPriv .Bytes ())
201
+ kp [0 ][0 ] = subKey (encryptionPub .Bytes ())
202
+ kp [1 ][0 ] = subKey (encryptionPriv .Bytes ())
202
203
203
204
// signing keys
204
205
signPub , signPriv , err := ed25519 .GenerateKey (randy )
205
206
if err != nil {
206
207
panic (err )
207
208
}
208
209
209
- kp [0 ][1 ] = key (signPub )
210
- kp [1 ][1 ] = key (signPriv [:KeySize ])
210
+ kp [0 ][1 ] = subKey (signPub )
211
+ kp [1 ][1 ] = subKey (signPriv [:SubKeySize ])
211
212
212
213
return kp
213
214
}
0 commit comments