device: simplify copying counter to nonce
Since we already have it packed into a uint64 in a known byte order, write it back out again the same byte order instead of copying byte by byte. This should also generate more efficient code, because the compiler can do a single uint64 write, instead of eight bounds checks and eight byte writes. Due to a missed optimization, it actually generates a mishmash of smaller writes: 1 byte, 4 bytes, 2 bytes, 1 byte. This is https://golang.org/issue/41663. The code is still better than before, and will get better yet once that compiler bug gets fixed. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:
parent
94b33ba705
commit
41cd68416c
|
@ -268,22 +268,12 @@ func (device *Device) RoutineDecryption() {
|
||||||
counter := elem.packet[MessageTransportOffsetCounter:MessageTransportOffsetContent]
|
counter := elem.packet[MessageTransportOffsetCounter:MessageTransportOffsetContent]
|
||||||
content := elem.packet[MessageTransportOffsetContent:]
|
content := elem.packet[MessageTransportOffsetContent:]
|
||||||
|
|
||||||
// expand nonce
|
|
||||||
|
|
||||||
nonce[0x4] = counter[0x0]
|
|
||||||
nonce[0x5] = counter[0x1]
|
|
||||||
nonce[0x6] = counter[0x2]
|
|
||||||
nonce[0x7] = counter[0x3]
|
|
||||||
|
|
||||||
nonce[0x8] = counter[0x4]
|
|
||||||
nonce[0x9] = counter[0x5]
|
|
||||||
nonce[0xa] = counter[0x6]
|
|
||||||
nonce[0xb] = counter[0x7]
|
|
||||||
|
|
||||||
// decrypt and release to consumer
|
// decrypt and release to consumer
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
elem.counter = binary.LittleEndian.Uint64(counter)
|
elem.counter = binary.LittleEndian.Uint64(counter)
|
||||||
|
// copy counter to nonce
|
||||||
|
binary.LittleEndian.PutUint64(nonce[0x4:0xc], elem.counter)
|
||||||
elem.packet, err = elem.keypair.receive.Open(
|
elem.packet, err = elem.keypair.receive.Open(
|
||||||
content[:0],
|
content[:0],
|
||||||
nonce[:],
|
nonce[:],
|
||||||
|
|
Loading…
Reference in a new issue