diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2017-09-20 09:26:08 +0200 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2017-09-20 09:26:08 +0200 |
commit | 47a21c8bb08c84d5f84e66ffd3b81ded957dda6d (patch) | |
tree | 99006a48c9aff4ba4c8bef0ae771715a20f1e2e2 /src/receive.go | |
parent | f212795e51d839910085e08f9c6b09eac11863d3 (diff) | |
download | wireguard-go-47a21c8bb08c84d5f84e66ffd3b81ded957dda6d.tar.gz wireguard-go-47a21c8bb08c84d5f84e66ffd3b81ded957dda6d.zip |
Added last_minute_handshake_guard
- Added last_minute_handshake_guard and reverted keypair changes.
- Added comment explaining the state of Go in releation to handling
cryptographic state in memory.
- Decreased logging level of netsh test
Diffstat (limited to 'src/receive.go')
-rw-r--r-- | src/receive.go | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/src/receive.go b/src/receive.go index 09fca77..52c2718 100644 --- a/src/receive.go +++ b/src/receive.go @@ -247,28 +247,20 @@ func (device *Device) RoutineDecryption() { counter := elem.packet[MessageTransportOffsetCounter:MessageTransportOffsetContent] content := elem.packet[MessageTransportOffsetContent:] - // decrypt with key-pair + // decrypt and release to consumer + var err error copy(nonce[4:], counter) elem.counter = binary.LittleEndian.Uint64(counter) - elem.keyPair.receive.mutex.RLock() - if elem.keyPair.receive.aead == nil { - // very unlikely (the key was deleted during queuing) + elem.packet, err = elem.keyPair.receive.Open( + elem.buffer[:0], + nonce[:], + content, + nil, + ) + if err != nil { elem.Drop() - } else { - var err error - elem.packet, err = elem.keyPair.receive.aead.Open( - elem.buffer[:0], - nonce[:], - content, - nil, - ) - if err != nil { - elem.Drop() - } } - - elem.keyPair.receive.mutex.RUnlock() elem.mutex.Unlock() } } @@ -433,8 +425,6 @@ func (device *Device) RoutineHandshake() { case MessageResponseType: - logDebug.Println("Process response") - // unmarshal var msg MessageResponse @@ -457,6 +447,8 @@ func (device *Device) RoutineHandshake() { continue } + logDebug.Println("Received handshake initation from", peer) + peer.TimerEphemeralKeyCreated() // update timers |