// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.

package bloom

import (
	"crypto/sha256"
	"encoding/binary"
)

func Add(f *Filter, key, salt []byte) {
	f.Add(Hash(key, salt))
}

func Contains(c Checker, key, salt []byte) bool {
	return c.Contains(Hash(key, salt))
}

type Checker interface {
	Contains(hash uint64) bool
}

func Hash(key, salt []byte) uint64 {
	hash := sha256.New()
	// sha256.Write never returns errors
	_, _ = hash.Write(key)
	_, _ = hash.Write(salt)

	output := make([]byte, 0, sha256.Size)
	return binary.BigEndian.Uint64(hash.Sum(output))
}
