mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

* [NOD-510] Change coinbase flags to kaspad. * [NOD-510] Removed superfluous spaces after periods in comments. * [NOD-510] Rename btcd -> kaspad in the root folder. * [NOD-510] Rename BtcEncode -> KaspaEncode and BtcDecode -> KaspaDecode. * [NOD-510] Rename BtcEncode -> KaspaEncode and BtcDecode -> KaspaDecode. * [NOD-510] Continue renaming btcd -> kaspad. * [NOD-510] Rename btcjson -> kaspajson. * [NOD-510] Rename file names inside kaspajson. * [NOD-510] Rename kaspajson -> jsonrpc. * [NOD-510] Finish renaming in addrmgr. * [NOD-510] Rename package btcec to ecc. * [NOD-510] Finish renaming stuff in blockdag. * [NOD-510] Rename stuff in cmd. * [NOD-510] Rename stuff in config. * [NOD-510] Rename stuff in connmgr. * [NOD-510] Rename stuff in dagconfig. * [NOD-510] Rename stuff in database. * [NOD-510] Rename stuff in docker. * [NOD-510] Rename stuff in integration. * [NOD-510] Rename jsonrpc to rpcmodel. * [NOD-510] Rename stuff in limits. * [NOD-510] Rename stuff in logger. * [NOD-510] Rename stuff in mempool. * [NOD-510] Rename stuff in mining. * [NOD-510] Rename stuff in netsync. * [NOD-510] Rename stuff in peer. * [NOD-510] Rename stuff in release. * [NOD-510] Rename stuff in rpcclient. * [NOD-510] Rename stuff in server. * [NOD-510] Rename stuff in signal. * [NOD-510] Rename stuff in txscript. * [NOD-510] Rename stuff in util. * [NOD-510] Rename stuff in wire. * [NOD-510] Fix failing tests. * [NOD-510] Fix merge errors. * [NOD-510] Fix go vet errors. * [NOD-510] Remove merged file that's no longer relevant. * [NOD-510] Add a comment above Op0. * [NOD-510] Fix some comments referencing Bitcoin Core. * [NOD-510] Fix some more comments referencing Bitcoin Core. * [NOD-510] Fix bitcoin -> kaspa. * [NOD-510] Fix more bitcoin -> kaspa. * [NOD-510] Fix comments, remove DisconnectBlock in addrindex. * [NOD-510] Rename KSPD to KASD. * [NOD-510] Fix comments and user agent.
73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
// Copyright (c) 2013, 2014 The btcsuite developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package bloom
|
|
|
|
import (
|
|
"encoding/binary"
|
|
)
|
|
|
|
// The following constants are used by the MurmurHash3 algorithm.
|
|
const (
|
|
murmurC1 = 0xcc9e2d51
|
|
murmurC2 = 0x1b873593
|
|
murmurR1 = 15
|
|
murmurR2 = 13
|
|
murmurM = 5
|
|
murmurN = 0xe6546b64
|
|
)
|
|
|
|
// MurmurHash3 implements a non-cryptographic hash function using the
|
|
// MurmurHash3 algorithm. This implementation yields a 32-bit hash value which
|
|
// is suitable for general hash-based lookups. The seed can be used to
|
|
// effectively randomize the hash function. This makes it ideal for use in
|
|
// bloom filters which need multiple independent hash functions.
|
|
func MurmurHash3(seed uint32, data []byte) uint32 {
|
|
dataLen := uint32(len(data))
|
|
hash := seed
|
|
k := uint32(0)
|
|
numBlocks := dataLen / 4
|
|
|
|
// Calculate the hash in 4-byte chunks.
|
|
for i := uint32(0); i < numBlocks; i++ {
|
|
k = binary.LittleEndian.Uint32(data[i*4:])
|
|
k *= murmurC1
|
|
k = (k << murmurR1) | (k >> (32 - murmurR1))
|
|
k *= murmurC2
|
|
|
|
hash ^= k
|
|
hash = (hash << murmurR2) | (hash >> (32 - murmurR2))
|
|
hash = hash*murmurM + murmurN
|
|
}
|
|
|
|
// Handle remaining bytes.
|
|
tailIdx := numBlocks * 4
|
|
k = 0
|
|
|
|
switch dataLen & 3 {
|
|
case 3:
|
|
k ^= uint32(data[tailIdx+2]) << 16
|
|
fallthrough
|
|
case 2:
|
|
k ^= uint32(data[tailIdx+1]) << 8
|
|
fallthrough
|
|
case 1:
|
|
k ^= uint32(data[tailIdx])
|
|
k *= murmurC1
|
|
k = (k << murmurR1) | (k >> (32 - murmurR1))
|
|
k *= murmurC2
|
|
hash ^= k
|
|
}
|
|
|
|
// Finalization.
|
|
hash ^= dataLen
|
|
hash ^= hash >> 16
|
|
hash *= 0x85ebca6b
|
|
hash ^= hash >> 13
|
|
hash *= 0xc2b2ae35
|
|
hash ^= hash >> 16
|
|
|
|
return hash
|
|
}
|