@neykoor/libsignal-node 1.0.6 → 1.0.7

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 (62) hide show
  1. package/README.md +9 -9
  2. package/lib/ciphertext-message.d.ts +10 -0
  3. package/lib/ciphertext-message.d.ts.map +1 -0
  4. package/lib/ciphertext-message.js +12 -0
  5. package/lib/ciphertext-message.js.map +1 -0
  6. package/lib/errors.d.ts +3 -0
  7. package/lib/errors.d.ts.map +1 -1
  8. package/lib/errors.js +6 -0
  9. package/lib/errors.js.map +1 -1
  10. package/lib/group-cipher.d.ts +12 -0
  11. package/lib/group-cipher.d.ts.map +1 -0
  12. package/lib/group-cipher.js +78 -0
  13. package/lib/group-cipher.js.map +1 -0
  14. package/lib/group-keyhelper.d.ts +5 -0
  15. package/lib/group-keyhelper.d.ts.map +1 -0
  16. package/lib/group-keyhelper.js +12 -0
  17. package/lib/group-keyhelper.js.map +1 -0
  18. package/lib/group-proto.d.ts +22 -0
  19. package/lib/group-proto.d.ts.map +1 -0
  20. package/lib/group-proto.js +95 -0
  21. package/lib/group-proto.js.map +1 -0
  22. package/lib/group-session-builder.d.ts +18 -0
  23. package/lib/group-session-builder.d.ts.map +1 -0
  24. package/lib/group-session-builder.js +39 -0
  25. package/lib/group-session-builder.js.map +1 -0
  26. package/lib/index.d.ts +14 -1
  27. package/lib/index.d.ts.map +1 -1
  28. package/lib/index.js +11 -0
  29. package/lib/index.js.map +1 -1
  30. package/lib/sender-chain-key.d.ts +12 -0
  31. package/lib/sender-chain-key.d.ts.map +1 -0
  32. package/lib/sender-chain-key.js +26 -0
  33. package/lib/sender-chain-key.js.map +1 -0
  34. package/lib/sender-key-distribution-message.d.ts +16 -0
  35. package/lib/sender-key-distribution-message.d.ts.map +1 -0
  36. package/lib/sender-key-distribution-message.js +57 -0
  37. package/lib/sender-key-distribution-message.js.map +1 -0
  38. package/lib/sender-key-message.d.ts +17 -0
  39. package/lib/sender-key-message.d.ts.map +1 -0
  40. package/lib/sender-key-message.js +66 -0
  41. package/lib/sender-key-message.js.map +1 -0
  42. package/lib/sender-key-name.d.ts +13 -0
  43. package/lib/sender-key-name.d.ts.map +1 -0
  44. package/lib/sender-key-name.js +43 -0
  45. package/lib/sender-key-name.js.map +1 -0
  46. package/lib/sender-key-record.d.ts +13 -0
  47. package/lib/sender-key-record.d.ts.map +1 -0
  48. package/lib/sender-key-record.js +37 -0
  49. package/lib/sender-key-record.js.map +1 -0
  50. package/lib/sender-key-state.d.ts +38 -0
  51. package/lib/sender-key-state.d.ts.map +1 -0
  52. package/lib/sender-key-state.js +79 -0
  53. package/lib/sender-key-state.js.map +1 -0
  54. package/lib/sender-message-key.d.ts +12 -0
  55. package/lib/sender-message-key.d.ts.map +1 -0
  56. package/lib/sender-message-key.js +31 -0
  57. package/lib/sender-message-key.js.map +1 -0
  58. package/lib/session-cipher.d.ts.map +1 -1
  59. package/lib/session-cipher.js.map +1 -1
  60. package/lib/types.d.ts +6 -0
  61. package/lib/types.d.ts.map +1 -1
  62. package/package.json +1 -1
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  **Port 100% TypeScript de `libsignal-node`, compatible con [BaileysX](https://github.com/Neykoor/BaileysX)**
8
8
 
9
- [![npm](https://img.shields.io/badge/npm-libsignal--node--ts-CB3837?logo=npm&logoColor=white)](https://www.npmjs.com/package/libsignal-node-ts)
9
+ [![npm](https://img.shields.io/badge/npm-%40neykoor%2Flibsignal--node-CB3837?logo=npm&logoColor=white)](https://www.npmjs.com/package/@neykoor/libsignal-node)
10
10
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.6-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
11
11
  [![ESM](https://img.shields.io/badge/Module-ESM-yellow)](https://nodejs.org/api/esm.html)
12
12
  [![Node](https://img.shields.io/badge/Node-%3E%3D20-339933?logo=node.js&logoColor=white)](https://nodejs.org/)
@@ -40,8 +40,8 @@ Mismo API, misma criptografía, cero `@ts-ignore`, tipado de punta a punta — y
40
40
 
41
41
  - Implementación completa del **Double Ratchet** (X3DH, sesiones, ratcheting)
42
42
  - Misma API pública: `ProtocolAddress`, `SessionBuilder`, `SessionCipher`, `SessionRecord`, `keyhelper`, `curve`, `crypto`
43
- - Mismas dependencias en runtime: `curve25519-js` y `protobufjs`
44
- - Soporte nativo de `x25519` vía `node:crypto` con fallback a `curve25519-js`
43
+ - Misma base criptográfica que `libsignal-node` (curve25519 y `protobufjs`), aquí vía `@neykoor/curve25519-ts`
44
+ - Soporte nativo de `x25519` vía `node:crypto` con fallback a `@neykoor/curve25519-ts`
45
45
 
46
46
  ### Pendiente por traer desde `libsignal-node` (roadmap)
47
47
 
@@ -53,10 +53,10 @@ Mismo API, misma criptografía, cero `@ts-ignore`, tipado de punta a punta — y
53
53
  ## 📦 Instalación
54
54
 
55
55
  ```bash
56
- npm install libsignal-node-ts
56
+ npm install @neykoor/libsignal-node
57
57
  ```
58
58
 
59
- Dependencias en tiempo de ejecución: `curve25519-js` y `protobufjs` (se instalan solas junto con el paquete).
59
+ Dependencias en tiempo de ejecución: `@neykoor/curve25519-ts`, `pino` y `protobufjs` (se instalan solas junto con el paquete).
60
60
 
61
61
  ## 🔧 Uso en BaileysX
62
62
 
@@ -72,21 +72,21 @@ import { PreKeyWhisperMessage } from 'libsignal/lib/protobufs.js'
72
72
  por:
73
73
 
74
74
  ```ts
75
- import * as libsignal from 'libsignal-node-ts'
76
- import { protobufs } from 'libsignal-node-ts'
75
+ import * as libsignal from '@neykoor/libsignal-node'
76
+ import { protobufs } from '@neykoor/libsignal-node'
77
77
  const { PreKeyWhisperMessage } = protobufs
78
78
  ```
79
79
 
80
80
  Y en el `package.json` de tu proyecto, quita la dependencia `libsignal` y agrega:
81
81
 
82
82
  ```json
83
- "libsignal-node-ts": "^1.0.0"
83
+ "@neykoor/libsignal-node": "^1.0.5"
84
84
  ```
85
85
 
86
86
  ## 📖 Uso básico
87
87
 
88
88
  ```ts
89
- import { ProtocolAddress, SessionBuilder, SessionCipher, MemorySignalStorage, keyhelper } from 'libsignal-node-ts'
89
+ import { ProtocolAddress, SessionBuilder, SessionCipher, MemorySignalStorage, keyhelper } from '@neykoor/libsignal-node'
90
90
 
91
91
  const identityKeyPair = keyhelper.generateIdentityKeyPair()
92
92
  const registrationId = keyhelper.generateRegistrationId()
@@ -0,0 +1,10 @@
1
+ export declare class CiphertextMessage {
2
+ readonly UNSUPPORTED_VERSION: number;
3
+ readonly CURRENT_VERSION: number;
4
+ readonly WHISPER_TYPE: number;
5
+ readonly PREKEY_TYPE: number;
6
+ readonly SENDERKEY_TYPE: number;
7
+ readonly SENDERKEY_DISTRIBUTION_TYPE: number;
8
+ readonly ENCRYPTED_MESSAGE_OVERHEAD: number;
9
+ }
10
+ //# sourceMappingURL=ciphertext-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ciphertext-message.d.ts","sourceRoot":"","sources":["../src/ciphertext-message.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAI;IACxC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAI;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAI;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAI;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAI;IACnC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAI;IAChD,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAK;CACjD"}
@@ -0,0 +1,12 @@
1
+ export class CiphertextMessage {
2
+ constructor() {
3
+ this.UNSUPPORTED_VERSION = 1;
4
+ this.CURRENT_VERSION = 3;
5
+ this.WHISPER_TYPE = 2;
6
+ this.PREKEY_TYPE = 3;
7
+ this.SENDERKEY_TYPE = 4;
8
+ this.SENDERKEY_DISTRIBUTION_TYPE = 5;
9
+ this.ENCRYPTED_MESSAGE_OVERHEAD = 53;
10
+ }
11
+ }
12
+ //# sourceMappingURL=ciphertext-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ciphertext-message.js","sourceRoot":"","sources":["../src/ciphertext-message.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IAA9B;QACW,wBAAmB,GAAW,CAAC,CAAA;QAC/B,oBAAe,GAAW,CAAC,CAAA;QAC3B,iBAAY,GAAW,CAAC,CAAA;QACxB,gBAAW,GAAW,CAAC,CAAA;QACvB,mBAAc,GAAW,CAAC,CAAA;QAC1B,gCAA2B,GAAW,CAAC,CAAA;QACvC,+BAA0B,GAAW,EAAE,CAAA;IAClD,CAAC;CAAA"}
package/lib/errors.d.ts CHANGED
@@ -14,4 +14,7 @@ export declare class MessageCounterError extends SessionError {
14
14
  export declare class PreKeyError extends SessionError {
15
15
  constructor(message?: string);
16
16
  }
17
+ export declare class SenderKeyError extends SignalError {
18
+ constructor(message?: string);
19
+ }
17
20
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;CAAG;AAEzC,qBAAa,yBAA0B,SAAQ,WAAW;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;gBAEf,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAM/C;AAED,qBAAa,YAAa,SAAQ,WAAW;gBAC/B,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,WAAY,SAAQ,YAAY;gBAC/B,OAAO,CAAC,EAAE,MAAM;CAI7B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;CAAG;AAEzC,qBAAa,yBAA0B,SAAQ,WAAW;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;gBAEf,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAM/C;AAED,qBAAa,YAAa,SAAQ,WAAW;gBAC/B,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,WAAY,SAAQ,YAAY;gBAC/B,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,cAAe,SAAQ,WAAW;gBACjC,OAAO,CAAC,EAAE,MAAM;CAI7B"}
package/lib/errors.js CHANGED
@@ -26,4 +26,10 @@ export class PreKeyError extends SessionError {
26
26
  this.name = "PreKeyError";
27
27
  }
28
28
  }
29
+ export class SenderKeyError extends SignalError {
30
+ constructor(message) {
31
+ super(message);
32
+ this.name = "SenderKeyError";
33
+ }
34
+ }
29
35
  //# sourceMappingURL=errors.js.map
package/lib/errors.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAG;AAEzC,MAAM,OAAO,yBAA0B,SAAQ,WAAW;IAIxD,YAAY,IAAY,EAAE,WAAoB;QAC5C,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAA;QACpD,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAA;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,YAAY;IAC3C,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAG;AAEzC,MAAM,OAAO,yBAA0B,SAAQ,WAAW;IAIxD,YAAY,IAAY,EAAE,WAAoB;QAC5C,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAA;QACpD,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAA;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,YAAY;IAC3C,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC7C,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;IAC9B,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { SenderKeyName } from "./sender-key-name.js";
2
+ import type { SenderKeyStore } from "./types.js";
3
+ export declare class GroupCipher {
4
+ private readonly senderKeyStore;
5
+ private readonly senderKeyName;
6
+ constructor(senderKeyStore: SenderKeyStore, senderKeyName: SenderKeyName);
7
+ private queueJob;
8
+ encrypt(paddedPlaintext: Uint8Array): Promise<Buffer>;
9
+ decrypt(senderKeyMessageBytes: Uint8Array): Promise<Buffer>;
10
+ private getSenderKey;
11
+ }
12
+ //# sourceMappingURL=group-cipher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-cipher.d.ts","sourceRoot":"","sources":["../src/group-cipher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAItD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAK7C,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAEjC,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa;YAK1D,QAAQ;IAIhB,OAAO,CAAC,eAAe,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAqCrD,OAAO,CAAC,qBAAqB,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BjE,OAAO,CAAC,YAAY;CAuBrB"}
@@ -0,0 +1,78 @@
1
+ import * as crypto from "./crypto.js";
2
+ import { SenderKeyError } from "./errors.js";
3
+ import { queueJob } from "./queue-job.js";
4
+ import { SenderKeyMessage } from "./sender-key-message.js";
5
+ import { wipeBuffer } from "./util.js";
6
+ const MAX_JUMP = 2000;
7
+ export class GroupCipher {
8
+ constructor(senderKeyStore, senderKeyName) {
9
+ this.senderKeyStore = senderKeyStore;
10
+ this.senderKeyName = senderKeyName;
11
+ }
12
+ async queueJob(awaitable) {
13
+ return await queueJob(this.senderKeyName.toString(), awaitable);
14
+ }
15
+ async encrypt(paddedPlaintext) {
16
+ return await this.queueJob(async () => {
17
+ const record = await this.senderKeyStore.loadSenderKey(this.senderKeyName);
18
+ if (!record) {
19
+ throw new SenderKeyError("No SenderKeyRecord found for encryption");
20
+ }
21
+ const senderKeyState = record.getSenderKeyState();
22
+ if (!senderKeyState) {
23
+ throw new SenderKeyError("No session to encrypt message");
24
+ }
25
+ const signingKeyPrivate = senderKeyState.getSigningKeyPrivate();
26
+ if (!signingKeyPrivate) {
27
+ throw new SenderKeyError("Signing key is not available for encryption");
28
+ }
29
+ const iteration = senderKeyState.getSenderChainKey().getIteration();
30
+ const senderKey = this.getSenderKey(senderKeyState, iteration === 0 ? 0 : iteration + 1);
31
+ const ciphertext = crypto.encrypt(senderKey.getCipherKey(), Buffer.from(paddedPlaintext), senderKey.getIv());
32
+ const senderKeyMessage = new SenderKeyMessage(senderKeyState.getKeyId(), senderKey.getIteration(), ciphertext, signingKeyPrivate);
33
+ wipeBuffer(senderKey.getCipherKey());
34
+ wipeBuffer(senderKey.getIv());
35
+ await this.senderKeyStore.storeSenderKey(this.senderKeyName, record);
36
+ return senderKeyMessage.serialize();
37
+ });
38
+ }
39
+ async decrypt(senderKeyMessageBytes) {
40
+ return await this.queueJob(async () => {
41
+ const record = await this.senderKeyStore.loadSenderKey(this.senderKeyName);
42
+ if (!record) {
43
+ throw new SenderKeyError("No sender key record found for decryption");
44
+ }
45
+ const senderKeyMessage = new SenderKeyMessage(undefined, undefined, undefined, undefined, senderKeyMessageBytes);
46
+ const senderKeyState = record.getSenderKeyState(senderKeyMessage.getKeyId());
47
+ if (!senderKeyState) {
48
+ throw new SenderKeyError(`No session found to decrypt message from ${this.senderKeyName.getSender().toString()} with keyId: ${senderKeyMessage.getKeyId()}`);
49
+ }
50
+ senderKeyMessage.verifySignature(senderKeyState.getSigningKeyPublic());
51
+ const senderKey = this.getSenderKey(senderKeyState, senderKeyMessage.getIteration());
52
+ const plaintext = crypto.decrypt(senderKey.getCipherKey(), senderKeyMessage.getCipherText(), senderKey.getIv());
53
+ wipeBuffer(senderKey.getCipherKey());
54
+ wipeBuffer(senderKey.getIv());
55
+ await this.senderKeyStore.storeSenderKey(this.senderKeyName, record);
56
+ return plaintext;
57
+ });
58
+ }
59
+ getSenderKey(senderKeyState, iteration) {
60
+ let senderChainKey = senderKeyState.getSenderChainKey();
61
+ if (senderChainKey.getIteration() > iteration) {
62
+ if (senderKeyState.hasSenderMessageKey(iteration)) {
63
+ return senderKeyState.removeSenderMessageKey(iteration);
64
+ }
65
+ throw new SenderKeyError(`Received message with old counter: ${senderChainKey.getIteration()} , ${iteration}`);
66
+ }
67
+ if (iteration - senderChainKey.getIteration() > MAX_JUMP) {
68
+ throw new SenderKeyError("Over 2000 messages into the future!");
69
+ }
70
+ while (senderChainKey.getIteration() < iteration) {
71
+ senderKeyState.addSenderMessageKey(senderChainKey.getSenderMessageKey());
72
+ senderChainKey = senderChainKey.getNext();
73
+ }
74
+ senderKeyState.setSenderChainKey(senderChainKey);
75
+ return senderChainKey.getSenderMessageKey();
76
+ }
77
+ }
78
+ //# sourceMappingURL=group-cipher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-cipher.js","sourceRoot":"","sources":["../src/group-cipher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { KeyPair } from "./curve.js";
2
+ export declare function generateSenderKey(): Buffer;
3
+ export declare function generateSenderKeyId(): number;
4
+ export declare function generateSenderSigningKey(keyPair?: KeyPair): KeyPair;
5
+ //# sourceMappingURL=group-keyhelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-keyhelper.d.ts","sourceRoot":"","sources":["../src/group-keyhelper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAEnE"}
@@ -0,0 +1,12 @@
1
+ import * as nodeCrypto from "crypto";
2
+ import * as curve from "./curve.js";
3
+ export function generateSenderKey() {
4
+ return nodeCrypto.randomBytes(32);
5
+ }
6
+ export function generateSenderKeyId() {
7
+ return nodeCrypto.randomBytes(4).readUInt32BE(0);
8
+ }
9
+ export function generateSenderSigningKey(keyPair) {
10
+ return keyPair ?? curve.generateKeyPair();
11
+ }
12
+ //# sourceMappingURL=group-keyhelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-keyhelper.js","sourceRoot":"","sources":["../src/group-keyhelper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAGhC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAiB;IACxD,OAAO,OAAO,IAAI,KAAK,CAAC,eAAe,EAAE,CAAA;AAC3C,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface ISenderKeyMessageProto {
2
+ id: number;
3
+ iteration: number;
4
+ ciphertext: Uint8Array;
5
+ }
6
+ export declare const SenderKeyMessageProto: {
7
+ create(props: Partial<ISenderKeyMessageProto>): ISenderKeyMessageProto;
8
+ encode(message: ISenderKeyMessageProto): Uint8Array;
9
+ decode(data: Uint8Array): ISenderKeyMessageProto;
10
+ };
11
+ export interface ISenderKeyDistributionMessageProto {
12
+ id: number;
13
+ iteration: number;
14
+ chainKey: Uint8Array;
15
+ signingKey: Uint8Array;
16
+ }
17
+ export declare const SenderKeyDistributionMessageProto: {
18
+ create(props: Partial<ISenderKeyDistributionMessageProto>): ISenderKeyDistributionMessageProto;
19
+ encode(message: ISenderKeyDistributionMessageProto): Uint8Array;
20
+ decode(data: Uint8Array): ISenderKeyDistributionMessageProto;
21
+ };
22
+ //# sourceMappingURL=group-proto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-proto.d.ts","sourceRoot":"","sources":["../src/group-proto.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,eAAO,MAAM,qBAAqB;kBAClB,OAAO,CAAC,sBAAsB,CAAC,GAAG,sBAAsB;oBAQtD,sBAAsB,GAAG,UAAU;iBAQtC,UAAU,GAAG,sBAAsB;CAuBjD,CAAA;AAID,MAAM,WAAW,kCAAkC;IACjD,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,UAAU,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,eAAO,MAAM,iCAAiC;kBAC9B,OAAO,CAAC,kCAAkC,CAAC,GAAG,kCAAkC;oBAS9E,kCAAkC,GAAG,UAAU;iBASlD,UAAU,GAAG,kCAAkC;CA+B7D,CAAA"}
@@ -0,0 +1,95 @@
1
+ import $protobuf from "protobufjs/minimal.js";
2
+ const createWriter = () => $protobuf.Writer.create();
3
+ const createReader = (data) => $protobuf.Reader.create(data);
4
+ export const SenderKeyMessageProto = {
5
+ create(props) {
6
+ return {
7
+ id: props.id ?? 0,
8
+ iteration: props.iteration ?? 0,
9
+ ciphertext: props.ciphertext ?? new Uint8Array(0)
10
+ };
11
+ },
12
+ encode(message) {
13
+ const w = createWriter();
14
+ if (message.id)
15
+ w.uint32(8).uint32(message.id);
16
+ if (message.iteration)
17
+ w.uint32(16).uint32(message.iteration);
18
+ if (message.ciphertext.length)
19
+ w.uint32(26).bytes(message.ciphertext);
20
+ return w.finish();
21
+ },
22
+ decode(data) {
23
+ const r = createReader(data);
24
+ const msg = { id: 0, iteration: 0, ciphertext: new Uint8Array(0) };
25
+ while (r.pos < r.len) {
26
+ const tag = r.uint32();
27
+ switch (tag >>> 3) {
28
+ case 1:
29
+ msg.id = r.uint32();
30
+ break;
31
+ case 2:
32
+ msg.iteration = r.uint32();
33
+ break;
34
+ case 3:
35
+ msg.ciphertext = r.bytes();
36
+ break;
37
+ default:
38
+ r.skipType(tag & 7);
39
+ }
40
+ }
41
+ return msg;
42
+ }
43
+ };
44
+ export const SenderKeyDistributionMessageProto = {
45
+ create(props) {
46
+ return {
47
+ id: props.id ?? 0,
48
+ iteration: props.iteration ?? 0,
49
+ chainKey: props.chainKey ?? new Uint8Array(0),
50
+ signingKey: props.signingKey ?? new Uint8Array(0)
51
+ };
52
+ },
53
+ encode(message) {
54
+ const w = createWriter();
55
+ if (message.id)
56
+ w.uint32(8).uint32(message.id);
57
+ if (message.iteration)
58
+ w.uint32(16).uint32(message.iteration);
59
+ if (message.chainKey.length)
60
+ w.uint32(26).bytes(message.chainKey);
61
+ if (message.signingKey.length)
62
+ w.uint32(34).bytes(message.signingKey);
63
+ return w.finish();
64
+ },
65
+ decode(data) {
66
+ const r = createReader(data);
67
+ const msg = {
68
+ id: 0,
69
+ iteration: 0,
70
+ chainKey: new Uint8Array(0),
71
+ signingKey: new Uint8Array(0)
72
+ };
73
+ while (r.pos < r.len) {
74
+ const tag = r.uint32();
75
+ switch (tag >>> 3) {
76
+ case 1:
77
+ msg.id = r.uint32();
78
+ break;
79
+ case 2:
80
+ msg.iteration = r.uint32();
81
+ break;
82
+ case 3:
83
+ msg.chainKey = r.bytes();
84
+ break;
85
+ case 4:
86
+ msg.signingKey = r.bytes();
87
+ break;
88
+ default:
89
+ r.skipType(tag & 7);
90
+ }
91
+ }
92
+ return msg;
93
+ }
94
+ };
95
+ //# sourceMappingURL=group-proto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-proto.js","sourceRoot":"","sources":["../src/group-proto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { SenderKeyDistributionMessage } from "./sender-key-distribution-message.js";
2
+ import type { SenderKeyName } from "./sender-key-name.js";
3
+ import type { SenderKeyStore } from "./types.js";
4
+ export declare class GroupSessionBuilder {
5
+ private readonly senderKeyStore;
6
+ constructor(senderKeyStore: SenderKeyStore);
7
+ /**
8
+ * Procesa un SenderKeyDistributionMessage recibido de otro miembro del grupo
9
+ * y guarda su sender key state para poder descifrar sus mensajes.
10
+ */
11
+ process(senderKeyName: SenderKeyName, senderKeyDistributionMessage: SenderKeyDistributionMessage): Promise<void>;
12
+ /**
13
+ * Crea (o reutiliza) nuestra propia sender key para el grupo y devuelve el
14
+ * SenderKeyDistributionMessage que hay que enviar al resto de miembros.
15
+ */
16
+ create(senderKeyName: SenderKeyName): Promise<SenderKeyDistributionMessage>;
17
+ }
18
+ //# sourceMappingURL=group-session-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-session-builder.d.ts","sourceRoot":"","sources":["../src/group-session-builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAEnC,cAAc,EAAE,cAAc;IAI1C;;;OAGG;IACG,OAAO,CACX,aAAa,EAAE,aAAa,EAC5B,4BAA4B,EAAE,4BAA4B,GACzD,OAAO,CAAC,IAAI,CAAC;IAahB;;;OAGG;IACG,MAAM,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,4BAA4B,CAAC;CA2BlF"}
@@ -0,0 +1,39 @@
1
+ import { SenderKeyError } from "./errors.js";
2
+ import * as groupKeyHelper from "./group-keyhelper.js";
3
+ import { SenderKeyDistributionMessage } from "./sender-key-distribution-message.js";
4
+ import { SenderKeyRecord } from "./sender-key-record.js";
5
+ export class GroupSessionBuilder {
6
+ constructor(senderKeyStore) {
7
+ this.senderKeyStore = senderKeyStore;
8
+ }
9
+ /**
10
+ * Procesa un SenderKeyDistributionMessage recibido de otro miembro del grupo
11
+ * y guarda su sender key state para poder descifrar sus mensajes.
12
+ */
13
+ async process(senderKeyName, senderKeyDistributionMessage) {
14
+ const senderKeyRecord = (await this.senderKeyStore.loadSenderKey(senderKeyName)) ?? new SenderKeyRecord();
15
+ senderKeyRecord.addSenderKeyState(senderKeyDistributionMessage.getId(), senderKeyDistributionMessage.getIteration(), senderKeyDistributionMessage.getChainKey(), senderKeyDistributionMessage.getSignatureKey());
16
+ await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord);
17
+ }
18
+ /**
19
+ * Crea (o reutiliza) nuestra propia sender key para el grupo y devuelve el
20
+ * SenderKeyDistributionMessage que hay que enviar al resto de miembros.
21
+ */
22
+ async create(senderKeyName) {
23
+ const senderKeyRecord = (await this.senderKeyStore.loadSenderKey(senderKeyName)) ?? new SenderKeyRecord();
24
+ if (senderKeyRecord.isEmpty()) {
25
+ const keyId = groupKeyHelper.generateSenderKeyId();
26
+ const senderKey = groupKeyHelper.generateSenderKey();
27
+ const signingKey = groupKeyHelper.generateSenderSigningKey();
28
+ senderKeyRecord.addSenderKeyState(keyId, 0, senderKey, signingKey.pubKey, signingKey.privKey);
29
+ }
30
+ await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord);
31
+ const state = senderKeyRecord.getSenderKeyState();
32
+ if (!state) {
33
+ throw new SenderKeyError("Failed to create sender key state");
34
+ }
35
+ const chainKey = state.getSenderChainKey();
36
+ return new SenderKeyDistributionMessage(state.getKeyId(), chainKey.getIteration(), chainKey.getSeed(), state.getSigningKeyPublic());
37
+ }
38
+ }
39
+ //# sourceMappingURL=group-session-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-session-builder.js","sourceRoot":"","sources":["../src/group-session-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGrD,MAAM,OAAO,mBAAmB;IAG9B,YAAY,cAA8B;QACxC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;IACtC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CACX,aAA4B,EAC5B,4BAA0D;QAE1D,MAAM,eAAe,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,eAAe,EAAE,CAAA;QAEzG,eAAe,CAAC,iBAAiB,CAC/B,4BAA4B,CAAC,KAAK,EAAE,EACpC,4BAA4B,CAAC,YAAY,EAAE,EAC3C,4BAA4B,CAAC,WAAW,EAAE,EAC1C,4BAA4B,CAAC,eAAe,EAAE,CAC/C,CAAA;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;IAC1E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,aAA4B;QACvC,MAAM,eAAe,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,eAAe,EAAE,CAAA;QAEzG,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,cAAc,CAAC,mBAAmB,EAAE,CAAA;YAClD,MAAM,SAAS,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAA;YACpD,MAAM,UAAU,GAAG,cAAc,CAAC,wBAAwB,EAAE,CAAA;YAE5D,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;QAC/F,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;QAExE,MAAM,KAAK,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAA;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,cAAc,CAAC,mCAAmC,CAAC,CAAA;QAC/D,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAA;QAE1C,OAAO,IAAI,4BAA4B,CACrC,KAAK,CAAC,QAAQ,EAAE,EAChB,QAAQ,CAAC,YAAY,EAAE,EACvB,QAAQ,CAAC,OAAO,EAAE,EAClB,KAAK,CAAC,mBAAmB,EAAE,CAC5B,CAAA;IACH,CAAC;CACF"}
package/lib/index.d.ts CHANGED
@@ -16,6 +16,19 @@ export type { SignalLogger } from "./logger.js";
16
16
  export { wipeBuffer, wipeBuffers } from "./util.js";
17
17
  export * from "./errors.js";
18
18
  export type { KeyPair } from "./curve.js";
19
- export type { SignalStorage, DeviceKeyBundle, IncomingPreKeyMessage, EncryptedMessage } from "./types.js";
19
+ export type { SignalStorage, SenderKeyStore, DeviceKeyBundle, IncomingPreKeyMessage, EncryptedMessage } from "./types.js";
20
20
  export type { Chain, ChainKey, CurrentRatchet, IndexInfo, PendingPreKey, SerializedSessionEntry } from "./session-record.js";
21
+ export * as groupKeyHelper from "./group-keyhelper.js";
22
+ export { CiphertextMessage } from "./ciphertext-message.js";
23
+ export { GroupCipher } from "./group-cipher.js";
24
+ export { GroupSessionBuilder } from "./group-session-builder.js";
25
+ export { SenderChainKey } from "./sender-chain-key.js";
26
+ export { SenderKeyDistributionMessage } from "./sender-key-distribution-message.js";
27
+ export { SenderKeyMessage } from "./sender-key-message.js";
28
+ export { SenderKeyName } from "./sender-key-name.js";
29
+ export { SenderKeyRecord } from "./sender-key-record.js";
30
+ export { SenderKeyState } from "./sender-key-state.js";
31
+ export type { SerializedSenderKeyRecord } from "./sender-key-record.js";
32
+ export type { SerializedSenderKeyState } from "./sender-key-state.js";
33
+ export { SenderMessageKey } from "./sender-message-key.js";
21
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAClC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAChC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAChD,cAAc,UAAU,CAAA;AACxB,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AACtG,YAAY,EACV,KAAK,EACL,QAAQ,EACR,cAAc,EACd,SAAS,EACT,aAAa,EACb,sBAAsB,EACvB,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAClC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAChC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAChD,cAAc,UAAU,CAAA;AACxB,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AACtH,YAAY,EACV,KAAK,EACL,QAAQ,EACR,cAAc,EACd,SAAS,EACT,aAAa,EACb,sBAAsB,EACvB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,YAAY,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AACpE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
package/lib/index.js CHANGED
@@ -14,4 +14,15 @@ export { MemorySignalStorage } from "./memory-storage.js";
14
14
  export { setLogger, getLogger } from "./logger.js";
15
15
  export { wipeBuffer, wipeBuffers } from "./util.js";
16
16
  export * from "./errors.js";
17
+ export * as groupKeyHelper from "./group-keyhelper.js";
18
+ export { CiphertextMessage } from "./ciphertext-message.js";
19
+ export { GroupCipher } from "./group-cipher.js";
20
+ export { GroupSessionBuilder } from "./group-session-builder.js";
21
+ export { SenderChainKey } from "./sender-chain-key.js";
22
+ export { SenderKeyDistributionMessage } from "./sender-key-distribution-message.js";
23
+ export { SenderKeyMessage } from "./sender-key-message.js";
24
+ export { SenderKeyName } from "./sender-key-name.js";
25
+ export { SenderKeyRecord } from "./sender-key-record.js";
26
+ export { SenderKeyState } from "./sender-key-state.js";
27
+ export { SenderMessageKey } from "./sender-message-key.js";
17
28
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAClC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAChC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAE/C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAChD,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAClC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAChC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAE/C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAChD,cAAc,UAAU,CAAA;AAaxB,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { SenderMessageKey } from "./sender-message-key.js";
2
+ export declare class SenderChainKey {
3
+ private readonly iteration;
4
+ private readonly chainKey;
5
+ constructor(iteration: number, chainKey: Uint8Array | string);
6
+ getIteration(): number;
7
+ getSenderMessageKey(): SenderMessageKey;
8
+ getNext(): SenderChainKey;
9
+ getSeed(): Buffer;
10
+ private getDerivative;
11
+ }
12
+ //# sourceMappingURL=sender-chain-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sender-chain-key.d.ts","sourceRoot":"","sources":["../src/sender-chain-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAKvD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM;IAKrD,YAAY,IAAI,MAAM;IAItB,mBAAmB,IAAI,gBAAgB;IAIvC,OAAO,IAAI,cAAc;IAIzB,OAAO,IAAI,MAAM;IAIxB,OAAO,CAAC,aAAa;CAGtB"}
@@ -0,0 +1,26 @@
1
+ import * as crypto from "./crypto.js";
2
+ import { SenderMessageKey } from "./sender-message-key.js";
3
+ const MESSAGE_KEY_SEED = Buffer.from([0x01]);
4
+ const CHAIN_KEY_SEED = Buffer.from([0x02]);
5
+ export class SenderChainKey {
6
+ constructor(iteration, chainKey) {
7
+ this.iteration = iteration;
8
+ this.chainKey = typeof chainKey === "string" ? Buffer.from(chainKey, "base64") : Buffer.from(chainKey);
9
+ }
10
+ getIteration() {
11
+ return this.iteration;
12
+ }
13
+ getSenderMessageKey() {
14
+ return new SenderMessageKey(this.iteration, this.getDerivative(MESSAGE_KEY_SEED, this.chainKey));
15
+ }
16
+ getNext() {
17
+ return new SenderChainKey(this.iteration + 1, this.getDerivative(CHAIN_KEY_SEED, this.chainKey));
18
+ }
19
+ getSeed() {
20
+ return this.chainKey;
21
+ }
22
+ getDerivative(seed, key) {
23
+ return crypto.calculateMAC(key, seed);
24
+ }
25
+ }
26
+ //# sourceMappingURL=sender-chain-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sender-chain-key.js","sourceRoot":"","sources":["../src/sender-chain-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAE1C,MAAM,OAAO,cAAc;IAIzB,YAAY,SAAiB,EAAE,QAA6B;QAC1D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACxG,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAEM,mBAAmB;QACxB,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClG,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClG,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAEO,aAAa,CAAC,IAAgB,EAAE,GAAW;QACjD,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import { CiphertextMessage } from "./ciphertext-message.js";
2
+ export declare class SenderKeyDistributionMessage extends CiphertextMessage {
3
+ private readonly id;
4
+ private readonly iteration;
5
+ private readonly chainKey;
6
+ private readonly signatureKey;
7
+ private readonly serialized;
8
+ constructor(id?: number, iteration?: number, chainKey?: Uint8Array, signatureKey?: Uint8Array, serialized?: Uint8Array);
9
+ serialize(): Buffer;
10
+ getType(): number;
11
+ getIteration(): number;
12
+ getChainKey(): Buffer;
13
+ getSignatureKey(): Buffer;
14
+ getId(): number;
15
+ }
16
+ //# sourceMappingURL=sender-key-distribution-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sender-key-distribution-message.d.ts","sourceRoot":"","sources":["../src/sender-key-distribution-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGxD,qBAAa,4BAA6B,SAAQ,iBAAiB;IACjE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAGjC,EAAE,CAAC,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,UAAU,EACrB,YAAY,CAAC,EAAE,UAAU,EACzB,UAAU,CAAC,EAAE,UAAU;IAgDlB,SAAS,IAAI,MAAM;IAInB,OAAO,IAAI,MAAM;IAIjB,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB,eAAe,IAAI,MAAM;IAIzB,KAAK,IAAI,MAAM;CAGvB"}