@polkadot/util-keyring
Version:
52 lines (40 loc) • 2.44 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = decode;
require("core-js/modules/es6.regexp.to-string");
var _concat = _interopRequireDefault(require("@polkadot/util/u8a/concat"));
var _fixLength = _interopRequireDefault(require("@polkadot/util/u8a/fixLength"));
var _fromString = _interopRequireDefault(require("@polkadot/util/u8a/fromString"));
var _assert = _interopRequireDefault(require("@polkadot/util/assert"));
var _decrypt = _interopRequireDefault(require("@polkadot/util-crypto/nacl/decrypt"));
var _fromSeed = _interopRequireDefault(require("@polkadot/util-crypto/nacl/keypair/fromSeed"));
var _defaults = require("./defaults");
// Copyright 2017-2018 @polkadot/util-keyring authors & contributors
// This software may be modified and distributed under the terms
// of the ISC license. See the LICENSE file for details.
const KEY_LENGTH = 32;
const SEED_OFFSET = _defaults.PKCS8_HEADER.length;
const DIV_OFFSET = SEED_OFFSET + KEY_LENGTH;
const PUBLIC_OFFSET = SEED_OFFSET + KEY_LENGTH + _defaults.PKCS8_DIVIDER.length;
function decode(passphrase, _encrypted) {
(0, _assert.default)(_encrypted, `No encrypted data available to decode`);
const encrypted = _encrypted;
const encoded = passphrase ? (0, _decrypt.default)(encrypted.subarray(24), encrypted.subarray(0, 24), (0, _fixLength.default)((0, _fromString.default)(passphrase), 256, true)) : encrypted;
(0, _assert.default)(encoded, `Unable to unencrypt using the supplied passphrase`);
const header = encoded.subarray(0, _defaults.PKCS8_HEADER.length);
const divider = encoded.subarray(DIV_OFFSET, DIV_OFFSET + _defaults.PKCS8_DIVIDER.length);
(0, _assert.default)(header.toString() === _defaults.PKCS8_HEADER.toString(), 'Invalid Pkcs8 header found in body');
(0, _assert.default)(divider.toString() === _defaults.PKCS8_DIVIDER.toString(), 'Invalid Pkcs8 divider found in body');
const publicKey = encoded.subarray(PUBLIC_OFFSET, PUBLIC_OFFSET + KEY_LENGTH);
const seed = encoded.subarray(SEED_OFFSET, SEED_OFFSET + KEY_LENGTH);
const secretKey = (0, _concat.default)(seed, publicKey);
const validate = (0, _fromSeed.default)(seed);
(0, _assert.default)(validate.publicKey.toString() === publicKey.toString(), 'Pkcs8 decoded publicKeys are not matching');
return {
publicKey,
secretKey
};
}