aboutsummaryrefslogtreecommitdiffstats
path: root/src/cookie.go
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2017-06-26 13:14:02 +0200
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2017-06-26 13:14:02 +0200
commit9d806d3853c926df75e83966d2c4f832708a1b08 (patch)
tree97dd50a56751d5cb48b60353697aa9ccad9a3e14 /src/cookie.go
parentCompleted noise handshake (diff)
downloadwireguard-go-9d806d3853c926df75e83966d2c4f832708a1b08.tar.xz
wireguard-go-9d806d3853c926df75e83966d2c4f832708a1b08.zip
Begin work on outbound packet flow
Diffstat (limited to '')
-rw-r--r--src/cookie.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/cookie.go b/src/cookie.go
new file mode 100644
index 0000000..a6987a2
--- /dev/null
+++ b/src/cookie.go
@@ -0,0 +1,39 @@
+package main
+
+import (
+ "errors"
+ "golang.org/x/crypto/blake2s"
+)
+
+func CalculateCookie(peer *Peer, msg []byte) {
+ size := len(msg)
+
+ if size < blake2s.Size128*2 {
+ panic(errors.New("bug: message too short"))
+ }
+
+ startMac1 := size - (blake2s.Size128 * 2)
+ startMac2 := size - blake2s.Size128
+
+ mac1 := msg[startMac1 : startMac1+blake2s.Size128]
+ mac2 := msg[startMac2 : startMac2+blake2s.Size128]
+
+ peer.mutex.RLock()
+ defer peer.mutex.RUnlock()
+
+ // set mac1
+
+ func() {
+ mac, _ := blake2s.New128(peer.macKey[:])
+ mac.Write(msg[:startMac1])
+ mac.Sum(mac1[:0])
+ }()
+
+ // set mac2
+
+ if peer.cookie != nil {
+ mac, _ := blake2s.New128(peer.cookie)
+ mac.Write(msg[:startMac2])
+ mac.Sum(mac2[:0])
+ }
+}