Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MR414N-ID
GitHub Repository: MR414N-ID/botku2
Path: blob/master/node_modules/@adiwajshing/baileys/WASignalGroup/sender_key_state.js
1126 views
1
const SenderChainKey = require('./sender_chain_key');
2
const SenderMessageKey = require('./sender_message_key');
3
4
const protobufs = require('./protobufs');
5
6
class SenderKeyState {
7
MAX_MESSAGE_KEYS = 2000;
8
9
constructor(
10
id = null,
11
iteration = null,
12
chainKey = null,
13
signatureKeyPair = null,
14
signatureKeyPublic = null,
15
signatureKeyPrivate = null,
16
senderKeyStateStructure = null
17
) {
18
if (senderKeyStateStructure) {
19
this.senderKeyStateStructure = senderKeyStateStructure;
20
} else {
21
if (signatureKeyPair) {
22
signatureKeyPublic = signatureKeyPair.public;
23
signatureKeyPrivate = signatureKeyPair.private;
24
}
25
26
chainKey = typeof chainKey === 'string' ? Buffer.from(chainKey, 'base64') : chainKey;
27
this.senderKeyStateStructure = protobufs.SenderKeyStateStructure.create();
28
const senderChainKeyStructure = protobufs.SenderChainKey.create();
29
senderChainKeyStructure.iteration = iteration;
30
senderChainKeyStructure.seed = chainKey;
31
this.senderKeyStateStructure.senderChainKey = senderChainKeyStructure;
32
33
const signingKeyStructure = protobufs.SenderSigningKey.create();
34
signingKeyStructure.public =
35
typeof signatureKeyPublic === 'string' ?
36
Buffer.from(signatureKeyPublic, 'base64') :
37
signatureKeyPublic;
38
if (signatureKeyPrivate) {
39
signingKeyStructure.private =
40
typeof signatureKeyPrivate === 'string' ?
41
Buffer.from(signatureKeyPrivate, 'base64') :
42
signatureKeyPrivate;
43
}
44
this.senderKeyStateStructure.senderKeyId = id;
45
this.senderChainKey = senderChainKeyStructure;
46
this.senderKeyStateStructure.senderSigningKey = signingKeyStructure;
47
}
48
this.senderKeyStateStructure.senderMessageKeys =
49
this.senderKeyStateStructure.senderMessageKeys || [];
50
}
51
52
SenderKeyState(senderKeyStateStructure) {
53
this.senderKeyStateStructure = senderKeyStateStructure;
54
}
55
56
getKeyId() {
57
return this.senderKeyStateStructure.senderKeyId;
58
}
59
60
getSenderChainKey() {
61
return new SenderChainKey(
62
this.senderKeyStateStructure.senderChainKey.iteration,
63
this.senderKeyStateStructure.senderChainKey.seed
64
);
65
}
66
67
setSenderChainKey(chainKey) {
68
const senderChainKeyStructure = protobufs.SenderChainKey.create({
69
iteration: chainKey.getIteration(),
70
seed: chainKey.getSeed(),
71
});
72
this.senderKeyStateStructure.senderChainKey = senderChainKeyStructure;
73
}
74
75
getSigningKeyPublic() {
76
return typeof this.senderKeyStateStructure.senderSigningKey.public === 'string' ?
77
Buffer.from(this.senderKeyStateStructure.senderSigningKey.public, 'base64') :
78
this.senderKeyStateStructure.senderSigningKey.public;
79
}
80
81
getSigningKeyPrivate() {
82
return typeof this.senderKeyStateStructure.senderSigningKey.private === 'string' ?
83
Buffer.from(this.senderKeyStateStructure.senderSigningKey.private, 'base64') :
84
this.senderKeyStateStructure.senderSigningKey.private;
85
}
86
87
hasSenderMessageKey(iteration) {
88
const list = this.senderKeyStateStructure.senderMessageKeys;
89
for (let o = 0; o < list.length; o++) {
90
const senderMessageKey = list[o];
91
if (senderMessageKey.iteration === iteration) return true;
92
}
93
return false;
94
}
95
96
addSenderMessageKey(senderMessageKey) {
97
const senderMessageKeyStructure = protobufs.SenderKeyStateStructure.create({
98
iteration: senderMessageKey.getIteration(),
99
seed: senderMessageKey.getSeed(),
100
});
101
this.senderKeyStateStructure.senderMessageKeys.push(senderMessageKeyStructure);
102
103
if (this.senderKeyStateStructure.senderMessageKeys.length > this.MAX_MESSAGE_KEYS) {
104
this.senderKeyStateStructure.senderMessageKeys.shift();
105
}
106
}
107
108
removeSenderMessageKey(iteration) {
109
let result = null;
110
111
this.senderKeyStateStructure.senderMessageKeys = this.senderKeyStateStructure.senderMessageKeys.filter(
112
senderMessageKey => {
113
if (senderMessageKey.iteration === iteration) result = senderMessageKey;
114
return senderMessageKey.iteration !== iteration;
115
}
116
);
117
118
if (result != null) {
119
return new SenderMessageKey(result.iteration, result.seed);
120
}
121
return null;
122
}
123
124
getStructure() {
125
return this.senderKeyStateStructure;
126
}
127
}
128
129
module.exports = SenderKeyState;
130