Path: blob/master/node_modules/@adiwajshing/baileys/WASignalGroup/sender_key_message.js
1126 views
const CiphertextMessage = require('./ciphertext_message');1const curve = require('libsignal/src/curve');2const protobufs = require('./protobufs');34class SenderKeyMessage extends CiphertextMessage {5SIGNATURE_LENGTH = 64;67constructor(8keyId = null,9iteration = null,10ciphertext = null,11signatureKey = null,12serialized = null13) {14super();15if (serialized) {16const version = serialized[0];17const message = serialized.slice(1, serialized.length - this.SIGNATURE_LENGTH);18const signature = serialized.slice(-1 * this.SIGNATURE_LENGTH);19const senderKeyMessage = protobufs.SenderKeyMessage.decode(message).toJSON();20senderKeyMessage.ciphertext = Buffer.from(senderKeyMessage.ciphertext, 'base64');2122this.serialized = serialized;23this.messageVersion = (version & 0xff) >> 4;2425this.keyId = senderKeyMessage.id;26this.iteration = senderKeyMessage.iteration;27this.ciphertext = senderKeyMessage.ciphertext;28this.signature = signature;29} else {30const version = (((this.CURRENT_VERSION << 4) | this.CURRENT_VERSION) & 0xff) % 256;31ciphertext = Buffer.from(ciphertext); // .toString('base64');32const message = protobufs.SenderKeyMessage.encode(33protobufs.SenderKeyMessage.create({34id: keyId,35iteration,36ciphertext,37})38).finish();3940const signature = this.getSignature(41signatureKey,42Buffer.concat([Buffer.from([version]), message])43);44this.serialized = Buffer.concat([Buffer.from([version]), message, Buffer.from(signature)]);45this.messageVersion = this.CURRENT_VERSION;46this.keyId = keyId;47this.iteration = iteration;48this.ciphertext = ciphertext;49this.signature = signature;50}51}5253getKeyId() {54return this.keyId;55}5657getIteration() {58return this.iteration;59}6061getCipherText() {62return this.ciphertext;63}6465verifySignature(signatureKey) {66const part1 = this.serialized.slice(0, this.serialized.length - this.SIGNATURE_LENGTH + 1);67const part2 = this.serialized.slice(-1 * this.SIGNATURE_LENGTH);68const res = curve.verifySignature(signatureKey, part1, part2);69if (!res) throw new Error('Invalid signature!');70}7172getSignature(signatureKey, serialized) {73const signature = Buffer.from(74curve.calculateSignature(75signatureKey,76serialized77)78);79return signature;80}8182serialize() {83return this.serialized;84}8586getType() {87return 4;88}89}9091module.exports = SenderKeyMessage;9293