chore: move from tools/dsa (#1)
Moved the implementation of this hash table from `tools/dsa` #1. Reviewed-on: #1 Co-authored-by: M.V. Hutz <git@maximhutz.me> Co-committed-by: M.V. Hutz <git@maximhutz.me>
This commit was merged in pull request #1.
This commit is contained in:
34
hash_example_test.go
Normal file
34
hash_example_test.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package cuckoo_test
|
||||
|
||||
import (
|
||||
"crypto/hmac"
|
||||
"crypto/sha256"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"git.maximhutz.com/tools/go-cuckoo"
|
||||
)
|
||||
|
||||
func NewStringHash(seed uint64) cuckoo.Hash[string] {
|
||||
key := binary.LittleEndian.AppendUint64(nil, seed)
|
||||
hash := hmac.New(sha256.New, key)
|
||||
|
||||
return func(key string) uint64 {
|
||||
hash.Reset()
|
||||
// This will never return an error, as part of the [hash.Hash] contract. We
|
||||
// can safely ignore it.
|
||||
(io.WriteString(hash, key))
|
||||
return binary.LittleEndian.Uint64(hash.Sum(nil))
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleHash_stringHash() {
|
||||
hash := NewStringHash(1)
|
||||
fmt.Printf("Digest 'Hello, world!': %x\n", hash("Hello, world!"))
|
||||
fmt.Printf("Digest 'Hello, world?': %x\n", hash("Hello, world?"))
|
||||
|
||||
// Output:
|
||||
// Digest 'Hello, world!': dc6602d6edcdf549
|
||||
// Digest 'Hello, world?': 432c2ddc1ae9f14b
|
||||
}
|
||||
Reference in New Issue
Block a user