You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
940 B
43 lines
940 B
8 years ago
|
const scrypt = require('scrypt-async')
|
||
|
const bitcore = require('bitcore-lib')
|
||
|
const configManager = require('./lib/config-manager')
|
||
|
|
||
|
module.exports = class KeyringController {
|
||
|
|
||
|
constructor (opts) {
|
||
|
this.configManager = opts.configManager
|
||
|
this.keyChains = []
|
||
|
}
|
||
|
|
||
|
getKeyForPassword(password, callback) {
|
||
|
let salt = this.configManager.getSalt()
|
||
|
|
||
|
if (!salt) {
|
||
|
salt = generateSalt(32)
|
||
|
configManager.setSalt(salt)
|
||
|
}
|
||
|
|
||
|
var logN = 14
|
||
|
var r = 8
|
||
|
var dkLen = 32
|
||
|
var interruptStep = 200
|
||
|
|
||
|
var cb = function(derKey) {
|
||
|
try {
|
||
|
var ui8arr = (new Uint8Array(derKey))
|
||
|
this.pwDerivedKey = ui8arr
|
||
|
callback(null, ui8arr)
|
||
|
} catch (err) {
|
||
|
callback(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
scrypt(password, salt, logN, r, dkLen, interruptStep, cb, null)
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
function generateSalt (byteCount) {
|
||
|
return bitcore.crypto.Random.getRandomBuffer(byteCount || 32).toString('base64')
|
||
|
}
|