X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Futils%2Faccount.js;h=ceecac551f8be6cdb7800cb96dcfcd85707fd514;hb=2eb3f7a8e5629696ecb87d8ffcad6e8241c74692;hp=7faf502becdaead23f179b03df0aeb139e2fbcc1;hpb=9544161ff419ee84f2f8974da98e5143d3031431;p=bytom%2FBytom-JS-SDK.git diff --git a/src/utils/account.js b/src/utils/account.js index 7faf502..ceecac5 100644 --- a/src/utils/account.js +++ b/src/utils/account.js @@ -1,61 +1,7 @@ -var scrypt = require('scrypt-js'); -var cryp = require('crypto-browserify'); -var sha3_256 = require('js-sha3').sha3_256; -var _ = require('lodash') -var ED25519 =require('./ed25519'); -var Curve25519 = new ED25519.Curve; - -function decrypt(v3Keystore, password) { - /* jshint maxcomplexity: 10 */ - - if (!_.isString(password)) { - throw new Error('No password given.'); - } - - var json = (_.isObject(v3Keystore)) ? v3Keystore : JSON.parse(v3Keystore); - var derivedKey; - var kdfparams; - if (json.crypto.kdf === 'scrypt') { - kdfparams = json.crypto.kdfparams; - - // FIXME: support progress reporting callback - derivedKey = scrypt.syncScrypt(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen); - } else if (json.crypto.kdf === 'pbkdf2') { - kdfparams = json.crypto.kdfparams; - - if (kdfparams.prf !== 'hmac-sha256') { - throw new Error('Unsupported parameters to PBKDF2'); - } - - derivedKey = cryp.pbkdf2Sync(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.c, kdfparams.dklen, 'sha3256'); - } else { - throw new Error('Unsupported key derivation scheme'); - } - - var ciphertext = Buffer.from(json.crypto.ciphertext, 'hex'); - - var mac = sha3_256(Buffer.concat([Buffer(derivedKey.slice(16, 32)), ciphertext])); - if (mac !== json.crypto.mac) { - throw new Error('Key derivation failed - possibly wrong password'); - } - - var decipher = cryp.createDecipheriv(json.crypto.cipher, derivedKey.slice(0, 16), Buffer.from(json.crypto.cipherparams.iv, 'hex')); - var privateKey = Buffer.concat([decipher.update(ciphertext), decipher.final()]); - - return privateKey; -}; - -function scalarmult_base (q){ - var base = Curve25519.point().base(); - var scalar = Curve25519.scalar().setBytes(new Uint8Array(q)); - var target = Curve25519.point().mul(scalar, base); - - return target.toString(); -} +import {decryptKey} from './key/keystore'; export function restoreFromKeyStore(v3Keystore, password){ - const privatekey = decrypt(v3Keystore, password); - const publickey = scalarmult_base(privatekey.slice(0, privatekey.length/2)) + privatekey.slice(privatekey.length/2, privatekey.length).toString('hex') + const key = decryptKey(v3Keystore, password) + return key.xPub; - return publickey; }