PHP WebShell

Текущая директория: /opt/BitGoJS/modules/bitgo/dist/test/v2/unit/tss

Просмотр файла: helpers.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.nockSendSignatureShare = nockSendSignatureShare;
exports.nockGetTxRequest = nockGetTxRequest;
exports.nockGetEnterprise = nockGetEnterprise;
exports.nockGetChallenges = nockGetChallenges;
exports.nockGetChallenge = nockGetChallenge;
exports.nockGetSigningKey = nockGetSigningKey;
exports.createWalletSignatures = createWalletSignatures;
const openpgp = require("openpgp");
const sdk_core_1 = require("@bitgo/sdk-core");
const common_1 = require("../internal/tssUtils/common");
const nock = require("nock");
async function nockSendSignatureShare(params, status = 200) {
    const { signatureShare, signerShare, tssType } = params;
    const transactions = (0, common_1.getRoute)(tssType);
    const requestBody = signerShare === undefined ? { signatureShare } : { signatureShare, signerShare };
    return nock('https://bitgo.fakeurl')
        .post(`/api/v2/wallet/${params.walletId}/txrequests/${params.txRequestId + transactions}/signatureshares`, requestBody)
        .reply(status, status === 200 ? (params.response ? params.response : params.signatureShare) : { error: 'some error' });
}
async function nockGetTxRequest(params) {
    const n = nock('https://bitgo.fakeurl').get(`/api/v2/wallet/${params.walletId}/txrequests?txRequestIds=${params.txRequestId}&latest=true`);
    if (params.times !== undefined) {
        return n.times(params.times).reply(200, params.response);
    }
    return n.reply(200, params.response);
}
async function nockGetEnterprise(params) {
    const n = nock('https://bitgo.fakeurl').get(`/api/v1/enterprise/${params.enterpriseId}`);
    if (params.times !== undefined) {
        return n.times(params.times).reply(200, params.response);
    }
    return n.reply(200, params.response);
}
async function nockGetChallenges(params) {
    return nock('https://bitgo.fakeurl')
        .get('/api/v2/wallet/' + params.walletId + '/challenges')
        .reply(200, params.response);
}
async function nockGetChallenge(params) {
    const n = nock('https://bitgo.fakeurl').post('/api/v2/wallet/' + params.walletId + '/txrequests/' + params.txRequestId + params.addendum + '/challenge');
    if (params.times !== undefined) {
        return n.times(params.times).reply(200, params.response);
    }
    return n.reply(200, params.response);
}
async function nockGetSigningKey(params) {
    const path = `/api/v2/enterprise/${params.enterpriseId}/user/${params.userId}/signingkey`;
    const n = nock('https://bitgo.fakeurl').get(path);
    if (params.times !== undefined) {
        return n.times(params.times).reply(200, params.response);
    }
    return n.reply(200, params.response);
}
async function createWalletSignatures(privateKeyArmored, publicKeyToCertArmoredUser, publicKeyToCertArmoredBackup, notations) {
    const userWalletSigArmored = await (0, sdk_core_1.createSharedDataProof)(privateKeyArmored, publicKeyToCertArmoredUser, notations);
    const backupWalletSigArmored = await (0, sdk_core_1.createSharedDataProof)(privateKeyArmored, publicKeyToCertArmoredBackup, notations);
    const certsUserKey = await openpgp.readKey({ armoredKey: userWalletSigArmored });
    const certsBackupKey = await openpgp.readKey({ armoredKey: backupWalletSigArmored });
    const mergedWalletKeys = new openpgp.PacketList();
    certsUserKey.toPacketList().forEach((packet) => mergedWalletKeys.push(packet));
    certsBackupKey.toPacketList().forEach((packet) => mergedWalletKeys.push(packet));
    // the underlying function only requires two arguments but the according .d.ts file for openpgp has the further
    // arguments marked as mandatory as well.
    // Once the following PR has been merged and released we no longer need the ts-ignore:
    // https://github.com/openpgpjs/openpgpjs/pull/1576
    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    // @ts-ignore
    return openpgp.armor(openpgp.enums.armor.publicKey, mergedWalletKeys.write());
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdjIvdW5pdC90c3MvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLHdEQXdCQztBQUVELDRDQWFDO0FBQ0QsOENBVUM7QUFFRCw4Q0FJQztBQUVELDRDQWNDO0FBRUQsOENBWUM7QUFDRCx3REEyQkM7QUF2SEQsbUNBQW1DO0FBQ25DLDhDQUE4RTtBQUM5RSx3REFBdUQ7QUFDdkQsNkJBQTZCO0FBRXRCLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsTUFPQyxFQUNELE1BQU0sR0FBRyxHQUFHO0lBRVosTUFBTSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3hELE1BQU0sWUFBWSxHQUFHLElBQUEsaUJBQVEsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxNQUFNLFdBQVcsR0FBRyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUVyRyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztTQUNqQyxJQUFJLENBQ0gsa0JBQWtCLE1BQU0sQ0FBQyxRQUFRLGVBQWUsTUFBTSxDQUFDLFdBQVcsR0FBRyxZQUFZLGtCQUFrQixFQUNuRyxXQUFXLENBQ1o7U0FDQSxLQUFLLENBQ0osTUFBTSxFQUNOLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FDdkcsQ0FBQztBQUNOLENBQUM7QUFFTSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsTUFLdEM7SUFD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QztJQUU1QyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sSUFBQSxnQ0FBcUIsRUFBQyxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNuSCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sSUFBQSxnQ0FBcUIsRUFDeEQsaUJBQWlCLEVBQ2pCLDRCQUE0QixFQUM1QixTQUFTLENBQ1YsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFDakYsTUFBTSxjQUFjLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUVyRixNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9FLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWpGLCtHQUErRztJQUMvRyx5Q0FBeUM7SUFDekMsc0ZBQXNGO0lBQ3RGLG1EQUFtRDtJQUNuRCw2REFBNkQ7SUFDN0QsYUFBYTtJQUNiLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3BlbnBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IGNyZWF0ZVNoYXJlZERhdGFQcm9vZiwgU2lnbmF0dXJlU2hhcmVSZWNvcmQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgZ2V0Um91dGUgfSBmcm9tICcuLi9pbnRlcm5hbC90c3NVdGlscy9jb21tb24nO1xuaW1wb3J0ICogYXMgbm9jayBmcm9tICdub2NrJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5vY2tTZW5kU2lnbmF0dXJlU2hhcmUoXG4gIHBhcmFtczoge1xuICAgIHdhbGxldElkOiBzdHJpbmc7XG4gICAgdHhSZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBzaWduYXR1cmVTaGFyZTogYW55O1xuICAgIHNpZ25lclNoYXJlPzogc3RyaW5nO1xuICAgIHJlc3BvbnNlPzogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gICAgdHNzVHlwZT86ICdlY2RzYScgfCAnZWRkc2EnO1xuICB9LFxuICBzdGF0dXMgPSAyMDBcbik6IFByb21pc2U8bm9jay5TY29wZT4ge1xuICBjb25zdCB7IHNpZ25hdHVyZVNoYXJlLCBzaWduZXJTaGFyZSwgdHNzVHlwZSB9ID0gcGFyYW1zO1xuICBjb25zdCB0cmFuc2FjdGlvbnMgPSBnZXRSb3V0ZSh0c3NUeXBlKTtcbiAgY29uc3QgcmVxdWVzdEJvZHkgPSBzaWduZXJTaGFyZSA9PT0gdW5kZWZpbmVkID8geyBzaWduYXR1cmVTaGFyZSB9IDogeyBzaWduYXR1cmVTaGFyZSwgc2lnbmVyU2hhcmUgfTtcblxuICByZXR1cm4gbm9jaygnaHR0cHM6Ly9iaXRnby5mYWtldXJsJylcbiAgICAucG9zdChcbiAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3BhcmFtcy53YWxsZXRJZH0vdHhyZXF1ZXN0cy8ke3BhcmFtcy50eFJlcXVlc3RJZCArIHRyYW5zYWN0aW9uc30vc2lnbmF0dXJlc2hhcmVzYCxcbiAgICAgIHJlcXVlc3RCb2R5XG4gICAgKVxuICAgIC5yZXBseShcbiAgICAgIHN0YXR1cyxcbiAgICAgIHN0YXR1cyA9PT0gMjAwID8gKHBhcmFtcy5yZXNwb25zZSA/IHBhcmFtcy5yZXNwb25zZSA6IHBhcmFtcy5zaWduYXR1cmVTaGFyZSkgOiB7IGVycm9yOiAnc29tZSBlcnJvcicgfVxuICAgICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub2NrR2V0VHhSZXF1ZXN0KHBhcmFtczoge1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICB0eFJlcXVlc3RJZDogc3RyaW5nO1xuICByZXNwb25zZTogYW55O1xuICB0aW1lcz86IG51bWJlcjtcbn0pOiBQcm9taXNlPG5vY2suU2NvcGU+IHtcbiAgY29uc3QgbiA9IG5vY2soJ2h0dHBzOi8vYml0Z28uZmFrZXVybCcpLmdldChcbiAgICBgL2FwaS92Mi93YWxsZXQvJHtwYXJhbXMud2FsbGV0SWR9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7cGFyYW1zLnR4UmVxdWVzdElkfSZsYXRlc3Q9dHJ1ZWBcbiAgKTtcbiAgaWYgKHBhcmFtcy50aW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG4udGltZXMocGFyYW1zLnRpbWVzKS5yZXBseSgyMDAsIHBhcmFtcy5yZXNwb25zZSk7XG4gIH1cbiAgcmV0dXJuIG4ucmVwbHkoMjAwLCBwYXJhbXMucmVzcG9uc2UpO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5vY2tHZXRFbnRlcnByaXNlKHBhcmFtczoge1xuICBlbnRlcnByaXNlSWQ6IHN0cmluZztcbiAgcmVzcG9uc2U6IGFueTtcbiAgdGltZXM/OiBudW1iZXI7XG59KTogUHJvbWlzZTxub2NrLlNjb3BlPiB7XG4gIGNvbnN0IG4gPSBub2NrKCdodHRwczovL2JpdGdvLmZha2V1cmwnKS5nZXQoYC9hcGkvdjEvZW50ZXJwcmlzZS8ke3BhcmFtcy5lbnRlcnByaXNlSWR9YCk7XG4gIGlmIChwYXJhbXMudGltZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuLnRpbWVzKHBhcmFtcy50aW1lcykucmVwbHkoMjAwLCBwYXJhbXMucmVzcG9uc2UpO1xuICB9XG4gIHJldHVybiBuLnJlcGx5KDIwMCwgcGFyYW1zLnJlc3BvbnNlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5vY2tHZXRDaGFsbGVuZ2VzKHBhcmFtczogeyB3YWxsZXRJZDogc3RyaW5nOyByZXNwb25zZTogYW55IH0pOiBQcm9taXNlPG5vY2suU2NvcGU+IHtcbiAgcmV0dXJuIG5vY2soJ2h0dHBzOi8vYml0Z28uZmFrZXVybCcpXG4gICAgLmdldCgnL2FwaS92Mi93YWxsZXQvJyArIHBhcmFtcy53YWxsZXRJZCArICcvY2hhbGxlbmdlcycpXG4gICAgLnJlcGx5KDIwMCwgcGFyYW1zLnJlc3BvbnNlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5vY2tHZXRDaGFsbGVuZ2UocGFyYW1zOiB7XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIHR4UmVxdWVzdElkOiBzdHJpbmc7XG4gIGFkZGVuZHVtOiBzdHJpbmc7XG4gIHJlc3BvbnNlOiBhbnk7XG4gIHRpbWVzPzogbnVtYmVyO1xufSk6IFByb21pc2U8bm9jay5TY29wZT4ge1xuICBjb25zdCBuID0gbm9jaygnaHR0cHM6Ly9iaXRnby5mYWtldXJsJykucG9zdChcbiAgICAnL2FwaS92Mi93YWxsZXQvJyArIHBhcmFtcy53YWxsZXRJZCArICcvdHhyZXF1ZXN0cy8nICsgcGFyYW1zLnR4UmVxdWVzdElkICsgcGFyYW1zLmFkZGVuZHVtICsgJy9jaGFsbGVuZ2UnXG4gICk7XG4gIGlmIChwYXJhbXMudGltZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuLnRpbWVzKHBhcmFtcy50aW1lcykucmVwbHkoMjAwLCBwYXJhbXMucmVzcG9uc2UpO1xuICB9XG4gIHJldHVybiBuLnJlcGx5KDIwMCwgcGFyYW1zLnJlc3BvbnNlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5vY2tHZXRTaWduaW5nS2V5KHBhcmFtczoge1xuICBlbnRlcnByaXNlSWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHJlc3BvbnNlOiBhbnk7XG4gIHRpbWVzPzogbnVtYmVyO1xufSk6IFByb21pc2U8bm9jay5TY29wZT4ge1xuICBjb25zdCBwYXRoID0gYC9hcGkvdjIvZW50ZXJwcmlzZS8ke3BhcmFtcy5lbnRlcnByaXNlSWR9L3VzZXIvJHtwYXJhbXMudXNlcklkfS9zaWduaW5na2V5YDtcbiAgY29uc3QgbiA9IG5vY2soJ2h0dHBzOi8vYml0Z28uZmFrZXVybCcpLmdldChwYXRoKTtcbiAgaWYgKHBhcmFtcy50aW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG4udGltZXMocGFyYW1zLnRpbWVzKS5yZXBseSgyMDAsIHBhcmFtcy5yZXNwb25zZSk7XG4gIH1cbiAgcmV0dXJuIG4ucmVwbHkoMjAwLCBwYXJhbXMucmVzcG9uc2UpO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdhbGxldFNpZ25hdHVyZXMoXG4gIHByaXZhdGVLZXlBcm1vcmVkOiBzdHJpbmcsXG4gIHB1YmxpY0tleVRvQ2VydEFybW9yZWRVc2VyOiBzdHJpbmcsXG4gIHB1YmxpY0tleVRvQ2VydEFybW9yZWRCYWNrdXA6IHN0cmluZyxcbiAgbm90YXRpb25zOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W11cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHVzZXJXYWxsZXRTaWdBcm1vcmVkID0gYXdhaXQgY3JlYXRlU2hhcmVkRGF0YVByb29mKHByaXZhdGVLZXlBcm1vcmVkLCBwdWJsaWNLZXlUb0NlcnRBcm1vcmVkVXNlciwgbm90YXRpb25zKTtcbiAgY29uc3QgYmFja3VwV2FsbGV0U2lnQXJtb3JlZCA9IGF3YWl0IGNyZWF0ZVNoYXJlZERhdGFQcm9vZihcbiAgICBwcml2YXRlS2V5QXJtb3JlZCxcbiAgICBwdWJsaWNLZXlUb0NlcnRBcm1vcmVkQmFja3VwLFxuICAgIG5vdGF0aW9uc1xuICApO1xuXG4gIGNvbnN0IGNlcnRzVXNlcktleSA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHVzZXJXYWxsZXRTaWdBcm1vcmVkIH0pO1xuICBjb25zdCBjZXJ0c0JhY2t1cEtleSA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IGJhY2t1cFdhbGxldFNpZ0FybW9yZWQgfSk7XG5cbiAgY29uc3QgbWVyZ2VkV2FsbGV0S2V5cyA9IG5ldyBvcGVucGdwLlBhY2tldExpc3QoKTtcbiAgY2VydHNVc2VyS2V5LnRvUGFja2V0TGlzdCgpLmZvckVhY2goKHBhY2tldCkgPT4gbWVyZ2VkV2FsbGV0S2V5cy5wdXNoKHBhY2tldCkpO1xuICBjZXJ0c0JhY2t1cEtleS50b1BhY2tldExpc3QoKS5mb3JFYWNoKChwYWNrZXQpID0+IG1lcmdlZFdhbGxldEtleXMucHVzaChwYWNrZXQpKTtcblxuICAvLyB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvbmx5IHJlcXVpcmVzIHR3byBhcmd1bWVudHMgYnV0IHRoZSBhY2NvcmRpbmcgLmQudHMgZmlsZSBmb3Igb3BlbnBncCBoYXMgdGhlIGZ1cnRoZXJcbiAgLy8gYXJndW1lbnRzIG1hcmtlZCBhcyBtYW5kYXRvcnkgYXMgd2VsbC5cbiAgLy8gT25jZSB0aGUgZm9sbG93aW5nIFBSIGhhcyBiZWVuIG1lcmdlZCBhbmQgcmVsZWFzZWQgd2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIHRzLWlnbm9yZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5wZ3Bqcy9vcGVucGdwanMvcHVsbC8xNTc2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICByZXR1cm4gb3BlbnBncC5hcm1vcihvcGVucGdwLmVudW1zLmFybW9yLnB1YmxpY0tleSwgbWVyZ2VkV2FsbGV0S2V5cy53cml0ZSgpKTtcbn1cbiJdfQ==

Выполнить команду


Для локальной разработки. Не используйте в интернете!