From 8393cbff521560caef5b1b468cbb2ad030e8eda4 Mon Sep 17 00:00:00 2001 From: Mathias Hall-Andersen Date: Wed, 12 Jul 2017 23:11:49 +0200 Subject: Restructured MAC/cookie calculation Added copy-right headers accidentally removed --- src/macs_peer.go | 83 -------------------------------------------------------- 1 file changed, 83 deletions(-) delete mode 100644 src/macs_peer.go (limited to 'src/macs_peer.go') diff --git a/src/macs_peer.go b/src/macs_peer.go deleted file mode 100644 index 16a7a87..0000000 --- a/src/macs_peer.go +++ /dev/null @@ -1,83 +0,0 @@ -package main - -import ( - "crypto/cipher" - "errors" - "github.com/aead/chacha20poly1305" // Needed for XChaCha20Poly1305, TODO: - "golang.org/x/crypto/blake2s" - "sync" - "time" -) - -type MACStatePeer struct { - mutex sync.RWMutex - cookieSet time.Time - cookie [blake2s.Size128]byte - lastMAC1 [blake2s.Size128]byte - keyMAC1 [blake2s.Size]byte - keyMAC2 [blake2s.Size]byte - xaead cipher.AEAD -} - -func (state *MACStatePeer) Init(pk NoisePublicKey) { - state.mutex.Lock() - defer state.mutex.Unlock() - - func() { - hsh, _ := blake2s.New256(nil) - hsh.Write([]byte(WGLabelMAC1)) - hsh.Write(pk[:]) - hsh.Sum(state.keyMAC1[:0]) - }() - - func() { - hsh, _ := blake2s.New256(nil) - hsh.Write([]byte(WGLabelCookie)) - hsh.Write(pk[:]) - hsh.Sum(state.keyMAC2[:0]) - }() - - state.xaead, _ = chacha20poly1305.NewXCipher(state.keyMAC2[:]) - state.cookieSet = time.Time{} // never -} - -func (state *MACStatePeer) AddMacs(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] - - state.mutex.Lock() - defer state.mutex.Unlock() - - // set mac1 - - func() { - mac, _ := blake2s.New128(state.keyMAC1[:]) - mac.Write(msg[:startMac1]) - mac.Sum(state.lastMAC1[:0]) - }() - copy(mac1, state.lastMAC1[:]) - - // set mac2 - - if state.cookieSet.IsZero() { - return - } - if time.Now().Sub(state.cookieSet) > CookieRefreshTime { - state.cookieSet = time.Time{} - return - } - func() { - mac, _ := blake2s.New128(state.cookie[:]) - mac.Write(msg[:startMac2]) - mac.Sum(mac2[:0]) - }() -} -- cgit v1.2.3