@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,42 +1,35 @@
1
- 'use strict'
2
- Object.defineProperty(exports, '__esModule', { value: true })
3
- exports.buildPairingQRData = exports.getCompanionPlatformId = exports.getCompanionWebClientType = exports.CompanionWebClientType = void 0
4
- var CompanionWebClientType
5
- ;(function (CompanionWebClientType) {
6
- CompanionWebClientType[(CompanionWebClientType['UNKNOWN'] = 0)] = 'UNKNOWN'
7
- CompanionWebClientType[(CompanionWebClientType['CHROME'] = 1)] = 'CHROME'
8
- CompanionWebClientType[(CompanionWebClientType['EDGE'] = 2)] = 'EDGE'
9
- CompanionWebClientType[(CompanionWebClientType['FIREFOX'] = 3)] = 'FIREFOX'
10
- CompanionWebClientType[(CompanionWebClientType['IE'] = 4)] = 'IE'
11
- CompanionWebClientType[(CompanionWebClientType['OPERA'] = 5)] = 'OPERA'
12
- CompanionWebClientType[(CompanionWebClientType['SAFARI'] = 6)] = 'SAFARI'
13
- CompanionWebClientType[(CompanionWebClientType['ELECTRON'] = 7)] = 'ELECTRON'
14
- CompanionWebClientType[(CompanionWebClientType['UWP'] = 8)] = 'UWP'
15
- CompanionWebClientType[(CompanionWebClientType['OTHER_WEB_CLIENT'] = 9)] = 'OTHER_WEB_CLIENT'
16
- })((CompanionWebClientType = exports.CompanionWebClientType || (exports.CompanionWebClientType = {})))
1
+ export var CompanionWebClientType;
2
+ (function (CompanionWebClientType) {
3
+ CompanionWebClientType[CompanionWebClientType["UNKNOWN"] = 0] = "UNKNOWN";
4
+ CompanionWebClientType[CompanionWebClientType["CHROME"] = 1] = "CHROME";
5
+ CompanionWebClientType[CompanionWebClientType["EDGE"] = 2] = "EDGE";
6
+ CompanionWebClientType[CompanionWebClientType["FIREFOX"] = 3] = "FIREFOX";
7
+ CompanionWebClientType[CompanionWebClientType["IE"] = 4] = "IE";
8
+ CompanionWebClientType[CompanionWebClientType["OPERA"] = 5] = "OPERA";
9
+ CompanionWebClientType[CompanionWebClientType["SAFARI"] = 6] = "SAFARI";
10
+ CompanionWebClientType[CompanionWebClientType["ELECTRON"] = 7] = "ELECTRON";
11
+ CompanionWebClientType[CompanionWebClientType["UWP"] = 8] = "UWP";
12
+ CompanionWebClientType[CompanionWebClientType["OTHER_WEB_CLIENT"] = 9] = "OTHER_WEB_CLIENT";
13
+ })(CompanionWebClientType || (CompanionWebClientType = {}));
17
14
  const BROWSER_TO_COMPANION_WEB_CLIENT = {
18
- Chrome: CompanionWebClientType.CHROME,
19
- Edge: CompanionWebClientType.EDGE,
20
- Firefox: CompanionWebClientType.FIREFOX,
21
- IE: CompanionWebClientType.IE,
22
- Opera: CompanionWebClientType.OPERA,
23
- Safari: CompanionWebClientType.SAFARI
24
- }
25
- const getCompanionWebClientType = ([os, browserName]) => {
26
- if (browserName === 'Desktop') {
27
- return os === 'Windows' ? CompanionWebClientType.UWP : CompanionWebClientType.ELECTRON
28
- }
29
- return BROWSER_TO_COMPANION_WEB_CLIENT[browserName] || CompanionWebClientType.OTHER_WEB_CLIENT
30
- }
31
- exports.getCompanionWebClientType = getCompanionWebClientType
32
- const getCompanionPlatformId = (browser) => {
33
- return getCompanionWebClientType(browser).toString()
34
- }
35
- exports.getCompanionPlatformId = getCompanionPlatformId
36
- const buildPairingQRData = (ref, noiseKeyB64, identityKeyB64, advB64, browser) => {
37
- return (
38
- 'https://wa.me/settings/linked_devices#' +
39
- [ref, noiseKeyB64, identityKeyB64, advB64, getCompanionPlatformId(browser)].join(',')
40
- )
41
- }
42
- exports.buildPairingQRData = buildPairingQRData
15
+ Chrome: CompanionWebClientType.CHROME,
16
+ Edge: CompanionWebClientType.EDGE,
17
+ Firefox: CompanionWebClientType.FIREFOX,
18
+ IE: CompanionWebClientType.IE,
19
+ Opera: CompanionWebClientType.OPERA,
20
+ Safari: CompanionWebClientType.SAFARI
21
+ };
22
+ export const getCompanionWebClientType = ([os, browserName]) => {
23
+ if (browserName === 'Desktop') {
24
+ return os === 'Windows' ? CompanionWebClientType.UWP : CompanionWebClientType.ELECTRON;
25
+ }
26
+ return BROWSER_TO_COMPANION_WEB_CLIENT[browserName] || CompanionWebClientType.OTHER_WEB_CLIENT;
27
+ };
28
+ export const getCompanionPlatformId = (browser) => {
29
+ return getCompanionWebClientType(browser).toString();
30
+ };
31
+ export const buildPairingQRData = (ref, noiseKeyB64, identityKeyB64, advB64, browser) => {
32
+ return ('https://wa.me/settings/linked_devices#' +
33
+ [ref, noiseKeyB64, identityKeyB64, advB64, getCompanionPlatformId(browser)].join(','));
34
+ };
35
+ //# sourceMappingURL=companion-reg-client-utils.js.map
@@ -1,155 +1,118 @@
1
- 'use strict'
2
- Object.defineProperty(exports, '__esModule', { value: true })
3
- exports.signedKeyPair = exports.Curve = exports.generateSignalPubKey = exports.hkdf = exports.md5 = void 0
4
- exports.aesEncryptGCM = aesEncryptGCM
5
- exports.aesDecryptGCM = aesDecryptGCM
6
- exports.aesEncryptCTR = aesEncryptCTR
7
- exports.aesDecryptCTR = aesDecryptCTR
8
- exports.aesDecrypt = aesDecrypt
9
- exports.aesDecryptWithIV = aesDecryptWithIV
10
- exports.aesEncrypt = aesEncrypt
11
- exports.aesEncrypWithIV = aesEncrypWithIV
12
- exports.hmacSign = hmacSign
13
- exports.sha256 = sha256
14
- exports.derivePairingCodeKey = derivePairingCodeKey
15
- const { subtle } = globalThis.crypto
16
- const Defaults_1 = require('../Defaults')
17
- const nodeCrypto = require('crypto')
18
-
19
- // Pure Node.js `crypto` / hand-written JS only -- no native/WASM module
20
- // dependency anywhere in this file (including `Curve`, X25519 key exchange +
21
- // XEdDSA signing). XEdDSA specifically is validated against the official
22
- // RFC 8032 Ed25519 test vectors, RFC 7748-style X25519 DH vectors, and
23
- // hundreds of randomized Montgomery<->Edwards interop + self-consistency
24
- // checks -- see ./curve25519-js.js for details and references.
25
-
26
- // ── MD5 ────────────────────────────────────────────────────────────────────────
27
- const md5 = buffer => nodeCrypto.createHash('md5').update(buffer).digest()
28
- Object.defineProperty(exports, 'md5', { enumerable: true, get: () => md5 })
29
-
30
- // ── HKDF (RFC 5869) ─────────────────────────────────────────────────────────────
31
- const hkdfExtractJS = (salt, ikm) => nodeCrypto.createHmac('sha256', salt).update(ikm).digest()
32
- const hkdfExpandJS = (prk, length, info) => {
33
- const hashLen = 32
34
- const n = Math.ceil(length / hashLen)
35
- let t = Buffer.alloc(0)
36
- let okm = Buffer.alloc(0)
37
- for (let i = 1; i <= n; i++) {
38
- t = nodeCrypto
39
- .createHmac('sha256', prk)
40
- .update(Buffer.concat([t, info, Buffer.from([i])]))
41
- .digest()
42
- okm = Buffer.concat([okm, t])
43
- }
44
- return okm.subarray(0, length)
1
+ import { createCipheriv, createDecipheriv, createHash, createHmac, randomBytes } from 'crypto';
2
+ import * as curve from 'libsignal/src/curve.js';
3
+ import { KEY_BUNDLE_TYPE } from '../Defaults/index.js';
4
+ export { md5, hkdf } from 'whatsapp-rust-bridge';
5
+ // insure browser & node compatibility
6
+ const { subtle } = globalThis.crypto;
7
+ /** prefix version byte to the pub keys, required for some curve crypto functions */
8
+ export const generateSignalPubKey = (pubKey) => pubKey.length === 33 ? pubKey : Buffer.concat([KEY_BUNDLE_TYPE, pubKey]);
9
+ export const Curve = {
10
+ generateKeyPair: () => {
11
+ const { pubKey, privKey } = curve.generateKeyPair();
12
+ return {
13
+ private: Buffer.from(privKey),
14
+ // remove version byte
15
+ public: Buffer.from(pubKey.slice(1))
16
+ };
17
+ },
18
+ sharedKey: (privateKey, publicKey) => {
19
+ const shared = curve.calculateAgreement(generateSignalPubKey(publicKey), privateKey);
20
+ return Buffer.from(shared);
21
+ },
22
+ sign: (privateKey, buf) => curve.calculateSignature(privateKey, buf),
23
+ verify: (pubKey, message, signature) => {
24
+ try {
25
+ curve.verifySignature(generateSignalPubKey(pubKey), message, signature);
26
+ return true;
27
+ }
28
+ catch (error) {
29
+ return false;
30
+ }
31
+ }
32
+ };
33
+ export const signedKeyPair = (identityKeyPair, keyId) => {
34
+ const preKey = Curve.generateKeyPair();
35
+ const pubKey = generateSignalPubKey(preKey.public);
36
+ const signature = Curve.sign(identityKeyPair.private, pubKey);
37
+ return { keyPair: preKey, signature, keyId };
38
+ };
39
+ const GCM_TAG_LENGTH = 128 >> 3;
40
+ /**
41
+ * encrypt AES 256 GCM;
42
+ * where the tag tag is suffixed to the ciphertext
43
+ * */
44
+ export function aesEncryptGCM(plaintext, key, iv, additionalData) {
45
+ const cipher = createCipheriv('aes-256-gcm', key, iv);
46
+ cipher.setAAD(additionalData);
47
+ return Buffer.concat([cipher.update(plaintext), cipher.final(), cipher.getAuthTag()]);
45
48
  }
46
- const hkdf = (ikm, length, options = {}) => {
47
- const ikmBuf = Buffer.isBuffer(ikm) ? ikm : Buffer.from(ikm)
48
- const saltBuf = options.salt
49
- ? Buffer.isBuffer(options.salt)
50
- ? options.salt
51
- : Buffer.from(options.salt)
52
- : Buffer.alloc(32) // RFC 5869: default salt is HashLen zero bytes
53
- const infoBuf = options.info
54
- ? Buffer.isBuffer(options.info)
55
- ? options.info
56
- : Buffer.from(options.info)
57
- : Buffer.alloc(0)
58
- const prk = hkdfExtractJS(saltBuf, ikmBuf)
59
- return hkdfExpandJS(prk, length, infoBuf)
49
+ /**
50
+ * decrypt AES 256 GCM;
51
+ * where the auth tag is suffixed to the ciphertext
52
+ * */
53
+ export function aesDecryptGCM(ciphertext, key, iv, additionalData) {
54
+ const decipher = createDecipheriv('aes-256-gcm', key, iv);
55
+ // decrypt additional adata
56
+ const enc = ciphertext.slice(0, ciphertext.length - GCM_TAG_LENGTH);
57
+ const tag = ciphertext.slice(ciphertext.length - GCM_TAG_LENGTH);
58
+ // set additional data
59
+ decipher.setAAD(additionalData);
60
+ decipher.setAuthTag(tag);
61
+ return Buffer.concat([decipher.update(enc), decipher.final()]);
60
62
  }
61
- Object.defineProperty(exports, 'hkdf', { enumerable: true, get: () => hkdf })
62
-
63
- // ── Signal pub key helper ─────────────────────────────────────────────────────
64
- const generateSignalPubKey = pubKey =>
65
- pubKey.length === 33 ? pubKey : Buffer.concat([Defaults_1.KEY_BUNDLE_TYPE, pubKey])
66
- exports.generateSignalPubKey = generateSignalPubKey
67
-
68
- // ── Curve — X25519 key exchange + XEdDSA signing ──────────────────────────────
69
- const curve25519JS = require('./curve25519-js')
70
- exports.Curve = {
71
- generateKeyPair: () => curve25519JS.generateKeyPairJS(),
72
- sharedKey: (privateKey, publicKey) => curve25519JS.sharedKeyJS(privateKey, publicKey),
73
- sign: (privateKey, buf) => curve25519JS.signJS(privateKey, buf),
74
- verify: (pubKey, message, signature) => curve25519JS.verifyJS(pubKey, message, signature)
63
+ export function aesEncryptCTR(plaintext, key, iv) {
64
+ const cipher = createCipheriv('aes-256-ctr', key, iv);
65
+ return Buffer.concat([cipher.update(plaintext), cipher.final()]);
75
66
  }
76
-
77
- const signedKeyPair = (identityKeyPair, keyId) => {
78
- const preKey = exports.Curve.generateKeyPair()
79
- const pubKey = generateSignalPubKey(preKey.public)
80
- const signature = exports.Curve.sign(identityKeyPair.private, pubKey)
81
- return { keyPair: preKey, signature, keyId }
67
+ export function aesDecryptCTR(ciphertext, key, iv) {
68
+ const decipher = createDecipheriv('aes-256-ctr', key, iv);
69
+ return Buffer.concat([decipher.update(ciphertext), decipher.final()]);
82
70
  }
83
- exports.signedKeyPair = signedKeyPair
84
-
85
- // ── AES-256-GCM ───────────────────────────────────────────────────────────────
86
- function aesEncryptGCM(plaintext, key, iv, additionalData) {
87
- const cipher = nodeCrypto.createCipheriv('aes-256-gcm', key, iv)
88
- if (additionalData) cipher.setAAD(additionalData)
89
- const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()])
90
- return Buffer.concat([encrypted, cipher.getAuthTag()])
71
+ /** decrypt AES 256 CBC; where the IV is prefixed to the buffer */
72
+ export function aesDecrypt(buffer, key) {
73
+ return aesDecryptWithIV(buffer.subarray(16), key, buffer.subarray(0, 16));
91
74
  }
92
-
93
- function aesDecryptGCM(ciphertext, key, iv, additionalData) {
94
- const authTag = ciphertext.subarray(ciphertext.length - 16)
95
- const encrypted = ciphertext.subarray(0, ciphertext.length - 16)
96
- const decipher = nodeCrypto.createDecipheriv('aes-256-gcm', key, iv)
97
- if (additionalData) decipher.setAAD(additionalData)
98
- decipher.setAuthTag(authTag)
99
- return Buffer.concat([decipher.update(encrypted), decipher.final()])
75
+ /** decrypt AES 256 CBC */
76
+ export function aesDecryptWithIV(buffer, key, IV) {
77
+ const aes = createDecipheriv('aes-256-cbc', key, IV);
78
+ return Buffer.concat([aes.update(buffer), aes.final()]);
100
79
  }
101
-
102
- // ── AES-256-CTR ───────────────────────────────────────────────────────────────
103
- function aesEncryptCTR(plaintext, key, iv) {
104
- const cipher = nodeCrypto.createCipheriv('aes-256-ctr', key, iv)
105
- return Buffer.concat([cipher.update(plaintext), cipher.final()])
80
+ // encrypt AES 256 CBC; where a random IV is prefixed to the buffer
81
+ export function aesEncrypt(buffer, key) {
82
+ const IV = randomBytes(16);
83
+ const aes = createCipheriv('aes-256-cbc', key, IV);
84
+ return Buffer.concat([IV, aes.update(buffer), aes.final()]); // prefix IV to the buffer
106
85
  }
107
-
108
- function aesDecryptCTR(ciphertext, key, iv) {
109
- const decipher = nodeCrypto.createDecipheriv('aes-256-ctr', key, iv)
110
- return Buffer.concat([decipher.update(ciphertext), decipher.final()])
86
+ // encrypt AES 256 CBC with a given IV
87
+ export function aesEncrypWithIV(buffer, key, IV) {
88
+ const aes = createCipheriv('aes-256-cbc', key, IV);
89
+ return Buffer.concat([aes.update(buffer), aes.final()]); // prefix IV to the buffer
111
90
  }
112
-
113
- // ── AES-256-CBC (no explicit IV -- zero IV, legacy/unused elsewhere in this lib) ─
114
- function aesDecrypt(buffer, key) {
115
- return aesDecryptWithIV(buffer, key, Buffer.alloc(16))
91
+ // sign HMAC using SHA 256
92
+ export function hmacSign(buffer, key, variant = 'sha256') {
93
+ return createHmac(variant, key).update(buffer).digest();
116
94
  }
117
-
118
- function aesEncrypt(buffer, key) {
119
- return aesEncrypWithIV(buffer, key, Buffer.alloc(16))
95
+ export function sha256(buffer) {
96
+ return createHash('sha256').update(buffer).digest();
120
97
  }
121
-
122
- // ── AES-256-CBC (explicit IV) ─────────────────────────────────────────────────
123
- function aesDecryptWithIV(buffer, key, IV) {
124
- const decipher = nodeCrypto.createDecipheriv('aes-256-cbc', key, IV)
125
- return Buffer.concat([decipher.update(buffer), decipher.final()])
126
- }
127
-
128
- function aesEncrypWithIV(buffer, key, IV) {
129
- const cipher = nodeCrypto.createCipheriv('aes-256-cbc', key, IV)
130
- return Buffer.concat([cipher.update(buffer), cipher.final()])
131
- }
132
-
133
- // ── HMAC-SHA256 ───────────────────────────────────────────────────────────────
134
- function hmacSign(buffer, key, variant = 'sha256') {
135
- return nodeCrypto.createHmac(variant, key).update(buffer).digest()
136
- }
137
-
138
- // ── SHA-256 ───────────────────────────────────────────────────────────────────
139
- function sha256(buffer) {
140
- return nodeCrypto.createHash('sha256').update(buffer).digest()
141
- }
142
-
143
- // ── PBKDF2 pairing code key ───────────────────────────────────────────────────
144
- async function derivePairingCodeKey(pairingCode, salt) {
145
- const encoder = new TextEncoder()
146
- const pairingCodeBuffer = encoder.encode(pairingCode)
147
- const saltBuffer = new Uint8Array(salt instanceof Uint8Array ? salt : new Uint8Array(salt))
148
- const keyMaterial = await subtle.importKey('raw', pairingCodeBuffer, { name: 'PBKDF2' }, false, ['deriveBits'])
149
- const derivedBits = await subtle.deriveBits(
150
- { name: 'PBKDF2', salt: saltBuffer, iterations: 2 << 16, hash: 'SHA-256' },
151
- keyMaterial,
152
- 256
153
- )
154
- return Buffer.from(derivedBits)
98
+ export async function derivePairingCodeKey(pairingCode, salt) {
99
+ // Convert inputs to formats Web Crypto API can work with
100
+ const encoder = new TextEncoder();
101
+ const pairingCodeBuffer = encoder.encode(pairingCode);
102
+ const saltBuffer = new Uint8Array(salt instanceof Uint8Array ? salt : new Uint8Array(salt));
103
+ // Import the pairing code as key material
104
+ const keyMaterial = await subtle.importKey('raw', pairingCodeBuffer, { name: 'PBKDF2' }, false, [
105
+ 'deriveBits'
106
+ ]);
107
+ // Derive bits using PBKDF2 with the same parameters
108
+ // 2 << 16 = 131,072 iterations
109
+ const derivedBits = await subtle.deriveBits({
110
+ name: 'PBKDF2',
111
+ salt: saltBuffer,
112
+ iterations: 2 << 16,
113
+ hash: 'SHA-256'
114
+ }, keyMaterial, 32 * 8 // 32 bytes * 8 = 256 bits
115
+ );
116
+ return Buffer.from(derivedBits);
155
117
  }
118
+ //# sourceMappingURL=crypto.js.map