@multiformats/sha3
Advanced tools
Comparing version 1.1.1 to 2.0.0
'use strict'; | ||
var index = require('../index.js'); | ||
var assert = require('assert'); | ||
var chai = require('chai'); | ||
var multiformats = require('multiformats'); | ||
var table_csv = require('./table.csv.js'); | ||
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } | ||
var assert__default = /*#__PURE__*/_interopDefaultLegacy(assert); | ||
var chai__default = /*#__PURE__*/_interopDefaultLegacy(chai); | ||
const test = it; | ||
const same = assert__default['default'].deepStrictEqual; | ||
const {multihash, bytes} = multiformats.create(); | ||
multihash.add(index); | ||
const fixture = bytes.fromString('testFixture'); | ||
for (const {name, code} of index) { | ||
describe(name, () => { | ||
test('encode', async () => { | ||
const hashed = await multihash.hash(fixture, name); | ||
await multihash.validate(hashed, fixture); | ||
const duplicate = await multihash.hash(fixture, code); | ||
same(hashed, duplicate); | ||
const {assert} = chai__default['default']; | ||
const fixtures = [ | ||
[ | ||
'sha3-512', | ||
'beep boop', | ||
'1440fae2c9eb19906057f8bf507f0e73ee02bb669d58c3069e7718b89ca4d314cf4fd6f1679019cc46d185c7af34f6c05a307b070e74e9ed5b9c64f86aacc2b90d10' | ||
], | ||
[ | ||
'sha3-384', | ||
'beep boop', | ||
'153075a9cff1bcfbe8a7025aa225dd558fb002769d4bf3b67d2aaf180459172208bea989804aefccf060b583e629e5f41e8d' | ||
], | ||
[ | ||
'sha3-256', | ||
'beep boop', | ||
'1620828705da60284b39de02e3599d1f39e6c1df001f5dbf63c9ec2d2c91a95a427f' | ||
], | ||
[ | ||
'sha3-224', | ||
'beep boop', | ||
'171c0da73a89549018df311c0a63250e008f7be357f93ba4e582aaea32b8' | ||
], | ||
[ | ||
'shake-128', | ||
'foo', | ||
'1820f84e95cb5fbd2038863ab27d3cdeac295ad2d4ab96ad1f4b070c0bf36078ef08' | ||
], | ||
[ | ||
'shake-256', | ||
'foo', | ||
'19401af97f7818a28edfdfce5ec66dbdc7e871813816d7d585fe1f12475ded5b6502b7723b74e2ee36f2651a10a8eaca72aa9148c3c761aaceac8f6d6cc64381ed39' | ||
], | ||
[ | ||
'keccak-224', | ||
'beep boop', | ||
'1a1c2bd72cde2f75e523512999eb7639f17b699efe29bec342f5a0270896' | ||
], | ||
[ | ||
'keccak-256', | ||
'beep boop', | ||
'1b20ee6f6b4ce5d754c01203cb3b99294b88615df5999e20d6fe509204fa254a0f97' | ||
], | ||
[ | ||
'keccak-384', | ||
'beep boop', | ||
'1c300e2fcca40e861fc425a2503a65f4a4befab7be7f193e57654ca3713e85262b035e54d5ade93f9632b810ab88b04f7d84' | ||
], | ||
[ | ||
'keccak-512', | ||
'beep boop', | ||
'1d40e161c54798f78eba3404ac5e7e12d27555b7b810e7fd0db3f25ffa0c785c438331b0fbb6156215f69edf403c642e5280f4521da9bd767296ec81f05100852e78' | ||
] | ||
]; | ||
describe('Digests', () => { | ||
for (const [name, input, expectedDigest] of fixtures) { | ||
it(name, async () => { | ||
const hasher = index[name.replace('-', '')]; | ||
const hash = await hasher.digest(multiformats.bytes.fromString(input)); | ||
assert.strictEqual(hash.code, hasher.code); | ||
assert.strictEqual(multiformats.bytes.toHex(hash.bytes), expectedDigest); | ||
}); | ||
}); | ||
} | ||
} | ||
}); | ||
describe('Hashers', () => { | ||
const beepboop = multiformats.bytes.fromString('beep boop'); | ||
const codecs = table_csv.split('\n').filter(Boolean).map(l => l.split(',').map(e => e.trim()).map(e => e.startsWith('0x') ? parseInt(e, 16) : e)); | ||
for (const [name, , code] of codecs) { | ||
const exportName = name.replace('-', ''); | ||
it(name, async () => { | ||
const hasher = index[exportName]; | ||
assert.strictEqual(hasher.code, code); | ||
const hash = await hasher.digest(beepboop); | ||
assert.strictEqual(hash.code, hasher.code); | ||
}); | ||
} | ||
}); |
124
cjs/index.js
'use strict'; | ||
var sha3 = require('js-sha3'); | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
var hasher = require('multiformats/hashes/hasher'); | ||
var sha3$1 = require('js-sha3'); | ||
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } | ||
var sha3__default = /*#__PURE__*/_interopDefaultLegacy(sha3); | ||
var sha3__default = /*#__PURE__*/_interopDefaultLegacy(sha3$1); | ||
'use strict'; | ||
const encoder = fn => b => new Uint8Array(fn.array(b)); | ||
var main = [ | ||
{ | ||
code: 20, | ||
name: 'sha3-512', | ||
encode: encoder(sha3__default['default'].sha3_512) | ||
}, | ||
{ | ||
code: 21, | ||
name: 'sha3-384', | ||
encode: encoder(sha3__default['default'].sha3_384) | ||
}, | ||
{ | ||
code: 22, | ||
name: 'sha3-256', | ||
encode: encoder(sha3__default['default'].sha3_256) | ||
}, | ||
{ | ||
code: 23, | ||
name: 'sha3-224', | ||
encode: encoder(sha3__default['default'].sha3_224) | ||
}, | ||
{ | ||
code: 24, | ||
name: 'shake-128', | ||
encode: encoder(sha3__default['default'].shake128) | ||
}, | ||
{ | ||
code: 25, | ||
name: 'shake-256', | ||
encode: encoder(sha3__default['default'].shake256) | ||
}, | ||
{ | ||
code: 26, | ||
name: 'keccak-224', | ||
encode: encoder(sha3__default['default'].keccak224) | ||
}, | ||
{ | ||
code: 27, | ||
name: 'keccak-256', | ||
encode: encoder(sha3__default['default'].keccak256) | ||
}, | ||
{ | ||
code: 28, | ||
name: 'keccak-384', | ||
encode: encoder(sha3__default['default'].keccak384) | ||
}, | ||
{ | ||
code: 29, | ||
name: 'keccak-512', | ||
encode: encoder(sha3__default['default'].keccak512) | ||
} | ||
]; | ||
function encoder(fn) { | ||
return b => new Uint8Array(fn.array(b)); | ||
} | ||
const sha3224 = hasher.from({ | ||
code: 23, | ||
name: 'sha3-224', | ||
encode: encoder(sha3__default['default'].sha3_224) | ||
}); | ||
const sha3256 = hasher.from({ | ||
code: 22, | ||
name: 'sha3-256', | ||
encode: encoder(sha3__default['default'].sha3_256) | ||
}); | ||
const sha3384 = hasher.from({ | ||
code: 21, | ||
name: 'sha3-384', | ||
encode: encoder(sha3__default['default'].sha3_384) | ||
}); | ||
const sha3512 = hasher.from({ | ||
code: 20, | ||
name: 'sha3-512', | ||
encode: encoder(sha3__default['default'].sha3_512) | ||
}); | ||
const shake128 = hasher.from({ | ||
code: 24, | ||
name: 'shake-128', | ||
encode: b => new Uint8Array(sha3__default['default'].shake128.array(b, 256)) | ||
}); | ||
const shake256 = hasher.from({ | ||
code: 25, | ||
name: 'shake-256', | ||
encode: b => new Uint8Array(sha3__default['default'].shake256.array(b, 512)) | ||
}); | ||
const keccak224 = hasher.from({ | ||
code: 26, | ||
name: 'keccak-224', | ||
encode: encoder(sha3__default['default'].keccak224) | ||
}); | ||
const keccak256 = hasher.from({ | ||
code: 27, | ||
name: 'keccak-256', | ||
encode: encoder(sha3__default['default'].keccak256) | ||
}); | ||
const keccak384 = hasher.from({ | ||
code: 28, | ||
name: 'keccak-384', | ||
encode: encoder(sha3__default['default'].keccak384) | ||
}); | ||
const keccak512 = hasher.from({ | ||
code: 29, | ||
name: 'keccak-512', | ||
encode: encoder(sha3__default['default'].keccak512) | ||
}); | ||
module.exports = main; | ||
exports.keccak224 = keccak224; | ||
exports.keccak256 = keccak256; | ||
exports.keccak384 = keccak384; | ||
exports.keccak512 = keccak512; | ||
exports.sha3224 = sha3224; | ||
exports.sha3256 = sha3256; | ||
exports.sha3384 = sha3384; | ||
exports.sha3512 = sha3512; | ||
exports.shake128 = shake128; | ||
exports.shake256 = shake256; |
'use strict'; | ||
var index = require('../index.js'); | ||
var assert = require('assert'); | ||
var chai = require('chai'); | ||
var multiformats = require('multiformats'); | ||
var table_csv = require('./table.csv.js'); | ||
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } | ||
var assert__default = /*#__PURE__*/_interopDefaultLegacy(assert); | ||
var chai__default = /*#__PURE__*/_interopDefaultLegacy(chai); | ||
const test = it; | ||
const same = assert__default['default'].deepStrictEqual; | ||
const {multihash, bytes} = multiformats.create(); | ||
multihash.add(index); | ||
const fixture = bytes.fromString('testFixture'); | ||
for (const {name, code} of index) { | ||
describe(name, () => { | ||
test('encode', async () => { | ||
const hashed = await multihash.hash(fixture, name); | ||
await multihash.validate(hashed, fixture); | ||
const duplicate = await multihash.hash(fixture, code); | ||
same(hashed, duplicate); | ||
const {assert} = chai__default['default']; | ||
const fixtures = [ | ||
[ | ||
'sha3-512', | ||
'beep boop', | ||
'1440fae2c9eb19906057f8bf507f0e73ee02bb669d58c3069e7718b89ca4d314cf4fd6f1679019cc46d185c7af34f6c05a307b070e74e9ed5b9c64f86aacc2b90d10' | ||
], | ||
[ | ||
'sha3-384', | ||
'beep boop', | ||
'153075a9cff1bcfbe8a7025aa225dd558fb002769d4bf3b67d2aaf180459172208bea989804aefccf060b583e629e5f41e8d' | ||
], | ||
[ | ||
'sha3-256', | ||
'beep boop', | ||
'1620828705da60284b39de02e3599d1f39e6c1df001f5dbf63c9ec2d2c91a95a427f' | ||
], | ||
[ | ||
'sha3-224', | ||
'beep boop', | ||
'171c0da73a89549018df311c0a63250e008f7be357f93ba4e582aaea32b8' | ||
], | ||
[ | ||
'shake-128', | ||
'foo', | ||
'1820f84e95cb5fbd2038863ab27d3cdeac295ad2d4ab96ad1f4b070c0bf36078ef08' | ||
], | ||
[ | ||
'shake-256', | ||
'foo', | ||
'19401af97f7818a28edfdfce5ec66dbdc7e871813816d7d585fe1f12475ded5b6502b7723b74e2ee36f2651a10a8eaca72aa9148c3c761aaceac8f6d6cc64381ed39' | ||
], | ||
[ | ||
'keccak-224', | ||
'beep boop', | ||
'1a1c2bd72cde2f75e523512999eb7639f17b699efe29bec342f5a0270896' | ||
], | ||
[ | ||
'keccak-256', | ||
'beep boop', | ||
'1b20ee6f6b4ce5d754c01203cb3b99294b88615df5999e20d6fe509204fa254a0f97' | ||
], | ||
[ | ||
'keccak-384', | ||
'beep boop', | ||
'1c300e2fcca40e861fc425a2503a65f4a4befab7be7f193e57654ca3713e85262b035e54d5ade93f9632b810ab88b04f7d84' | ||
], | ||
[ | ||
'keccak-512', | ||
'beep boop', | ||
'1d40e161c54798f78eba3404ac5e7e12d27555b7b810e7fd0db3f25ffa0c785c438331b0fbb6156215f69edf403c642e5280f4521da9bd767296ec81f05100852e78' | ||
] | ||
]; | ||
describe('Digests', () => { | ||
for (const [name, input, expectedDigest] of fixtures) { | ||
it(name, async () => { | ||
const hasher = index[name.replace('-', '')]; | ||
const hash = await hasher.digest(multiformats.bytes.fromString(input)); | ||
assert.strictEqual(hash.code, hasher.code); | ||
assert.strictEqual(multiformats.bytes.toHex(hash.bytes), expectedDigest); | ||
}); | ||
}); | ||
} | ||
} | ||
}); | ||
describe('Hashers', () => { | ||
const beepboop = multiformats.bytes.fromString('beep boop'); | ||
const codecs = table_csv.split('\n').filter(Boolean).map(l => l.split(',').map(e => e.trim()).map(e => e.startsWith('0x') ? parseInt(e, 16) : e)); | ||
for (const [name, , code] of codecs) { | ||
const exportName = name.replace('-', ''); | ||
it(name, async () => { | ||
const hasher = index[exportName]; | ||
assert.strictEqual(hasher.code, code); | ||
const hash = await hasher.digest(beepboop); | ||
assert.strictEqual(hash.code, hasher.code); | ||
}); | ||
} | ||
}); |
@@ -1,18 +0,80 @@ | ||
import main from '../index.js'; | ||
import assert from 'assert'; | ||
import { create } from 'multiformats'; | ||
const test = it; | ||
const same = assert.deepStrictEqual; | ||
const {multihash, bytes} = create(); | ||
multihash.add(main); | ||
const fixture = bytes.fromString('testFixture'); | ||
for (const {name, code} of main) { | ||
describe(name, () => { | ||
test('encode', async () => { | ||
const hashed = await multihash.hash(fixture, name); | ||
await multihash.validate(hashed, fixture); | ||
const duplicate = await multihash.hash(fixture, code); | ||
same(hashed, duplicate); | ||
import * as sha3 from '../index.js'; | ||
import chai from 'chai'; | ||
import { bytes } from 'multiformats'; | ||
import table from './table.csv.js'; | ||
const {assert} = chai; | ||
const fixtures = [ | ||
[ | ||
'sha3-512', | ||
'beep boop', | ||
'1440fae2c9eb19906057f8bf507f0e73ee02bb669d58c3069e7718b89ca4d314cf4fd6f1679019cc46d185c7af34f6c05a307b070e74e9ed5b9c64f86aacc2b90d10' | ||
], | ||
[ | ||
'sha3-384', | ||
'beep boop', | ||
'153075a9cff1bcfbe8a7025aa225dd558fb002769d4bf3b67d2aaf180459172208bea989804aefccf060b583e629e5f41e8d' | ||
], | ||
[ | ||
'sha3-256', | ||
'beep boop', | ||
'1620828705da60284b39de02e3599d1f39e6c1df001f5dbf63c9ec2d2c91a95a427f' | ||
], | ||
[ | ||
'sha3-224', | ||
'beep boop', | ||
'171c0da73a89549018df311c0a63250e008f7be357f93ba4e582aaea32b8' | ||
], | ||
[ | ||
'shake-128', | ||
'foo', | ||
'1820f84e95cb5fbd2038863ab27d3cdeac295ad2d4ab96ad1f4b070c0bf36078ef08' | ||
], | ||
[ | ||
'shake-256', | ||
'foo', | ||
'19401af97f7818a28edfdfce5ec66dbdc7e871813816d7d585fe1f12475ded5b6502b7723b74e2ee36f2651a10a8eaca72aa9148c3c761aaceac8f6d6cc64381ed39' | ||
], | ||
[ | ||
'keccak-224', | ||
'beep boop', | ||
'1a1c2bd72cde2f75e523512999eb7639f17b699efe29bec342f5a0270896' | ||
], | ||
[ | ||
'keccak-256', | ||
'beep boop', | ||
'1b20ee6f6b4ce5d754c01203cb3b99294b88615df5999e20d6fe509204fa254a0f97' | ||
], | ||
[ | ||
'keccak-384', | ||
'beep boop', | ||
'1c300e2fcca40e861fc425a2503a65f4a4befab7be7f193e57654ca3713e85262b035e54d5ade93f9632b810ab88b04f7d84' | ||
], | ||
[ | ||
'keccak-512', | ||
'beep boop', | ||
'1d40e161c54798f78eba3404ac5e7e12d27555b7b810e7fd0db3f25ffa0c785c438331b0fbb6156215f69edf403c642e5280f4521da9bd767296ec81f05100852e78' | ||
] | ||
]; | ||
describe('Digests', () => { | ||
for (const [name, input, expectedDigest] of fixtures) { | ||
it(name, async () => { | ||
const hasher = sha3[name.replace('-', '')]; | ||
const hash = await hasher.digest(bytes.fromString(input)); | ||
assert.strictEqual(hash.code, hasher.code); | ||
assert.strictEqual(bytes.toHex(hash.bytes), expectedDigest); | ||
}); | ||
}); | ||
} | ||
} | ||
}); | ||
describe('Hashers', () => { | ||
const beepboop = bytes.fromString('beep boop'); | ||
const codecs = table.split('\n').filter(Boolean).map(l => l.split(',').map(e => e.trim()).map(e => e.startsWith('0x') ? parseInt(e, 16) : e)); | ||
for (const [name, , code] of codecs) { | ||
const exportName = name.replace('-', ''); | ||
it(name, async () => { | ||
const hasher = sha3[exportName]; | ||
assert.strictEqual(hasher.code, code); | ||
const hash = await hasher.digest(beepboop); | ||
assert.strictEqual(hash.code, hasher.code); | ||
}); | ||
} | ||
}); |
107
esm/index.js
'use strict'; | ||
import { from } from 'multiformats/hashes/hasher'; | ||
import sha3 from 'js-sha3'; | ||
const encoder = fn => b => new Uint8Array(fn.array(b)); | ||
export default [ | ||
{ | ||
code: 20, | ||
name: 'sha3-512', | ||
encode: encoder(sha3.sha3_512) | ||
}, | ||
{ | ||
code: 21, | ||
name: 'sha3-384', | ||
encode: encoder(sha3.sha3_384) | ||
}, | ||
{ | ||
code: 22, | ||
name: 'sha3-256', | ||
encode: encoder(sha3.sha3_256) | ||
}, | ||
{ | ||
code: 23, | ||
name: 'sha3-224', | ||
encode: encoder(sha3.sha3_224) | ||
}, | ||
{ | ||
code: 24, | ||
name: 'shake-128', | ||
encode: encoder(sha3.shake128) | ||
}, | ||
{ | ||
code: 25, | ||
name: 'shake-256', | ||
encode: encoder(sha3.shake256) | ||
}, | ||
{ | ||
code: 26, | ||
name: 'keccak-224', | ||
encode: encoder(sha3.keccak224) | ||
}, | ||
{ | ||
code: 27, | ||
name: 'keccak-256', | ||
encode: encoder(sha3.keccak256) | ||
}, | ||
{ | ||
code: 28, | ||
name: 'keccak-384', | ||
encode: encoder(sha3.keccak384) | ||
}, | ||
{ | ||
code: 29, | ||
name: 'keccak-512', | ||
encode: encoder(sha3.keccak512) | ||
} | ||
]; | ||
function encoder(fn) { | ||
return b => new Uint8Array(fn.array(b)); | ||
} | ||
export const sha3224 = from({ | ||
code: 23, | ||
name: 'sha3-224', | ||
encode: encoder(sha3.sha3_224) | ||
}); | ||
export const sha3256 = from({ | ||
code: 22, | ||
name: 'sha3-256', | ||
encode: encoder(sha3.sha3_256) | ||
}); | ||
export const sha3384 = from({ | ||
code: 21, | ||
name: 'sha3-384', | ||
encode: encoder(sha3.sha3_384) | ||
}); | ||
export const sha3512 = from({ | ||
code: 20, | ||
name: 'sha3-512', | ||
encode: encoder(sha3.sha3_512) | ||
}); | ||
export const shake128 = from({ | ||
code: 24, | ||
name: 'shake-128', | ||
encode: b => new Uint8Array(sha3.shake128.array(b, 256)) | ||
}); | ||
export const shake256 = from({ | ||
code: 25, | ||
name: 'shake-256', | ||
encode: b => new Uint8Array(sha3.shake256.array(b, 512)) | ||
}); | ||
export const keccak224 = from({ | ||
code: 26, | ||
name: 'keccak-224', | ||
encode: encoder(sha3.keccak224) | ||
}); | ||
export const keccak256 = from({ | ||
code: 27, | ||
name: 'keccak-256', | ||
encode: encoder(sha3.keccak256) | ||
}); | ||
export const keccak384 = from({ | ||
code: 28, | ||
name: 'keccak-384', | ||
encode: encoder(sha3.keccak384) | ||
}); | ||
export const keccak512 = from({ | ||
code: 29, | ||
name: 'keccak-512', | ||
encode: encoder(sha3.keccak512) | ||
}); |
@@ -1,18 +0,80 @@ | ||
import main from '../index.js'; | ||
import assert from 'assert'; | ||
import { create } from 'multiformats'; | ||
const test = it; | ||
const same = assert.deepStrictEqual; | ||
const {multihash, bytes} = create(); | ||
multihash.add(main); | ||
const fixture = bytes.fromString('testFixture'); | ||
for (const {name, code} of main) { | ||
describe(name, () => { | ||
test('encode', async () => { | ||
const hashed = await multihash.hash(fixture, name); | ||
await multihash.validate(hashed, fixture); | ||
const duplicate = await multihash.hash(fixture, code); | ||
same(hashed, duplicate); | ||
import * as sha3 from '../index.js'; | ||
import chai from 'chai'; | ||
import { bytes } from 'multiformats'; | ||
import table from './table.csv.js'; | ||
const {assert} = chai; | ||
const fixtures = [ | ||
[ | ||
'sha3-512', | ||
'beep boop', | ||
'1440fae2c9eb19906057f8bf507f0e73ee02bb669d58c3069e7718b89ca4d314cf4fd6f1679019cc46d185c7af34f6c05a307b070e74e9ed5b9c64f86aacc2b90d10' | ||
], | ||
[ | ||
'sha3-384', | ||
'beep boop', | ||
'153075a9cff1bcfbe8a7025aa225dd558fb002769d4bf3b67d2aaf180459172208bea989804aefccf060b583e629e5f41e8d' | ||
], | ||
[ | ||
'sha3-256', | ||
'beep boop', | ||
'1620828705da60284b39de02e3599d1f39e6c1df001f5dbf63c9ec2d2c91a95a427f' | ||
], | ||
[ | ||
'sha3-224', | ||
'beep boop', | ||
'171c0da73a89549018df311c0a63250e008f7be357f93ba4e582aaea32b8' | ||
], | ||
[ | ||
'shake-128', | ||
'foo', | ||
'1820f84e95cb5fbd2038863ab27d3cdeac295ad2d4ab96ad1f4b070c0bf36078ef08' | ||
], | ||
[ | ||
'shake-256', | ||
'foo', | ||
'19401af97f7818a28edfdfce5ec66dbdc7e871813816d7d585fe1f12475ded5b6502b7723b74e2ee36f2651a10a8eaca72aa9148c3c761aaceac8f6d6cc64381ed39' | ||
], | ||
[ | ||
'keccak-224', | ||
'beep boop', | ||
'1a1c2bd72cde2f75e523512999eb7639f17b699efe29bec342f5a0270896' | ||
], | ||
[ | ||
'keccak-256', | ||
'beep boop', | ||
'1b20ee6f6b4ce5d754c01203cb3b99294b88615df5999e20d6fe509204fa254a0f97' | ||
], | ||
[ | ||
'keccak-384', | ||
'beep boop', | ||
'1c300e2fcca40e861fc425a2503a65f4a4befab7be7f193e57654ca3713e85262b035e54d5ade93f9632b810ab88b04f7d84' | ||
], | ||
[ | ||
'keccak-512', | ||
'beep boop', | ||
'1d40e161c54798f78eba3404ac5e7e12d27555b7b810e7fd0db3f25ffa0c785c438331b0fbb6156215f69edf403c642e5280f4521da9bd767296ec81f05100852e78' | ||
] | ||
]; | ||
describe('Digests', () => { | ||
for (const [name, input, expectedDigest] of fixtures) { | ||
it(name, async () => { | ||
const hasher = sha3[name.replace('-', '')]; | ||
const hash = await hasher.digest(bytes.fromString(input)); | ||
assert.strictEqual(hash.code, hasher.code); | ||
assert.strictEqual(bytes.toHex(hash.bytes), expectedDigest); | ||
}); | ||
}); | ||
} | ||
} | ||
}); | ||
describe('Hashers', () => { | ||
const beepboop = bytes.fromString('beep boop'); | ||
const codecs = table.split('\n').filter(Boolean).map(l => l.split(',').map(e => e.trim()).map(e => e.startsWith('0x') ? parseInt(e, 16) : e)); | ||
for (const [name, , code] of codecs) { | ||
const exportName = name.replace('-', ''); | ||
it(name, async () => { | ||
const hasher = sha3[exportName]; | ||
assert.strictEqual(hasher.code, code); | ||
const hash = await hasher.digest(beepboop); | ||
assert.strictEqual(hash.code, hasher.code); | ||
}); | ||
} | ||
}); |
143
package.json
{ | ||
"name": "@multiformats/sha3", | ||
"version": "1.1.1", | ||
"version": "2.0.0", | ||
"description": "Multiformats hash functions for SHA3", | ||
"main": "./cjs/index.js", | ||
"scripts": { | ||
"build": "npm_config_yes=true npx ipjs@latest build --tests", | ||
"publish": "npm_config_yes=true npx ipjs@latest publish", | ||
"build": "npm run build:js && npm run build:types", | ||
"build:js": "ipjs build --tests --main && npm run build:copy", | ||
"build:copy": "cp -a tsconfig.json *.js dist/", | ||
"build:types": "npm run build:copy && cd dist && tsc --build", | ||
"publish": "ipjs publish", | ||
"lint": "standard", | ||
"test:cjs": "npm run build && mocha dist/cjs/node-test/test-*.js", | ||
"test:node": "hundreds mocha test/test-*.js", | ||
"test:browser": "polendina --cleanup dist/cjs/browser-test/test-*.js", | ||
"test": "npm run lint && npm run test:node && npm run test:cjs && npm run test:browser", | ||
"coverage": "c8 --reporter=html mocha test/test-*.js && npx st -d coverage -p 8080" | ||
"test:cjs": "npm run build && mocha dist/cjs/node-test/test-*.js && npm run test:cjs:browser", | ||
"test:node": "c8 --check-coverage --branches 100 --functions 100 --lines 100 mocha test/test-*.js", | ||
"test:cjs:browser": "polendina --cleanup dist/cjs/browser-test/test-*.js", | ||
"test": "npm run lint && npm run test:node && npm run test:cjs", | ||
"coverage": "c8 --reporter=html mocha test/test-*.js && npm_config_yes=true npx st -d coverage -p 8080" | ||
}, | ||
@@ -19,14 +24,25 @@ "exports": { | ||
}, | ||
"keywords": [], | ||
"keywords": [ | ||
"IPFS", | ||
"IPLD", | ||
"multiformats", | ||
"hash", | ||
"multihash", | ||
"blake2" | ||
], | ||
"author": "Mikeal Rogers <mikeal.rogers@gmail.com> (https://www.mikealrogers.com/)", | ||
"license": "(Apache-2.0 AND MIT)", | ||
"dependencies": { | ||
"js-sha3": "^0.8.0" | ||
"js-sha3": "^0.8.0", | ||
"multiformats": "^9.4.1" | ||
}, | ||
"devDependencies": { | ||
"hundreds": "0.0.8", | ||
"mocha": "^8.1.1", | ||
"multiformats": "3.0.3", | ||
"@ipld/dag-cbor": "^6.0.5", | ||
"c8": "^7.7.3", | ||
"chai": "^4.3.4", | ||
"ipjs": "^5.0.2", | ||
"mocha": "^9.0.2", | ||
"polendina": "^1.1.0", | ||
"standard": "^14.3.4" | ||
"standard": "^16.0.3", | ||
"typescript": "^4.3.5" | ||
}, | ||
@@ -41,4 +57,99 @@ "repository": { | ||
"homepage": "https://github.com/mikeal/js-sha3#readme", | ||
"description": "Multiformats hash functions for SHA3", | ||
"typesVersions": { | ||
"*": { | ||
"*": [ | ||
"types/*" | ||
], | ||
"types/*": [ | ||
"types/*" | ||
] | ||
} | ||
}, | ||
"release": { | ||
"branches": [ | ||
"master" | ||
], | ||
"plugins": [ | ||
[ | ||
"@semantic-release/commit-analyzer", | ||
{ | ||
"preset": "conventionalcommits", | ||
"releaseRules": [ | ||
{ | ||
"breaking": true, | ||
"release": "major" | ||
}, | ||
{ | ||
"revert": true, | ||
"release": "patch" | ||
}, | ||
{ | ||
"type": "feat", | ||
"release": "minor" | ||
}, | ||
{ | ||
"type": "fix", | ||
"release": "patch" | ||
}, | ||
{ | ||
"type": "chore", | ||
"release": "patch" | ||
}, | ||
{ | ||
"type": "docs", | ||
"release": "patch" | ||
}, | ||
{ | ||
"type": "test", | ||
"release": "patch" | ||
}, | ||
{ | ||
"scope": "no-release", | ||
"release": false | ||
} | ||
] | ||
} | ||
], | ||
[ | ||
"@semantic-release/release-notes-generator", | ||
{ | ||
"preset": "conventionalcommits", | ||
"presetConfig": { | ||
"types": [ | ||
{ | ||
"type": "feat", | ||
"section": "Features" | ||
}, | ||
{ | ||
"type": "fix", | ||
"section": "Bug Fixes" | ||
}, | ||
{ | ||
"type": "chore", | ||
"section": "Trivial Changes" | ||
}, | ||
{ | ||
"type": "docs", | ||
"section": "Trivial Changes" | ||
}, | ||
{ | ||
"type": "test", | ||
"section": "Tests" | ||
} | ||
] | ||
} | ||
} | ||
], | ||
"@semantic-release/changelog", | ||
[ | ||
"@semantic-release/npm", | ||
{ | ||
"pkgRoot": "dist" | ||
} | ||
], | ||
"@semantic-release/github", | ||
"@semantic-release/git" | ||
] | ||
}, | ||
"browser": "./cjs/index.js" | ||
} | ||
} |
@@ -1,16 +0,55 @@ | ||
# js-sha3 | ||
# @multiformats/sha3 | ||
Multiformats hash functions for SHA3. | ||
SHA3 (and related) multihash hashers for [multiformats](https://github.com/multiformats/js-multiformats). | ||
`MultihashHashers`s are exported from this library, they produce `MultihashDigest`s. Details about these can be found in the [multiformats multihash interface definitions](https://github.com/multiformats/js-multiformats/blob/master/src/hashes/interface.ts). | ||
```js | ||
import multiformats from 'multiformats/basics' | ||
import sha3 from '@multiformats/sha3' | ||
import * as Block from 'multiformats/block' | ||
import * as codec from '@ipld/dag-cbor' | ||
import { sha3256 as hasher } from '@multiformats/sha3' | ||
const { multihash } = multiformats | ||
multihash.add(sha3) | ||
async function run () { | ||
const value = { hello: 'world' } | ||
const block = await Block.encode({ value, hasher, codec }) | ||
console.log(block.cid) | ||
// -> CID(bafyrmidyqnbqbeh5lmkwavjizfmsz6ezwvjleweh5frwk56akfyugoio2e) | ||
} | ||
const data = new Uint8Array([...someData]) | ||
const hash = await multihash.hash(data, 'sha3-384') | ||
run().catch(console.error) | ||
``` | ||
This package contains hash functions for `sha3-224`, `sha3-256`, `sha3-384`,`sha3-512`, `shake-128`, `shake-256`, `keccak-224`, `keccak-256`, `keccak-384`, and `keccak-512`. | ||
## Usage | ||
The `@multiformats/sha3` package exports `sha3*`, `shake*` and `keccak*` `MultihashHasher`s. The Multicodecs [table](https://github.com/multiformats/multicodec/blob/master/table.csv) defines these multihashes. | ||
The following `MultihashHasher`s are exported: | ||
* `sha3224` - SHA3-224 | ||
* `sha3256` - SHA3-256 | ||
* `sha3384` - SHA3-384 | ||
* `sha3512` - SHA3-512 | ||
* `shake128` - SHAKE-128 (256 output bits) | ||
* `shake256` - SHAKE-256 (512 output bits) | ||
* `keccak224` - KECCAK-224 | ||
* `keccak256` - KECCAK-256 | ||
* `keccak384` - KECCAK-384 | ||
* `keccak512` - KECCAK-512 | ||
e.g. he `sha3-384`, multicodec code `0x15`, may be imported as: | ||
```js | ||
import { sha3384 } from '@multiformats/sha3' | ||
``` | ||
## License | ||
Licensed under either of | ||
* Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / http://www.apache.org/licenses/LICENSE-2.0) | ||
* MIT ([LICENSE-MIT](LICENSE-MIT) / http://opensource.org/licenses/MIT) | ||
### Contribution | ||
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
27250
34
580
56
2
8
+ Addedmultiformats@^9.4.1
+ Addedmultiformats@9.9.0(transitive)