summaryrefslogtreecommitdiff
path: root/tai64n.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-02-12 20:10:44 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2018-02-12 20:13:03 +0100
commitbffe99aeadae09abd02f2bd3184925af6b680535 (patch)
tree556d223ebcd32b957e62e15353087b93a824641c /tai64n.go
parent77285c99aa30eb802d0281175990e6809501ec18 (diff)
downloadwireguard-go-bffe99aeadae09abd02f2bd3184925af6b680535.tar.gz
wireguard-go-bffe99aeadae09abd02f2bd3184925af6b680535.zip
Don't use modules
Feel free to revert this if you have a strong feeling about it. But so far as I can see, it adds a lot of complexity for basically no upsides.
Diffstat (limited to 'tai64n.go')
-rw-r--r--tai64n.go26
1 files changed, 26 insertions, 0 deletions
diff --git a/tai64n.go b/tai64n.go
new file mode 100644
index 0000000..8c5ebe0
--- /dev/null
+++ b/tai64n.go
@@ -0,0 +1,26 @@
+package main
+
+import (
+ "bytes"
+ "encoding/binary"
+ "time"
+)
+
+const TimestampSize = 12
+const base = uint64(4611686018427387914)
+
+type Timestamp [TimestampSize]byte
+
+func TimestampNow() 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
+}