Skip to content

Commit 3f6167c

Browse files
authored
murmur3 support (#150)
* murmur3 support
1 parent 654b06d commit 3f6167c

File tree

9 files changed

+75
-30
lines changed

9 files changed

+75
-30
lines changed

core/magic.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,26 @@ var ErrSumNotSupported = errors.New("no such hash registered")
77

88
// constants
99
const (
10-
IDENTITY = 0x00
11-
SHA1 = 0x11
12-
SHA2_224 = 0x1013
13-
SHA2_256 = 0x12
14-
SHA2_384 = 0x20
15-
SHA2_512 = 0x13
16-
SHA2_512_224 = 0x1014
17-
SHA2_512_256 = 0x1015
18-
SHA3_224 = 0x17
19-
SHA3_256 = 0x16
20-
SHA3_384 = 0x15
21-
SHA3_512 = 0x14
22-
KECCAK_224 = 0x1A
23-
KECCAK_256 = 0x1B
24-
KECCAK_384 = 0x1C
25-
KECCAK_512 = 0x1D
26-
BLAKE3 = 0x1E
27-
SHAKE_128 = 0x18
28-
SHAKE_256 = 0x19
29-
MD5 = 0xd5
30-
DBL_SHA2_256 = 0x56
10+
IDENTITY = 0x00
11+
SHA1 = 0x11
12+
SHA2_224 = 0x1013
13+
SHA2_256 = 0x12
14+
SHA2_384 = 0x20
15+
SHA2_512 = 0x13
16+
SHA2_512_224 = 0x1014
17+
SHA2_512_256 = 0x1015
18+
SHA3_224 = 0x17
19+
SHA3_256 = 0x16
20+
SHA3_384 = 0x15
21+
SHA3_512 = 0x14
22+
KECCAK_224 = 0x1A
23+
KECCAK_256 = 0x1B
24+
KECCAK_384 = 0x1C
25+
KECCAK_512 = 0x1D
26+
BLAKE3 = 0x1E
27+
SHAKE_128 = 0x18
28+
SHAKE_256 = 0x19
29+
MURMUR3X64_64 = 0x22
30+
MD5 = 0xd5
31+
DBL_SHA2_256 = 0x56
3132
)

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ require (
55
github.com/minio/sha256-simd v1.0.0
66
github.com/mr-tron/base58 v1.2.0
77
github.com/multiformats/go-varint v0.0.6
8+
github.com/spaolacci/murmur3 v1.1.0
89
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83
910
golang.org/x/sys v0.0.0-20210309074719-68d13333faf2 // indirect
1011
lukechampine.com/blake3 v1.1.6

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
99
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
1010
github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY=
1111
github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
12+
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
13+
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
1214
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
1315
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g=
1416
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=

multihash.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ const (
6565

6666
DBL_SHA2_256 = 0x56
6767

68-
MURMUR3_128 = 0x22
69-
// Deprecated: use MURMUR3_128
70-
MURMUR3 = MURMUR3_128
68+
MURMUR3X64_64 = 0x22
69+
// Deprecated: use MURMUR3X64_64
70+
MURMUR3 = MURMUR3X64_64
7171

7272
SHA2_256_TRUNC254_PADDED = 0x1012
7373
X11 = 0x1100
@@ -104,7 +104,7 @@ var Names = map[string]uint64{
104104
"sha3-384": SHA3_384,
105105
"sha3-512": SHA3_512,
106106
"dbl-sha2-256": DBL_SHA2_256,
107-
"murmur3-128": MURMUR3_128,
107+
"murmur3-x64-64": MURMUR3X64_64,
108108
"keccak-224": KECCAK_224,
109109
"keccak-256": KECCAK_256,
110110
"keccak-384": KECCAK_384,
@@ -129,7 +129,7 @@ var Codes = map[uint64]string{
129129
SHA3_384: "sha3-384",
130130
SHA3_512: "sha3-512",
131131
DBL_SHA2_256: "dbl-sha2-256",
132-
MURMUR3_128: "murmur3-128",
132+
MURMUR3X64_64: "murmur3-x64-64",
133133
KECCAK_224: "keccak-224",
134134
KECCAK_256: "keccak-256",
135135
KECCAK_384: "keccak-384",

multihash_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var tCodes = map[uint64]string{
2323
0x16: "sha3-256",
2424
0x17: "sha3-224",
2525
0x56: "dbl-sha2-256",
26-
0x22: "murmur3-128",
26+
0x22: "murmur3-x64-64",
2727
0x1A: "keccak-224",
2828
0x1B: "keccak-256",
2929
0x1C: "keccak-384",
@@ -51,7 +51,7 @@ var testCases = []TestCase{
5151
{"2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae", 0x12, "sha2-256"},
5252
{"2c26b46b", 0x12, "sha2-256"},
5353
{"2c26b46b68ffc68ff99b453c1d30413413", 0xb240, "blake2b-512"},
54-
{"243ddb9e", 0x22, "murmur3-128"},
54+
{"243ddb9e", 0x22, "murmur3-x64-64"},
5555
{"f00ba4", 0x1b, "keccak-256"},
5656
{"f84e95cb5fbd2038863ab27d3cdeac295ad2d4ab96ad1f4b070c0bf36078ef08", 0x18, "shake-128"},
5757
{"1af97f7818a28edfdfce5ec66dbdc7e871813816d7d585fe1f12475ded5b6502b7723b74e2ee36f2651a10a8eaca72aa9148c3c761aaceac8f6d6cc64381ed39", 0x19, "shake-256"},

register/all/multihash_all.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ package all
1919
import (
2020
_ "github.com/multiformats/go-multihash/register/blake2"
2121
_ "github.com/multiformats/go-multihash/register/blake3"
22+
_ "github.com/multiformats/go-multihash/register/murmur3"
2223
_ "github.com/multiformats/go-multihash/register/sha3"
2324
)

register/murmur3/multihash_murmur3.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
This package has no purpose except to perform registration of multihashes.
3+
4+
It is meant to be used as a side-effecting import, e.g.
5+
6+
import (
7+
_ "github.com/multiformats/go-multihash/register/murmur3"
8+
)
9+
10+
This package registers multihashes for murmur3
11+
*/
12+
package murmur3
13+
14+
import (
15+
"hash"
16+
17+
multihash "github.com/multiformats/go-multihash/core"
18+
"github.com/spaolacci/murmur3"
19+
)
20+
21+
func init() {
22+
multihash.Register(multihash.MURMUR3X64_64, func() hash.Hash { return murmur64{murmur3.New64()} })
23+
}
24+
25+
// A wrapper is needed to export the correct size, because murmur3 incorrectly advertises Hash64 as a 128bit hash.
26+
type murmur64 struct {
27+
hash.Hash64
28+
}
29+
30+
func (murmur64) BlockSize() int {
31+
return 1
32+
}
33+
34+
func (x murmur64) Size() int {
35+
return 8
36+
}
37+
38+
func (x murmur64) Sum(digest []byte) []byte {
39+
return x.Hash64.Sum(digest)
40+
}

spec_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func TestSpec(t *testing.T) {
2121

2222
reader := csv.NewReader(file)
2323
reader.LazyQuotes = false
24-
reader.FieldsPerRecord = 4
24+
reader.FieldsPerRecord = 5
2525
reader.TrimLeadingSpace = true
2626

2727
values, err := reader.ReadAll()

0 commit comments

Comments
 (0)