@badzz88/baileys 8.5.7 → 8.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +337 -1055
  2. package/WAProto/WAProto.proto +284 -264
  3. package/WAProto/index.js +5 -5
  4. package/engine-requirements.js +7 -15
  5. package/lib/Defaults/index.js +130 -187
  6. package/lib/Signal/Group/ciphertext-message.js +11 -14
  7. package/lib/Signal/Group/group-session-builder.js +29 -91
  8. package/lib/Signal/Group/group_cipher.js +81 -88
  9. package/lib/Signal/Group/index.js +12 -136
  10. package/lib/Signal/Group/keyhelper.js +15 -70
  11. package/lib/Signal/Group/sender-chain-key.js +25 -31
  12. package/lib/Signal/Group/sender-key-distribution-message.js +62 -65
  13. package/lib/Signal/Group/sender-key-message.js +65 -68
  14. package/lib/Signal/Group/sender-key-name.js +41 -43
  15. package/lib/Signal/Group/sender-key-record.js +40 -43
  16. package/lib/Signal/Group/sender-key-state.js +83 -96
  17. package/lib/Signal/Group/sender-message-key.js +25 -29
  18. package/lib/Signal/libsignal.js +425 -453
  19. package/lib/Signal/lid-mapping.js +276 -259
  20. package/lib/Socket/Client/index.js +3 -30
  21. package/lib/Socket/Client/types.js +10 -12
  22. package/lib/Socket/Client/websocket.js +53 -61
  23. package/lib/Socket/business.js +379 -422
  24. package/lib/Socket/chats.js +1193 -1816
  25. package/lib/Socket/communities.js +431 -549
  26. package/lib/Socket/graphql.js +672 -612
  27. package/lib/Socket/groups.js +374 -764
  28. package/lib/Socket/index.js +17 -38
  29. package/lib/Socket/interop.js +417 -503
  30. package/lib/Socket/messages-recv.js +1915 -2441
  31. package/lib/Socket/messages-send.js +1213 -1630
  32. package/lib/Socket/mex.js +9 -15
  33. package/lib/Socket/newsletter.js +747 -808
  34. package/lib/Socket/privacy.js +310 -441
  35. package/lib/Socket/socket.js +1025 -1022
  36. package/lib/Socket/username.js +8 -15
  37. package/lib/Store/index.js +10 -36
  38. package/lib/Store/make-cache-manager-store.js +80 -85
  39. package/lib/Store/make-in-memory-store.js +231 -591
  40. package/lib/Store/make-ordered-dictionary.js +72 -78
  41. package/lib/Store/object-repository.js +28 -25
  42. package/lib/Types/Auth.js +2 -38
  43. package/lib/Types/Bussines.js +2 -2
  44. package/lib/Types/Call.js +2 -2
  45. package/lib/Types/Chat.js +8 -4
  46. package/lib/Types/Contact.js +2 -2
  47. package/lib/Types/Events.js +2 -2
  48. package/lib/Types/GroupMetadata.js +2 -2
  49. package/lib/Types/Label.js +24 -26
  50. package/lib/Types/LabelAssociation.js +6 -8
  51. package/lib/Types/Message.js +11 -95
  52. package/lib/Types/Mex.js +111 -112
  53. package/lib/Types/Product.js +2 -2
  54. package/lib/Types/Signal.js +2 -2
  55. package/lib/Types/Socket.js +3 -2
  56. package/lib/Types/State.js +56 -70
  57. package/lib/Types/USync.js +2 -2
  58. package/lib/Types/index.js +26 -55
  59. package/lib/Utils/auth-utils.js +288 -292
  60. package/lib/Utils/browser-utils.js +47 -113
  61. package/lib/Utils/business.js +224 -240
  62. package/lib/Utils/chat-utils.js +869 -1205
  63. package/lib/Utils/companion-reg-client-utils.js +34 -41
  64. package/lib/Utils/crypto.js +107 -144
  65. package/lib/Utils/decode-wa-message.js +308 -518
  66. package/lib/Utils/event-buffer.js +611 -596
  67. package/lib/Utils/generics.js +355 -515
  68. package/lib/Utils/history.js +134 -244
  69. package/lib/Utils/identity-change-handler.js +49 -51
  70. package/lib/Utils/index.js +23 -57
  71. package/lib/Utils/link-preview.js +77 -135
  72. package/lib/Utils/logger.js +3 -9
  73. package/lib/Utils/lt-hash.js +6 -37
  74. package/lib/Utils/make-mutex.js +33 -36
  75. package/lib/Utils/message-composer.js +233 -439
  76. package/lib/Utils/message-retry-manager.js +260 -265
  77. package/lib/Utils/messages-media.js +829 -855
  78. package/lib/Utils/messages.js +961 -2528
  79. package/lib/Utils/noise-handler.js +200 -195
  80. package/lib/Utils/offline-node-processor.js +33 -35
  81. package/lib/Utils/pre-key-manager.js +102 -103
  82. package/lib/Utils/process-message.js +560 -978
  83. package/lib/Utils/reporting-utils.js +253 -257
  84. package/lib/Utils/signal.js +195 -218
  85. package/lib/Utils/stanza-ack.js +29 -31
  86. package/lib/Utils/sticker.js +109 -144
  87. package/lib/Utils/sync-action-utils.js +45 -50
  88. package/lib/Utils/tc-token-utils.js +139 -137
  89. package/lib/Utils/use-multi-file-auth-state.js +109 -109
  90. package/lib/Utils/validate-connection.js +202 -218
  91. package/lib/WABinary/constants.js +1299 -1302
  92. package/lib/WABinary/decode.js +262 -343
  93. package/lib/WABinary/encode.js +4 -12
  94. package/lib/WABinary/generic-utils.js +187 -223
  95. package/lib/WABinary/index.js +6 -33
  96. package/lib/WABinary/jid-utils.js +88 -351
  97. package/lib/WABinary/types.js +2 -2
  98. package/lib/WAM/BinaryInfo.js +9 -12
  99. package/lib/WAM/constants.js +22853 -39486
  100. package/lib/WAM/encode.js +140 -132
  101. package/lib/WAM/index.js +4 -31
  102. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +21 -23
  103. package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +9 -9
  104. package/lib/WAUSync/Protocols/USyncContactProtocol.js +7 -7
  105. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +10 -10
  106. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +7 -7
  107. package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +11 -12
  108. package/lib/WAUSync/Protocols/USyncLIDProtocol.js +4 -5
  109. package/lib/WAUSync/Protocols/USyncPictureProtocol.js +7 -7
  110. package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +7 -8
  111. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +7 -7
  112. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +8 -8
  113. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +7 -7
  114. package/lib/WAUSync/Protocols/index.js +12 -39
  115. package/lib/WAUSync/USyncQuery.js +67 -49
  116. package/lib/WAUSync/USyncUser.js +11 -5
  117. package/lib/WAUSync/index.js +3 -31
  118. package/lib/index.js +15 -48
  119. package/package.json +129 -99
  120. package/LICENSE +0 -21
  121. package/lib/Defaults/phonenumber-mcc.json +0 -223
  122. package/lib/Socket/aigroups.js +0 -240
  123. package/lib/Socket/interactive-handler.js +0 -522
  124. package/lib/Socket/managed-account.js +0 -183
  125. package/lib/Socket/registration.js +0 -427
  126. package/lib/Socket/text-router.js +0 -83
  127. package/lib/Types/Newsletter.js +0 -121
  128. package/lib/Utils/command-loader.d.ts +0 -31
  129. package/lib/Utils/command-loader.js +0 -100
  130. package/lib/Utils/consumer-application.js +0 -107
  131. package/lib/Utils/curve25519-js.js +0 -275
  132. package/lib/Utils/group-history.js +0 -60
  133. package/lib/Utils/jid-display-normalization.js +0 -218
  134. package/lib/Utils/meta-ai-msmsg.js +0 -262
  135. package/lib/Utils/native-bridge.js +0 -82
  136. package/lib/Utils/session-pool.d.ts +0 -16
  137. package/lib/Utils/session-pool.js +0 -94
  138. package/lib/Utils/sticker.d.ts +0 -17
  139. package/lib/Utils/view-once-cache.d.ts +0 -9
  140. package/lib/Utils/view-once-cache.js +0 -79
  141. package/lib/Utils/voip-rekey.js +0 -22
  142. package/lib/antiban.js +0 -4637
@@ -1,69 +1,66 @@
1
- 'use strict'
2
- Object.defineProperty(exports, '__esModule', { value: true })
3
- exports.SenderKeyMessage = void 0
4
- const Crypto_1 = require('../../Utils/crypto')
5
- const index_js_1 = require('../../../WAProto/index.js')
6
- const ciphertext_message_1 = require('./ciphertext-message')
7
- class SenderKeyMessage extends ciphertext_message_1.CiphertextMessage {
8
- constructor(keyId, iteration, ciphertext, signatureKey, serialized) {
9
- super()
10
- this.SIGNATURE_LENGTH = 64
11
- if (serialized) {
12
- const version = serialized[0]
13
- const message = serialized.slice(1, serialized.length - this.SIGNATURE_LENGTH)
14
- const signature = serialized.slice(-1 * this.SIGNATURE_LENGTH)
15
- const senderKeyMessage = index_js_1.proto.SenderKeyMessage.decode(message).toJSON()
16
- this.serialized = serialized
17
- this.messageVersion = (version & 0xff) >> 4
18
- this.keyId = senderKeyMessage.id
19
- this.iteration = senderKeyMessage.iteration
20
- this.ciphertext =
21
- typeof senderKeyMessage.ciphertext === 'string'
22
- ? Buffer.from(senderKeyMessage.ciphertext, 'base64')
23
- : senderKeyMessage.ciphertext
24
- this.signature = signature
25
- } else {
26
- const version = (((this.CURRENT_VERSION << 4) | this.CURRENT_VERSION) & 0xff) % 256
27
- const ciphertextBuffer = Buffer.from(ciphertext)
28
- const message = index_js_1.proto.SenderKeyMessage.encode(
29
- index_js_1.proto.SenderKeyMessage.create({
30
- id: keyId,
31
- iteration: iteration,
32
- ciphertext: ciphertextBuffer
33
- })
34
- ).finish()
35
- const signature = this.getSignature(signatureKey, Buffer.concat([Buffer.from([version]), message]))
36
- this.serialized = Buffer.concat([Buffer.from([version]), message, Buffer.from(signature)])
37
- this.messageVersion = this.CURRENT_VERSION
38
- this.keyId = keyId
39
- this.iteration = iteration
40
- this.ciphertext = ciphertextBuffer
41
- this.signature = signature
42
- }
43
- }
44
- getKeyId() {
45
- return this.keyId
46
- }
47
- getIteration() {
48
- return this.iteration
49
- }
50
- getCipherText() {
51
- return this.ciphertext
52
- }
53
- verifySignature(signatureKey) {
54
- const part1 = this.serialized.slice(0, this.serialized.length - this.SIGNATURE_LENGTH)
55
- const part2 = this.serialized.slice(-1 * this.SIGNATURE_LENGTH)
56
- const res = Crypto_1.Curve.verify(signatureKey, part1, part2)
57
- if (!res) throw new Error('Invalid signature!')
58
- }
59
- getSignature(signatureKey, serialized) {
60
- return Buffer.from(Crypto_1.Curve.sign(signatureKey, serialized))
61
- }
62
- serialize() {
63
- return this.serialized
64
- }
65
- getType() {
66
- return 4
67
- }
1
+ import { calculateSignature, verifySignature } from 'libsignal/src/curve.js';
2
+ import { proto } from '../../../WAProto/index.js';
3
+ import { CiphertextMessage } from './ciphertext-message.js';
4
+ export class SenderKeyMessage extends CiphertextMessage {
5
+ constructor(keyId, iteration, ciphertext, signatureKey, serialized) {
6
+ super();
7
+ this.SIGNATURE_LENGTH = 64;
8
+ if (serialized) {
9
+ const version = serialized[0];
10
+ const message = serialized.slice(1, serialized.length - this.SIGNATURE_LENGTH);
11
+ const signature = serialized.slice(-1 * this.SIGNATURE_LENGTH);
12
+ const senderKeyMessage = proto.SenderKeyMessage.decode(message).toJSON();
13
+ this.serialized = serialized;
14
+ this.messageVersion = (version & 0xff) >> 4;
15
+ this.keyId = senderKeyMessage.id;
16
+ this.iteration = senderKeyMessage.iteration;
17
+ this.ciphertext =
18
+ typeof senderKeyMessage.ciphertext === 'string'
19
+ ? Buffer.from(senderKeyMessage.ciphertext, 'base64')
20
+ : senderKeyMessage.ciphertext;
21
+ this.signature = signature;
22
+ }
23
+ else {
24
+ const version = (((this.CURRENT_VERSION << 4) | this.CURRENT_VERSION) & 0xff) % 256;
25
+ const ciphertextBuffer = Buffer.from(ciphertext);
26
+ const message = proto.SenderKeyMessage.encode(proto.SenderKeyMessage.create({
27
+ id: keyId,
28
+ iteration: iteration,
29
+ ciphertext: ciphertextBuffer
30
+ })).finish();
31
+ const signature = this.getSignature(signatureKey, Buffer.concat([Buffer.from([version]), message]));
32
+ this.serialized = Buffer.concat([Buffer.from([version]), message, Buffer.from(signature)]);
33
+ this.messageVersion = this.CURRENT_VERSION;
34
+ this.keyId = keyId;
35
+ this.iteration = iteration;
36
+ this.ciphertext = ciphertextBuffer;
37
+ this.signature = signature;
38
+ }
39
+ }
40
+ getKeyId() {
41
+ return this.keyId;
42
+ }
43
+ getIteration() {
44
+ return this.iteration;
45
+ }
46
+ getCipherText() {
47
+ return this.ciphertext;
48
+ }
49
+ verifySignature(signatureKey) {
50
+ const part1 = this.serialized.slice(0, this.serialized.length - this.SIGNATURE_LENGTH);
51
+ const part2 = this.serialized.slice(-1 * this.SIGNATURE_LENGTH);
52
+ const res = verifySignature(signatureKey, part1, part2);
53
+ if (!res)
54
+ throw new Error('Invalid signature!');
55
+ }
56
+ getSignature(signatureKey, serialized) {
57
+ return Buffer.from(calculateSignature(signatureKey, serialized));
58
+ }
59
+ serialize() {
60
+ return this.serialized;
61
+ }
62
+ getType() {
63
+ return 4;
64
+ }
68
65
  }
69
- exports.SenderKeyMessage = SenderKeyMessage
66
+ //# sourceMappingURL=sender-key-message.js.map
@@ -1,50 +1,48 @@
1
- 'use strict'
2
- Object.defineProperty(exports, '__esModule', { value: true })
3
- exports.SenderKeyName = void 0
4
1
  function isNull(str) {
5
- return str === null || str === ''
2
+ return str === null || str === '';
6
3
  }
7
4
  function intValue(num) {
8
- const MAX_VALUE = 0x7fffffff
9
- const MIN_VALUE = -0x80000000
10
- if (num > MAX_VALUE || num < MIN_VALUE) {
11
- return num & 0xffffffff
12
- }
13
- return num
5
+ const MAX_VALUE = 0x7fffffff;
6
+ const MIN_VALUE = -0x80000000;
7
+ if (num > MAX_VALUE || num < MIN_VALUE) {
8
+ return num & 0xffffffff;
9
+ }
10
+ return num;
14
11
  }
15
12
  function hashCode(strKey) {
16
- let hash = 0
17
- if (!isNull(strKey)) {
18
- for (let i = 0; i < strKey.length; i++) {
19
- hash = hash * 31 + strKey.charCodeAt(i)
20
- hash = intValue(hash)
21
- }
22
- }
23
- return hash
13
+ let hash = 0;
14
+ if (!isNull(strKey)) {
15
+ for (let i = 0; i < strKey.length; i++) {
16
+ hash = hash * 31 + strKey.charCodeAt(i);
17
+ hash = intValue(hash);
18
+ }
19
+ }
20
+ return hash;
24
21
  }
25
- class SenderKeyName {
26
- constructor(groupId, sender) {
27
- this.groupId = groupId
28
- this.sender = sender
29
- }
30
- getGroupId() {
31
- return this.groupId
32
- }
33
- getSender() {
34
- return this.sender
35
- }
36
- serialize() {
37
- return `${this.groupId}::${this.sender.id}::${this.sender.deviceId}`
38
- }
39
- toString() {
40
- return this.serialize()
41
- }
42
- equals(other) {
43
- if (other === null) return false
44
- return this.groupId === other.groupId && this.sender.toString() === other.sender.toString()
45
- }
46
- hashCode() {
47
- return hashCode(this.groupId) ^ hashCode(this.sender.toString())
48
- }
22
+ export class SenderKeyName {
23
+ constructor(groupId, sender) {
24
+ this.groupId = groupId;
25
+ this.sender = sender;
26
+ }
27
+ getGroupId() {
28
+ return this.groupId;
29
+ }
30
+ getSender() {
31
+ return this.sender;
32
+ }
33
+ serialize() {
34
+ return `${this.groupId}::${this.sender.id}::${this.sender.deviceId}`;
35
+ }
36
+ toString() {
37
+ return this.serialize();
38
+ }
39
+ equals(other) {
40
+ if (other === null)
41
+ return false;
42
+ return this.groupId === other.groupId && this.sender.toString() === other.sender.toString();
43
+ }
44
+ hashCode() {
45
+ return hashCode(this.groupId) ^ hashCode(this.sender.toString());
46
+ }
49
47
  }
50
- exports.SenderKeyName = SenderKeyName
48
+ //# sourceMappingURL=sender-key-name.js.map
@@ -1,44 +1,41 @@
1
- 'use strict'
2
- Object.defineProperty(exports, '__esModule', { value: true })
3
- exports.SenderKeyRecord = void 0
4
- const generics_1 = require('../../Utils/generics')
5
- const sender_key_state_1 = require('./sender-key-state')
6
- class SenderKeyRecord {
7
- constructor(serialized) {
8
- this.MAX_STATES = 5
9
- this.senderKeyStates = []
10
- if (serialized) {
11
- for (const structure of serialized) {
12
- this.senderKeyStates.push(new sender_key_state_1.SenderKeyState(null, null, null, null, null, null, structure))
13
- }
14
- }
15
- }
16
- isEmpty() {
17
- return this.senderKeyStates.length === 0
18
- }
19
- getSenderKeyState(keyId) {
20
- if (keyId === undefined && this.senderKeyStates.length) {
21
- return this.senderKeyStates[this.senderKeyStates.length - 1]
22
- }
23
- return this.senderKeyStates.find(state => state.getKeyId() === keyId)
24
- }
25
- addSenderKeyState(id, iteration, chainKey, signatureKey) {
26
- this.senderKeyStates.push(new sender_key_state_1.SenderKeyState(id, iteration, chainKey, null, signatureKey))
27
- if (this.senderKeyStates.length > this.MAX_STATES) {
28
- this.senderKeyStates.shift()
29
- }
30
- }
31
- setSenderKeyState(id, iteration, chainKey, keyPair) {
32
- this.senderKeyStates.length = 0
33
- this.senderKeyStates.push(new sender_key_state_1.SenderKeyState(id, iteration, chainKey, keyPair))
34
- }
35
- serialize() {
36
- return this.senderKeyStates.map(state => state.getStructure())
37
- }
38
- static deserialize(data) {
39
- const str = Buffer.from(data).toString('utf-8')
40
- const parsed = JSON.parse(str, generics_1.BufferJSON.reviver)
41
- return new SenderKeyRecord(parsed)
42
- }
1
+ import { BufferJSON } from '../../Utils/generics.js';
2
+ import { SenderKeyState } from './sender-key-state.js';
3
+ export class SenderKeyRecord {
4
+ constructor(serialized) {
5
+ this.MAX_STATES = 5;
6
+ this.senderKeyStates = [];
7
+ if (serialized) {
8
+ for (const structure of serialized) {
9
+ this.senderKeyStates.push(new SenderKeyState(null, null, null, null, null, null, structure));
10
+ }
11
+ }
12
+ }
13
+ isEmpty() {
14
+ return this.senderKeyStates.length === 0;
15
+ }
16
+ getSenderKeyState(keyId) {
17
+ if (keyId === undefined && this.senderKeyStates.length) {
18
+ return this.senderKeyStates[this.senderKeyStates.length - 1];
19
+ }
20
+ return this.senderKeyStates.find(state => state.getKeyId() === keyId);
21
+ }
22
+ addSenderKeyState(id, iteration, chainKey, signatureKey) {
23
+ this.senderKeyStates.push(new SenderKeyState(id, iteration, chainKey, null, signatureKey));
24
+ if (this.senderKeyStates.length > this.MAX_STATES) {
25
+ this.senderKeyStates.shift();
26
+ }
27
+ }
28
+ setSenderKeyState(id, iteration, chainKey, keyPair) {
29
+ this.senderKeyStates.length = 0;
30
+ this.senderKeyStates.push(new SenderKeyState(id, iteration, chainKey, keyPair));
31
+ }
32
+ serialize() {
33
+ return this.senderKeyStates.map(state => state.getStructure());
34
+ }
35
+ static deserialize(data) {
36
+ const str = Buffer.from(data).toString('utf-8');
37
+ const parsed = JSON.parse(str, BufferJSON.reviver);
38
+ return new SenderKeyRecord(parsed);
39
+ }
43
40
  }
44
- exports.SenderKeyRecord = SenderKeyRecord
41
+ //# sourceMappingURL=sender-key-record.js.map
@@ -1,97 +1,84 @@
1
- 'use strict'
2
- Object.defineProperty(exports, '__esModule', { value: true })
3
- exports.SenderKeyState = void 0
4
- const sender_chain_key_1 = require('./sender-chain-key')
5
- const sender_message_key_1 = require('./sender-message-key')
6
- class SenderKeyState {
7
- constructor(
8
- id,
9
- iteration,
10
- chainKey,
11
- signatureKeyPair,
12
- signatureKeyPublic,
13
- signatureKeyPrivate,
14
- senderKeyStateStructure
15
- ) {
16
- this.MAX_MESSAGE_KEYS = 2000
17
- if (senderKeyStateStructure) {
18
- this.senderKeyStateStructure = {
19
- ...senderKeyStateStructure,
20
- senderMessageKeys: Array.isArray(senderKeyStateStructure.senderMessageKeys)
21
- ? senderKeyStateStructure.senderMessageKeys
22
- : []
23
- }
24
- } else {
25
- if (signatureKeyPair) {
26
- signatureKeyPublic = signatureKeyPair.public
27
- signatureKeyPrivate = signatureKeyPair.private
28
- }
29
- this.senderKeyStateStructure = {
30
- senderKeyId: id || 0,
31
- senderChainKey: {
32
- iteration: iteration || 0,
33
- seed: Buffer.from(chainKey || [])
34
- },
35
- senderSigningKey: {
36
- public: Buffer.from(signatureKeyPublic || []),
37
- private: Buffer.from(signatureKeyPrivate || [])
38
- },
39
- senderMessageKeys: []
40
- }
41
- }
42
- }
43
- getKeyId() {
44
- return this.senderKeyStateStructure.senderKeyId
45
- }
46
- getSenderChainKey() {
47
- return new sender_chain_key_1.SenderChainKey(
48
- this.senderKeyStateStructure.senderChainKey.iteration,
49
- this.senderKeyStateStructure.senderChainKey.seed
50
- )
51
- }
52
- setSenderChainKey(chainKey) {
53
- this.senderKeyStateStructure.senderChainKey = {
54
- iteration: chainKey.getIteration(),
55
- seed: chainKey.getSeed()
56
- }
57
- }
58
- getSigningKeyPublic() {
59
- const publicKey = Buffer.from(this.senderKeyStateStructure.senderSigningKey.public)
60
- if (publicKey.length === 32) {
61
- const fixed = Buffer.alloc(33)
62
- fixed[0] = 0x05
63
- publicKey.copy(fixed, 1)
64
- return fixed
65
- }
66
- return publicKey
67
- }
68
- getSigningKeyPrivate() {
69
- const privateKey = this.senderKeyStateStructure.senderSigningKey.private
70
- return Buffer.from(privateKey || [])
71
- }
72
- hasSenderMessageKey(iteration) {
73
- return this.senderKeyStateStructure.senderMessageKeys.some(key => key.iteration === iteration)
74
- }
75
- addSenderMessageKey(senderMessageKey) {
76
- this.senderKeyStateStructure.senderMessageKeys.push({
77
- iteration: senderMessageKey.getIteration(),
78
- seed: senderMessageKey.getSeed()
79
- })
80
- if (this.senderKeyStateStructure.senderMessageKeys.length > this.MAX_MESSAGE_KEYS) {
81
- this.senderKeyStateStructure.senderMessageKeys.shift()
82
- }
83
- }
84
- removeSenderMessageKey(iteration) {
85
- const index = this.senderKeyStateStructure.senderMessageKeys.findIndex(key => key.iteration === iteration)
86
- if (index !== -1) {
87
- const messageKey = this.senderKeyStateStructure.senderMessageKeys[index]
88
- this.senderKeyStateStructure.senderMessageKeys.splice(index, 1)
89
- return new sender_message_key_1.SenderMessageKey(messageKey.iteration, messageKey.seed)
90
- }
91
- return null
92
- }
93
- getStructure() {
94
- return this.senderKeyStateStructure
95
- }
1
+ import { SenderChainKey } from './sender-chain-key.js';
2
+ import { SenderMessageKey } from './sender-message-key.js';
3
+ export class SenderKeyState {
4
+ constructor(id, iteration, chainKey, signatureKeyPair, signatureKeyPublic, signatureKeyPrivate, senderKeyStateStructure) {
5
+ this.MAX_MESSAGE_KEYS = 2000;
6
+ if (senderKeyStateStructure) {
7
+ this.senderKeyStateStructure = {
8
+ ...senderKeyStateStructure,
9
+ senderMessageKeys: Array.isArray(senderKeyStateStructure.senderMessageKeys)
10
+ ? senderKeyStateStructure.senderMessageKeys
11
+ : []
12
+ };
13
+ }
14
+ else {
15
+ if (signatureKeyPair) {
16
+ signatureKeyPublic = signatureKeyPair.public;
17
+ signatureKeyPrivate = signatureKeyPair.private;
18
+ }
19
+ this.senderKeyStateStructure = {
20
+ senderKeyId: id || 0,
21
+ senderChainKey: {
22
+ iteration: iteration || 0,
23
+ seed: Buffer.from(chainKey || [])
24
+ },
25
+ senderSigningKey: {
26
+ public: Buffer.from(signatureKeyPublic || []),
27
+ private: Buffer.from(signatureKeyPrivate || [])
28
+ },
29
+ senderMessageKeys: []
30
+ };
31
+ }
32
+ }
33
+ getKeyId() {
34
+ return this.senderKeyStateStructure.senderKeyId;
35
+ }
36
+ getSenderChainKey() {
37
+ return new SenderChainKey(this.senderKeyStateStructure.senderChainKey.iteration, this.senderKeyStateStructure.senderChainKey.seed);
38
+ }
39
+ setSenderChainKey(chainKey) {
40
+ this.senderKeyStateStructure.senderChainKey = {
41
+ iteration: chainKey.getIteration(),
42
+ seed: chainKey.getSeed()
43
+ };
44
+ }
45
+ getSigningKeyPublic() {
46
+ const publicKey = Buffer.from(this.senderKeyStateStructure.senderSigningKey.public);
47
+ if (publicKey.length === 32) {
48
+ const fixed = Buffer.alloc(33);
49
+ fixed[0] = 0x05;
50
+ publicKey.copy(fixed, 1);
51
+ return fixed;
52
+ }
53
+ return publicKey;
54
+ }
55
+ getSigningKeyPrivate() {
56
+ const privateKey = this.senderKeyStateStructure.senderSigningKey.private;
57
+ return Buffer.from(privateKey || []);
58
+ }
59
+ hasSenderMessageKey(iteration) {
60
+ return this.senderKeyStateStructure.senderMessageKeys.some(key => key.iteration === iteration);
61
+ }
62
+ addSenderMessageKey(senderMessageKey) {
63
+ this.senderKeyStateStructure.senderMessageKeys.push({
64
+ iteration: senderMessageKey.getIteration(),
65
+ seed: senderMessageKey.getSeed()
66
+ });
67
+ if (this.senderKeyStateStructure.senderMessageKeys.length > this.MAX_MESSAGE_KEYS) {
68
+ this.senderKeyStateStructure.senderMessageKeys.shift();
69
+ }
70
+ }
71
+ removeSenderMessageKey(iteration) {
72
+ const index = this.senderKeyStateStructure.senderMessageKeys.findIndex(key => key.iteration === iteration);
73
+ if (index !== -1) {
74
+ const messageKey = this.senderKeyStateStructure.senderMessageKeys[index];
75
+ this.senderKeyStateStructure.senderMessageKeys.splice(index, 1);
76
+ return new SenderMessageKey(messageKey.iteration, messageKey.seed);
77
+ }
78
+ return null;
79
+ }
80
+ getStructure() {
81
+ return this.senderKeyStateStructure;
82
+ }
96
83
  }
97
- exports.SenderKeyState = SenderKeyState
84
+ //# sourceMappingURL=sender-key-state.js.map
@@ -1,30 +1,26 @@
1
- 'use strict'
2
- Object.defineProperty(exports, '__esModule', { value: true })
3
- exports.SenderMessageKey = void 0
4
- const Crypto_1 = require('../../Utils/crypto')
5
- class SenderMessageKey {
6
- constructor(iteration, seed) {
7
- // HKDF(seed, 96, salt=0x00*32, info='WhisperGroup') → split into 3×32 byte chunks
8
- const derived = Buffer.from(Crypto_1.hkdf(seed, 96, { salt: Buffer.alloc(32), info: 'WhisperGroup' }))
9
- const keys = new Uint8Array(32)
10
- keys.set(new Uint8Array(derived.slice(16, 32))) // bytes 16-31 of chunk 0
11
- keys.set(new Uint8Array(derived.slice(32, 48)), 16) // bytes 0-15 of chunk 1
12
- this.iv = Buffer.from(derived.slice(0, 16))
13
- this.cipherKey = Buffer.from(keys.buffer)
14
- this.iteration = iteration
15
- this.seed = seed
16
- }
17
- getIteration() {
18
- return this.iteration
19
- }
20
- getIv() {
21
- return this.iv
22
- }
23
- getCipherKey() {
24
- return this.cipherKey
25
- }
26
- getSeed() {
27
- return this.seed
28
- }
1
+ import { deriveSecrets } from 'libsignal/src/crypto.js';
2
+ export class SenderMessageKey {
3
+ constructor(iteration, seed) {
4
+ const derivative = deriveSecrets(seed, Buffer.alloc(32), Buffer.from('WhisperGroup'));
5
+ const keys = new Uint8Array(32);
6
+ keys.set(new Uint8Array(derivative[0].slice(16)));
7
+ keys.set(new Uint8Array(derivative[1].slice(0, 16)), 16);
8
+ this.iv = Buffer.from(derivative[0].slice(0, 16));
9
+ this.cipherKey = Buffer.from(keys.buffer);
10
+ this.iteration = iteration;
11
+ this.seed = seed;
12
+ }
13
+ getIteration() {
14
+ return this.iteration;
15
+ }
16
+ getIv() {
17
+ return this.iv;
18
+ }
19
+ getCipherKey() {
20
+ return this.cipherKey;
21
+ }
22
+ getSeed() {
23
+ return this.seed;
24
+ }
29
25
  }
30
- exports.SenderMessageKey = SenderMessageKey
26
+ //# sourceMappingURL=sender-message-key.js.map