UNPKG

@polkadot/keyring

Version:
37 lines (36 loc) 1.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodePair = void 0; const util_1 = require("@polkadot/util"); const util_crypto_1 = require("@polkadot/util-crypto"); const defaults_js_1 = require("./defaults.js"); const SEED_OFFSET = defaults_js_1.PKCS8_HEADER.length; function decodePair(passphrase, encrypted, _encType) { const encType = Array.isArray(_encType) || _encType === undefined ? _encType : [_encType]; const decrypted = (0, util_crypto_1.jsonDecryptData)(encrypted, passphrase, encType); const header = decrypted.subarray(0, defaults_js_1.PKCS8_HEADER.length); if (!(0, util_1.u8aEq)(header, defaults_js_1.PKCS8_HEADER)) { throw new Error('Invalid Pkcs8 header found in body'); } let secretKey = decrypted.subarray(SEED_OFFSET, SEED_OFFSET + defaults_js_1.SEC_LENGTH); let divOffset = SEED_OFFSET + defaults_js_1.SEC_LENGTH; let divider = decrypted.subarray(divOffset, divOffset + defaults_js_1.PKCS8_DIVIDER.length); // old-style, we have the seed here if (!(0, util_1.u8aEq)(divider, defaults_js_1.PKCS8_DIVIDER)) { divOffset = SEED_OFFSET + defaults_js_1.SEED_LENGTH; secretKey = decrypted.subarray(SEED_OFFSET, divOffset); divider = decrypted.subarray(divOffset, divOffset + defaults_js_1.PKCS8_DIVIDER.length); if (!(0, util_1.u8aEq)(divider, defaults_js_1.PKCS8_DIVIDER)) { throw new Error('Invalid Pkcs8 divider found in body'); } } const pubOffset = divOffset + defaults_js_1.PKCS8_DIVIDER.length; const publicKey = decrypted.subarray(pubOffset, pubOffset + defaults_js_1.PUB_LENGTH); return { publicKey, secretKey }; } exports.decodePair = decodePair;