UNPKG

1.76 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.decodePair = void 0;
4const util_1 = require("@polkadot/util");
5const util_crypto_1 = require("@polkadot/util-crypto");
6const defaults_js_1 = require("./defaults.js");
7const SEED_OFFSET = defaults_js_1.PKCS8_HEADER.length;
8function decodePair(passphrase, encrypted, _encType) {
9 const encType = Array.isArray(_encType) || _encType === undefined
10 ? _encType
11 : [_encType];
12 const decrypted = (0, util_crypto_1.jsonDecryptData)(encrypted, passphrase, encType);
13 const header = decrypted.subarray(0, defaults_js_1.PKCS8_HEADER.length);
14 if (!(0, util_1.u8aEq)(header, defaults_js_1.PKCS8_HEADER)) {
15 throw new Error('Invalid Pkcs8 header found in body');
16 }
17 let secretKey = decrypted.subarray(SEED_OFFSET, SEED_OFFSET + defaults_js_1.SEC_LENGTH);
18 let divOffset = SEED_OFFSET + defaults_js_1.SEC_LENGTH;
19 let divider = decrypted.subarray(divOffset, divOffset + defaults_js_1.PKCS8_DIVIDER.length);
20 // old-style, we have the seed here
21 if (!(0, util_1.u8aEq)(divider, defaults_js_1.PKCS8_DIVIDER)) {
22 divOffset = SEED_OFFSET + defaults_js_1.SEED_LENGTH;
23 secretKey = decrypted.subarray(SEED_OFFSET, divOffset);
24 divider = decrypted.subarray(divOffset, divOffset + defaults_js_1.PKCS8_DIVIDER.length);
25 if (!(0, util_1.u8aEq)(divider, defaults_js_1.PKCS8_DIVIDER)) {
26 throw new Error('Invalid Pkcs8 divider found in body');
27 }
28 }
29 const pubOffset = divOffset + defaults_js_1.PKCS8_DIVIDER.length;
30 const publicKey = decrypted.subarray(pubOffset, pubOffset + defaults_js_1.PUB_LENGTH);
31 return {
32 publicKey,
33 secretKey
34 };
35}
36exports.decodePair = decodePair;