Path: blob/master/node_modules/@adiwajshing/baileys/WASignalGroup/sender_key_state.js
1126 views
const SenderChainKey = require('./sender_chain_key');1const SenderMessageKey = require('./sender_message_key');23const protobufs = require('./protobufs');45class SenderKeyState {6MAX_MESSAGE_KEYS = 2000;78constructor(9id = null,10iteration = null,11chainKey = null,12signatureKeyPair = null,13signatureKeyPublic = null,14signatureKeyPrivate = null,15senderKeyStateStructure = null16) {17if (senderKeyStateStructure) {18this.senderKeyStateStructure = senderKeyStateStructure;19} else {20if (signatureKeyPair) {21signatureKeyPublic = signatureKeyPair.public;22signatureKeyPrivate = signatureKeyPair.private;23}2425chainKey = typeof chainKey === 'string' ? Buffer.from(chainKey, 'base64') : chainKey;26this.senderKeyStateStructure = protobufs.SenderKeyStateStructure.create();27const senderChainKeyStructure = protobufs.SenderChainKey.create();28senderChainKeyStructure.iteration = iteration;29senderChainKeyStructure.seed = chainKey;30this.senderKeyStateStructure.senderChainKey = senderChainKeyStructure;3132const signingKeyStructure = protobufs.SenderSigningKey.create();33signingKeyStructure.public =34typeof signatureKeyPublic === 'string' ?35Buffer.from(signatureKeyPublic, 'base64') :36signatureKeyPublic;37if (signatureKeyPrivate) {38signingKeyStructure.private =39typeof signatureKeyPrivate === 'string' ?40Buffer.from(signatureKeyPrivate, 'base64') :41signatureKeyPrivate;42}43this.senderKeyStateStructure.senderKeyId = id;44this.senderChainKey = senderChainKeyStructure;45this.senderKeyStateStructure.senderSigningKey = signingKeyStructure;46}47this.senderKeyStateStructure.senderMessageKeys =48this.senderKeyStateStructure.senderMessageKeys || [];49}5051SenderKeyState(senderKeyStateStructure) {52this.senderKeyStateStructure = senderKeyStateStructure;53}5455getKeyId() {56return this.senderKeyStateStructure.senderKeyId;57}5859getSenderChainKey() {60return new SenderChainKey(61this.senderKeyStateStructure.senderChainKey.iteration,62this.senderKeyStateStructure.senderChainKey.seed63);64}6566setSenderChainKey(chainKey) {67const senderChainKeyStructure = protobufs.SenderChainKey.create({68iteration: chainKey.getIteration(),69seed: chainKey.getSeed(),70});71this.senderKeyStateStructure.senderChainKey = senderChainKeyStructure;72}7374getSigningKeyPublic() {75return typeof this.senderKeyStateStructure.senderSigningKey.public === 'string' ?76Buffer.from(this.senderKeyStateStructure.senderSigningKey.public, 'base64') :77this.senderKeyStateStructure.senderSigningKey.public;78}7980getSigningKeyPrivate() {81return typeof this.senderKeyStateStructure.senderSigningKey.private === 'string' ?82Buffer.from(this.senderKeyStateStructure.senderSigningKey.private, 'base64') :83this.senderKeyStateStructure.senderSigningKey.private;84}8586hasSenderMessageKey(iteration) {87const list = this.senderKeyStateStructure.senderMessageKeys;88for (let o = 0; o < list.length; o++) {89const senderMessageKey = list[o];90if (senderMessageKey.iteration === iteration) return true;91}92return false;93}9495addSenderMessageKey(senderMessageKey) {96const senderMessageKeyStructure = protobufs.SenderKeyStateStructure.create({97iteration: senderMessageKey.getIteration(),98seed: senderMessageKey.getSeed(),99});100this.senderKeyStateStructure.senderMessageKeys.push(senderMessageKeyStructure);101102if (this.senderKeyStateStructure.senderMessageKeys.length > this.MAX_MESSAGE_KEYS) {103this.senderKeyStateStructure.senderMessageKeys.shift();104}105}106107removeSenderMessageKey(iteration) {108let result = null;109110this.senderKeyStateStructure.senderMessageKeys = this.senderKeyStateStructure.senderMessageKeys.filter(111senderMessageKey => {112if (senderMessageKey.iteration === iteration) result = senderMessageKey;113return senderMessageKey.iteration !== iteration;114}115);116117if (result != null) {118return new SenderMessageKey(result.iteration, result.seed);119}120return null;121}122123getStructure() {124return this.senderKeyStateStructure;125}126}127128module.exports = SenderKeyState;129130