@vex-chat/libvex 8.0.0 → 9.1.0
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/dist/Client.d.ts +54 -21
- package/dist/Client.d.ts.map +1 -1
- package/dist/Client.js +292 -164
- package/dist/Client.js.map +1 -1
- package/dist/codecs.d.ts +8 -4
- package/dist/codecs.d.ts.map +1 -1
- package/dist/codecs.js +2 -5
- package/dist/codecs.js.map +1 -1
- package/dist/http.js +15 -1
- package/dist/http.js.map +1 -1
- package/dist/keystore/node.d.ts.map +1 -1
- package/dist/keystore/node.js +9 -11
- package/dist/keystore/node.js.map +1 -1
- package/dist/storage/sqlite.d.ts +6 -0
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +139 -113
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/utils/verifyKeyBundle.d.ts.map +1 -1
- package/dist/utils/verifyKeyBundle.js +7 -10
- package/dist/utils/verifyKeyBundle.js.map +1 -1
- package/package.json +3 -3
- package/src/Client.ts +476 -219
- package/src/__tests__/harness/shared-suite.ts +110 -11
- package/src/__tests__/http.test.ts +22 -0
- package/src/__tests__/multi-device-delivery.test.ts +147 -0
- package/src/__tests__/node-keystore.test.ts +69 -0
- package/src/__tests__/prekey-reuse.test.ts +13 -13
- package/src/__tests__/storage-sqlite.test.ts +117 -1
- package/src/__tests__/verifyKeyBundle.test.ts +11 -8
- package/src/codecs.ts +2 -5
- package/src/http.ts +16 -1
- package/src/keystore/node.ts +17 -19
- package/src/storage/sqlite.ts +162 -139
- package/src/utils/verifyKeyBundle.ts +13 -13
package/dist/storage/sqlite.js
CHANGED
|
@@ -26,6 +26,10 @@ import { sql } from "kysely";
|
|
|
26
26
|
import { effectiveMessageRetentionHintDays } from "../retention.js";
|
|
27
27
|
import { parseSkippedKeysStrict } from "../utils/ratchet.js";
|
|
28
28
|
const STORAGE_MESSAGE_BLOB_PREFIX = "vex-storage-message:1\n";
|
|
29
|
+
const STORAGE_CIPHERTEXT_PREFIX = "vex-storage-cipher:2:";
|
|
30
|
+
const STORAGE_SECRET_TEXT_PREFIX = "vex-storage-secret:1:";
|
|
31
|
+
const STORAGE_NONCE_BYTES = 24;
|
|
32
|
+
const STORAGE_MAC_BYTES = 16;
|
|
29
33
|
export class SqliteStorage extends EventEmitter {
|
|
30
34
|
ready = false;
|
|
31
35
|
/** 32-byte AES-256 (or nacl) key for local at-rest `secretbox` (see `XUtils.deriveLocalAtRestAesKey`). */
|
|
@@ -324,7 +328,9 @@ export class SqliteStorage extends EventEmitter {
|
|
|
324
328
|
this.emit("ready");
|
|
325
329
|
}
|
|
326
330
|
catch (err) {
|
|
327
|
-
|
|
331
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
332
|
+
this.emit("error", error);
|
|
333
|
+
throw error;
|
|
328
334
|
}
|
|
329
335
|
finally {
|
|
330
336
|
this.initInFlight = null;
|
|
@@ -427,13 +433,25 @@ export class SqliteStorage extends EventEmitter {
|
|
|
427
433
|
return;
|
|
428
434
|
}
|
|
429
435
|
await this.untilReady();
|
|
436
|
+
if (this.isClosingNow()) {
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
430
439
|
// Fan-out to multiple devices reuses one `mailID` but each encrypt path
|
|
431
440
|
// uses a fresh nonce (table PK). Keep a single local row per logical mail.
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
.
|
|
435
|
-
|
|
436
|
-
|
|
441
|
+
let dupe;
|
|
442
|
+
try {
|
|
443
|
+
dupe = await this.db
|
|
444
|
+
.selectFrom("messages")
|
|
445
|
+
.select("nonce")
|
|
446
|
+
.where("mailID", "=", message.mailID)
|
|
447
|
+
.executeTakeFirst();
|
|
448
|
+
}
|
|
449
|
+
catch (err) {
|
|
450
|
+
if (this.isClosingNow() || this.isTornDownError(err)) {
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
throw err;
|
|
454
|
+
}
|
|
437
455
|
if (dupe !== undefined) {
|
|
438
456
|
return;
|
|
439
457
|
}
|
|
@@ -441,12 +459,9 @@ export class SqliteStorage extends EventEmitter {
|
|
|
441
459
|
const isPlaintextFailurePlaceholder = !message.decrypted &&
|
|
442
460
|
message.message === "" &&
|
|
443
461
|
message.extra === undefined;
|
|
444
|
-
const fips = getCryptoProfile() === "fips";
|
|
445
462
|
const encryptedMessage = isPlaintextFailurePlaceholder
|
|
446
463
|
? storedPlaintext
|
|
447
|
-
:
|
|
448
|
-
? await xSecretboxAsync(XUtils.decodeUTF8(storedPlaintext), XUtils.decodeHex(message.nonce), this.atRestAesKey)
|
|
449
|
-
: xSecretbox(XUtils.decodeUTF8(storedPlaintext), XUtils.decodeHex(message.nonce), this.atRestAesKey));
|
|
464
|
+
: await this.sealMessagePlaintext(storedPlaintext);
|
|
450
465
|
if (this.isClosingNow()) {
|
|
451
466
|
return;
|
|
452
467
|
}
|
|
@@ -526,63 +541,52 @@ export class SqliteStorage extends EventEmitter {
|
|
|
526
541
|
const sealedDHsPrivate = await this.sealHex(session.DHsPrivate);
|
|
527
542
|
const sealedRK = await this.sealHex(session.RK);
|
|
528
543
|
const sealedSK = await this.sealHex(session.SK);
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
skippedKeys: session.skippedKeys,
|
|
576
|
-
userID: session.userID,
|
|
577
|
-
verified: session.verified ? 1 : 0,
|
|
578
|
-
})
|
|
579
|
-
.where("sessionID", "=", session.sessionID)
|
|
580
|
-
.execute();
|
|
581
|
-
}
|
|
582
|
-
else {
|
|
583
|
-
throw err;
|
|
584
|
-
}
|
|
585
|
-
}
|
|
544
|
+
const sealedSkippedKeys = await this.sealSecretText(session.skippedKeys);
|
|
545
|
+
const values = {
|
|
546
|
+
CKr: sealedCKr,
|
|
547
|
+
CKs: sealedCKs,
|
|
548
|
+
deviceID: session.deviceID,
|
|
549
|
+
DHr: session.DHr,
|
|
550
|
+
DHsPrivate: sealedDHsPrivate,
|
|
551
|
+
DHsPublic: session.DHsPublic,
|
|
552
|
+
fingerprint: session.fingerprint,
|
|
553
|
+
lastUsed: session.lastUsed,
|
|
554
|
+
mode: session.mode,
|
|
555
|
+
Nr: session.Nr,
|
|
556
|
+
Ns: session.Ns,
|
|
557
|
+
PN: session.PN,
|
|
558
|
+
publicKey: session.publicKey,
|
|
559
|
+
RK: sealedRK,
|
|
560
|
+
sessionID: session.sessionID,
|
|
561
|
+
SK: sealedSK,
|
|
562
|
+
skippedKeys: sealedSkippedKeys,
|
|
563
|
+
userID: session.userID,
|
|
564
|
+
verified: session.verified ? 1 : 0,
|
|
565
|
+
};
|
|
566
|
+
await this.db
|
|
567
|
+
.insertInto("sessions")
|
|
568
|
+
.values(values)
|
|
569
|
+
.onConflict((conflict) => conflict.column("sessionID").doUpdateSet({
|
|
570
|
+
CKr: values.CKr,
|
|
571
|
+
CKs: values.CKs,
|
|
572
|
+
deviceID: values.deviceID,
|
|
573
|
+
DHr: values.DHr,
|
|
574
|
+
DHsPrivate: values.DHsPrivate,
|
|
575
|
+
DHsPublic: values.DHsPublic,
|
|
576
|
+
fingerprint: values.fingerprint,
|
|
577
|
+
lastUsed: values.lastUsed,
|
|
578
|
+
mode: values.mode,
|
|
579
|
+
Nr: values.Nr,
|
|
580
|
+
Ns: values.Ns,
|
|
581
|
+
PN: values.PN,
|
|
582
|
+
publicKey: values.publicKey,
|
|
583
|
+
RK: values.RK,
|
|
584
|
+
SK: values.SK,
|
|
585
|
+
skippedKeys: values.skippedKeys,
|
|
586
|
+
userID: values.userID,
|
|
587
|
+
verified: values.verified,
|
|
588
|
+
}))
|
|
589
|
+
.execute();
|
|
586
590
|
}
|
|
587
591
|
async updateMessage(mailID, patch) {
|
|
588
592
|
if (this.isClosingNow()) {
|
|
@@ -613,10 +617,7 @@ export class SqliteStorage extends EventEmitter {
|
|
|
613
617
|
: {}),
|
|
614
618
|
};
|
|
615
619
|
const storedPlaintext = encodeStoredMessagePlaintext(next);
|
|
616
|
-
const
|
|
617
|
-
const ct = fips
|
|
618
|
-
? await xSecretboxAsync(XUtils.decodeUTF8(storedPlaintext), XUtils.decodeHex(row.nonce), this.atRestAesKey)
|
|
619
|
-
: xSecretbox(XUtils.decodeUTF8(storedPlaintext), XUtils.decodeHex(row.nonce), this.atRestAesKey);
|
|
620
|
+
const sealedMessage = await this.sealMessagePlaintext(storedPlaintext);
|
|
620
621
|
if (this.isClosingNow()) {
|
|
621
622
|
return false;
|
|
622
623
|
}
|
|
@@ -624,7 +625,7 @@ export class SqliteStorage extends EventEmitter {
|
|
|
624
625
|
.updateTable("messages")
|
|
625
626
|
.set({
|
|
626
627
|
extra: null,
|
|
627
|
-
message:
|
|
628
|
+
message: sealedMessage,
|
|
628
629
|
})
|
|
629
630
|
.where("mailID", "=", mailID)
|
|
630
631
|
.executeTakeFirst();
|
|
@@ -632,7 +633,6 @@ export class SqliteStorage extends EventEmitter {
|
|
|
632
633
|
}
|
|
633
634
|
// ── Purge ────────────────────────────────────────────────────────────────
|
|
634
635
|
async decryptMessagesAsync(messages) {
|
|
635
|
-
const fips = getCryptoProfile() === "fips";
|
|
636
636
|
const out = [];
|
|
637
637
|
let processed = 0;
|
|
638
638
|
/** Yield so RN / web UIs can paint between at-rest decrypt blocks. */
|
|
@@ -645,17 +645,7 @@ export class SqliteStorage extends EventEmitter {
|
|
|
645
645
|
let plaintext = msg.message;
|
|
646
646
|
const isPlaintextFailurePlaceholder = !decryptedFlag && msg.message === "" && msg.extra === null;
|
|
647
647
|
if (!isPlaintextFailurePlaceholder) {
|
|
648
|
-
|
|
649
|
-
const nonce = XUtils.decodeHex(msg.nonce);
|
|
650
|
-
const decrypted = fips
|
|
651
|
-
? await xSecretboxOpenAsync(cipher, nonce, this.atRestAesKey)
|
|
652
|
-
: xSecretboxOpen(cipher, nonce, this.atRestAesKey);
|
|
653
|
-
if (decrypted) {
|
|
654
|
-
plaintext = XUtils.encodeUTF8(decrypted);
|
|
655
|
-
}
|
|
656
|
-
else {
|
|
657
|
-
throw new Error("Couldn't decrypt messages on disk!");
|
|
658
|
-
}
|
|
648
|
+
plaintext = await this.openMessagePlaintext(msg.message);
|
|
659
649
|
}
|
|
660
650
|
const direction = msg.direction === "incoming" ? "incoming" : "outgoing";
|
|
661
651
|
const storedPlaintext = decodeStoredMessagePlaintext(plaintext, msg.extra);
|
|
@@ -757,8 +747,13 @@ export class SqliteStorage extends EventEmitter {
|
|
|
757
747
|
return this.closing;
|
|
758
748
|
}
|
|
759
749
|
isDuplicateError(err) {
|
|
760
|
-
|
|
761
|
-
|
|
750
|
+
const message = err instanceof Error
|
|
751
|
+
? err.message
|
|
752
|
+
: typeof err === "string"
|
|
753
|
+
? err
|
|
754
|
+
: "";
|
|
755
|
+
if (message.toUpperCase().includes("UNIQUE")) {
|
|
756
|
+
return true;
|
|
762
757
|
}
|
|
763
758
|
if (typeof err === "object" && err !== null && "errno" in err) {
|
|
764
759
|
return err.errno === 19;
|
|
@@ -778,21 +773,39 @@ export class SqliteStorage extends EventEmitter {
|
|
|
778
773
|
}
|
|
779
774
|
return false;
|
|
780
775
|
}
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
776
|
+
async openMessagePlaintext(stored) {
|
|
777
|
+
if (!stored.startsWith(STORAGE_CIPHERTEXT_PREFIX)) {
|
|
778
|
+
throw new Error("Stored message is missing its encryption envelope.");
|
|
779
|
+
}
|
|
780
|
+
const plain = await this.unsealBytes(stored.slice(STORAGE_CIPHERTEXT_PREFIX.length));
|
|
781
|
+
return XUtils.encodeUTF8(plain);
|
|
782
|
+
}
|
|
783
|
+
async sealBytes(plaintext) {
|
|
786
784
|
const nonce = xMakeNonce();
|
|
787
785
|
const fips = getCryptoProfile() === "fips";
|
|
788
786
|
const ct = fips
|
|
789
|
-
? await xSecretboxAsync(
|
|
790
|
-
: xSecretbox(
|
|
787
|
+
? await xSecretboxAsync(plaintext, nonce, this.atRestAesKey)
|
|
788
|
+
: xSecretbox(plaintext, nonce, this.atRestAesKey);
|
|
791
789
|
const sealed = new Uint8Array(nonce.length + ct.length);
|
|
792
790
|
sealed.set(nonce);
|
|
793
791
|
sealed.set(ct, nonce.length);
|
|
794
792
|
return XUtils.encodeHex(sealed);
|
|
795
793
|
}
|
|
794
|
+
/**
|
|
795
|
+
* Encrypt a hex-encoded secret for at-rest storage.
|
|
796
|
+
* Returns hex(nonce || ciphertext) where nonce is 24 random bytes.
|
|
797
|
+
*/
|
|
798
|
+
async sealHex(plainHex) {
|
|
799
|
+
return this.sealBytes(XUtils.decodeHex(plainHex));
|
|
800
|
+
}
|
|
801
|
+
async sealMessagePlaintext(plaintext) {
|
|
802
|
+
return (STORAGE_CIPHERTEXT_PREFIX +
|
|
803
|
+
(await this.sealBytes(XUtils.decodeUTF8(plaintext))));
|
|
804
|
+
}
|
|
805
|
+
async sealSecretText(plaintext) {
|
|
806
|
+
return (STORAGE_SECRET_TEXT_PREFIX +
|
|
807
|
+
(await this.sealBytes(XUtils.decodeUTF8(plaintext))));
|
|
808
|
+
}
|
|
796
809
|
async sessionRowToSQLAsync(row) {
|
|
797
810
|
const rawSK = await this.unsealHex(row.SK);
|
|
798
811
|
const rawRK = row.RK ? await this.unsealHex(row.RK) : rawSK;
|
|
@@ -815,7 +828,7 @@ export class SqliteStorage extends EventEmitter {
|
|
|
815
828
|
RK: rawRK,
|
|
816
829
|
sessionID: row.sessionID,
|
|
817
830
|
SK: rawSK,
|
|
818
|
-
skippedKeys: row.skippedKeys,
|
|
831
|
+
skippedKeys: await this.unsealSecretText(row.skippedKeys),
|
|
819
832
|
userID: row.userID,
|
|
820
833
|
verified: row.verified !== 0,
|
|
821
834
|
};
|
|
@@ -843,14 +856,13 @@ export class SqliteStorage extends EventEmitter {
|
|
|
843
856
|
verified: session.verified,
|
|
844
857
|
};
|
|
845
858
|
}
|
|
846
|
-
|
|
847
|
-
* Decrypt a value produced by sealHex().
|
|
848
|
-
* Expects hex(nonce || ciphertext), returns the original hex string.
|
|
849
|
-
*/
|
|
850
|
-
async unsealHex(sealed) {
|
|
859
|
+
async unsealBytes(sealed) {
|
|
851
860
|
const bytes = XUtils.decodeHex(sealed);
|
|
852
|
-
|
|
853
|
-
|
|
861
|
+
if (bytes.length < STORAGE_NONCE_BYTES + STORAGE_MAC_BYTES) {
|
|
862
|
+
throw new Error("Sealed column value is truncated.");
|
|
863
|
+
}
|
|
864
|
+
const nonce = bytes.slice(0, STORAGE_NONCE_BYTES);
|
|
865
|
+
const ct = bytes.slice(STORAGE_NONCE_BYTES);
|
|
854
866
|
const fips = getCryptoProfile() === "fips";
|
|
855
867
|
const plain = fips
|
|
856
868
|
? await xSecretboxOpenAsync(ct, nonce, this.atRestAesKey)
|
|
@@ -858,21 +870,35 @@ export class SqliteStorage extends EventEmitter {
|
|
|
858
870
|
if (!plain) {
|
|
859
871
|
throw new Error("Failed to decrypt sealed column value.");
|
|
860
872
|
}
|
|
861
|
-
return
|
|
873
|
+
return plain;
|
|
874
|
+
}
|
|
875
|
+
/**
|
|
876
|
+
* Decrypt a value produced by sealHex().
|
|
877
|
+
* Expects hex(nonce || ciphertext), returns the original hex string.
|
|
878
|
+
*/
|
|
879
|
+
async unsealHex(sealed) {
|
|
880
|
+
return XUtils.encodeHex(await this.unsealBytes(sealed));
|
|
881
|
+
}
|
|
882
|
+
async unsealSecretText(stored) {
|
|
883
|
+
if (!stored.startsWith(STORAGE_SECRET_TEXT_PREFIX)) {
|
|
884
|
+
throw new Error("Stored secret is missing its encryption envelope.");
|
|
885
|
+
}
|
|
886
|
+
const plain = await this.unsealBytes(stored.slice(STORAGE_SECRET_TEXT_PREFIX.length));
|
|
887
|
+
return XUtils.encodeUTF8(plain);
|
|
862
888
|
}
|
|
863
889
|
async untilReady() {
|
|
864
|
-
if (this.
|
|
890
|
+
if (this.closing) {
|
|
891
|
+
throw new Error("SqliteStorage is closed.");
|
|
892
|
+
}
|
|
893
|
+
if (this.ready) {
|
|
865
894
|
return;
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
};
|
|
874
|
-
check();
|
|
875
|
-
});
|
|
895
|
+
}
|
|
896
|
+
if (this.initInFlight) {
|
|
897
|
+
await this.initInFlight;
|
|
898
|
+
}
|
|
899
|
+
else {
|
|
900
|
+
await this.init();
|
|
901
|
+
}
|
|
876
902
|
}
|
|
877
903
|
}
|
|
878
904
|
function decodeStoredMessagePlaintext(plaintext, rowExtra) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyKeyBundle.d.ts","sourceRoot":"","sources":["../../src/utils/verifyKeyBundle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAkB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"verifyKeyBundle.d.ts","sourceRoot":"","sources":["../../src/utils/verifyKeyBundle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAkB,MAAM,iBAAiB,CAAC;AASzE,wBAAsB,yBAAyB,CAC3C,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC7B,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
* Licensed under AGPL-3.0. See LICENSE for details.
|
|
4
4
|
* Commercial licenses available at vex.wtf
|
|
5
5
|
*/
|
|
6
|
-
import { fipsEcdhRawPublicKeyFromEcdsaSpkiAsync,
|
|
7
|
-
import { fipsP256PreKeySignPayload } from "./fipsMailExtra.js";
|
|
6
|
+
import { fipsEcdhRawPublicKeyFromEcdsaSpkiAsync, xPreKeySignaturePayload, xSignOpenAsync, XUtils, } from "@vex-chat/crypto";
|
|
8
7
|
export async function verifyKeyBundleSignatures(keyBundle, device, cryptoProfile) {
|
|
9
8
|
const deviceSignKey = XUtils.decodeHex(device.signKey);
|
|
10
9
|
const expectedIdentity = cryptoProfile === "fips"
|
|
@@ -13,21 +12,19 @@ export async function verifyKeyBundleSignatures(keyBundle, device, cryptoProfile
|
|
|
13
12
|
if (!XUtils.bytesEqual(expectedIdentity, keyBundle.signKey)) {
|
|
14
13
|
throw new Error("Key bundle identity key does not match device.");
|
|
15
14
|
}
|
|
16
|
-
await verifyKeyBundleEntrySignature(keyBundle.preKey, device, deviceSignKey, cryptoProfile, "signed
|
|
15
|
+
await verifyKeyBundleEntrySignature(keyBundle.preKey, device, deviceSignKey, cryptoProfile, "signed");
|
|
17
16
|
if (keyBundle.otk) {
|
|
18
|
-
await verifyKeyBundleEntrySignature(keyBundle.otk, device, deviceSignKey, cryptoProfile, "one-time
|
|
17
|
+
await verifyKeyBundleEntrySignature(keyBundle.otk, device, deviceSignKey, cryptoProfile, "one-time");
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
|
-
async function verifyKeyBundleEntrySignature(entry, device, deviceSignKey, cryptoProfile,
|
|
20
|
+
async function verifyKeyBundleEntrySignature(entry, device, deviceSignKey, cryptoProfile, kind) {
|
|
22
21
|
if (entry.deviceID !== device.deviceID) {
|
|
23
|
-
throw new Error(`Key bundle ${
|
|
22
|
+
throw new Error(`Key bundle ${kind} prekey belongs to a different device.`);
|
|
24
23
|
}
|
|
25
|
-
const payload =
|
|
26
|
-
? fipsP256PreKeySignPayload(entry.publicKey)
|
|
27
|
-
: xEncode(xConstants.CURVE, entry.publicKey);
|
|
24
|
+
const payload = xPreKeySignaturePayload(entry.publicKey, kind, cryptoProfile);
|
|
28
25
|
const opened = await xSignOpenAsync(entry.signature, deviceSignKey);
|
|
29
26
|
if (!opened || !XUtils.bytesEqual(opened, payload)) {
|
|
30
|
-
throw new Error(`Key bundle ${
|
|
27
|
+
throw new Error(`Key bundle ${kind} prekey signature is invalid.`);
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
//# sourceMappingURL=verifyKeyBundle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyKeyBundle.js","sourceRoot":"","sources":["../../src/utils/verifyKeyBundle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EACH,sCAAsC,EACtC,
|
|
1
|
+
{"version":3,"file":"verifyKeyBundle.js","sourceRoot":"","sources":["../../src/utils/verifyKeyBundle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EACH,sCAAsC,EACtC,uBAAuB,EACvB,cAAc,EACd,MAAM,GACT,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC3C,SAAoB,EACpB,MAAc,EACd,aAA4B;IAE5B,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAClB,aAAa,KAAK,MAAM;QACpB,CAAC,CAAC,MAAM,sCAAsC,CAAC,aAAa,CAAC;QAC7D,CAAC,CAAC,aAAa,CAAC;IAExB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,6BAA6B,CAC/B,SAAS,CAAC,MAAM,EAChB,MAAM,EACN,aAAa,EACb,aAAa,EACb,QAAQ,CACX,CAAC;IAEF,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,6BAA6B,CAC/B,SAAS,CAAC,GAAG,EACb,MAAM,EACN,aAAa,EACb,aAAa,EACb,UAAU,CACb,CAAC;IACN,CAAC;AACL,CAAC;AAED,KAAK,UAAU,6BAA6B,CACxC,KAAqB,EACrB,MAAc,EACd,aAAyB,EACzB,aAA4B,EAC5B,IAA2B;IAE3B,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACX,cAAc,IAAI,wCAAwC,CAC7D,CAAC;IACN,CAAC;IAED,MAAM,OAAO,GAAG,uBAAuB,CACnC,KAAK,CAAC,SAAS,EACf,IAAI,EACJ,aAAa,CAChB,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEpE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,+BAA+B,CAAC,CAAC;IACvE,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vex-chat/libvex",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.1.0",
|
|
4
4
|
"description": "Library for communicating with xchat server.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -92,8 +92,8 @@
|
|
|
92
92
|
"msgpackr": "^1.11.9",
|
|
93
93
|
"uuid": "^14.0.0",
|
|
94
94
|
"zod": "^4.3.6",
|
|
95
|
-
"@vex-chat/
|
|
96
|
-
"@vex-chat/
|
|
95
|
+
"@vex-chat/types": "^4.3.3",
|
|
96
|
+
"@vex-chat/crypto": "^11.0.0"
|
|
97
97
|
},
|
|
98
98
|
"peerDependencies": {
|
|
99
99
|
"better-sqlite3": ">=11.0.0"
|