UNPKG

web3-eea

Version:
54 lines (48 loc) 1.58 kB
/* * Copyright ConsenSys Software Inc. * * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. * If a copy of the MPL was not distributed with this file, You can obtain one at * * http://mozilla.org/MPL/2.0/ * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * * SPDX-License-Identifier: MPL-2.0 */ const RLP = require("rlp"); const _ = require("lodash"); const { keccak256 } = require("./custom-ethjs-util"); /** * Generate a privacyGroupId * @param options Options passed into `eea_sendRawTransaction` * @returns String */ const generatePrivacyGroup = options => { const participants = _.chain(options.privateFor || []) .concat(options.privateFrom) .uniq() .map(publicKey => { const buffer = Buffer.from(publicKey, "base64"); let result = 1; buffer.forEach(value => { // eslint-disable-next-line no-bitwise result = (31 * result + ((value << 24) >> 24)) & 0xffffffff; }); return { b64: publicKey, buf: buffer, hash: result }; }) .sort((a, b) => { return a.hash - b.hash; }) .map(x => { return x.buf; }) .value(); const rlp = RLP.encode(participants); return Buffer.from(keccak256(rlp)).toString("base64"); }; module.exports = { generatePrivacyGroup };