Skip to content
This repository was archived by the owner on Jul 27, 2018. It is now read-only.

Commit 9b98e6c

Browse files
committed
feat: hash methods accept string type
1 parent d6f7903 commit 9b98e6c

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

src/lib/crypto.ts

+16-6
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,31 @@ const blake = require('blakejs')
66

77
/**
88
* computes blake2b 256bit hash of given data
9-
* @param data one or more Buffer
9+
* @param data one or more Buffer | string
1010
*/
11-
export function blake2b256(...data: Buffer[]) {
11+
export function blake2b256(...data: (Buffer | string)[]) {
1212
let ctx = blake.blake2bInit(32, null)
13-
data.forEach(d => blake.blake2bUpdate(ctx, d))
13+
data.forEach(d => {
14+
if (Buffer.isBuffer(d))
15+
blake.blake2bUpdate(ctx, d)
16+
else
17+
blake.blake2bUpdate(ctx, Buffer.from(d, 'utf8'))
18+
})
1419
return new Bytes32(Buffer.from(blake.blake2bFinal(ctx)))
1520
}
1621

1722
/**
1823
* computes keccak256 hash of given data
19-
* @param data one or more Buffer
24+
* @param data one or more Buffer | string
2025
*/
21-
export function keccak256(...data: Buffer[]) {
26+
export function keccak256(...data: (Buffer | string)[]) {
2227
let h = keccak('keccak256')
23-
data.forEach(d => h.update(d))
28+
data.forEach(d => {
29+
if (Buffer.isBuffer(d))
30+
h.update(d)
31+
else
32+
h.update(Buffer.from(d, 'utf8'))
33+
})
2434
return new Bytes32(h.digest())
2535
}
2636

test/crypto.test.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,22 @@ import { Bytes32, Address, blake2b256, keccak256, Secp256k1 } from '../src'
44
describe('hash', () => {
55
it('blake2b256', () => {
66
expect(blake2b256(Buffer.alloc(0)).toString()).equal('0x0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8')
7-
expect(blake2b256(Buffer.from('hello world')).toString()).equal('0x256c83b297114d201b30179f3f0ef0cace9783622da5974326b436178aeef610')
8-
expect(blake2b256(Buffer.from('hello'), Buffer.from(' world')).toString()).equal('0x256c83b297114d201b30179f3f0ef0cace9783622da5974326b436178aeef610')
7+
expect(blake2b256('hello world').toString()).equal('0x256c83b297114d201b30179f3f0ef0cace9783622da5974326b436178aeef610')
8+
expect(blake2b256('hello', ' world').toString()).equal('0x256c83b297114d201b30179f3f0ef0cace9783622da5974326b436178aeef610')
99
})
1010

1111
it('keccak', () => {
1212
expect(keccak256(Buffer.alloc(0)).toString()).equal('0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470')
13-
expect(keccak256(Buffer.from('hello world')).toString()).equal('0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad')
14-
expect(keccak256(Buffer.from('hello'), Buffer.from(' world')).toString()).equal('0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad')
13+
expect(keccak256('hello world').toString()).equal('0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad')
14+
expect(keccak256('hello', ' world').toString()).equal('0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad')
1515
})
1616
})
1717

1818
describe('secp256k1', () => {
1919
let privKey = Bytes32.fromHex('7582be841ca040aa940fff6c05773129e135623e41acce3e0b8ba520dc1ae26a', '')
2020
let pubKey = Buffer.from('04b90e9bb2617387eba4502c730de65a33878ef384a46f1096d86f2da19043304afa67d0ad09cf2bea0c6f2d1767a9e62a7a7ecc41facf18f2fa505d92243a658f', 'hex')
2121
let addr = Address.fromHex('d989829d88b0ed1b06edf5c50174ecfa64f14a64', '')
22-
let msg = Buffer.from('hello world', 'utf8')
23-
let msgHash = keccak256(msg)
22+
let msgHash = keccak256('hello world')
2423
let sig = Buffer.from('f8fe82c74f9e1f5bf443f8a7f8eb968140f554968fdcab0a6ffe904e451c8b9244be44bccb1feb34dd20d9d8943f8c131227e55861736907b02d32c06b934d7200', 'hex')
2524

2625
it('derive', () => {

0 commit comments

Comments
 (0)