Skip to content
This repository was archived by the owner on Aug 24, 2021. It is now read-only.

Commit 8bff890

Browse files
committed
feat: change api to async/await
BREAKING CHANGE: callbacks are not supported!!
1 parent 0438ee7 commit 8bff890

File tree

13 files changed

+184
-273
lines changed

13 files changed

+184
-273
lines changed

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
The MIT License (MIT)
22

3-
Copyright (c) 2016 Protocol Labs Inc.
3+
Copyright (c) Protocol Labs Inc.
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

README.md

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,37 +84,34 @@ You will need to use Node.js `Buffer` API compatible, if you are running inside
8484
const multihashing = require('multihashing-async')
8585
const buf = Buffer.from('beep boop')
8686

87-
multihashing(buf, 'sha1', (err, multihash) => {
88-
// by default calls back with a multihash.
89-
})
87+
const mh = await multihashing(buf, 'sha1')
9088

9189
// Use `.digest(...)` if you want only the hash digest (drops the prefix indicating the hash type).
92-
multihashing.digest(buf, 'sha1', (err , digest) => {
93-
// digest is the raw digest
94-
})
90+
const digest = await multihashing.digest(buf, 'sha1')
9591

9692
// Use `.createHash(...)` for the raw hash functions
9793
const h = multihashing.createHash('sha1')
98-
h(buf, (err, digest) => {
99-
// digest is a buffer of the sha1 of buf
100-
})
94+
const digest = await h(buf)
10195
```
10296

10397
## Examples
10498

10599
### Multihash output
106100

107101
```js
108-
> const multihashing = require('multihashing-async')
109-
> const buf = Buffer.from('beep boop')
102+
const multihashing = require('multihashing-async')
103+
const buf = Buffer.from('beep boop')
110104

111-
> multihashing(buf, 'sha1', (err, mh) => console.log(mh))
105+
const mh = await multihashing(buf, 'sha1')
106+
console.log(mh)
112107
// => <Buffer 11 14 7c 83 57 57 7f 51 d4 f0 a8 d3 93 aa 1a aa fb 28 86 3d 94 21>
113108

114-
> multihashing(buf, 'sha2-256', (err, mh) => console.log(mh))
109+
const mh = await multihashing(buf, 'sha2-256')
110+
console.log(mh)
115111
// => <Buffer 12 20 90 ea 68 8e 27 5d 58 05 67 32 50 32 49 2b 59 7b c7 72 21 c6 24 93 e7 63 30 b8 5d dd a1 91 ef 7c>
116112

117-
> multihashing(buf, 'sha2-512', (err, mh) => console.log(mh))
113+
const mh = await multihashing(buf, 'sha2-512')
114+
console.log(mh)
118115
// => <Buffer 13 40 14 f3 01 f3 1b e2 43 f3 4c 56 68 93 78 83 77 1f a3 81 00 2f 1a aa 5f 31 b3 f7 8e 50 0b 66 ff 2f 4f 8e a5 e3 c9 f5 a6 1b d0 73 e2 45 2c 48 04 84 b0 ...>
119116
```
120117

@@ -133,4 +130,4 @@ Small note: If editing the README, please conform to the [standard-readme](https
133130

134131
## License
135132

136-
[MIT](LICENSE) © 2016 Protocol Labs Inc.
133+
[MIT](LICENSE) © Protocol Labs Inc.

benchmarks/hash.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,22 @@ const algs = [
2222
'keccak-384',
2323
'keccak-512',
2424
'murmur3-32',
25-
'murmur3-128'
25+
'murmur3-128',
26+
'dbl-sha2-256',
27+
'blake2b-256',
28+
'blake2b-512',
29+
'blake2s-256'
2630
]
2731

2832
algs.forEach((alg) => {
2933
suite.add(alg, function (d) {
3034
const buf = Buffer.alloc(10 * 1024)
3135
buf.fill(Math.ceil(Math.random() * 100))
32-
33-
multihashing(buf, alg, (err, res) => {
34-
if (err) throw err
35-
list.push(res)
36-
d.resolve()
37-
})
36+
multihashing(buf, alg)
37+
.then(res => {
38+
list.push(res)
39+
d.resolve()
40+
})
3841
}, {
3942
defer: true
4043
})

package.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,22 @@
33
"version": "0.5.2",
44
"description": "multiple hash functions",
55
"keywords": [
6-
"multihash"
6+
"multihash",
7+
"hash",
8+
"hashing",
9+
"async"
710
],
811
"homepage": "https://github.com/multiformats/js-multihashing-async",
912
"bugs": "https://github.com/multiformats/js-multihashing-async/issues",
1013
"license": "MIT",
11-
"leadMaintainer": "Hugo Dias <mail@hugodias.me>",
14+
"leadMaintainer": "Hugo Dias <hugomrdias@gmail.com>",
1215
"files": [
1316
"src",
1417
"dist"
1518
],
1619
"main": "src/index.js",
1720
"browser": {
18-
"./src/crypto-sha1-2.js": "./src/crypto-sha1-2-browser.js"
21+
"./src/sha.js": "./src/sha.browser.js"
1922
},
2023
"repository": "github:multiformats/js-multihashing-async",
2124
"scripts": {
@@ -34,8 +37,7 @@
3437
"blakejs": "^1.1.0",
3538
"js-sha3": "~0.8.0",
3639
"multihashes": "~0.4.13",
37-
"murmurhash3js": "^3.0.1",
38-
"nodeify": "^1.0.1"
40+
"murmurhash3js-revisited": "^3.0.0"
3941
},
4042
"devDependencies": {
4143
"aegir": "^18.0.3",

src/blake.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
const blake = require('blakejs')
44

5-
const toCallback = require('./utils').toCallback
6-
75
const minB = 0xb201
86
const minS = 0xb241
97

@@ -19,11 +17,17 @@ const blake2s = {
1917
digest: blake.blake2sFinal
2018
}
2119

22-
const makeB2Hash = (size, hf) => toCallback((buf) => {
23-
const ctx = hf.init(size, null)
24-
hf.update(ctx, buf)
25-
return Buffer.from(hf.digest(ctx))
26-
})
20+
const makeB2Hash = (size, hf) => (data) => {
21+
return new Promise((resolve, reject) => {
22+
try {
23+
const ctx = hf.init(size, null)
24+
hf.update(ctx, data)
25+
resolve(Buffer.from(hf.digest(ctx)))
26+
} catch (error) {
27+
reject(error)
28+
}
29+
})
30+
}
2731

2832
module.exports = (table) => {
2933
for (let i = 0; i < 64; i++) {

src/crypto-sha1-2-browser.js

Lines changed: 0 additions & 60 deletions
This file was deleted.

src/crypto-sha1-2.js

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/crypto.js

Lines changed: 53 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,64 @@
11
'use strict'
22

33
const sha3 = require('js-sha3')
4-
const murmur3 = require('murmurhash3js')
4+
const mur = require('murmurhash3js-revisited')
5+
const sha = require('./sha')
6+
const { fromNumberTo32BitBuf } = require('./utils')
57

6-
const utils = require('./utils')
7-
const sha = require('./crypto-sha1-2')
8+
const hash = (algorithm) => (data) => {
9+
return new Promise((resolve, reject) => {
10+
try {
11+
switch (algorithm) {
12+
case 'sha3-224':
13+
return resolve(Buffer.from(sha3.sha3_224.arrayBuffer(data)))
14+
case 'sha3-256':
15+
return resolve(Buffer.from(sha3.sha3_256.arrayBuffer(data)))
16+
case 'sha3-384':
17+
return resolve(Buffer.from(sha3.sha3_384.arrayBuffer(data)))
18+
case 'sha3-512':
19+
return resolve(Buffer.from(sha3.sha3_512.arrayBuffer(data)))
20+
case 'shake-128':
21+
return resolve(Buffer.from(sha3.shake128.create(128).update(data).arrayBuffer()))
22+
case 'shake-256':
23+
return resolve(Buffer.from(sha3.shake256.create(256).update(data).arrayBuffer()))
24+
case 'keccak-224':
25+
return resolve(Buffer.from(sha3.keccak224.arrayBuffer(data)))
26+
case 'keccak-256':
27+
return resolve(Buffer.from(sha3.keccak256.arrayBuffer(data)))
28+
case 'keccak-384':
29+
return resolve(Buffer.from(sha3.keccak384.arrayBuffer(data)))
30+
case 'keccak-512':
31+
return resolve(Buffer.from(sha3.keccak512.arrayBuffer(data)))
32+
case 'murmur3-128':
33+
return resolve(Buffer.from(mur.x64.hash128(data), 'hex'))
34+
case 'murmur3-32':
35+
return resolve(fromNumberTo32BitBuf(mur.x86.hash32(data)))
836

9-
const toCallback = utils.toCallback
10-
const toBuf = utils.toBuf
11-
const fromString = utils.fromString
12-
const fromNumberTo32BitBuf = utils.fromNumberTo32BitBuf
13-
14-
const dblSha2256 = (buf, cb) => {
15-
sha.sha2256(buf, (err, firstHash) => {
16-
if (err) {
17-
cb(err)
37+
default:
38+
throw new TypeError(`${algorithm} is not a supported algorithm`)
39+
}
40+
} catch (error) {
41+
return reject(error)
1842
}
19-
sha.sha2256((Buffer.from(firstHash)), cb)
2043
})
2144
}
2245

2346
module.exports = {
24-
sha1: sha.sha1,
25-
sha2256: sha.sha2256,
26-
sha2512: sha.sha2512,
27-
sha3512: toCallback(toBuf(sha3.sha3_512)),
28-
sha3384: toCallback(toBuf(sha3.sha3_384)),
29-
sha3256: toCallback(toBuf(sha3.sha3_256)),
30-
sha3224: toCallback(toBuf(sha3.sha3_224)),
31-
shake128: toCallback(toBuf(sha3.shake_128, 128)),
32-
shake256: toCallback(toBuf(sha3.shake_256, 256)),
33-
keccak224: toCallback(toBuf(sha3.keccak_224)),
34-
keccak256: toCallback(toBuf(sha3.keccak_256)),
35-
keccak384: toCallback(toBuf(sha3.keccak_384)),
36-
keccak512: toCallback(toBuf(sha3.keccak_512)),
37-
murmur3128: toCallback(toBuf(fromString(murmur3.x64.hash128))),
38-
murmur332: toCallback(fromNumberTo32BitBuf(fromString(murmur3.x86.hash32))),
39-
addBlake: require('./blake'),
40-
dblSha2256: dblSha2256
47+
sha1: sha('sha1'),
48+
sha2256: sha('sha2-256'),
49+
sha2512: sha('sha2-512'),
50+
dblSha2256: sha('dbl-sha2-256'),
51+
sha3224: hash('sha3-224'),
52+
sha3256: hash('sha3-256'),
53+
sha3384: hash('sha3-384'),
54+
sha3512: hash('sha3-512'),
55+
shake128: hash('shake-128'),
56+
shake256: hash('shake-256'),
57+
keccak224: hash('keccak-224'),
58+
keccak256: hash('keccak-256'),
59+
keccak384: hash('keccak-384'),
60+
keccak512: hash('keccak-512'),
61+
murmur3128: hash('murmur3-128'),
62+
murmur332: hash('murmur3-32'),
63+
addBlake: require('./blake')
4164
}

0 commit comments

Comments
 (0)