UNPKG

@polkadot/util-keyring

Version:
52 lines (40 loc) 2.44 kB
"use strict"; 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 }; }