Skip to content

Commit d2cd43e

Browse files
Merge pull request #41 from multiformats/feat/keccak-eth
add keccak256 for ethereum
2 parents d6ebd61 + b5d5b5a commit d2cd43e

File tree

5 files changed

+29
-4
lines changed

5 files changed

+29
-4
lines changed

multihash.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,14 @@ func (e ErrInconsistentLen) Error() string {
3333

3434
// constants
3535
const (
36-
SHA1 = 0x11
37-
SHA2_256 = 0x12
38-
SHA2_512 = 0x13
39-
SHA3 = 0x14
36+
SHA1 = 0x11
37+
SHA2_256 = 0x12
38+
SHA2_512 = 0x13
39+
SHA3 = 0x14
40+
KECCAK_224 = 0x1A
41+
KECCAK_256 = 0x1B
42+
KECCAK_384 = 0x1C
43+
KECCAK_512 = 0x1D
4044

4145
BLAKE2B_MIN = 0xb201
4246
BLAKE2B_MAX = 0xb240
@@ -73,6 +77,7 @@ var Names = map[string]uint64{
7377
"sha2-512": SHA2_512,
7478
"sha3": SHA3,
7579
"dbl-sha2-256": DBL_SHA2_256,
80+
"keccak-256": KECCAK_256,
7681
}
7782

7883
// Codes maps a hash code to it's name
@@ -82,6 +87,7 @@ var Codes = map[uint64]string{
8287
SHA2_512: "sha2-512",
8388
SHA3: "sha3",
8489
DBL_SHA2_256: "dbl-sha2-256",
90+
KECCAK_256: "keccak-256",
8591
}
8692

8793
// DefaultLengths maps a hash code to it's default length
@@ -91,6 +97,7 @@ var DefaultLengths = map[uint64]int{
9197
SHA2_512: 64,
9298
SHA3: 64,
9399
DBL_SHA2_256: 32,
100+
KECCAK_256: 32,
94101
}
95102

96103
func uvarint(buf []byte) (uint64, []byte, error) {

multihash_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var tCodes = map[uint64]string{
1616
0x13: "sha2-512",
1717
0x14: "sha3",
1818
0x56: "dbl-sha2-256",
19+
0x1B: "keccak-256",
1920
}
2021

2122
type TestCase struct {
@@ -30,6 +31,7 @@ var testCases = []TestCase{
3031
TestCase{"2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae", 0x12, "sha2-256"},
3132
TestCase{"2c26b46b", 0x12, "sha2-256"},
3233
TestCase{"2c26b46b68ffc68ff99b453c1d30413413", 0xb240, "blake2b-512"},
34+
TestCase{"f00ba4", 0x1b, "keccak-256"},
3335
}
3436

3537
func (tc TestCase) Multihash() (Multihash, error) {

package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@
1818
"hash": "QmT8rehPR3F6bmwL6zjUN8XpiDBFFpMP2myPdC6ApsWfJf",
1919
"name": "go-base58",
2020
"version": "0.0.0"
21+
},
22+
{
23+
"author": "whyrusleeping",
24+
"hash": "QmdKCKycEwt8S5vZM5LQ96a3hCLQ5WF98z21wJFBBX8pJe",
25+
"name": "keccak",
26+
"version": "0.0.0"
2127
}
2228
],
2329
"gxVersion": "0.9.0",

sum.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"errors"
88
"fmt"
99

10+
keccak "github.com/ethereum/go-ethereum/crypto/sha3"
1011
blake2b "golang.org/x/crypto/blake2b"
1112
blake2s "golang.org/x/crypto/blake2s"
1213
sha3 "golang.org/x/crypto/sha3"
@@ -63,6 +64,8 @@ func Sum(data []byte, code uint64, length int) (Multihash, error) {
6364
d = sumSHA256(data)
6465
case SHA2_512:
6566
d = sumSHA512(data)
67+
case KECCAK_256:
68+
d = sumKeccak256(data)
6669
case SHA3:
6770
d, err = sumSHA3(data)
6871
case DBL_SHA2_256:
@@ -99,6 +102,12 @@ func sumSHA512(data []byte) []byte {
99102
return a[0:64]
100103
}
101104

105+
func sumKeccak256(data []byte) []byte {
106+
h := keccak.NewKeccak256()
107+
h.Write(data)
108+
return h.Sum(nil)
109+
}
110+
102111
func sumSHA3(data []byte) ([]byte, error) {
103112
h := sha3.New512()
104113
if _, err := h.Write(data); err != nil {

sum_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ var sumTestCases = []SumTestCase{
2727
SumTestCase{BLAKE2B_MAX - 32, 32, "foo", "a0e40220b8fe9f7f6255a6fa08f668ab632a8d081ad87983c77cd274e48ce450f0b349fd"},
2828
SumTestCase{BLAKE2B_MAX - 16, 32, "foo", "b0e40220e629ee880953d32c8877e479e3b4cb0a4c9d5805e2b34c675b5a5863c4ad7d64"},
2929
SumTestCase{BLAKE2S_MAX, 32, "foo", "e0e4022008d6cad88075de8f192db097573d0e829411cd91eb6ec65e8fc16c017edfdb74"},
30+
SumTestCase{KECCAK_256, 32, "foo", "1b2041b1a0649752af1b28b3dc29a1556eee781e4a4c3a1f7f53f90fa834de098c4d"},
3031
}
3132

3233
func TestSum(t *testing.T) {

0 commit comments

Comments
 (0)