|
|
@ -1,9 +1,22 @@
|
|
|
|
// const sha3 = require('js-sha3').sha3_256
|
|
|
|
// const sha3 = require('js-sha3').sha3_256
|
|
|
|
const sha3 = require('js-sha3').shake_256
|
|
|
|
const sha3 = require('js-sha3').keccak_256
|
|
|
|
const uts46 = require('idna-uts46')
|
|
|
|
const uts46 = require('idna-uts46')
|
|
|
|
// const SHA3 = require('crypto-js/sha3')
|
|
|
|
// const SHA3 = require('crypto-js/sha3')
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = function namehash (inputName) {
|
|
|
|
module.exports = function namehash (inputName) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let node = new Buffer('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
|
|
|
|
|
|
|
|
if(inputName && inputName !== '') {
|
|
|
|
|
|
|
|
let name = normalize(inputName)
|
|
|
|
|
|
|
|
var labels = name.split('.')
|
|
|
|
|
|
|
|
for(var i = labels.length - 1; i >= 0; i--) {
|
|
|
|
|
|
|
|
const combined = new Buffer([node, sha3(labels[i])])
|
|
|
|
|
|
|
|
node = sha3(combined)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return '0x' + node.toString('hex')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
console.log('called with ' + inputName)
|
|
|
|
console.log('called with ' + inputName)
|
|
|
|
|
|
|
|
|
|
|
|
// Reject empty names:
|
|
|
|
// Reject empty names:
|
|
|
@ -15,7 +28,7 @@ module.exports = function namehash (inputName) {
|
|
|
|
return result
|
|
|
|
return result
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const name = normalize(inputName)
|
|
|
|
name = normalize(inputName)
|
|
|
|
const split = name.split('.')
|
|
|
|
const split = name.split('.')
|
|
|
|
|
|
|
|
|
|
|
|
const label = split.shift()
|
|
|
|
const label = split.shift()
|
|
|
@ -35,5 +48,5 @@ function sha3 (input) {
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
function normalize(name) {
|
|
|
|
function normalize(name) {
|
|
|
|
return uts46.toUnicode(name, {useStd3ASCII: true, transitional: false});
|
|
|
|
return uts46.toUnicode(name, {useStd3ASCII: true, transitional: false})
|
|
|
|
}
|
|
|
|
}
|
|
|
|