@neykoor/libsignal-node 1.0.4 → 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 (134) hide show
  1. package/README.md +9 -9
  2. package/lib/base-key-type.d.ts +5 -0
  3. package/lib/base-key-type.d.ts.map +1 -0
  4. package/lib/base-key-type.js +6 -0
  5. package/lib/base-key-type.js.map +1 -0
  6. package/lib/chain-type.d.ts +5 -0
  7. package/lib/chain-type.d.ts.map +1 -0
  8. package/lib/chain-type.js +6 -0
  9. package/lib/chain-type.js.map +1 -0
  10. package/lib/ciphertext-message.d.ts +10 -0
  11. package/lib/ciphertext-message.d.ts.map +1 -0
  12. package/lib/ciphertext-message.js +12 -0
  13. package/lib/ciphertext-message.js.map +1 -0
  14. package/lib/crypto.d.ts +7 -0
  15. package/lib/crypto.d.ts.map +1 -0
  16. package/lib/crypto.js +74 -0
  17. package/lib/crypto.js.map +1 -0
  18. package/lib/curve.d.ts +10 -0
  19. package/lib/curve.d.ts.map +1 -0
  20. package/lib/curve.js +113 -0
  21. package/lib/curve.js.map +1 -0
  22. package/lib/direction.d.ts +5 -0
  23. package/lib/direction.d.ts.map +1 -0
  24. package/lib/direction.js +6 -0
  25. package/lib/direction.js.map +1 -0
  26. package/lib/errors.d.ts +20 -0
  27. package/lib/errors.d.ts.map +1 -0
  28. package/lib/errors.js +35 -0
  29. package/lib/errors.js.map +1 -0
  30. package/lib/group-cipher.d.ts +12 -0
  31. package/lib/group-cipher.d.ts.map +1 -0
  32. package/lib/group-cipher.js +78 -0
  33. package/lib/group-cipher.js.map +1 -0
  34. package/lib/group-keyhelper.d.ts +5 -0
  35. package/lib/group-keyhelper.d.ts.map +1 -0
  36. package/lib/group-keyhelper.js +12 -0
  37. package/lib/group-keyhelper.js.map +1 -0
  38. package/lib/group-proto.d.ts +22 -0
  39. package/lib/group-proto.d.ts.map +1 -0
  40. package/lib/group-proto.js +95 -0
  41. package/lib/group-proto.js.map +1 -0
  42. package/lib/group-session-builder.d.ts +18 -0
  43. package/lib/group-session-builder.d.ts.map +1 -0
  44. package/lib/group-session-builder.js +39 -0
  45. package/lib/group-session-builder.js.map +1 -0
  46. package/lib/index.d.ts +34 -0
  47. package/lib/index.d.ts.map +1 -0
  48. package/lib/index.js +28 -0
  49. package/lib/index.js.map +1 -0
  50. package/lib/keyhelper.d.ts +19 -0
  51. package/lib/keyhelper.d.ts.map +1 -0
  52. package/lib/keyhelper.js +53 -0
  53. package/lib/keyhelper.js.map +1 -0
  54. package/lib/logger.d.ts +7 -0
  55. package/lib/logger.d.ts.map +1 -0
  56. package/lib/logger.js +12 -0
  57. package/lib/logger.js.map +1 -0
  58. package/lib/memory-storage.d.ts +26 -0
  59. package/lib/memory-storage.d.ts.map +1 -0
  60. package/lib/memory-storage.js +69 -0
  61. package/lib/memory-storage.js.map +1 -0
  62. package/lib/numeric-fingerprint.d.ts +6 -0
  63. package/lib/numeric-fingerprint.d.ts.map +1 -0
  64. package/lib/numeric-fingerprint.js +55 -0
  65. package/lib/numeric-fingerprint.js.map +1 -0
  66. package/lib/prekey-bundle-validator.d.ts +3 -0
  67. package/lib/prekey-bundle-validator.d.ts.map +1 -0
  68. package/lib/prekey-bundle-validator.js +45 -0
  69. package/lib/prekey-bundle-validator.js.map +1 -0
  70. package/lib/protobufs.d.ts +6 -0
  71. package/lib/protobufs.d.ts.map +1 -0
  72. package/lib/protobufs.js +4 -0
  73. package/lib/protobufs.js.map +1 -0
  74. package/lib/protocol-address.d.ts +9 -0
  75. package/lib/protocol-address.d.ts.map +1 -0
  76. package/lib/protocol-address.js +40 -0
  77. package/lib/protocol-address.js.map +1 -0
  78. package/lib/queue-job.d.ts +4 -0
  79. package/lib/queue-job.d.ts.map +1 -0
  80. package/lib/queue-job.js +43 -0
  81. package/lib/queue-job.js.map +1 -0
  82. package/lib/sender-chain-key.d.ts +12 -0
  83. package/lib/sender-chain-key.d.ts.map +1 -0
  84. package/lib/sender-chain-key.js +26 -0
  85. package/lib/sender-chain-key.js.map +1 -0
  86. package/lib/sender-key-distribution-message.d.ts +16 -0
  87. package/lib/sender-key-distribution-message.d.ts.map +1 -0
  88. package/lib/sender-key-distribution-message.js +57 -0
  89. package/lib/sender-key-distribution-message.js.map +1 -0
  90. package/lib/sender-key-message.d.ts +17 -0
  91. package/lib/sender-key-message.d.ts.map +1 -0
  92. package/lib/sender-key-message.js +66 -0
  93. package/lib/sender-key-message.js.map +1 -0
  94. package/lib/sender-key-name.d.ts +13 -0
  95. package/lib/sender-key-name.d.ts.map +1 -0
  96. package/lib/sender-key-name.js +43 -0
  97. package/lib/sender-key-name.js.map +1 -0
  98. package/lib/sender-key-record.d.ts +13 -0
  99. package/lib/sender-key-record.d.ts.map +1 -0
  100. package/lib/sender-key-record.js +37 -0
  101. package/lib/sender-key-record.js.map +1 -0
  102. package/lib/sender-key-state.d.ts +38 -0
  103. package/lib/sender-key-state.d.ts.map +1 -0
  104. package/lib/sender-key-state.js +79 -0
  105. package/lib/sender-key-state.js.map +1 -0
  106. package/lib/sender-message-key.d.ts +12 -0
  107. package/lib/sender-message-key.d.ts.map +1 -0
  108. package/lib/sender-message-key.js +31 -0
  109. package/lib/sender-message-key.js.map +1 -0
  110. package/lib/session-builder.d.ts +13 -0
  111. package/lib/session-builder.d.ts.map +1 -0
  112. package/lib/session-builder.js +154 -0
  113. package/lib/session-builder.js.map +1 -0
  114. package/lib/session-cipher.d.ts +30 -0
  115. package/lib/session-cipher.d.ts.map +1 -0
  116. package/lib/session-cipher.js +327 -0
  117. package/lib/session-cipher.js.map +1 -0
  118. package/lib/session-record.d.ts +113 -0
  119. package/lib/session-record.d.ts.map +1 -0
  120. package/lib/session-record.js +309 -0
  121. package/lib/session-record.js.map +1 -0
  122. package/lib/types.d.ts +49 -0
  123. package/lib/types.d.ts.map +1 -0
  124. package/lib/types.js +2 -0
  125. package/lib/types.js.map +1 -0
  126. package/lib/util.d.ts +3 -0
  127. package/lib/util.d.ts.map +1 -0
  128. package/lib/util.js +11 -0
  129. package/lib/util.js.map +1 -0
  130. package/lib/whisper-text-protocol.d.ts +86 -0
  131. package/lib/whisper-text-protocol.d.ts.map +1 -0
  132. package/lib/whisper-text-protocol.js +523 -0
  133. package/lib/whisper-text-protocol.js.map +1 -0
  134. package/package.json +3 -1
@@ -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 ADDED
@@ -0,0 +1,34 @@
1
+ export * as crypto from "./crypto.js";
2
+ export * as curve from "./curve.js";
3
+ export * as keyhelper from "./keyhelper.js";
4
+ export { ProtocolAddress } from "./protocol-address.js";
5
+ export { SessionBuilder } from "./session-builder.js";
6
+ export { assertValidDeviceKeyBundle } from "./prekey-bundle-validator.js";
7
+ export { SessionCipher } from "./session-cipher.js";
8
+ export { SessionRecord, SessionEntry } from "./session-record.js";
9
+ export { FingerprintGenerator } from "./numeric-fingerprint.js";
10
+ export { BaseKeyType } from "./base-key-type.js";
11
+ export { ChainType } from "./chain-type.js";
12
+ export { Direction } from "./direction.js";
13
+ export { MemorySignalStorage } from "./memory-storage.js";
14
+ export { setLogger, getLogger } from "./logger.js";
15
+ export type { SignalLogger } from "./logger.js";
16
+ export { wipeBuffer, wipeBuffers } from "./util.js";
17
+ export * from "./errors.js";
18
+ export type { KeyPair } from "./curve.js";
19
+ export type { SignalStorage, SenderKeyStore, DeviceKeyBundle, IncomingPreKeyMessage, EncryptedMessage } from "./types.js";
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";
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,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 ADDED
@@ -0,0 +1,28 @@
1
+ export * as crypto from "./crypto.js";
2
+ export * as curve from "./curve.js";
3
+ export * as keyhelper from "./keyhelper.js";
4
+ export { ProtocolAddress } from "./protocol-address.js";
5
+ export { SessionBuilder } from "./session-builder.js";
6
+ export { assertValidDeviceKeyBundle } from "./prekey-bundle-validator.js";
7
+ export { SessionCipher } from "./session-cipher.js";
8
+ export { SessionRecord, SessionEntry } from "./session-record.js";
9
+ export { FingerprintGenerator } from "./numeric-fingerprint.js";
10
+ export { BaseKeyType } from "./base-key-type.js";
11
+ export { ChainType } from "./chain-type.js";
12
+ export { Direction } from "./direction.js";
13
+ export { MemorySignalStorage } from "./memory-storage.js";
14
+ export { setLogger, getLogger } from "./logger.js";
15
+ export { wipeBuffer, wipeBuffers } from "./util.js";
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";
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;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,19 @@
1
+ import * as curve from "./curve.js";
2
+ import type { KeyPair } from "./curve.js";
3
+ export interface SignedPreKey {
4
+ keyId: number;
5
+ keyPair: KeyPair;
6
+ signature: Buffer;
7
+ createdAt: number;
8
+ }
9
+ export interface PreKey {
10
+ keyId: number;
11
+ keyPair: KeyPair;
12
+ }
13
+ export declare const DEFAULT_SIGNED_PRE_KEY_MAX_AGE_MS: number;
14
+ export declare function shouldRotateSignedPreKey(createdAt: number, maxAgeMs?: number): boolean;
15
+ export declare const generateIdentityKeyPair: typeof curve.generateKeyPair;
16
+ export declare function generateRegistrationId(): number;
17
+ export declare function generateSignedPreKey(identityKeyPair: KeyPair, signedKeyId: number): SignedPreKey;
18
+ export declare function generatePreKey(keyId: number): PreKey;
19
+ //# sourceMappingURL=keyhelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyhelper.d.ts","sourceRoot":"","sources":["../src/keyhelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,eAAO,MAAM,iCAAiC,QAA0B,CAAA;AAExE,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAA0C,GACnD,OAAO,CAUT;AAED,eAAO,MAAM,uBAAuB,8BAAwB,CAAA;AAE5D,wBAAgB,sBAAsB,IAAI,MAAM,CAO/C;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAuBhG;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWpD"}
@@ -0,0 +1,53 @@
1
+ import * as nodeCrypto from "crypto";
2
+ import * as curve from "./curve.js";
3
+ function isNonNegativeInteger(n) {
4
+ return typeof n === "number" && n % 1 === 0 && n >= 0;
5
+ }
6
+ export const DEFAULT_SIGNED_PRE_KEY_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
7
+ export function shouldRotateSignedPreKey(createdAt, maxAgeMs = DEFAULT_SIGNED_PRE_KEY_MAX_AGE_MS) {
8
+ if (!isNonNegativeInteger(createdAt)) {
9
+ throw new TypeError("Invalid argument for createdAt: " + createdAt);
10
+ }
11
+ if (!isNonNegativeInteger(maxAgeMs)) {
12
+ throw new TypeError("Invalid argument for maxAgeMs: " + maxAgeMs);
13
+ }
14
+ return Date.now() - createdAt >= maxAgeMs;
15
+ }
16
+ export const generateIdentityKeyPair = curve.generateKeyPair;
17
+ export function generateRegistrationId() {
18
+ let registrationId;
19
+ do {
20
+ registrationId = nodeCrypto.randomBytes(2).readUInt16BE(0) & 0x3fff;
21
+ } while (registrationId === 0);
22
+ return registrationId;
23
+ }
24
+ export function generateSignedPreKey(identityKeyPair, signedKeyId) {
25
+ if (!(identityKeyPair.privKey instanceof Buffer) ||
26
+ identityKeyPair.privKey.byteLength !== 32 ||
27
+ !(identityKeyPair.pubKey instanceof Buffer) ||
28
+ identityKeyPair.pubKey.byteLength !== 33) {
29
+ throw new TypeError("Invalid argument for identityKeyPair");
30
+ }
31
+ if (!isNonNegativeInteger(signedKeyId)) {
32
+ throw new TypeError("Invalid argument for signedKeyId: " + signedKeyId);
33
+ }
34
+ const keyPair = curve.generateKeyPair();
35
+ const sig = curve.calculateSignature(identityKeyPair.privKey, keyPair.pubKey);
36
+ return {
37
+ keyId: signedKeyId,
38
+ keyPair,
39
+ signature: sig,
40
+ createdAt: Date.now()
41
+ };
42
+ }
43
+ export function generatePreKey(keyId) {
44
+ if (!isNonNegativeInteger(keyId)) {
45
+ throw new TypeError("Invalid argument for keyId: " + keyId);
46
+ }
47
+ const keyPair = curve.generateKeyPair();
48
+ return {
49
+ keyId,
50
+ keyPair
51
+ };
52
+ }
53
+ //# sourceMappingURL=keyhelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyhelper.js","sourceRoot":"","sources":["../src/keyhelper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAGhC,SAAS,oBAAoB,CAAC,CAAS;IACrC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACvD,CAAC;AAcD,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAExE,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,WAAmB,iCAAiC;IAEpD,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,SAAS,CAAC,kCAAkC,GAAG,SAAS,CAAC,CAAA;IACrE,CAAC;IAED,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,iCAAiC,GAAG,QAAQ,CAAC,CAAA;IACnE,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,QAAQ,CAAA;AAC3C,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC,eAAe,CAAA;AAE5D,MAAM,UAAU,sBAAsB;IACpC,IAAI,cAAsB,CAAA;IAC1B,GAAG,CAAC;QACF,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;IACrE,CAAC,QAAQ,cAAc,KAAK,CAAC,EAAC;IAE9B,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,eAAwB,EAAE,WAAmB;IAChF,IACE,CAAC,CAAC,eAAe,CAAC,OAAO,YAAY,MAAM,CAAC;QAC5C,eAAe,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;QACzC,CAAC,CAAC,eAAe,CAAC,MAAM,YAAY,MAAM,CAAC;QAC3C,eAAe,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE,EACxC,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAA;IAC7D,CAAC;IAED,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,SAAS,CAAC,oCAAoC,GAAG,WAAW,CAAC,CAAA;IACzE,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,EAAE,CAAA;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAE7E,OAAO;QACL,KAAK,EAAE,WAAW;QAClB,OAAO;QACP,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,8BAA8B,GAAG,KAAK,CAAC,CAAA;IAC7D,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,EAAE,CAAA;IAEvC,OAAO;QACL,KAAK;QACL,OAAO;KACR,CAAA;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface SignalLogger {
2
+ warn(message: string, meta?: unknown): void;
3
+ debug(message: string, meta?: unknown): void;
4
+ }
5
+ export declare function setLogger(logger: SignalLogger | null): void;
6
+ export declare function getLogger(): SignalLogger;
7
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAC7C;AASD,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAE3D;AAED,wBAAgB,SAAS,IAAI,YAAY,CAExC"}
package/lib/logger.js ADDED
@@ -0,0 +1,12 @@
1
+ const noopLogger = {
2
+ warn() { },
3
+ debug() { }
4
+ };
5
+ let currentLogger = noopLogger;
6
+ export function setLogger(logger) {
7
+ currentLogger = logger || noopLogger;
8
+ }
9
+ export function getLogger() {
10
+ return currentLogger;
11
+ }
12
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,GAAiB;IAC/B,IAAI,KAAU,CAAC;IACf,KAAK,KAAU,CAAC;CACjB,CAAA;AAED,IAAI,aAAa,GAAiB,UAAU,CAAA;AAE5C,MAAM,UAAU,SAAS,CAAC,MAA2B;IACnD,aAAa,GAAG,MAAM,IAAI,UAAU,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,aAAa,CAAA;AACtB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { KeyPair } from "./curve.js";
2
+ import type { Direction } from "./direction.js";
3
+ import { SessionRecord } from "./session-record.js";
4
+ import type { SignalStorage } from "./types.js";
5
+ export declare class MemorySignalStorage implements SignalStorage {
6
+ private identityKeyPair;
7
+ private registrationId;
8
+ private sessions;
9
+ private preKeys;
10
+ private signedPreKeys;
11
+ private trustedIdentities;
12
+ constructor(identityKeyPair: KeyPair, registrationId: number);
13
+ loadSession(id: string): Promise<SessionRecord | undefined>;
14
+ storeSession(id: string, session: SessionRecord): Promise<void>;
15
+ isTrustedIdentity(identifier: string, identityKey: Buffer, _direction: Direction): Promise<boolean>;
16
+ saveIdentity(identifier: string, identityKey: Buffer): Promise<boolean>;
17
+ removeIdentity(identifier: string): Promise<void>;
18
+ loadPreKey(id?: number | string): Promise<KeyPair | undefined>;
19
+ removePreKey(id: number): Promise<void>;
20
+ loadSignedPreKey(id?: number | string): Promise<KeyPair | undefined>;
21
+ getOurRegistrationId(): Promise<number>;
22
+ getOurIdentity(): Promise<KeyPair>;
23
+ storePreKey(id: number, keyPair: KeyPair): void;
24
+ storeSignedPreKey(id: number, keyPair: KeyPair): void;
25
+ }
26
+ //# sourceMappingURL=memory-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-storage.d.ts","sourceRoot":"","sources":["../src/memory-storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAU5C,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,iBAAiB,CAA4B;gBAEzC,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM;IAKtD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAI3D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAUnG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMvE,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAQ9D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAQpE,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAI/C,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;CAGtD"}
@@ -0,0 +1,69 @@
1
+ import { timingSafeEqual } from "crypto";
2
+ import { SessionRecord } from "./session-record.js";
3
+ function safeEqual(a, b) {
4
+ if (a.byteLength !== b.byteLength) {
5
+ return false;
6
+ }
7
+ return timingSafeEqual(a, b);
8
+ }
9
+ export class MemorySignalStorage {
10
+ constructor(identityKeyPair, registrationId) {
11
+ this.sessions = new Map();
12
+ this.preKeys = new Map();
13
+ this.signedPreKeys = new Map();
14
+ this.trustedIdentities = new Map();
15
+ this.identityKeyPair = identityKeyPair;
16
+ this.registrationId = registrationId;
17
+ }
18
+ async loadSession(id) {
19
+ return this.sessions.get(id);
20
+ }
21
+ async storeSession(id, session) {
22
+ this.sessions.set(id, session);
23
+ }
24
+ async isTrustedIdentity(identifier, identityKey, _direction) {
25
+ const existing = this.trustedIdentities.get(identifier);
26
+ if (!existing) {
27
+ this.trustedIdentities.set(identifier, identityKey);
28
+ return true;
29
+ }
30
+ return safeEqual(existing, identityKey);
31
+ }
32
+ async saveIdentity(identifier, identityKey) {
33
+ const existing = this.trustedIdentities.get(identifier);
34
+ this.trustedIdentities.set(identifier, identityKey);
35
+ return !existing || !safeEqual(existing, identityKey);
36
+ }
37
+ async removeIdentity(identifier) {
38
+ this.trustedIdentities.delete(identifier);
39
+ this.sessions.delete(identifier);
40
+ }
41
+ async loadPreKey(id) {
42
+ if (id === undefined) {
43
+ return undefined;
44
+ }
45
+ return this.preKeys.get(Number(id));
46
+ }
47
+ async removePreKey(id) {
48
+ this.preKeys.delete(id);
49
+ }
50
+ async loadSignedPreKey(id) {
51
+ if (id === undefined) {
52
+ return undefined;
53
+ }
54
+ return this.signedPreKeys.get(Number(id));
55
+ }
56
+ async getOurRegistrationId() {
57
+ return this.registrationId;
58
+ }
59
+ async getOurIdentity() {
60
+ return this.identityKeyPair;
61
+ }
62
+ storePreKey(id, keyPair) {
63
+ this.preKeys.set(id, keyPair);
64
+ }
65
+ storeSignedPreKey(id, keyPair) {
66
+ this.signedPreKeys.set(id, keyPair);
67
+ }
68
+ }
69
+ //# sourceMappingURL=memory-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-storage.js","sourceRoot":"","sources":["../src/memory-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAGxC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGhD,SAAS,SAAS,CAAC,CAAS,EAAE,CAAS;IACrC,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,OAAO,mBAAmB;IAQ9B,YAAY,eAAwB,EAAE,cAAsB;QALpD,aAAQ,GAAG,IAAI,GAAG,EAAyB,CAAA;QAC3C,YAAO,GAAG,IAAI,GAAG,EAAmB,CAAA;QACpC,kBAAa,GAAG,IAAI,GAAG,EAAmB,CAAA;QAC1C,sBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAA;QAGnD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU,EAAE,OAAsB;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,UAAkB,EAAE,WAAmB,EAAE,UAAqB;QACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;YACnD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,WAAmB;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACvD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;QACnD,OAAO,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAkB;QACrC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAoB;QACnC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,EAAoB;QACzC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;IAED,WAAW,CAAC,EAAU,EAAE,OAAgB;QACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAC/B,CAAC;IAED,iBAAiB,CAAC,EAAU,EAAE,OAAgB;QAC5C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export declare class FingerprintGenerator {
2
+ private iterations;
3
+ constructor(iterations: number);
4
+ createFor(localIdentifier: string, localIdentityKey: ArrayBuffer, remoteIdentifier: string, remoteIdentityKey: ArrayBuffer): Promise<string>;
5
+ }
6
+ //# sourceMappingURL=numeric-fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numeric-fingerprint.d.ts","sourceRoot":"","sources":["../src/numeric-fingerprint.ts"],"names":[],"mappings":"AAmDA,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAAQ;gBAEd,UAAU,EAAE,MAAM;IAI9B,SAAS,CACP,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,WAAW,EAC7B,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,WAAW,GAC7B,OAAO,CAAC,MAAM,CAAC;CAenB"}
@@ -0,0 +1,55 @@
1
+ import * as crypto from "./crypto.js";
2
+ const VERSION = 0;
3
+ function iterateHash(data, key, count) {
4
+ let result = Buffer.from(data);
5
+ for (let i = 0; i < count; i++) {
6
+ const combined = Buffer.concat([result, Buffer.from(key)]);
7
+ result = crypto.hash(combined);
8
+ }
9
+ return new Uint8Array(result).buffer;
10
+ }
11
+ function shortToArrayBuffer(number) {
12
+ return new Uint16Array([number]).buffer;
13
+ }
14
+ function getEncodedChunk(hash, offset) {
15
+ const chunk = (hash[offset] * Math.pow(2, 32) +
16
+ hash[offset + 1] * Math.pow(2, 24) +
17
+ hash[offset + 2] * Math.pow(2, 16) +
18
+ hash[offset + 3] * Math.pow(2, 8) +
19
+ hash[offset + 4]) %
20
+ 100000;
21
+ let s = chunk.toString();
22
+ while (s.length < 5) {
23
+ s = "0" + s;
24
+ }
25
+ return s;
26
+ }
27
+ async function getDisplayStringFor(identifier, key, iterations) {
28
+ const bytes = Buffer.concat([Buffer.from(shortToArrayBuffer(VERSION)), Buffer.from(key), Buffer.from(identifier)]);
29
+ const arraybuf = new Uint8Array(bytes).buffer;
30
+ const output = new Uint8Array(iterateHash(arraybuf, key, iterations));
31
+ return (getEncodedChunk(output, 0) +
32
+ getEncodedChunk(output, 5) +
33
+ getEncodedChunk(output, 10) +
34
+ getEncodedChunk(output, 15) +
35
+ getEncodedChunk(output, 20) +
36
+ getEncodedChunk(output, 25));
37
+ }
38
+ export class FingerprintGenerator {
39
+ constructor(iterations) {
40
+ this.iterations = iterations;
41
+ }
42
+ createFor(localIdentifier, localIdentityKey, remoteIdentifier, remoteIdentityKey) {
43
+ if (typeof localIdentifier !== "string" ||
44
+ typeof remoteIdentifier !== "string" ||
45
+ !(localIdentityKey instanceof ArrayBuffer) ||
46
+ !(remoteIdentityKey instanceof ArrayBuffer)) {
47
+ throw new Error("Invalid arguments");
48
+ }
49
+ return Promise.all([
50
+ getDisplayStringFor(localIdentifier, localIdentityKey, this.iterations),
51
+ getDisplayStringFor(remoteIdentifier, remoteIdentityKey, this.iterations)
52
+ ]).then(fingerprints => fingerprints.sort().join(""));
53
+ }
54
+ }
55
+ //# sourceMappingURL=numeric-fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numeric-fingerprint.js","sourceRoot":"","sources":["../src/numeric-fingerprint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DeviceKeyBundle } from "./types.js";
2
+ export declare function assertValidDeviceKeyBundle(bundle: DeviceKeyBundle): void;
3
+ //# sourceMappingURL=prekey-bundle-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prekey-bundle-validator.d.ts","sourceRoot":"","sources":["../src/prekey-bundle-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AA8B9C,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CA2BxE"}
@@ -0,0 +1,45 @@
1
+ import { PreKeyError } from "./errors.js";
2
+ const MIN_REGISTRATION_ID = 1;
3
+ const MAX_REGISTRATION_ID = 0x3fff;
4
+ const IDENTITY_KEY_LENGTH = 33;
5
+ const PUBLIC_KEY_LENGTH = 33;
6
+ const SIGNATURE_LENGTH = 64;
7
+ const MAX_KEY_ID = 0xffffff;
8
+ function isNonNegativeInteger(n) {
9
+ return typeof n === "number" && Number.isInteger(n) && n >= 0;
10
+ }
11
+ function assertBufferLength(value, length, field) {
12
+ if (!(value instanceof Uint8Array)) {
13
+ throw new PreKeyError(`${field} must be a Uint8Array`);
14
+ }
15
+ if (value.byteLength !== length) {
16
+ throw new PreKeyError(`${field} has invalid length: expected ${length}, got ${value.byteLength}`);
17
+ }
18
+ }
19
+ function assertKeyId(value, field) {
20
+ if (!isNonNegativeInteger(value) || value > MAX_KEY_ID) {
21
+ throw new PreKeyError(`${field} is out of range: ${String(value)}`);
22
+ }
23
+ }
24
+ export function assertValidDeviceKeyBundle(bundle) {
25
+ if (!bundle || typeof bundle !== "object") {
26
+ throw new PreKeyError("Device key bundle must be an object");
27
+ }
28
+ if (!isNonNegativeInteger(bundle.registrationId) ||
29
+ bundle.registrationId < MIN_REGISTRATION_ID ||
30
+ bundle.registrationId > MAX_REGISTRATION_ID) {
31
+ throw new PreKeyError(`Invalid registrationId: ${String(bundle.registrationId)}`);
32
+ }
33
+ assertBufferLength(bundle.identityKey, IDENTITY_KEY_LENGTH, "identityKey");
34
+ if (!bundle.signedPreKey || typeof bundle.signedPreKey !== "object") {
35
+ throw new PreKeyError("Missing signedPreKey");
36
+ }
37
+ assertKeyId(bundle.signedPreKey.keyId, "signedPreKey.keyId");
38
+ assertBufferLength(bundle.signedPreKey.publicKey, PUBLIC_KEY_LENGTH, "signedPreKey.publicKey");
39
+ assertBufferLength(bundle.signedPreKey.signature, SIGNATURE_LENGTH, "signedPreKey.signature");
40
+ if (bundle.preKey) {
41
+ assertKeyId(bundle.preKey.keyId, "preKey.keyId");
42
+ assertBufferLength(bundle.preKey.publicKey, PUBLIC_KEY_LENGTH, "preKey.publicKey");
43
+ }
44
+ }
45
+ //# sourceMappingURL=prekey-bundle-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prekey-bundle-validator.js","sourceRoot":"","sources":["../src/prekey-bundle-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAC7B,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAClC,MAAM,mBAAmB,GAAG,EAAE,CAAA;AAC9B,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAC5B,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAC3B,MAAM,UAAU,GAAG,QAAQ,CAAA;AAE3B,SAAS,oBAAoB,CAAC,CAAU;IACtC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,MAAc,EAAE,KAAa;IACvE,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,WAAW,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,WAAW,CAAC,GAAG,KAAK,iCAAiC,MAAM,SAAS,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;IACnG,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,KAAa;IAChD,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,UAAU,EAAE,CAAC;QACvD,MAAM,IAAI,WAAW,CAAC,GAAG,KAAK,qBAAqB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACrE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAuB;IAChE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,WAAW,CAAC,qCAAqC,CAAC,CAAA;IAC9D,CAAC;IAED,IACE,CAAC,oBAAoB,CAAC,MAAM,CAAC,cAAc,CAAC;QAC5C,MAAM,CAAC,cAAc,GAAG,mBAAmB;QAC3C,MAAM,CAAC,cAAc,GAAG,mBAAmB,EAC3C,CAAC;QACD,MAAM,IAAI,WAAW,CAAC,2BAA2B,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IACnF,CAAC;IAED,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAA;IAE1E,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QACpE,MAAM,IAAI,WAAW,CAAC,sBAAsB,CAAC,CAAA;IAC/C,CAAC;IAED,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAA;IAC5D,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,CAAA;IAC9F,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAA;IAE7F,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;QAChD,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAA;IACpF,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { textsecure } from "./whisper-text-protocol.js";
2
+ export declare const WhisperMessage: typeof textsecure.WhisperMessage;
3
+ export declare const PreKeyWhisperMessage: typeof textsecure.PreKeyWhisperMessage;
4
+ export type WhisperMessage = textsecure.WhisperMessage;
5
+ export type PreKeyWhisperMessage = textsecure.PreKeyWhisperMessage;
6
+ //# sourceMappingURL=protobufs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protobufs.d.ts","sourceRoot":"","sources":["../src/protobufs.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE7D,eAAO,MAAM,cAAc,kCAAiC,CAAA;AAC5D,eAAO,MAAM,oBAAoB,wCAAuC,CAAA;AACxE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,cAAc,CAAA;AACtD,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,oBAAoB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import root, { textsecure } from "./whisper-text-protocol.js";
2
+ export const WhisperMessage = root.textsecure.WhisperMessage;
3
+ export const PreKeyWhisperMessage = root.textsecure.PreKeyWhisperMessage;
4
+ //# sourceMappingURL=protobufs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protobufs.js","sourceRoot":"","sources":["../src/protobufs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE7D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAA;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAA"}