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