1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.decodePair = void 0;
|
4 | const util_1 = require("@polkadot/util");
|
5 | const util_crypto_1 = require("@polkadot/util-crypto");
|
6 | const defaults_js_1 = require("./defaults.js");
|
7 | const SEED_OFFSET = defaults_js_1.PKCS8_HEADER.length;
|
8 | function 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 |
|
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 | }
|
36 | exports.decodePair = decodePair;
|