@neykoor/libsignal-node 1.0.9 → 1.0.11
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.
- package/README.md +69 -9
- package/lib/curve.d.ts +1 -1
- package/lib/curve.d.ts.map +1 -1
- package/lib/curve.js +31 -15
- package/lib/curve.js.map +1 -1
- package/lib/file-storage.d.ts +62 -0
- package/lib/file-storage.d.ts.map +1 -0
- package/lib/file-storage.js +292 -0
- package/lib/file-storage.js.map +1 -0
- package/lib/group-session-builder.d.ts +1 -8
- package/lib/group-session-builder.d.ts.map +1 -1
- package/lib/group-session-builder.js +14 -8
- package/lib/group-session-builder.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/keyhelper.d.ts +1 -0
- package/lib/keyhelper.d.ts.map +1 -1
- package/lib/keyhelper.js +5 -1
- package/lib/keyhelper.js.map +1 -1
- package/lib/memory-storage.d.ts +15 -3
- package/lib/memory-storage.d.ts.map +1 -1
- package/lib/memory-storage.js +54 -3
- package/lib/memory-storage.js.map +1 -1
- package/lib/prekey-bundle-validator.d.ts +1 -0
- package/lib/prekey-bundle-validator.d.ts.map +1 -1
- package/lib/prekey-bundle-validator.js +1 -1
- package/lib/prekey-bundle-validator.js.map +1 -1
- package/lib/prekey-pool.d.ts +1 -0
- package/lib/prekey-pool.d.ts.map +1 -1
- package/lib/prekey-pool.js +11 -2
- package/lib/prekey-pool.js.map +1 -1
- package/lib/session-builder.js +1 -1
- package/lib/session-builder.js.map +1 -1
- package/lib/types.d.ts +1 -0
- package/lib/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,8 +30,12 @@ Mismo API, misma criptografía, cero `@ts-ignore`, tipado de punta a punta — y
|
|
|
30
30
|
- 🛡️ **Verificación de firma real en `initOutgoing`** — la librería original invoca `curve.verifySignature(..., true)`, y ese cuarto parámetro (`isInit`) hace que la firma del signed prekey **nunca se valide** (`return isInit ? true : curveJs.verify(...)`). En `libsignal-node-ts` se eliminó ese bypass: la firma del signed prekey siempre se verifica de verdad antes de iniciar sesión.
|
|
31
31
|
- ✅ **Validador de prekey bundles** (`assertValidDeviceKeyBundle`) — módulo nuevo que revisa longitudes de claves, rangos de `registrationId` y `keyId` antes de aceptar un bundle remoto. La librería original no valida nada de esto, solo confía en la forma del objeto.
|
|
32
32
|
- 🧹 **Borrado de material sensible en memoria** (`wipeBuffer` / `wipeBuffers`) — las claves de mensaje, cadenas y secretos intermedios se ponen a cero después de usarse en `encrypt`/`decrypt`. La versión original nunca limpia estos buffers, quedan en memoria hasta que el GC los recoja.
|
|
33
|
-
- 🔐 **Comparación de identidades a tiempo constante** — `MemorySignalStorage`
|
|
34
|
-
- 💾 **`MemorySignalStorage`
|
|
33
|
+
- 🔐 **Comparación de identidades a tiempo constante** — `MemorySignalStorage` y `FileSignalStorage` usan `timingSafeEqual` para comparar identity keys, evitando ataques de timing. La original no trae ningún storage de referencia.
|
|
34
|
+
- 💾 **`MemorySignalStorage` y `FileSignalStorage` incluidas** — implementaciones listas para usar de `SignalStorage` (sesiones, prekeys, identidades de confianza) **y** `SenderKeyStore` (sender keys de grupo). `FileSignalStorage` persiste todo a un único archivo JSON en disco (escritura atómica con debounce), para bots que necesitan sobrevivir reinicios. En la librería original tienes que escribir tu propio storage desde cero, no traen ninguno.
|
|
35
|
+
- 🔄 **Rotación de sender key al salir un miembro del grupo** (`GroupSessionBuilder.rotate`) — genera una sender key nueva desde cero y descarta la cadena anterior, para que un miembro que sale del grupo no pueda derivar mensajes futuros a partir del chain key que ya tenía. La original no expone ninguna forma de rotar o invalidar una sender key ya distribuida.
|
|
36
|
+
- 🧹 **Limpieza automática de signed prekeys retiradas** — al rotar el signed prekey, `MemorySignalStorage`/`FileSignalStorage` guardan el anterior por un grace period configurable (por defecto 3 días, para no romper prekey messages en tránsito) y luego lo borran solos. La original no borra nunca los signed prekeys viejos, se acumulan indefinidamente.
|
|
37
|
+
- 🔒 **Cifrado en reposo para `FileSignalStorage`** — con `encryptionKey` (32 bytes) cada guardado se cifra con AES-256-GCM antes de tocar disco. Sin esto (o con la librería original, que no trae ningún storage) tu identity key privada y todas tus sesiones quedan en JSON plano en el filesystem.
|
|
38
|
+
- ⏱️ **Mantenimiento automático de prekeys** (`PreKeyPoolManager.startAutoMaintenance`) — repone prekeys y rota el signed prekey solo, sin que el bot tenga que acordarse de llamarlo. La original deja esto completamente en manos de quien la usa.
|
|
35
39
|
- 🧾 **Sistema de logging inyectable** (`setLogger` / `getLogger`) — permite conectar tu logger (pino, winston, consola) o silenciar todo. La original usa `console.error` fijo, sin forma de desactivarlo.
|
|
36
40
|
- 🏷️ **Tipado estricto de punta a punta** — `strict: true`, `noUncheckedIndexedAccess`, interfaces para `SignalStorage`, `DeviceKeyBundle`, `EncryptedMessage`, etc. La original es JS puro sin ningún `.d.ts` propio para su lógica principal.
|
|
37
41
|
- 🟦 **100% TypeScript en `src/`**, incluidos los mensajes protobuf de Signal (`whisper-text-protocol.ts`) — sin un solo `.js` generado a mano.
|
|
@@ -43,15 +47,11 @@ Mismo API, misma criptografía, cero `@ts-ignore`, tipado de punta a punta — y
|
|
|
43
47
|
### Lo que tienen en común
|
|
44
48
|
|
|
45
49
|
- Implementación completa del **Double Ratchet** (X3DH, sesiones, ratcheting)
|
|
46
|
-
-
|
|
50
|
+
- Mensajería de **grupo con Sender Key** (`GroupCipher`, `GroupSessionBuilder`, `SenderKeyRecord`, `SenderKeyDistributionMessage`)
|
|
51
|
+
- Misma API pública: `ProtocolAddress`, `SessionBuilder`, `SessionCipher`, `SessionRecord`, `GroupCipher`, `GroupSessionBuilder`, `keyhelper`, `curve`, `crypto`
|
|
47
52
|
- Misma base criptográfica que `libsignal-node` (curve25519 y `protobufjs`), aquí vía `@neykoor/curve25519-ts`
|
|
48
53
|
- Soporte nativo de `x25519` vía `node:crypto` con fallback a `@neykoor/curve25519-ts`
|
|
49
54
|
|
|
50
|
-
### Pendiente por traer desde `libsignal-node` (roadmap)
|
|
51
|
-
|
|
52
|
-
- 🔁 **Workflows de CI/CD** (`.github/workflows`) — build, lint y publish automático a npm, como los que trae la original.
|
|
53
|
-
- 📜 **`SECURITY.md` y `CODE_OF_CONDUCT.md`** — políticas de reporte de vulnerabilidades y de comunidad que la original sí documenta.
|
|
54
|
-
|
|
55
55
|
## 📦 Instalación
|
|
56
56
|
|
|
57
57
|
```bash
|
|
@@ -82,7 +82,7 @@ const { PreKeyWhisperMessage } = protobufs
|
|
|
82
82
|
Y en el `package.json` de tu proyecto, quita la dependencia `libsignal` y agrega:
|
|
83
83
|
|
|
84
84
|
```json
|
|
85
|
-
"@neykoor/libsignal-node": "^1.0.
|
|
85
|
+
"@neykoor/libsignal-node": "^1.0.10"
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
## 📖 Uso básico
|
|
@@ -104,6 +104,66 @@ const { type, body } = await cipher.encrypt(Buffer.from('hola mundo'))
|
|
|
104
104
|
|
|
105
105
|
`storage` debe implementar la interfaz `SignalStorage` exportada desde el paquete (o puedes usar `MemorySignalStorage`, incluida para pruebas rápidas y almacenamiento en memoria).
|
|
106
106
|
|
|
107
|
+
## 💾 Storage persistente
|
|
108
|
+
|
|
109
|
+
Para bots que deben sobrevivir reinicios, usa `FileSignalStorage` en vez de `MemorySignalStorage`:
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
import { FileSignalStorage } from '@neykoor/libsignal-node'
|
|
113
|
+
|
|
114
|
+
const storage = FileSignalStorage.create('./auth/session.json')
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Si el archivo no existe, genera `identityKeyPair` y `registrationId` nuevos y los guarda; si existe, carga sesiones, prekeys, sender keys e identidad tal cual quedaron. Cada escritura se debounce y se vuelca a disco de forma atómica. Llama a `storage.flush()` antes de cerrar el proceso para forzar el guardado inmediato.
|
|
118
|
+
|
|
119
|
+
Para cifrar lo que se guarda en disco, pasa una `encryptionKey` de 32 bytes:
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
import { randomBytes } from 'crypto'
|
|
123
|
+
|
|
124
|
+
const encryptionKey = randomBytes(32) // guárdala fuera del código (variable de entorno, secret manager)
|
|
125
|
+
const storage = FileSignalStorage.create('./auth/session.json', { encryptionKey })
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Cada guardado se cifra con AES-256-GCM (IV aleatorio por escritura + auth tag). Si el archivo ya está cifrado y no le das la `encryptionKey` al cargarlo, tira error en vez de fallar en silencio.
|
|
129
|
+
|
|
130
|
+
## 👥 Mensajería de grupo
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
import { GroupSessionBuilder, GroupCipher, SenderKeyName } from '@neykoor/libsignal-node'
|
|
134
|
+
|
|
135
|
+
const senderKeyName = new SenderKeyName(groupId, addr)
|
|
136
|
+
const groupBuilder = new GroupSessionBuilder(storage)
|
|
137
|
+
const distributionMessage = await groupBuilder.create(senderKeyName)
|
|
138
|
+
// enviar distributionMessage al resto del grupo por sesión 1:1
|
|
139
|
+
|
|
140
|
+
const groupCipher = new GroupCipher(storage, senderKeyName)
|
|
141
|
+
const ciphertext = await groupCipher.encrypt(Buffer.from('hola grupo'))
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Cuando un miembro sale del grupo, rota tu propia sender key para que no pueda descifrar mensajes futuros:
|
|
145
|
+
|
|
146
|
+
```ts
|
|
147
|
+
const newDistributionMessage = await groupBuilder.rotate(senderKeyName)
|
|
148
|
+
// reenviar newDistributionMessage a los miembros que quedan
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## 🔑 Mantenimiento de prekeys
|
|
152
|
+
|
|
153
|
+
`PreKeyPoolManager` repone las prekeys y rota el signed prekey cuando hace falta. `startAutoMaintenance()` lo deja corriendo solo:
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
import { PreKeyPoolManager } from '@neykoor/libsignal-node'
|
|
157
|
+
|
|
158
|
+
const poolManager = new PreKeyPoolManager(storage, identityKeyPair)
|
|
159
|
+
const stopMaintenance = poolManager.startAutoMaintenance() // revisa cada hora por defecto
|
|
160
|
+
|
|
161
|
+
process.on('SIGINT', () => {
|
|
162
|
+
stopMaintenance()
|
|
163
|
+
process.exit(0)
|
|
164
|
+
})
|
|
165
|
+
```
|
|
166
|
+
|
|
107
167
|
## 🧪 Compilar desde el código fuente
|
|
108
168
|
|
|
109
169
|
```bash
|
package/lib/curve.d.ts
CHANGED
|
@@ -7,5 +7,5 @@ export declare function generateKeyPair(): KeyPair;
|
|
|
7
7
|
export declare function generateKeyPairAsync(): Promise<KeyPair>;
|
|
8
8
|
export declare function calculateAgreement(pubKeyInput: Uint8Array, privKey: Uint8Array): Buffer;
|
|
9
9
|
export declare function calculateSignature(privKey: Uint8Array, message: Uint8Array): Buffer;
|
|
10
|
-
export declare function verifySignature(pubKeyInput: Uint8Array, msg: Uint8Array, sig: Uint8Array
|
|
10
|
+
export declare function verifySignature(pubKeyInput: Uint8Array, msg: Uint8Array, sig: Uint8Array): boolean;
|
|
11
11
|
//# sourceMappingURL=curve.d.ts.map
|
package/lib/curve.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curve.d.ts","sourceRoot":"","sources":["../src/curve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"curve.d.ts","sourceRoot":"","sources":["../src/curve.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AA0DD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CASnE;AAED,wBAAgB,eAAe,IAAI,OAAO,CAwBzC;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAwC7D;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAiCvF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAQnF;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAgBlG"}
|
package/lib/curve.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as curveJs from "@neykoor/curve25519-ts";
|
|
2
2
|
import * as nodeCrypto from "crypto";
|
|
3
3
|
import { getLogger } from "./logger.js";
|
|
4
|
+
import { wipeBuffer } from "./util.js";
|
|
4
5
|
const PUBLIC_KEY_DER_PREFIX = Buffer.from([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0]);
|
|
5
6
|
const PRIVATE_KEY_DER_PREFIX = Buffer.from([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32]);
|
|
6
7
|
const KEY_BUNDLE_TYPE = Buffer.from([5]);
|
|
@@ -31,6 +32,16 @@ function scrubPubKeyFormat(pubKey) {
|
|
|
31
32
|
getLogger().warn("Expected pubkey of length 33, please report the ST and client that generated the pubkey");
|
|
32
33
|
return Buffer.from(pubKey);
|
|
33
34
|
}
|
|
35
|
+
function assertNotLowOrderSecret(secret) {
|
|
36
|
+
let check = 0;
|
|
37
|
+
for (let i = 0; i < secret.byteLength; i++) {
|
|
38
|
+
check |= secret[i];
|
|
39
|
+
}
|
|
40
|
+
if (check === 0) {
|
|
41
|
+
throw new Error("invalid public key (low-order point)");
|
|
42
|
+
}
|
|
43
|
+
return secret;
|
|
44
|
+
}
|
|
34
45
|
function unclampEd25519PrivateKey(clampedSk) {
|
|
35
46
|
const unclampedSk = new Uint8Array(clampedSk);
|
|
36
47
|
unclampedSk[0] = unclampedSk[0] | 6;
|
|
@@ -41,7 +52,10 @@ function unclampEd25519PrivateKey(clampedSk) {
|
|
|
41
52
|
export function getPublicFromPrivateKey(privKey) {
|
|
42
53
|
const unclampedPK = unclampEd25519PrivateKey(privKey);
|
|
43
54
|
const keyPair = curveJs.generateKeyPair(unclampedPK);
|
|
44
|
-
|
|
55
|
+
const pubKey = prefixKeyInPublicKey(Buffer.from(keyPair.public));
|
|
56
|
+
unclampedPK.fill(0);
|
|
57
|
+
keyPair.private.fill(0);
|
|
58
|
+
return pubKey;
|
|
45
59
|
}
|
|
46
60
|
export function generateKeyPair() {
|
|
47
61
|
try {
|
|
@@ -59,10 +73,10 @@ export function generateKeyPair() {
|
|
|
59
73
|
catch (e) {
|
|
60
74
|
getLogger().debug(`x25519 native keygen failed, falling back to curve25519-js: ${e?.message}`);
|
|
61
75
|
const keyPair = curveJs.generateKeyPair(nodeCrypto.randomBytes(32));
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
};
|
|
76
|
+
const privKey = Buffer.from(keyPair.private);
|
|
77
|
+
const pubKey = prefixKeyInPublicKey(Buffer.from(keyPair.public));
|
|
78
|
+
keyPair.private.fill(0);
|
|
79
|
+
return { privKey, pubKey };
|
|
66
80
|
}
|
|
67
81
|
}
|
|
68
82
|
export async function generateKeyPairAsync() {
|
|
@@ -91,10 +105,10 @@ export async function generateKeyPairAsync() {
|
|
|
91
105
|
getLogger().debug(`x25519 native async keygen failed, falling back to curve25519-js: ${e?.message}`);
|
|
92
106
|
await new Promise((resolve) => setImmediate(resolve));
|
|
93
107
|
const keyPair = curveJs.generateKeyPair(nodeCrypto.randomBytes(32));
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
};
|
|
108
|
+
const privKey = Buffer.from(keyPair.private);
|
|
109
|
+
const pubKey = prefixKeyInPublicKey(Buffer.from(keyPair.public));
|
|
110
|
+
keyPair.private.fill(0);
|
|
111
|
+
return { privKey, pubKey };
|
|
98
112
|
}
|
|
99
113
|
}
|
|
100
114
|
export function calculateAgreement(pubKeyInput, privKey) {
|
|
@@ -104,8 +118,9 @@ export function calculateAgreement(pubKeyInput, privKey) {
|
|
|
104
118
|
throw new Error("Invalid public key");
|
|
105
119
|
}
|
|
106
120
|
if (typeof nodeCrypto.diffieHellman === "function") {
|
|
121
|
+
const privKeyDer = Buffer.concat([PRIVATE_KEY_DER_PREFIX, privKey]);
|
|
107
122
|
const nodePrivateKey = nodeCrypto.createPrivateKey({
|
|
108
|
-
key:
|
|
123
|
+
key: privKeyDer,
|
|
109
124
|
format: "der",
|
|
110
125
|
type: "pkcs8"
|
|
111
126
|
});
|
|
@@ -114,13 +129,14 @@ export function calculateAgreement(pubKeyInput, privKey) {
|
|
|
114
129
|
format: "der",
|
|
115
130
|
type: "spki"
|
|
116
131
|
});
|
|
117
|
-
|
|
132
|
+
wipeBuffer(privKeyDer);
|
|
133
|
+
return assertNotLowOrderSecret(nodeCrypto.diffieHellman({
|
|
118
134
|
privateKey: nodePrivateKey,
|
|
119
135
|
publicKey: nodePublicKey
|
|
120
|
-
});
|
|
136
|
+
}));
|
|
121
137
|
}
|
|
122
138
|
const secret = curveJs.sharedKey(privKey, pubKey);
|
|
123
|
-
return Buffer.from(secret);
|
|
139
|
+
return assertNotLowOrderSecret(Buffer.from(secret));
|
|
124
140
|
}
|
|
125
141
|
export function calculateSignature(privKey, message) {
|
|
126
142
|
validatePrivKey(privKey);
|
|
@@ -129,7 +145,7 @@ export function calculateSignature(privKey, message) {
|
|
|
129
145
|
}
|
|
130
146
|
return Buffer.from(curveJs.sign(privKey, message));
|
|
131
147
|
}
|
|
132
|
-
export function verifySignature(pubKeyInput, msg, sig
|
|
148
|
+
export function verifySignature(pubKeyInput, msg, sig) {
|
|
133
149
|
const pubKey = scrubPubKeyFormat(pubKeyInput);
|
|
134
150
|
if (!pubKey || pubKey.byteLength !== 32) {
|
|
135
151
|
throw new Error("Invalid public key");
|
|
@@ -140,6 +156,6 @@ export function verifySignature(pubKeyInput, msg, sig, isInit) {
|
|
|
140
156
|
if (!sig || sig.byteLength !== 64) {
|
|
141
157
|
throw new Error("Invalid signature");
|
|
142
158
|
}
|
|
143
|
-
return
|
|
159
|
+
return curveJs.verify(pubKey, msg, sig);
|
|
144
160
|
}
|
|
145
161
|
//# sourceMappingURL=curve.js.map
|
package/lib/curve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curve.js","sourceRoot":"","sources":["../src/curve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,KAAK,UAAU,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"curve.js","sourceRoot":"","sources":["../src/curve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { KeyPair } from "./curve.js";
|
|
2
|
+
import type { Direction } from "./direction.js";
|
|
3
|
+
import type { SignedPreKey } from "./keyhelper.js";
|
|
4
|
+
import type { PreKeyPoolStorage } from "./prekey-pool.js";
|
|
5
|
+
import { SenderKeyRecord } from "./sender-key-record.js";
|
|
6
|
+
import type { SenderKeyName } from "./sender-key-name.js";
|
|
7
|
+
import { SessionRecord } from "./session-record.js";
|
|
8
|
+
import type { SenderKeyStore, SignalStorage } from "./types.js";
|
|
9
|
+
interface FileSignalStorageOptions {
|
|
10
|
+
signedPreKeyGracePeriodMs?: number;
|
|
11
|
+
saveDebounceMs?: number;
|
|
12
|
+
encryptionKey?: Buffer;
|
|
13
|
+
}
|
|
14
|
+
export declare class FileSignalStorage implements SignalStorage, PreKeyPoolStorage, SenderKeyStore {
|
|
15
|
+
private filePath;
|
|
16
|
+
private identityKeyPair;
|
|
17
|
+
private registrationId;
|
|
18
|
+
private sessions;
|
|
19
|
+
private preKeys;
|
|
20
|
+
private signedPreKeys;
|
|
21
|
+
private trustedIdentities;
|
|
22
|
+
private senderKeys;
|
|
23
|
+
private retiredSignedPreKeys;
|
|
24
|
+
private nextPreKeyId;
|
|
25
|
+
private latestSignedPreKey;
|
|
26
|
+
private signedPreKeyGracePeriodMs;
|
|
27
|
+
private saveDebounceMs;
|
|
28
|
+
private encryptionKey;
|
|
29
|
+
private saveTimer;
|
|
30
|
+
private constructor();
|
|
31
|
+
static create(filePath: string, options?: FileSignalStorageOptions): FileSignalStorage;
|
|
32
|
+
private applySnapshot;
|
|
33
|
+
private toSnapshot;
|
|
34
|
+
private save;
|
|
35
|
+
private scheduleSave;
|
|
36
|
+
flush(): void;
|
|
37
|
+
loadSession(id: string): Promise<SessionRecord | undefined>;
|
|
38
|
+
storeSession(id: string, session: SessionRecord): Promise<void>;
|
|
39
|
+
loadSenderKey(senderKeyName: SenderKeyName): Promise<SenderKeyRecord | undefined>;
|
|
40
|
+
storeSenderKey(senderKeyName: SenderKeyName, record: SenderKeyRecord): Promise<void>;
|
|
41
|
+
removeSenderKey(senderKeyName: SenderKeyName): Promise<void>;
|
|
42
|
+
removeGroupSessions(groupId: string): Promise<void>;
|
|
43
|
+
isTrustedIdentity(identifier: string, identityKey: Buffer, _direction: Direction): Promise<boolean>;
|
|
44
|
+
saveIdentity(identifier: string, identityKey: Buffer): Promise<boolean>;
|
|
45
|
+
removeIdentity(identifier: string): Promise<void>;
|
|
46
|
+
private removeSessionsForIdentifier;
|
|
47
|
+
loadPreKey(id?: number | string): Promise<KeyPair | undefined>;
|
|
48
|
+
removePreKey(id: number): Promise<void>;
|
|
49
|
+
loadSignedPreKey(id?: number | string): Promise<KeyPair | undefined>;
|
|
50
|
+
getOurRegistrationId(): Promise<number>;
|
|
51
|
+
getOurIdentity(): Promise<KeyPair>;
|
|
52
|
+
storePreKey(id: number, keyPair: KeyPair): void;
|
|
53
|
+
storeSignedPreKey(idOrRecord: number | SignedPreKey, keyPair?: KeyPair): void;
|
|
54
|
+
removeSignedPreKey(id: number): Promise<void>;
|
|
55
|
+
private pruneRetiredSignedPreKeys;
|
|
56
|
+
getPreKeyCount(): Promise<number>;
|
|
57
|
+
getNextPreKeyId(): Promise<number>;
|
|
58
|
+
setNextPreKeyId(id: number): Promise<void>;
|
|
59
|
+
loadLatestSignedPreKey(): Promise<SignedPreKey | undefined>;
|
|
60
|
+
}
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=file-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-storage.d.ts","sourceRoot":"","sources":["../src/file-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { createCipheriv, createDecipheriv, randomBytes, timingSafeEqual } from "crypto";
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import * as keyhelper from "./keyhelper.js";
|
|
5
|
+
import { SenderKeyRecord } from "./sender-key-record.js";
|
|
6
|
+
import { SessionRecord } from "./session-record.js";
|
|
7
|
+
const DEFAULT_SIGNED_PRE_KEY_GRACE_PERIOD_MS = 3 * 24 * 60 * 60 * 1000;
|
|
8
|
+
const DEFAULT_SAVE_DEBOUNCE_MS = 25;
|
|
9
|
+
const ENCRYPTION_KEY_LENGTH = 32;
|
|
10
|
+
const ENCRYPTION_ALGORITHM = "aes-256-gcm";
|
|
11
|
+
const ENCRYPTION_IV_LENGTH = 12;
|
|
12
|
+
function isEncryptedPayload(value) {
|
|
13
|
+
return (!!value &&
|
|
14
|
+
typeof value === "object" &&
|
|
15
|
+
value.encrypted === true &&
|
|
16
|
+
typeof value.iv === "string" &&
|
|
17
|
+
typeof value.authTag === "string" &&
|
|
18
|
+
typeof value.data === "string");
|
|
19
|
+
}
|
|
20
|
+
function encryptPayload(plaintext, key) {
|
|
21
|
+
const iv = randomBytes(ENCRYPTION_IV_LENGTH);
|
|
22
|
+
const cipher = createCipheriv(ENCRYPTION_ALGORITHM, key, iv);
|
|
23
|
+
const ciphertext = Buffer.concat([cipher.update(plaintext, "utf-8"), cipher.final()]);
|
|
24
|
+
const payload = {
|
|
25
|
+
encrypted: true,
|
|
26
|
+
iv: iv.toString("base64"),
|
|
27
|
+
authTag: cipher.getAuthTag().toString("base64"),
|
|
28
|
+
data: ciphertext.toString("base64")
|
|
29
|
+
};
|
|
30
|
+
return JSON.stringify(payload);
|
|
31
|
+
}
|
|
32
|
+
function decryptPayload(payload, key) {
|
|
33
|
+
const decipher = createDecipheriv(ENCRYPTION_ALGORITHM, key, Buffer.from(payload.iv, "base64"));
|
|
34
|
+
decipher.setAuthTag(Buffer.from(payload.authTag, "base64"));
|
|
35
|
+
const plaintext = Buffer.concat([decipher.update(Buffer.from(payload.data, "base64")), decipher.final()]);
|
|
36
|
+
return plaintext.toString("utf-8");
|
|
37
|
+
}
|
|
38
|
+
function bufferReviver(_key, value) {
|
|
39
|
+
if (value &&
|
|
40
|
+
typeof value === "object" &&
|
|
41
|
+
value.type === "Buffer" &&
|
|
42
|
+
Array.isArray(value.data)) {
|
|
43
|
+
return Buffer.from(value.data);
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
function safeEqual(a, b) {
|
|
48
|
+
if (a.byteLength !== b.byteLength) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
return timingSafeEqual(a, b);
|
|
52
|
+
}
|
|
53
|
+
export class FileSignalStorage {
|
|
54
|
+
constructor(filePath, identityKeyPair, registrationId, options) {
|
|
55
|
+
this.sessions = new Map();
|
|
56
|
+
this.preKeys = new Map();
|
|
57
|
+
this.signedPreKeys = new Map();
|
|
58
|
+
this.trustedIdentities = new Map();
|
|
59
|
+
this.senderKeys = new Map();
|
|
60
|
+
this.retiredSignedPreKeys = new Map();
|
|
61
|
+
this.nextPreKeyId = 1;
|
|
62
|
+
this.filePath = filePath;
|
|
63
|
+
this.identityKeyPair = identityKeyPair;
|
|
64
|
+
this.registrationId = registrationId;
|
|
65
|
+
this.signedPreKeyGracePeriodMs = options.signedPreKeyGracePeriodMs ?? DEFAULT_SIGNED_PRE_KEY_GRACE_PERIOD_MS;
|
|
66
|
+
this.saveDebounceMs = options.saveDebounceMs ?? DEFAULT_SAVE_DEBOUNCE_MS;
|
|
67
|
+
this.encryptionKey = options.encryptionKey;
|
|
68
|
+
}
|
|
69
|
+
static create(filePath, options = {}) {
|
|
70
|
+
if (options.encryptionKey && options.encryptionKey.length !== ENCRYPTION_KEY_LENGTH) {
|
|
71
|
+
throw new RangeError(`encryptionKey must be ${ENCRYPTION_KEY_LENGTH} bytes`);
|
|
72
|
+
}
|
|
73
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
74
|
+
if (fs.existsSync(filePath)) {
|
|
75
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
76
|
+
const parsed = JSON.parse(raw);
|
|
77
|
+
let json;
|
|
78
|
+
if (isEncryptedPayload(parsed)) {
|
|
79
|
+
if (!options.encryptionKey) {
|
|
80
|
+
throw new Error("File is encrypted; encryptionKey is required");
|
|
81
|
+
}
|
|
82
|
+
json = decryptPayload(parsed, options.encryptionKey);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
json = raw;
|
|
86
|
+
}
|
|
87
|
+
const data = JSON.parse(json, bufferReviver);
|
|
88
|
+
const storage = new FileSignalStorage(filePath, data.identityKeyPair, data.registrationId, options);
|
|
89
|
+
storage.applySnapshot(data);
|
|
90
|
+
return storage;
|
|
91
|
+
}
|
|
92
|
+
const identityKeyPair = keyhelper.generateIdentityKeyPair();
|
|
93
|
+
const registrationId = keyhelper.generateRegistrationId();
|
|
94
|
+
const storage = new FileSignalStorage(filePath, identityKeyPair, registrationId, options);
|
|
95
|
+
storage.save();
|
|
96
|
+
return storage;
|
|
97
|
+
}
|
|
98
|
+
applySnapshot(data) {
|
|
99
|
+
this.nextPreKeyId = data.nextPreKeyId ?? 1;
|
|
100
|
+
this.latestSignedPreKey = data.latestSignedPreKey;
|
|
101
|
+
for (const [id, keyPair] of Object.entries(data.preKeys ?? {})) {
|
|
102
|
+
this.preKeys.set(Number(id), keyPair);
|
|
103
|
+
}
|
|
104
|
+
for (const [id, keyPair] of Object.entries(data.signedPreKeys ?? {})) {
|
|
105
|
+
this.signedPreKeys.set(Number(id), keyPair);
|
|
106
|
+
}
|
|
107
|
+
for (const [id, retiredAt] of Object.entries(data.retiredSignedPreKeys ?? {})) {
|
|
108
|
+
this.retiredSignedPreKeys.set(Number(id), retiredAt);
|
|
109
|
+
}
|
|
110
|
+
for (const [identifier, key] of Object.entries(data.trustedIdentities ?? {})) {
|
|
111
|
+
this.trustedIdentities.set(identifier, key);
|
|
112
|
+
}
|
|
113
|
+
for (const [id, buf] of Object.entries(data.sessions ?? {})) {
|
|
114
|
+
this.sessions.set(id, SessionRecord.deserialize(buf));
|
|
115
|
+
}
|
|
116
|
+
for (const [id, record] of Object.entries(data.senderKeys ?? {})) {
|
|
117
|
+
this.senderKeys.set(id, SenderKeyRecord.deserialize(record));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
toSnapshot() {
|
|
121
|
+
const sessions = {};
|
|
122
|
+
for (const [id, record] of this.sessions) {
|
|
123
|
+
sessions[id] = record.serialize();
|
|
124
|
+
}
|
|
125
|
+
const senderKeys = {};
|
|
126
|
+
for (const [id, record] of this.senderKeys) {
|
|
127
|
+
senderKeys[id] = record.serialize();
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
identityKeyPair: this.identityKeyPair,
|
|
131
|
+
registrationId: this.registrationId,
|
|
132
|
+
nextPreKeyId: this.nextPreKeyId,
|
|
133
|
+
latestSignedPreKey: this.latestSignedPreKey,
|
|
134
|
+
preKeys: Object.fromEntries(this.preKeys),
|
|
135
|
+
signedPreKeys: Object.fromEntries(this.signedPreKeys),
|
|
136
|
+
retiredSignedPreKeys: Object.fromEntries(this.retiredSignedPreKeys),
|
|
137
|
+
trustedIdentities: Object.fromEntries(this.trustedIdentities),
|
|
138
|
+
sessions,
|
|
139
|
+
senderKeys
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
save() {
|
|
143
|
+
const json = JSON.stringify(this.toSnapshot());
|
|
144
|
+
const payload = this.encryptionKey ? encryptPayload(json, this.encryptionKey) : json;
|
|
145
|
+
const tmpPath = `${this.filePath}.tmp`;
|
|
146
|
+
fs.writeFileSync(tmpPath, payload);
|
|
147
|
+
fs.renameSync(tmpPath, this.filePath);
|
|
148
|
+
}
|
|
149
|
+
scheduleSave() {
|
|
150
|
+
if (this.saveTimer) {
|
|
151
|
+
clearTimeout(this.saveTimer);
|
|
152
|
+
}
|
|
153
|
+
this.saveTimer = setTimeout(() => {
|
|
154
|
+
this.saveTimer = undefined;
|
|
155
|
+
this.save();
|
|
156
|
+
}, this.saveDebounceMs);
|
|
157
|
+
}
|
|
158
|
+
flush() {
|
|
159
|
+
if (this.saveTimer) {
|
|
160
|
+
clearTimeout(this.saveTimer);
|
|
161
|
+
this.saveTimer = undefined;
|
|
162
|
+
}
|
|
163
|
+
this.save();
|
|
164
|
+
}
|
|
165
|
+
async loadSession(id) {
|
|
166
|
+
return this.sessions.get(id);
|
|
167
|
+
}
|
|
168
|
+
async storeSession(id, session) {
|
|
169
|
+
this.sessions.set(id, session);
|
|
170
|
+
this.scheduleSave();
|
|
171
|
+
}
|
|
172
|
+
async loadSenderKey(senderKeyName) {
|
|
173
|
+
return this.senderKeys.get(senderKeyName.serialize());
|
|
174
|
+
}
|
|
175
|
+
async storeSenderKey(senderKeyName, record) {
|
|
176
|
+
this.senderKeys.set(senderKeyName.serialize(), record);
|
|
177
|
+
this.scheduleSave();
|
|
178
|
+
}
|
|
179
|
+
async removeSenderKey(senderKeyName) {
|
|
180
|
+
this.senderKeys.delete(senderKeyName.serialize());
|
|
181
|
+
this.scheduleSave();
|
|
182
|
+
}
|
|
183
|
+
async removeGroupSessions(groupId) {
|
|
184
|
+
const prefix = `${groupId}::`;
|
|
185
|
+
for (const key of this.senderKeys.keys()) {
|
|
186
|
+
if (key.startsWith(prefix)) {
|
|
187
|
+
this.senderKeys.delete(key);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
this.scheduleSave();
|
|
191
|
+
}
|
|
192
|
+
async isTrustedIdentity(identifier, identityKey, _direction) {
|
|
193
|
+
const existing = this.trustedIdentities.get(identifier);
|
|
194
|
+
if (!existing) {
|
|
195
|
+
this.trustedIdentities.set(identifier, identityKey);
|
|
196
|
+
this.scheduleSave();
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
return safeEqual(existing, identityKey);
|
|
200
|
+
}
|
|
201
|
+
async saveIdentity(identifier, identityKey) {
|
|
202
|
+
const existing = this.trustedIdentities.get(identifier);
|
|
203
|
+
const changed = !existing || !safeEqual(existing, identityKey);
|
|
204
|
+
this.trustedIdentities.set(identifier, identityKey);
|
|
205
|
+
if (existing && changed) {
|
|
206
|
+
this.removeSessionsForIdentifier(identifier);
|
|
207
|
+
}
|
|
208
|
+
this.scheduleSave();
|
|
209
|
+
return changed;
|
|
210
|
+
}
|
|
211
|
+
async removeIdentity(identifier) {
|
|
212
|
+
this.trustedIdentities.delete(identifier);
|
|
213
|
+
this.removeSessionsForIdentifier(identifier);
|
|
214
|
+
this.scheduleSave();
|
|
215
|
+
}
|
|
216
|
+
removeSessionsForIdentifier(identifier) {
|
|
217
|
+
const prefix = `${identifier}.`;
|
|
218
|
+
for (const key of this.sessions.keys()) {
|
|
219
|
+
if (key === identifier || key.startsWith(prefix)) {
|
|
220
|
+
this.sessions.delete(key);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async loadPreKey(id) {
|
|
225
|
+
if (id === undefined) {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
return this.preKeys.get(Number(id));
|
|
229
|
+
}
|
|
230
|
+
async removePreKey(id) {
|
|
231
|
+
this.preKeys.delete(id);
|
|
232
|
+
this.scheduleSave();
|
|
233
|
+
}
|
|
234
|
+
async loadSignedPreKey(id) {
|
|
235
|
+
if (id === undefined) {
|
|
236
|
+
return undefined;
|
|
237
|
+
}
|
|
238
|
+
return this.signedPreKeys.get(Number(id));
|
|
239
|
+
}
|
|
240
|
+
async getOurRegistrationId() {
|
|
241
|
+
return this.registrationId;
|
|
242
|
+
}
|
|
243
|
+
async getOurIdentity() {
|
|
244
|
+
return this.identityKeyPair;
|
|
245
|
+
}
|
|
246
|
+
storePreKey(id, keyPair) {
|
|
247
|
+
this.preKeys.set(id, keyPair);
|
|
248
|
+
this.scheduleSave();
|
|
249
|
+
}
|
|
250
|
+
storeSignedPreKey(idOrRecord, keyPair) {
|
|
251
|
+
if (typeof idOrRecord === "number") {
|
|
252
|
+
this.signedPreKeys.set(idOrRecord, keyPair);
|
|
253
|
+
this.scheduleSave();
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
if (this.latestSignedPreKey && this.latestSignedPreKey.keyId !== idOrRecord.keyId) {
|
|
257
|
+
this.retiredSignedPreKeys.set(this.latestSignedPreKey.keyId, Date.now());
|
|
258
|
+
}
|
|
259
|
+
this.signedPreKeys.set(idOrRecord.keyId, idOrRecord.keyPair);
|
|
260
|
+
this.latestSignedPreKey = idOrRecord;
|
|
261
|
+
this.pruneRetiredSignedPreKeys();
|
|
262
|
+
this.scheduleSave();
|
|
263
|
+
}
|
|
264
|
+
async removeSignedPreKey(id) {
|
|
265
|
+
this.signedPreKeys.delete(id);
|
|
266
|
+
this.retiredSignedPreKeys.delete(id);
|
|
267
|
+
this.scheduleSave();
|
|
268
|
+
}
|
|
269
|
+
pruneRetiredSignedPreKeys() {
|
|
270
|
+
const now = Date.now();
|
|
271
|
+
for (const [id, retiredAt] of this.retiredSignedPreKeys) {
|
|
272
|
+
if (now - retiredAt >= this.signedPreKeyGracePeriodMs) {
|
|
273
|
+
this.signedPreKeys.delete(id);
|
|
274
|
+
this.retiredSignedPreKeys.delete(id);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
async getPreKeyCount() {
|
|
279
|
+
return this.preKeys.size;
|
|
280
|
+
}
|
|
281
|
+
async getNextPreKeyId() {
|
|
282
|
+
return this.nextPreKeyId;
|
|
283
|
+
}
|
|
284
|
+
async setNextPreKeyId(id) {
|
|
285
|
+
this.nextPreKeyId = id;
|
|
286
|
+
this.scheduleSave();
|
|
287
|
+
}
|
|
288
|
+
async loadLatestSignedPreKey() {
|
|
289
|
+
return this.latestSignedPreKey;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=file-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-storage.js","sourceRoot":"","sources":["../src/file-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,15 +4,8 @@ import type { SenderKeyStore } from "./types.js";
|
|
|
4
4
|
export declare class GroupSessionBuilder {
|
|
5
5
|
private readonly senderKeyStore;
|
|
6
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
7
|
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
8
|
create(senderKeyName: SenderKeyName): Promise<SenderKeyDistributionMessage>;
|
|
9
|
+
rotate(senderKeyName: SenderKeyName): Promise<SenderKeyDistributionMessage>;
|
|
17
10
|
}
|
|
18
11
|
//# sourceMappingURL=group-session-builder.d.ts.map
|
|
@@ -1 +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;
|
|
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;IAKpC,OAAO,CACX,aAAa,EAAE,aAAa,EAC5B,4BAA4B,EAAE,4BAA4B,GACzD,OAAO,CAAC,IAAI,CAAC;IAcV,MAAM,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,4BAA4B,CAAC;IA4B3E,MAAM,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,4BAA4B,CAAC;CAwBlF"}
|
|
@@ -6,19 +6,11 @@ export class GroupSessionBuilder {
|
|
|
6
6
|
constructor(senderKeyStore) {
|
|
7
7
|
this.senderKeyStore = senderKeyStore;
|
|
8
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
9
|
async process(senderKeyName, senderKeyDistributionMessage) {
|
|
14
10
|
const senderKeyRecord = (await this.senderKeyStore.loadSenderKey(senderKeyName)) ?? new SenderKeyRecord();
|
|
15
11
|
senderKeyRecord.addSenderKeyState(senderKeyDistributionMessage.getId(), senderKeyDistributionMessage.getIteration(), senderKeyDistributionMessage.getChainKey(), senderKeyDistributionMessage.getSignatureKey());
|
|
16
12
|
await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord);
|
|
17
13
|
}
|
|
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
14
|
async create(senderKeyName) {
|
|
23
15
|
const senderKeyRecord = (await this.senderKeyStore.loadSenderKey(senderKeyName)) ?? new SenderKeyRecord();
|
|
24
16
|
if (senderKeyRecord.isEmpty()) {
|
|
@@ -35,5 +27,19 @@ export class GroupSessionBuilder {
|
|
|
35
27
|
const chainKey = state.getSenderChainKey();
|
|
36
28
|
return new SenderKeyDistributionMessage(state.getKeyId(), chainKey.getIteration(), chainKey.getSeed(), state.getSigningKeyPublic());
|
|
37
29
|
}
|
|
30
|
+
async rotate(senderKeyName) {
|
|
31
|
+
const keyId = groupKeyHelper.generateSenderKeyId();
|
|
32
|
+
const senderKey = groupKeyHelper.generateSenderKey();
|
|
33
|
+
const signingKey = groupKeyHelper.generateSenderSigningKey();
|
|
34
|
+
const senderKeyRecord = new SenderKeyRecord();
|
|
35
|
+
senderKeyRecord.setSenderKeyState(keyId, 0, senderKey, signingKey.pubKey, signingKey.privKey);
|
|
36
|
+
await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord);
|
|
37
|
+
const state = senderKeyRecord.getSenderKeyState();
|
|
38
|
+
if (!state) {
|
|
39
|
+
throw new SenderKeyError("Failed to rotate sender key state");
|
|
40
|
+
}
|
|
41
|
+
const chainKey = state.getSenderChainKey();
|
|
42
|
+
return new SenderKeyDistributionMessage(state.getKeyId(), chainKey.getIteration(), chainKey.getSeed(), state.getSigningKeyPublic());
|
|
43
|
+
}
|
|
38
44
|
}
|
|
39
45
|
//# sourceMappingURL=group-session-builder.js.map
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"group-session-builder.js","sourceRoot":"","sources":["../src/group-session-builder.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export { BaseKeyType } from "./base-key-type.js";
|
|
|
11
11
|
export { ChainType } from "./chain-type.js";
|
|
12
12
|
export { Direction } from "./direction.js";
|
|
13
13
|
export { MemorySignalStorage } from "./memory-storage.js";
|
|
14
|
+
export { FileSignalStorage } from "./file-storage.js";
|
|
14
15
|
export { PreKeyPoolManager } from "./prekey-pool.js";
|
|
15
16
|
export type { PreKeyPoolStorage, PreKeyPoolOptions, PreKeyPoolStatus } from "./prekey-pool.js";
|
|
16
17
|
export { setLogger, getLogger } from "./logger.js";
|
package/lib/index.d.ts.map
CHANGED
|
@@ -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,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC3F,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"}
|
|
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,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC3F,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
|
@@ -11,6 +11,7 @@ export { BaseKeyType } from "./base-key-type.js";
|
|
|
11
11
|
export { ChainType } from "./chain-type.js";
|
|
12
12
|
export { Direction } from "./direction.js";
|
|
13
13
|
export { MemorySignalStorage } from "./memory-storage.js";
|
|
14
|
+
export { FileSignalStorage } from "./file-storage.js";
|
|
14
15
|
export { PreKeyPoolManager } from "./prekey-pool.js";
|
|
15
16
|
export { setLogger, getLogger } from "./logger.js";
|
|
16
17
|
export { wipeBuffer, wipeBuffers } from "./util.js";
|
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,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,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"}
|
|
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,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,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"}
|
package/lib/keyhelper.d.ts
CHANGED
package/lib/keyhelper.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;AAOtC,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,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;AAED,wBAAsB,yBAAyB,CAAC,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAuBpH;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWxE;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBnB"}
|
package/lib/keyhelper.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import * as nodeCrypto from "crypto";
|
|
2
2
|
import * as curve from "./curve.js";
|
|
3
|
+
import { MAX_KEY_ID } from "./prekey-bundle-validator.js";
|
|
3
4
|
function isNonNegativeInteger(n) {
|
|
4
5
|
return typeof n === "number" && n % 1 === 0 && n >= 0;
|
|
5
6
|
}
|
|
7
|
+
export function wrapPreKeyId(id) {
|
|
8
|
+
return (((id - 1) % MAX_KEY_ID) + MAX_KEY_ID) % MAX_KEY_ID + 1;
|
|
9
|
+
}
|
|
6
10
|
export const DEFAULT_SIGNED_PRE_KEY_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
7
11
|
export function shouldRotateSignedPreKey(createdAt, maxAgeMs = DEFAULT_SIGNED_PRE_KEY_MAX_AGE_MS) {
|
|
8
12
|
if (!isNonNegativeInteger(createdAt)) {
|
|
@@ -95,7 +99,7 @@ export async function generatePreKeysBatch(startId, count, options = {}) {
|
|
|
95
99
|
if (i >= count) {
|
|
96
100
|
return;
|
|
97
101
|
}
|
|
98
|
-
results[i] = await generatePreKeyAsync(startId + i);
|
|
102
|
+
results[i] = await generatePreKeyAsync(wrapPreKeyId(startId + i));
|
|
99
103
|
}
|
|
100
104
|
}
|
|
101
105
|
await Promise.all(Array.from({ length: concurrency }, worker));
|
package/lib/keyhelper.js.map
CHANGED
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"keyhelper.js","sourceRoot":"","sources":["../src/keyhelper.ts"],"names":[],"mappings":"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"}
|
package/lib/memory-storage.d.ts
CHANGED
|
@@ -3,22 +3,32 @@ import type { Direction } from "./direction.js";
|
|
|
3
3
|
import type { SignedPreKey } from "./keyhelper.js";
|
|
4
4
|
import type { PreKeyPoolStorage } from "./prekey-pool.js";
|
|
5
5
|
import { SessionRecord } from "./session-record.js";
|
|
6
|
-
import type {
|
|
7
|
-
|
|
6
|
+
import type { SenderKeyName } from "./sender-key-name.js";
|
|
7
|
+
import { SenderKeyRecord } from "./sender-key-record.js";
|
|
8
|
+
import type { SenderKeyStore, SignalStorage } from "./types.js";
|
|
9
|
+
export declare class MemorySignalStorage implements SignalStorage, PreKeyPoolStorage, SenderKeyStore {
|
|
8
10
|
private identityKeyPair;
|
|
9
11
|
private registrationId;
|
|
10
12
|
private sessions;
|
|
11
13
|
private preKeys;
|
|
12
14
|
private signedPreKeys;
|
|
13
15
|
private trustedIdentities;
|
|
16
|
+
private senderKeys;
|
|
17
|
+
private retiredSignedPreKeys;
|
|
14
18
|
private nextPreKeyId;
|
|
15
19
|
private latestSignedPreKey;
|
|
16
|
-
|
|
20
|
+
private signedPreKeyGracePeriodMs;
|
|
21
|
+
constructor(identityKeyPair: KeyPair, registrationId: number, signedPreKeyGracePeriodMs?: number);
|
|
17
22
|
loadSession(id: string): Promise<SessionRecord | undefined>;
|
|
18
23
|
storeSession(id: string, session: SessionRecord): Promise<void>;
|
|
24
|
+
loadSenderKey(senderKeyName: SenderKeyName): Promise<SenderKeyRecord | undefined>;
|
|
25
|
+
storeSenderKey(senderKeyName: SenderKeyName, record: SenderKeyRecord): Promise<void>;
|
|
26
|
+
removeSenderKey(senderKeyName: SenderKeyName): Promise<void>;
|
|
27
|
+
removeGroupSessions(groupId: string): Promise<void>;
|
|
19
28
|
isTrustedIdentity(identifier: string, identityKey: Buffer, _direction: Direction): Promise<boolean>;
|
|
20
29
|
saveIdentity(identifier: string, identityKey: Buffer): Promise<boolean>;
|
|
21
30
|
removeIdentity(identifier: string): Promise<void>;
|
|
31
|
+
private removeSessionsForIdentifier;
|
|
22
32
|
loadPreKey(id?: number | string): Promise<KeyPair | undefined>;
|
|
23
33
|
removePreKey(id: number): Promise<void>;
|
|
24
34
|
loadSignedPreKey(id?: number | string): Promise<KeyPair | undefined>;
|
|
@@ -26,6 +36,8 @@ export declare class MemorySignalStorage implements SignalStorage, PreKeyPoolSto
|
|
|
26
36
|
getOurIdentity(): Promise<KeyPair>;
|
|
27
37
|
storePreKey(id: number, keyPair: KeyPair): void;
|
|
28
38
|
storeSignedPreKey(idOrRecord: number | SignedPreKey, keyPair?: KeyPair): void;
|
|
39
|
+
removeSignedPreKey(id: number): Promise<void>;
|
|
40
|
+
private pruneRetiredSignedPreKeys;
|
|
29
41
|
getPreKeyCount(): Promise<number>;
|
|
30
42
|
getNextPreKeyId(): Promise<number>;
|
|
31
43
|
setNextPreKeyId(id: number): Promise<void>;
|
|
@@ -1 +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,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"memory-storage.d.ts","sourceRoot":"","sources":["../src/memory-storage.ts"],"names":[],"mappings":"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"}
|
package/lib/memory-storage.js
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import { timingSafeEqual } from "crypto";
|
|
2
2
|
import { SessionRecord } from "./session-record.js";
|
|
3
|
+
import { SenderKeyRecord } from "./sender-key-record.js";
|
|
3
4
|
function safeEqual(a, b) {
|
|
4
5
|
if (a.byteLength !== b.byteLength) {
|
|
5
6
|
return false;
|
|
6
7
|
}
|
|
7
8
|
return timingSafeEqual(a, b);
|
|
8
9
|
}
|
|
10
|
+
const DEFAULT_SIGNED_PRE_KEY_GRACE_PERIOD_MS = 3 * 24 * 60 * 60 * 1000;
|
|
9
11
|
export class MemorySignalStorage {
|
|
10
|
-
constructor(identityKeyPair, registrationId) {
|
|
12
|
+
constructor(identityKeyPair, registrationId, signedPreKeyGracePeriodMs = DEFAULT_SIGNED_PRE_KEY_GRACE_PERIOD_MS) {
|
|
11
13
|
this.sessions = new Map();
|
|
12
14
|
this.preKeys = new Map();
|
|
13
15
|
this.signedPreKeys = new Map();
|
|
14
16
|
this.trustedIdentities = new Map();
|
|
17
|
+
this.senderKeys = new Map();
|
|
18
|
+
this.retiredSignedPreKeys = new Map();
|
|
15
19
|
this.nextPreKeyId = 1;
|
|
16
20
|
this.identityKeyPair = identityKeyPair;
|
|
17
21
|
this.registrationId = registrationId;
|
|
22
|
+
this.signedPreKeyGracePeriodMs = signedPreKeyGracePeriodMs;
|
|
18
23
|
}
|
|
19
24
|
async loadSession(id) {
|
|
20
25
|
return this.sessions.get(id);
|
|
@@ -22,6 +27,23 @@ export class MemorySignalStorage {
|
|
|
22
27
|
async storeSession(id, session) {
|
|
23
28
|
this.sessions.set(id, session);
|
|
24
29
|
}
|
|
30
|
+
async loadSenderKey(senderKeyName) {
|
|
31
|
+
return this.senderKeys.get(senderKeyName.serialize());
|
|
32
|
+
}
|
|
33
|
+
async storeSenderKey(senderKeyName, record) {
|
|
34
|
+
this.senderKeys.set(senderKeyName.serialize(), record);
|
|
35
|
+
}
|
|
36
|
+
async removeSenderKey(senderKeyName) {
|
|
37
|
+
this.senderKeys.delete(senderKeyName.serialize());
|
|
38
|
+
}
|
|
39
|
+
async removeGroupSessions(groupId) {
|
|
40
|
+
const prefix = `${groupId}::`;
|
|
41
|
+
for (const key of this.senderKeys.keys()) {
|
|
42
|
+
if (key.startsWith(prefix)) {
|
|
43
|
+
this.senderKeys.delete(key);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
25
47
|
async isTrustedIdentity(identifier, identityKey, _direction) {
|
|
26
48
|
const existing = this.trustedIdentities.get(identifier);
|
|
27
49
|
if (!existing) {
|
|
@@ -32,12 +54,24 @@ export class MemorySignalStorage {
|
|
|
32
54
|
}
|
|
33
55
|
async saveIdentity(identifier, identityKey) {
|
|
34
56
|
const existing = this.trustedIdentities.get(identifier);
|
|
57
|
+
const changed = !existing || !safeEqual(existing, identityKey);
|
|
35
58
|
this.trustedIdentities.set(identifier, identityKey);
|
|
36
|
-
|
|
59
|
+
if (existing && changed) {
|
|
60
|
+
this.removeSessionsForIdentifier(identifier);
|
|
61
|
+
}
|
|
62
|
+
return changed;
|
|
37
63
|
}
|
|
38
64
|
async removeIdentity(identifier) {
|
|
39
65
|
this.trustedIdentities.delete(identifier);
|
|
40
|
-
this.
|
|
66
|
+
this.removeSessionsForIdentifier(identifier);
|
|
67
|
+
}
|
|
68
|
+
removeSessionsForIdentifier(identifier) {
|
|
69
|
+
const prefix = `${identifier}.`;
|
|
70
|
+
for (const key of this.sessions.keys()) {
|
|
71
|
+
if (key === identifier || key.startsWith(prefix)) {
|
|
72
|
+
this.sessions.delete(key);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
41
75
|
}
|
|
42
76
|
async loadPreKey(id) {
|
|
43
77
|
if (id === undefined) {
|
|
@@ -68,8 +102,25 @@ export class MemorySignalStorage {
|
|
|
68
102
|
this.signedPreKeys.set(idOrRecord, keyPair);
|
|
69
103
|
return;
|
|
70
104
|
}
|
|
105
|
+
if (this.latestSignedPreKey && this.latestSignedPreKey.keyId !== idOrRecord.keyId) {
|
|
106
|
+
this.retiredSignedPreKeys.set(this.latestSignedPreKey.keyId, Date.now());
|
|
107
|
+
}
|
|
71
108
|
this.signedPreKeys.set(idOrRecord.keyId, idOrRecord.keyPair);
|
|
72
109
|
this.latestSignedPreKey = idOrRecord;
|
|
110
|
+
this.pruneRetiredSignedPreKeys();
|
|
111
|
+
}
|
|
112
|
+
async removeSignedPreKey(id) {
|
|
113
|
+
this.signedPreKeys.delete(id);
|
|
114
|
+
this.retiredSignedPreKeys.delete(id);
|
|
115
|
+
}
|
|
116
|
+
pruneRetiredSignedPreKeys() {
|
|
117
|
+
const now = Date.now();
|
|
118
|
+
for (const [id, retiredAt] of this.retiredSignedPreKeys) {
|
|
119
|
+
if (now - retiredAt >= this.signedPreKeyGracePeriodMs) {
|
|
120
|
+
this.signedPreKeys.delete(id);
|
|
121
|
+
this.retiredSignedPreKeys.delete(id);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
73
124
|
}
|
|
74
125
|
async getPreKeyCount() {
|
|
75
126
|
return this.preKeys.size;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-storage.js","sourceRoot":"","sources":["../src/memory-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAKxC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"memory-storage.js","sourceRoot":"","sources":["../src/memory-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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;AAQ9C,eAAO,MAAM,UAAU,WAAW,CAAA;AAsBlC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CA2BxE"}
|
|
@@ -4,7 +4,7 @@ const MAX_REGISTRATION_ID = 0x3fff;
|
|
|
4
4
|
const IDENTITY_KEY_LENGTH = 33;
|
|
5
5
|
const PUBLIC_KEY_LENGTH = 33;
|
|
6
6
|
const SIGNATURE_LENGTH = 64;
|
|
7
|
-
const MAX_KEY_ID = 0xffffff;
|
|
7
|
+
export const MAX_KEY_ID = 0xffffff;
|
|
8
8
|
function isNonNegativeInteger(n) {
|
|
9
9
|
return typeof n === "number" && Number.isInteger(n) && n >= 0;
|
|
10
10
|
}
|
|
@@ -1 +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;
|
|
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,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAA;AAElC,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"}
|
package/lib/prekey-pool.d.ts
CHANGED
|
@@ -37,5 +37,6 @@ export declare class PreKeyPoolManager {
|
|
|
37
37
|
rotateSignedPreKey(keyId: number): Promise<SignedPreKey>;
|
|
38
38
|
private _rotateSignedPreKey;
|
|
39
39
|
getStatus(): Promise<PreKeyPoolStatus>;
|
|
40
|
+
startAutoMaintenance(intervalMs?: number): () => void;
|
|
40
41
|
}
|
|
41
42
|
//# sourceMappingURL=prekey-pool.d.ts.map
|
package/lib/prekey-pool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prekey-pool.d.ts","sourceRoot":"","sources":["../src/prekey-pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAGvD,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC/D,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IAC1C,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IAC3C,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACjD,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7D,sBAAsB,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,YAAY,GAAG,SAAS,CAAA;CACvF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAKD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,oBAAoB,CAAQ;IACpC,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,oBAAoB,CAAmC;gBAEnD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAE,iBAAsB;IAS3F,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,gBAAgB,CAAC,KAAK,GAAE,MAA4B,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAahE,iBAAiB;IAazB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC;IAS3C,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;YAahD,mBAAmB;IAO3B,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"prekey-pool.d.ts","sourceRoot":"","sources":["../src/prekey-pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAGvD,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC/D,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IAC1C,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IAC3C,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACjD,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7D,sBAAsB,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,YAAY,GAAG,SAAS,CAAA;CACvF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAKD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,oBAAoB,CAAQ;IACpC,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,oBAAoB,CAAmC;gBAEnD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAE,iBAAsB;IAS3F,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,gBAAgB,CAAC,KAAK,GAAE,MAA4B,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAahE,iBAAiB;IAazB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC;IAS3C,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;YAahD,mBAAmB;IAO3B,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAe5C,oBAAoB,CAAC,UAAU,GAAE,MAAuB,GAAG,MAAM,IAAI;CAUtE"}
|
package/lib/prekey-pool.js
CHANGED
|
@@ -36,7 +36,7 @@ export class PreKeyPoolManager {
|
|
|
36
36
|
for (const preKey of generated) {
|
|
37
37
|
await this.storage.storePreKey(preKey.keyId, preKey.keyPair);
|
|
38
38
|
}
|
|
39
|
-
await this.storage.setNextPreKeyId(startId + count);
|
|
39
|
+
await this.storage.setNextPreKeyId(keyhelper.wrapPreKeyId(startId + count));
|
|
40
40
|
getLogger().debug(`Replenished ${count} prekeys starting at id ${startId}`);
|
|
41
41
|
return generated;
|
|
42
42
|
}
|
|
@@ -45,7 +45,7 @@ export class PreKeyPoolManager {
|
|
|
45
45
|
if (latest && !keyhelper.shouldRotateSignedPreKey(latest.createdAt, this.signedPreKeyMaxAgeMs)) {
|
|
46
46
|
return latest;
|
|
47
47
|
}
|
|
48
|
-
return this.rotateSignedPreKey(latest ? latest.keyId + 1 : 1);
|
|
48
|
+
return this.rotateSignedPreKey(latest ? keyhelper.wrapPreKeyId(latest.keyId + 1) : 1);
|
|
49
49
|
}
|
|
50
50
|
async rotateSignedPreKey(keyId) {
|
|
51
51
|
if (this.rotatingSignedPreKey) {
|
|
@@ -78,5 +78,14 @@ export class PreKeyPoolManager {
|
|
|
78
78
|
signedPreKeyAgeMs: latestSignedPreKey ? Date.now() - latestSignedPreKey.createdAt : undefined
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
|
+
startAutoMaintenance(intervalMs = 60 * 60 * 1000) {
|
|
82
|
+
const run = () => {
|
|
83
|
+
this.ensurePreKeys().catch(err => getLogger().warn("Failed to ensure prekeys", err));
|
|
84
|
+
this.ensureSignedPreKey().catch(err => getLogger().warn("Failed to ensure signed prekey", err));
|
|
85
|
+
};
|
|
86
|
+
run();
|
|
87
|
+
const timer = setInterval(run, intervalMs);
|
|
88
|
+
return () => clearInterval(timer);
|
|
89
|
+
}
|
|
81
90
|
}
|
|
82
91
|
//# sourceMappingURL=prekey-pool.js.map
|
package/lib/prekey-pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prekey-pool.js","sourceRoot":"","sources":["../src/prekey-pool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAyBpC,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAC5B,MAAM,uBAAuB,GAAG,GAAG,CAAA;AAEnC,MAAM,OAAO,iBAAiB;IAU5B,YAAY,OAA0B,EAAE,eAAwB,EAAE,UAA6B,EAAE;QAC/F,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAA;QACrD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,uBAAuB,CAAA;QACvE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QACtC,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,SAAS,CAAC,iCAAiC,CAAA;IACzG,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;QACjD,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3B,OAAM;QACR,CAAC;QAED,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB,IAAI,CAAC,cAAc;QACxD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAA;QAC1B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACjD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAA;QAChC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;QAC/B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,KAAa;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA;QACpD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QAEzG,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC9D,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"prekey-pool.js","sourceRoot":"","sources":["../src/prekey-pool.ts"],"names":[],"mappings":"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"}
|
package/lib/session-builder.js
CHANGED
|
@@ -19,7 +19,7 @@ export class SessionBuilder {
|
|
|
19
19
|
if (!(await this.storage.isTrustedIdentity(this.addr.id, device.identityKey, Direction.SENDING))) {
|
|
20
20
|
throw new errors.UntrustedIdentityKeyError(this.addr.id, device.identityKey);
|
|
21
21
|
}
|
|
22
|
-
if (!curve.verifySignature(device.identityKey, device.signedPreKey.publicKey, device.signedPreKey.signature
|
|
22
|
+
if (!curve.verifySignature(device.identityKey, device.signedPreKey.publicKey, device.signedPreKey.signature)) {
|
|
23
23
|
throw new Error("Signature validation failed");
|
|
24
24
|
}
|
|
25
25
|
const baseKey = curve.generateKeyPair();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-builder.js","sourceRoot":"","sources":["../src/session-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAClC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAG9D,MAAM,OAAO,cAAc;IAIzB,YAAY,OAAsB,EAAE,eAAgC;QAClE,IAAI,CAAC,IAAI,GAAG,eAAe,CAAA;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAuB;QACxC,0BAA0B,CAAC,MAAM,CAAC,CAAA;QAElC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;QACnC,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YACvC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBACjG,MAAM,IAAI,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YAC9E,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"session-builder.js","sourceRoot":"","sources":["../src/session-builder.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export interface SignalStorage {
|
|
|
19
19
|
export interface SenderKeyStore {
|
|
20
20
|
loadSenderKey(senderKeyName: SenderKeyName): Promise<SenderKeyRecord | undefined>;
|
|
21
21
|
storeSenderKey(senderKeyName: SenderKeyName, record: SenderKeyRecord): Promise<void>;
|
|
22
|
+
removeSenderKey(senderKeyName: SenderKeyName): Promise<void> | void;
|
|
22
23
|
}
|
|
23
24
|
export interface DeviceKeyBundle {
|
|
24
25
|
registrationId: number;
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD,YAAY,EAAE,OAAO,EAAE,CAAA;AAEvB,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAA;IAC3D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;IAC5G,YAAY,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;IAClF,cAAc,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACzD,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IAC9D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC9C,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,GAAG,SAAS,CAAA;IAC1F,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IAChD,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAA;IACjF,cAAc,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD,YAAY,EAAE,OAAO,EAAE,CAAA;AAEvB,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAA;IAC3D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;IAC5G,YAAY,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;IAClF,cAAc,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACzD,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IAC9D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC9C,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,GAAG,SAAS,CAAA;IAC1F,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IAChD,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAA;IACjF,cAAc,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpF,eAAe,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CACpE;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB"}
|