@@ -175,8 +175,6 @@ func init() {
175
175
}
176
176
177
177
func (device * Device ) CreateMessageInitiation (peer * Peer ) (* MessageInitiation , error ) {
178
- errZeroECDHResult := errors .New ("ECDH returned all zeros" )
179
-
180
178
device .staticIdentity .RLock ()
181
179
defer device .staticIdentity .RUnlock ()
182
180
@@ -204,9 +202,9 @@ func (device *Device) CreateMessageInitiation(peer *Peer) (*MessageInitiation, e
204
202
handshake .mixHash (msg .Ephemeral [:])
205
203
206
204
// encrypt static key
207
- ss := handshake .localEphemeral .sharedSecret (handshake .remoteStatic )
208
- if isZero ( ss [:]) {
209
- return nil , errZeroECDHResult
205
+ ss , err := handshake .localEphemeral .sharedSecret (handshake .remoteStatic )
206
+ if err != nil {
207
+ return nil , err
210
208
}
211
209
var key [chacha20poly1305 .KeySize ]byte
212
210
KDF2 (
@@ -221,7 +219,7 @@ func (device *Device) CreateMessageInitiation(peer *Peer) (*MessageInitiation, e
221
219
222
220
// encrypt timestamp
223
221
if isZero (handshake .precomputedStaticStatic [:]) {
224
- return nil , errZeroECDHResult
222
+ return nil , errInvalidPublicKey
225
223
}
226
224
KDF2 (
227
225
& handshake .chainKey ,
@@ -264,11 +262,10 @@ func (device *Device) ConsumeMessageInitiation(msg *MessageInitiation) *Peer {
264
262
mixKey (& chainKey , & InitialChainKey , msg .Ephemeral [:])
265
263
266
264
// decrypt static key
267
- var err error
268
265
var peerPK NoisePublicKey
269
266
var key [chacha20poly1305 .KeySize ]byte
270
- ss := device .staticIdentity .privateKey .sharedSecret (msg .Ephemeral )
271
- if isZero ( ss [:]) {
267
+ ss , err := device .staticIdentity .privateKey .sharedSecret (msg .Ephemeral )
268
+ if err != nil {
272
269
return nil
273
270
}
274
271
KDF2 (& chainKey , & key , chainKey [:], ss [:])
@@ -384,12 +381,16 @@ func (device *Device) CreateMessageResponse(peer *Peer) (*MessageResponse, error
384
381
handshake .mixHash (msg .Ephemeral [:])
385
382
handshake .mixKey (msg .Ephemeral [:])
386
383
387
- func () {
388
- ss := handshake .localEphemeral .sharedSecret (handshake .remoteEphemeral )
389
- handshake .mixKey (ss [:])
390
- ss = handshake .localEphemeral .sharedSecret (handshake .remoteStatic )
391
- handshake .mixKey (ss [:])
392
- }()
384
+ ss , err := handshake .localEphemeral .sharedSecret (handshake .remoteEphemeral )
385
+ if err != nil {
386
+ return nil , err
387
+ }
388
+ handshake .mixKey (ss [:])
389
+ ss , err = handshake .localEphemeral .sharedSecret (handshake .remoteStatic )
390
+ if err != nil {
391
+ return nil , err
392
+ }
393
+ handshake .mixKey (ss [:])
393
394
394
395
// add preshared key
395
396
@@ -406,11 +407,9 @@ func (device *Device) CreateMessageResponse(peer *Peer) (*MessageResponse, error
406
407
407
408
handshake .mixHash (tau [:])
408
409
409
- func () {
410
- aead , _ := chacha20poly1305 .New (key [:])
411
- aead .Seal (msg .Empty [:0 ], ZeroNonce [:], nil , handshake .hash [:])
412
- handshake .mixHash (msg .Empty [:])
413
- }()
410
+ aead , _ := chacha20poly1305 .New (key [:])
411
+ aead .Seal (msg .Empty [:0 ], ZeroNonce [:], nil , handshake .hash [:])
412
+ handshake .mixHash (msg .Empty [:])
414
413
415
414
handshake .state = handshakeResponseCreated
416
415
@@ -455,17 +454,19 @@ func (device *Device) ConsumeMessageResponse(msg *MessageResponse) *Peer {
455
454
mixHash (& hash , & handshake .hash , msg .Ephemeral [:])
456
455
mixKey (& chainKey , & handshake .chainKey , msg .Ephemeral [:])
457
456
458
- func () {
459
- ss := handshake .localEphemeral .sharedSecret (msg .Ephemeral )
460
- mixKey (& chainKey , & chainKey , ss [:])
461
- setZero (ss [:])
462
- }()
457
+ ss , err := handshake .localEphemeral .sharedSecret (msg .Ephemeral )
458
+ if err != nil {
459
+ return false
460
+ }
461
+ mixKey (& chainKey , & chainKey , ss [:])
462
+ setZero (ss [:])
463
463
464
- func () {
465
- ss := device .staticIdentity .privateKey .sharedSecret (msg .Ephemeral )
466
- mixKey (& chainKey , & chainKey , ss [:])
467
- setZero (ss [:])
468
- }()
464
+ ss , err = device .staticIdentity .privateKey .sharedSecret (msg .Ephemeral )
465
+ if err != nil {
466
+ return false
467
+ }
468
+ mixKey (& chainKey , & chainKey , ss [:])
469
+ setZero (ss [:])
469
470
470
471
// add preshared key (psk)
471
472
@@ -483,7 +484,7 @@ func (device *Device) ConsumeMessageResponse(msg *MessageResponse) *Peer {
483
484
// authenticate transcript
484
485
485
486
aead , _ := chacha20poly1305 .New (key [:])
486
- _ , err : = aead .Open (nil , ZeroNonce [:], msg .Empty [:], hash [:])
487
+ _ , err = aead .Open (nil , ZeroNonce [:], msg .Empty [:], hash [:])
487
488
if err != nil {
488
489
return false
489
490
}
0 commit comments