Use truncated hash instead crc64 for counted hash

This commit is contained in:
Shelikhoo 2022-06-15 15:32:58 +01:00
parent b18e6fcfe4
commit 35e9ab8c0b
No known key found for this signature in database
GPG key ID: C4D5E79D22B25316

View file

@ -1,9 +1,10 @@
package ipsetsink
import (
"bytes"
"crypto/hmac"
"encoding/binary"
"hash"
"hash/crc64"
"github.com/clarkduvall/hyperloglog"
"golang.org/x/crypto/sha3"
@ -31,7 +32,7 @@ func (s *IPSetSink) maskIPAddress(ipAddress string) []byte {
}
func (s *IPSetSink) AddIPToSet(ipAddress string) {
s.countDistinct.Add(crc64FromBytes{hashValue(s.maskIPAddress(ipAddress))})
s.countDistinct.Add(truncatedHash64FromBytes{hashValue(s.maskIPAddress(ipAddress))})
}
func (s *IPSetSink) Dump() ([]byte, error) {
@ -43,10 +44,12 @@ func (s *IPSetSink) Reset() {
}
type hashValue []byte
type crc64FromBytes struct {
type truncatedHash64FromBytes struct {
hashValue
}
func (c crc64FromBytes) Sum64() uint64 {
return crc64.Checksum(c.hashValue, crc64.MakeTable(crc64.ECMA))
func (c truncatedHash64FromBytes) Sum64() uint64 {
var value uint64
binary.Read(bytes.NewReader(c.hashValue), binary.BigEndian, &value)
return value
}