parent
							
								
									bffe99aead
								
							
						
					
					
						commit
						ea4ea6f933
					
				@ -3,6 +3,7 @@ package main
 | 
			
		||||
import (
 | 
			
		||||
	"crypto/hmac"
 | 
			
		||||
	"crypto/rand"
 | 
			
		||||
	"git.zx2c4.com/wireguard-go/internal/xchacha20poly1305"
 | 
			
		||||
	"golang.org/x/crypto/blake2s"
 | 
			
		||||
	"golang.org/x/crypto/chacha20poly1305"
 | 
			
		||||
	"sync"
 | 
			
		||||
@ -157,7 +158,7 @@ func (st *CookieChecker) CreateReply(
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	XChaCha20Poly1305Encrypt(
 | 
			
		||||
	xchacha20poly1305.Encrypt(
 | 
			
		||||
		reply.Cookie[:0],
 | 
			
		||||
		&reply.Nonce,
 | 
			
		||||
		cookie[:],
 | 
			
		||||
@ -201,7 +202,7 @@ func (st *CookieGenerator) ConsumeReply(msg *MessageCookieReply) bool {
 | 
			
		||||
 | 
			
		||||
	var cookie [blake2s.Size128]byte
 | 
			
		||||
 | 
			
		||||
	_, err := XChaCha20Poly1305Decrypt(
 | 
			
		||||
	_, err := xchacha20poly1305.Decrypt(
 | 
			
		||||
		cookie[:0],
 | 
			
		||||
		&msg.Nonce,
 | 
			
		||||
		msg.Cookie[:],
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"git.zx2c4.com/wireguard-go/internal/ratelimiter"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"sync/atomic"
 | 
			
		||||
@ -50,7 +51,7 @@ type Device struct {
 | 
			
		||||
 | 
			
		||||
	rate struct {
 | 
			
		||||
		underLoadUntil atomic.Value
 | 
			
		||||
		limiter        Ratelimiter
 | 
			
		||||
		limiter        ratelimiter.Ratelimiter
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pool struct {
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package main
 | 
			
		||||
package ratelimiter
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 2015-2017 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. */
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package main
 | 
			
		||||
package ratelimiter
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net"
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package main
 | 
			
		||||
package tai64n
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
@ -11,7 +11,7 @@ const base = uint64(4611686018427387914)
 | 
			
		||||
 | 
			
		||||
type Timestamp [TimestampSize]byte
 | 
			
		||||
 | 
			
		||||
func TimestampNow() Timestamp {
 | 
			
		||||
func Now() Timestamp {
 | 
			
		||||
	var tai64n Timestamp
 | 
			
		||||
	now := time.Now()
 | 
			
		||||
	secs := base + uint64(now.Unix())
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package main
 | 
			
		||||
package tai64n
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
@ -9,10 +9,10 @@ import (
 | 
			
		||||
 * as used by WireGuard.
 | 
			
		||||
 */
 | 
			
		||||
func TestMonotonic(t *testing.T) {
 | 
			
		||||
	old := TimestampNow()
 | 
			
		||||
	old := Now()
 | 
			
		||||
	for i := 0; i < 10000; i++ {
 | 
			
		||||
		time.Sleep(time.Nanosecond)
 | 
			
		||||
		next := TimestampNow()
 | 
			
		||||
		next := Now()
 | 
			
		||||
		if !next.After(old) {
 | 
			
		||||
			t.Error("TAI64N, not monotonically increasing on nano-second scale")
 | 
			
		||||
		}
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
// Use of this source code is governed by a license that can be
 | 
			
		||||
// found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package main
 | 
			
		||||
package xchacha20poly1305
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/binary"
 | 
			
		||||
@ -138,7 +138,7 @@ func hChaCha20(out *[32]byte, nonce []byte, key *[32]byte) {
 | 
			
		||||
	binary.LittleEndian.PutUint32(out[28:], v15)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func XChaCha20Poly1305Encrypt(
 | 
			
		||||
func Encrypt(
 | 
			
		||||
	dst []byte,
 | 
			
		||||
	nonceFull *[24]byte,
 | 
			
		||||
	plaintext []byte,
 | 
			
		||||
@ -153,7 +153,7 @@ func XChaCha20Poly1305Encrypt(
 | 
			
		||||
	return aead.Seal(dst, nonce[:], plaintext, additionalData)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func XChaCha20Poly1305Decrypt(
 | 
			
		||||
func Decrypt(
 | 
			
		||||
	dst []byte,
 | 
			
		||||
	nonceFull *[24]byte,
 | 
			
		||||
	plaintext []byte,
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package main
 | 
			
		||||
package xchacha20poly1305
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
@ -60,7 +60,7 @@ func TestXChaCha20(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
			// test encryption
 | 
			
		||||
 | 
			
		||||
			ct := XChaCha20Poly1305Encrypt(
 | 
			
		||||
			ct := Encrypt(
 | 
			
		||||
				nil,
 | 
			
		||||
				&nonceArray,
 | 
			
		||||
				pt,
 | 
			
		||||
@ -74,7 +74,7 @@ func TestXChaCha20(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
			// test decryption
 | 
			
		||||
 | 
			
		||||
			ptp, err := XChaCha20Poly1305Decrypt(
 | 
			
		||||
			ptp, err := Decrypt(
 | 
			
		||||
				nil,
 | 
			
		||||
				&nonceArray,
 | 
			
		||||
				ct,
 | 
			
		||||
@ -2,6 +2,7 @@ package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"git.zx2c4.com/wireguard-go/internal/tai64n"
 | 
			
		||||
	"golang.org/x/crypto/blake2s"
 | 
			
		||||
	"golang.org/x/crypto/chacha20poly1305"
 | 
			
		||||
	"golang.org/x/crypto/poly1305"
 | 
			
		||||
@ -58,7 +59,7 @@ type MessageInitiation struct {
 | 
			
		||||
	Sender    uint32
 | 
			
		||||
	Ephemeral NoisePublicKey
 | 
			
		||||
	Static    [NoisePublicKeySize + poly1305.TagSize]byte
 | 
			
		||||
	Timestamp [TimestampSize + poly1305.TagSize]byte
 | 
			
		||||
	Timestamp [tai64n.TimestampSize + poly1305.TagSize]byte
 | 
			
		||||
	MAC1      [blake2s.Size128]byte
 | 
			
		||||
	MAC2      [blake2s.Size128]byte
 | 
			
		||||
}
 | 
			
		||||
@ -99,7 +100,7 @@ type Handshake struct {
 | 
			
		||||
	remoteStatic              NoisePublicKey           // long term key
 | 
			
		||||
	remoteEphemeral           NoisePublicKey           // ephemeral public key
 | 
			
		||||
	precomputedStaticStatic   [NoisePublicKeySize]byte // precomputed shared secret
 | 
			
		||||
	lastTimestamp             Timestamp
 | 
			
		||||
	lastTimestamp             tai64n.Timestamp
 | 
			
		||||
	lastInitiationConsumption time.Time
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -206,7 +207,7 @@ func (device *Device) CreateMessageInitiation(peer *Peer) (*MessageInitiation, e
 | 
			
		||||
 | 
			
		||||
	// encrypt timestamp
 | 
			
		||||
 | 
			
		||||
	timestamp := TimestampNow()
 | 
			
		||||
	timestamp := tai64n.Now()
 | 
			
		||||
	func() {
 | 
			
		||||
		var key [chacha20poly1305.KeySize]byte
 | 
			
		||||
		KDF2(
 | 
			
		||||
@ -271,7 +272,7 @@ func (device *Device) ConsumeMessageInitiation(msg *MessageInitiation) *Peer {
 | 
			
		||||
 | 
			
		||||
	// verify identity
 | 
			
		||||
 | 
			
		||||
	var timestamp Timestamp
 | 
			
		||||
	var timestamp tai64n.Timestamp
 | 
			
		||||
	var key [chacha20poly1305.KeySize]byte
 | 
			
		||||
 | 
			
		||||
	handshake.mutex.RLock()
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user