From 5f0a91a12704e15f8c29d94ab59e8a39ff8e3fb6 Mon Sep 17 00:00:00 2001 From: Mathias Hall-Andersen Date: Sun, 11 Feb 2018 22:53:39 +0100 Subject: Moved ratelimiter to internal package --- internal/tai64n/tai64.go | 26 -------------------------- internal/tai64n/tai64n.go | 26 ++++++++++++++++++++++++++ internal/tai64n/tai64n_test.go | 21 +++++++++++++++++++++ 3 files changed, 47 insertions(+), 26 deletions(-) delete mode 100644 internal/tai64n/tai64.go create mode 100644 internal/tai64n/tai64n.go create mode 100644 internal/tai64n/tai64n_test.go (limited to 'internal/tai64n') diff --git a/internal/tai64n/tai64.go b/internal/tai64n/tai64.go deleted file mode 100644 index da5257c..0000000 --- a/internal/tai64n/tai64.go +++ /dev/null @@ -1,26 +0,0 @@ -package tai64n - -import ( - "bytes" - "encoding/binary" - "time" -) - -const TimestampSize = 12 -const base = uint64(4611686018427387914) - -type Timestamp [TimestampSize]byte - -func Now() Timestamp { - var tai64n Timestamp - now := time.Now() - secs := base + uint64(now.Unix()) - nano := uint32(now.UnixNano()) - binary.BigEndian.PutUint64(tai64n[:], secs) - binary.BigEndian.PutUint32(tai64n[8:], nano) - return tai64n -} - -func (t1 Timestamp) After(t2 Timestamp) bool { - return bytes.Compare(t1[:], t2[:]) > 0 -} diff --git a/internal/tai64n/tai64n.go b/internal/tai64n/tai64n.go new file mode 100644 index 0000000..da5257c --- /dev/null +++ b/internal/tai64n/tai64n.go @@ -0,0 +1,26 @@ +package tai64n + +import ( + "bytes" + "encoding/binary" + "time" +) + +const TimestampSize = 12 +const base = uint64(4611686018427387914) + +type Timestamp [TimestampSize]byte + +func Now() Timestamp { + var tai64n Timestamp + now := time.Now() + secs := base + uint64(now.Unix()) + nano := uint32(now.UnixNano()) + binary.BigEndian.PutUint64(tai64n[:], secs) + binary.BigEndian.PutUint32(tai64n[8:], nano) + return tai64n +} + +func (t1 Timestamp) After(t2 Timestamp) bool { + return bytes.Compare(t1[:], t2[:]) > 0 +} diff --git a/internal/tai64n/tai64n_test.go b/internal/tai64n/tai64n_test.go new file mode 100644 index 0000000..389b65c --- /dev/null +++ b/internal/tai64n/tai64n_test.go @@ -0,0 +1,21 @@ +package tai64n + +import ( + "testing" + "time" +) + +/* Testing the essential property of the timestamp + * as used by WireGuard. + */ +func TestMonotonic(t *testing.T) { + old := Now() + for i := 0; i < 10000; i++ { + time.Sleep(time.Nanosecond) + next := Now() + if !next.After(old) { + t.Error("TAI64N, not monotonically increasing on nano-second scale") + } + old = next + } +} -- cgit v1.2.3