From f9cbee2dcca4f0ebca01d8f37fdddddafbf93d38 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 23 Mar 2025 18:24:46 +0800 Subject: Rename token.go to identifier.go --- identifier.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 identifier.go (limited to 'identifier.go') diff --git a/identifier.go b/identifier.go new file mode 100644 index 0000000..6da0e7c --- /dev/null +++ b/identifier.go @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: BSD-2-Clause +// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu + +package main + +import ( + "crypto/hmac" + "crypto/sha256" + "encoding/binary" + "net/http" + "time" +) + +func makeIdentifierMAC(request *http.Request) (identifier []byte, mac []byte) { + identifier = make([]byte, 0, sha256.Size) + mac = make([]byte, 0, sha256.Size) + + timeBuf := make([]byte, binary.MaxVarintLen64) + binary.PutVarint(timeBuf, time.Now().Unix()/604800) + + remoteIP := getRemoteIP(request) + + h := sha256.New() + h.Write(timeBuf) + h.Write(stringToBytes(remoteIP)) + h.Write(stringToBytes(request.Header.Get("User-Agent"))) + h.Write(stringToBytes(request.Header.Get("Accept-Encoding"))) + h.Write(stringToBytes(request.Header.Get("Accept-Language"))) + h.Write(privkeyHash) + identifier = h.Sum(identifier) + if len(identifier) != sha256.Size { + panic("unexpected buffer length after hashing contents") + } + + m := hmac.New(sha256.New, privkey) + m.Write(identifier) + mac = m.Sum(mac) + if len(mac) != sha256.Size { + panic("unexpected buffer length after hmac") + } + + return +} -- cgit v1.2.3