@polkadot/keyring
Version:
37 lines (36 loc) • 1.76 kB
JavaScript
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;
;