2016-12-23 08:52:40 -05:00
|
|
|
'use strict'
|
|
|
|
|
2017-07-22 10:57:27 -07:00
|
|
|
const nacl = require('tweetnacl')
|
2019-01-03 08:13:07 -08:00
|
|
|
const nextTick = require('async/nextTick')
|
2016-12-23 08:52:40 -05:00
|
|
|
|
2017-07-22 10:57:27 -07:00
|
|
|
exports.publicKeyLength = nacl.sign.publicKeyLength
|
|
|
|
exports.privateKeyLength = nacl.sign.secretKeyLength
|
2016-12-23 08:52:40 -05:00
|
|
|
|
2017-07-22 10:57:27 -07:00
|
|
|
exports.generateKey = function (callback) {
|
2019-01-03 08:13:07 -08:00
|
|
|
nextTick(() => {
|
2017-12-01 09:36:29 +01:00
|
|
|
let result
|
|
|
|
try {
|
|
|
|
result = nacl.sign.keyPair()
|
|
|
|
} catch (err) {
|
|
|
|
return callback(err)
|
|
|
|
}
|
|
|
|
callback(null, result)
|
2017-07-22 10:57:27 -07:00
|
|
|
})
|
2016-12-23 08:52:40 -05:00
|
|
|
}
|
|
|
|
|
2017-07-22 10:57:27 -07:00
|
|
|
// seed should be a 32 byte uint8array
|
|
|
|
exports.generateKeyFromSeed = function (seed, callback) {
|
2019-01-03 08:13:07 -08:00
|
|
|
nextTick(() => {
|
2017-12-01 09:36:29 +01:00
|
|
|
let result
|
|
|
|
try {
|
|
|
|
result = nacl.sign.keyPair.fromSeed(seed)
|
|
|
|
} catch (err) {
|
|
|
|
return callback(err)
|
|
|
|
}
|
|
|
|
callback(null, result)
|
|
|
|
})
|
2016-12-23 08:52:40 -05:00
|
|
|
}
|
|
|
|
|
2017-07-22 10:57:27 -07:00
|
|
|
exports.hashAndSign = function (key, msg, callback) {
|
2019-01-03 08:13:07 -08:00
|
|
|
nextTick(() => {
|
2017-07-22 10:57:27 -07:00
|
|
|
callback(null, Buffer.from(nacl.sign.detached(msg, key)))
|
2016-12-23 08:52:40 -05:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2017-07-22 10:57:27 -07:00
|
|
|
exports.hashAndVerify = function (key, sig, msg, callback) {
|
2019-01-03 08:13:07 -08:00
|
|
|
nextTick(() => {
|
2017-12-01 09:36:29 +01:00
|
|
|
let result
|
|
|
|
try {
|
|
|
|
result = nacl.sign.detached.verify(msg, sig, key)
|
|
|
|
} catch (err) {
|
|
|
|
return callback(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
callback(null, result)
|
2017-03-03 20:38:51 +00:00
|
|
|
})
|
|
|
|
}
|