UNPKG

bitcore-tss

Version:

Bitcore Library for Threshold Signature Schemes

75 lines (69 loc) 2.58 kB
const { DklsComms: MpcDklsComms } = require('@bitgo/sdk-lib-mpc'); const utils = require('./utils'); const _DklsComms = {}; // @overrides _DklsComms.encryptAndAuthOutgoingMessages = function encryptAndAuthOutgoingMessages(messages, pubKeys, authKey) { return { p2pMessages: messages.p2pMessages.map((m) => { const partyPubKey = pubKeys.find((k) => k.partyId === m.to); if (!partyPubKey) { throw Error(`No public key provided for recipient with ID: ${m.to}`); } if (!authKey) { throw Error(`No private key provided for sender with ID: ${m.from}`); } return { to: m.to, from: m.from, payload: utils.encryptAndDetachSignData(Buffer.from(m.payload, 'base64'), partyPubKey.publicKey, authKey), commitment: m.commitment, }; }), broadcastMessages: messages.broadcastMessages.map((m) => { if (!authKey) { throw Error(`No private key provided for sender with ID: ${m.from}`); } return { from: m.from, payload: utils.detachSignData(Buffer.from(m.payload, 'base64'), authKey), signatureR: m.signatureR ? { message: m.signatureR, signature: '' } : undefined, }; }), }; }; // @overrides _DklsComms.decryptAndVerifyIncomingMessages = function decryptAndVerifyIncomingMessages(messages, authKey) { return { p2pMessages: messages.flatMap((m) => { const partyPubKey = m.publicKey; if (!partyPubKey) { throw Error(`No public key provided for sender with ID: ${m.from}`); } if (!authKey) { throw Error(`No private key provided for recepient with ID: ${m.to}`); } return m.p2pMessages.map((p2pMessage) => ({ to: p2pMessage.to, from: p2pMessage.from, payload: utils.decryptAndVerifySignedData(p2pMessage.payload, partyPubKey, authKey), commitment: p2pMessage.commitment, })); }), broadcastMessages: messages.flatMap((m) => { const partyPubKey = m.publicKey; if (!partyPubKey) { throw Error(`No public key provided for sender with ID: ${m.from}`); } return m.broadcastMessages.map((broadcastMessage) => { if (!utils.verifySignedData(broadcastMessage.payload, partyPubKey)) { throw Error(`Failed to authenticate broadcast message from party: ${m.from}`); } return { from: broadcastMessage.from, payload: broadcastMessage.payload.message }; }); }), }; }; module.exports.DklsComms = Object.assign({}, MpcDklsComms, _DklsComms);