@signalapp/libsignal-client 0.21.0 → 0.22.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/Native.d.ts CHANGED
@@ -293,6 +293,10 @@ export function UnidentifiedSenderMessageContent_GetMsgType(m: Wrapper<Unidentif
293
293
  export function UnidentifiedSenderMessageContent_GetSenderCert(m: Wrapper<UnidentifiedSenderMessageContent>): SenderCertificate;
294
294
  export function UnidentifiedSenderMessageContent_New(message: Wrapper<CiphertextMessage>, sender: Wrapper<SenderCertificate>, contentHint: number, groupId: Buffer | null): UnidentifiedSenderMessageContent;
295
295
  export function UnidentifiedSenderMessageContent_Serialize(obj: Wrapper<UnidentifiedSenderMessageContent>): Buffer;
296
+ export function Username_CandidatesFrom(nickname: string, minLen: number, maxLen: number): string;
297
+ export function Username_Hash(username: string): Buffer;
298
+ export function Username_Proof(username: string, randomness: Buffer): Buffer;
299
+ export function Username_Verify(proof: Buffer, hash: Buffer): void;
296
300
  export function UuidCiphertext_CheckValidContents(buffer: Buffer): void;
297
301
  export function initLogger(maxLevel: LogLevel, callback: (level: LogLevel, target: string, file: string | null, line: number | null, message: string) => void): void
298
302
  interface Aes256GcmSiv { readonly __type: unique symbol; }
package/dist/Errors.d.ts CHANGED
@@ -8,7 +8,13 @@ export declare enum ErrorCode {
8
8
  InvalidRegistrationId = 4,
9
9
  VerificationFailed = 5,
10
10
  InvalidSession = 6,
11
- InvalidSenderKeySession = 7
11
+ InvalidSenderKeySession = 7,
12
+ CannotBeEmpty = 8,
13
+ CannotStartWithDigit = 9,
14
+ MissingSeparator = 10,
15
+ BadNicknameCharacter = 11,
16
+ NicknameTooShort = 12,
17
+ NicknameTooLong = 13
12
18
  }
13
19
  export declare class LibSignalErrorBase extends Error {
14
20
  readonly code: ErrorCode;
@@ -17,32 +23,50 @@ export declare class LibSignalErrorBase extends Error {
17
23
  constructor(message: string, name: keyof typeof ErrorCode | undefined, operation: string, extraProps?: Record<string, unknown>);
18
24
  get addr(): ProtocolAddress | string;
19
25
  }
20
- export declare type LibSignalErrorCommon = Omit<LibSignalErrorBase, 'addr'>;
21
- export declare type GenericError = LibSignalErrorCommon & {
26
+ export type LibSignalErrorCommon = Omit<LibSignalErrorBase, 'addr'>;
27
+ export type GenericError = LibSignalErrorCommon & {
22
28
  code: ErrorCode.Generic;
23
29
  };
24
- export declare type DuplicatedMessageError = LibSignalErrorCommon & {
30
+ export type DuplicatedMessageError = LibSignalErrorCommon & {
25
31
  code: ErrorCode.DuplicatedMessage;
26
32
  };
27
- export declare type SealedSenderSelfSendError = LibSignalErrorCommon & {
33
+ export type SealedSenderSelfSendError = LibSignalErrorCommon & {
28
34
  code: ErrorCode.SealedSenderSelfSend;
29
35
  };
30
- export declare type UntrustedIdentityError = LibSignalErrorCommon & {
36
+ export type UntrustedIdentityError = LibSignalErrorCommon & {
31
37
  code: ErrorCode.UntrustedIdentity;
32
38
  addr: string;
33
39
  };
34
- export declare type InvalidRegistrationIdError = LibSignalErrorCommon & {
40
+ export type InvalidRegistrationIdError = LibSignalErrorCommon & {
35
41
  code: ErrorCode.InvalidRegistrationId;
36
42
  addr: ProtocolAddress;
37
43
  };
38
- export declare type VerificationFailedError = LibSignalErrorCommon & {
44
+ export type VerificationFailedError = LibSignalErrorCommon & {
39
45
  code: ErrorCode.VerificationFailed;
40
46
  };
41
- export declare type InvalidSessionError = LibSignalErrorCommon & {
47
+ export type InvalidSessionError = LibSignalErrorCommon & {
42
48
  code: ErrorCode.InvalidSession;
43
49
  };
44
- export declare type InvalidSenderKeySessionError = LibSignalErrorCommon & {
50
+ export type InvalidSenderKeySessionError = LibSignalErrorCommon & {
45
51
  code: ErrorCode.InvalidSenderKeySession;
46
52
  distributionId: string;
47
53
  };
48
- export declare type LibSignalError = GenericError | DuplicatedMessageError | SealedSenderSelfSendError | UntrustedIdentityError | InvalidRegistrationIdError | VerificationFailedError | InvalidSessionError | InvalidSenderKeySessionError;
54
+ export type CannotBeEmptyError = LibSignalErrorCommon & {
55
+ code: ErrorCode.CannotBeEmpty;
56
+ };
57
+ export type CannotStartWithDigitError = LibSignalErrorCommon & {
58
+ code: ErrorCode.CannotStartWithDigit;
59
+ };
60
+ export type MissingSeparatorError = LibSignalErrorCommon & {
61
+ code: ErrorCode.MissingSeparator;
62
+ };
63
+ export type BadNicknameCharacterError = LibSignalErrorCommon & {
64
+ code: ErrorCode.BadNicknameCharacter;
65
+ };
66
+ export type NicknameTooShortError = LibSignalErrorCommon & {
67
+ code: ErrorCode.NicknameTooShort;
68
+ };
69
+ export type NicknameTooLongError = LibSignalErrorCommon & {
70
+ code: ErrorCode.NicknameTooLong;
71
+ };
72
+ export type LibSignalError = GenericError | DuplicatedMessageError | SealedSenderSelfSendError | UntrustedIdentityError | InvalidRegistrationIdError | VerificationFailedError | InvalidSessionError | InvalidSenderKeySessionError | CannotBeEmptyError | CannotStartWithDigitError | MissingSeparatorError | BadNicknameCharacterError | NicknameTooShortError | NicknameTooLongError;
package/dist/Errors.js CHANGED
@@ -16,6 +16,12 @@ var ErrorCode;
16
16
  ErrorCode[ErrorCode["VerificationFailed"] = 5] = "VerificationFailed";
17
17
  ErrorCode[ErrorCode["InvalidSession"] = 6] = "InvalidSession";
18
18
  ErrorCode[ErrorCode["InvalidSenderKeySession"] = 7] = "InvalidSenderKeySession";
19
+ ErrorCode[ErrorCode["CannotBeEmpty"] = 8] = "CannotBeEmpty";
20
+ ErrorCode[ErrorCode["CannotStartWithDigit"] = 9] = "CannotStartWithDigit";
21
+ ErrorCode[ErrorCode["MissingSeparator"] = 10] = "MissingSeparator";
22
+ ErrorCode[ErrorCode["BadNicknameCharacter"] = 11] = "BadNicknameCharacter";
23
+ ErrorCode[ErrorCode["NicknameTooShort"] = 12] = "NicknameTooShort";
24
+ ErrorCode[ErrorCode["NicknameTooLong"] = 13] = "NicknameTooLong";
19
25
  })(ErrorCode = exports.ErrorCode || (exports.ErrorCode = {}));
20
26
  class LibSignalErrorBase extends Error {
21
27
  constructor(message, name, operation, extraProps) {
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  export * from './Errors';
3
3
  import { ProtocolAddress } from './Address';
4
4
  export * from './Address';
5
+ export * as usernames from './usernames';
5
6
  import * as Native from '../Native';
6
7
  export declare enum CiphertextMessageType {
7
8
  Whisper = 2,
@@ -18,7 +19,7 @@ export declare enum ContentHint {
18
19
  Resendable = 1,
19
20
  Implicit = 2
20
21
  }
21
- export declare type Uuid = string;
22
+ export type Uuid = string;
22
23
  export declare class HKDF {
23
24
  /**
24
25
  * @deprecated Use the top-level 'hkdf' function for standard HKDF behavior
package/dist/index.js CHANGED
@@ -27,12 +27,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
27
27
  });
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.initLogger = exports.LogLevel = exports.HsmEnclaveClient = exports.Cds2Client = exports.sealedSenderDecryptToUsmc = exports.sealedSenderDecryptMessage = exports.sealedSenderMultiRecipientMessageForSingleRecipient = exports.sealedSenderMultiRecipientEncrypt = exports.sealedSenderEncrypt = exports.sealedSenderEncryptMessage = exports.signalDecryptPreKey = exports.signalDecrypt = exports.signalEncrypt = exports.processPreKeyBundle = exports.DecryptionErrorMessage = exports.PlaintextContent = exports.CiphertextMessage = exports.SealedSenderDecryptionResult = exports.groupDecrypt = exports.groupEncrypt = exports.SenderKeyStore = exports.SignedPreKeyStore = exports.PreKeyStore = exports.IdentityKeyStore = exports.SessionStore = exports.UnidentifiedSenderMessageContent = exports.SenderKeyMessage = exports.processSenderKeyDistributionMessage = exports.SenderKeyDistributionMessage = exports.SenderCertificate = exports.SenderKeyRecord = exports.ServerCertificate = exports.SessionRecord = exports.PreKeySignalMessage = exports.SignalMessage = exports.SignedPreKeyRecord = exports.PreKeyRecord = exports.PreKeyBundle = exports.IdentityKeyPair = exports.PrivateKey = exports.PublicKey = exports.Aes256GcmSiv = exports.Fingerprint = exports.DisplayableFingerprint = exports.ScannableFingerprint = exports.hkdf = exports.HKDF = exports.ContentHint = exports.Direction = exports.CiphertextMessageType = void 0;
30
+ exports.LogLevel = exports.HsmEnclaveClient = exports.Cds2Client = exports.sealedSenderDecryptToUsmc = exports.sealedSenderDecryptMessage = exports.sealedSenderMultiRecipientMessageForSingleRecipient = exports.sealedSenderMultiRecipientEncrypt = exports.sealedSenderEncrypt = exports.sealedSenderEncryptMessage = exports.signalDecryptPreKey = exports.signalDecrypt = exports.signalEncrypt = exports.processPreKeyBundle = exports.DecryptionErrorMessage = exports.PlaintextContent = exports.CiphertextMessage = exports.SealedSenderDecryptionResult = exports.groupDecrypt = exports.groupEncrypt = exports.SenderKeyStore = exports.SignedPreKeyStore = exports.PreKeyStore = exports.IdentityKeyStore = exports.SessionStore = exports.UnidentifiedSenderMessageContent = exports.SenderKeyMessage = exports.processSenderKeyDistributionMessage = exports.SenderKeyDistributionMessage = exports.SenderCertificate = exports.SenderKeyRecord = exports.ServerCertificate = exports.SessionRecord = exports.PreKeySignalMessage = exports.SignalMessage = exports.SignedPreKeyRecord = exports.PreKeyRecord = exports.PreKeyBundle = exports.IdentityKeyPair = exports.PrivateKey = exports.PublicKey = exports.Aes256GcmSiv = exports.Fingerprint = exports.DisplayableFingerprint = exports.ScannableFingerprint = exports.hkdf = exports.HKDF = exports.ContentHint = exports.Direction = exports.CiphertextMessageType = exports.usernames = void 0;
31
+ exports.initLogger = void 0;
31
32
  const uuid = require("uuid");
32
33
  const Errors = require("./Errors");
33
34
  __exportStar(require("./Errors"), exports);
34
35
  const Address_1 = require("./Address");
35
36
  __exportStar(require("./Address"), exports);
37
+ exports.usernames = require("./usernames");
36
38
  const Native = require("../Native");
37
39
  Native.registerErrors(Errors);
38
40
  // These enums must be kept in sync with their Rust counterparts.
@@ -393,12 +395,12 @@ class SessionRecord {
393
395
  }
394
396
  exports.SessionRecord = SessionRecord;
395
397
  class ServerCertificate {
396
- constructor(nativeHandle) {
397
- this._nativeHandle = nativeHandle;
398
- }
399
398
  static _fromNativeHandle(nativeHandle) {
400
399
  return new ServerCertificate(nativeHandle);
401
400
  }
401
+ constructor(nativeHandle) {
402
+ this._nativeHandle = nativeHandle;
403
+ }
402
404
  static new(keyId, serverKey, trustRoot) {
403
405
  return new ServerCertificate(Native.ServerCertificate_New(keyId, serverKey, trustRoot));
404
406
  }
@@ -423,12 +425,12 @@ class ServerCertificate {
423
425
  }
424
426
  exports.ServerCertificate = ServerCertificate;
425
427
  class SenderKeyRecord {
426
- constructor(nativeHandle) {
427
- this._nativeHandle = nativeHandle;
428
- }
429
428
  static _fromNativeHandle(nativeHandle) {
430
429
  return new SenderKeyRecord(nativeHandle);
431
430
  }
431
+ constructor(nativeHandle) {
432
+ this._nativeHandle = nativeHandle;
433
+ }
432
434
  static deserialize(buffer) {
433
435
  return new SenderKeyRecord(Native.SenderKeyRecord_Deserialize(buffer));
434
436
  }
@@ -881,7 +883,7 @@ class HsmEnclaveClient {
881
883
  this._nativeHandle = nativeHandle;
882
884
  }
883
885
  static new(public_key, code_hashes) {
884
- code_hashes.forEach(hash => {
886
+ code_hashes.forEach((hash) => {
885
887
  if (hash.length != 32) {
886
888
  throw new Error('code hash length must be 32');
887
889
  }
@@ -915,37 +917,37 @@ function initLogger(maxLevel, callback) {
915
917
  let nativeMaxLevel;
916
918
  switch (maxLevel) {
917
919
  case LogLevel.Error:
918
- nativeMaxLevel = 1 /* Error */;
920
+ nativeMaxLevel = 1 /* Native.LogLevel.Error */;
919
921
  break;
920
922
  case LogLevel.Warn:
921
- nativeMaxLevel = 2 /* Warn */;
923
+ nativeMaxLevel = 2 /* Native.LogLevel.Warn */;
922
924
  break;
923
925
  case LogLevel.Info:
924
- nativeMaxLevel = 3 /* Info */;
926
+ nativeMaxLevel = 3 /* Native.LogLevel.Info */;
925
927
  break;
926
928
  case LogLevel.Debug:
927
- nativeMaxLevel = 4 /* Debug */;
929
+ nativeMaxLevel = 4 /* Native.LogLevel.Debug */;
928
930
  break;
929
931
  case LogLevel.Trace:
930
- nativeMaxLevel = 5 /* Trace */;
932
+ nativeMaxLevel = 5 /* Native.LogLevel.Trace */;
931
933
  break;
932
934
  }
933
935
  Native.initLogger(nativeMaxLevel, (nativeLevel, target, file, line, message) => {
934
936
  let level;
935
937
  switch (nativeLevel) {
936
- case 1 /* Error */:
938
+ case 1 /* Native.LogLevel.Error */:
937
939
  level = LogLevel.Error;
938
940
  break;
939
- case 2 /* Warn */:
941
+ case 2 /* Native.LogLevel.Warn */:
940
942
  level = LogLevel.Warn;
941
943
  break;
942
- case 3 /* Info */:
944
+ case 3 /* Native.LogLevel.Info */:
943
945
  level = LogLevel.Info;
944
946
  break;
945
- case 4 /* Debug */:
947
+ case 4 /* Native.LogLevel.Debug */:
946
948
  level = LogLevel.Debug;
947
949
  break;
948
- case 5 /* Trace */:
950
+ case 5 /* Native.LogLevel.Trace */:
949
951
  level = LogLevel.Trace;
950
952
  break;
951
953
  default:
@@ -0,0 +1,6 @@
1
+ /// <reference types="node" />
2
+ export declare function generateCandidates(nickname: string, minNicknameLength: number, maxNicknameLength: number): string[];
3
+ export declare function hash(username: string): Buffer;
4
+ export declare function generateProof(username: string): Buffer;
5
+ export declare function generateProofWithRandom(username: string, random: Buffer): Buffer;
6
+ export declare function verifyProof(proof: Buffer, hash: Buffer): void;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2023 Signal Messenger, LLC.
4
+ // SPDX-License-Identifier: AGPL-3.0-only
5
+ //
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.verifyProof = exports.generateProofWithRandom = exports.generateProof = exports.hash = exports.generateCandidates = void 0;
8
+ const crypto_1 = require("crypto");
9
+ const Constants_1 = require("./zkgroup/internal/Constants");
10
+ const Native = require("../Native");
11
+ function generateCandidates(nickname, minNicknameLength, maxNicknameLength) {
12
+ return Native.Username_CandidatesFrom(nickname, minNicknameLength, maxNicknameLength).split(',');
13
+ }
14
+ exports.generateCandidates = generateCandidates;
15
+ function hash(username) {
16
+ return Native.Username_Hash(username);
17
+ }
18
+ exports.hash = hash;
19
+ function generateProof(username) {
20
+ const random = (0, crypto_1.randomBytes)(Constants_1.RANDOM_LENGTH);
21
+ return generateProofWithRandom(username, random);
22
+ }
23
+ exports.generateProof = generateProof;
24
+ function generateProofWithRandom(username, random) {
25
+ return Native.Username_Proof(username, random);
26
+ }
27
+ exports.generateProofWithRandom = generateProofWithRandom;
28
+ // Only for testing. Will throw on failure.
29
+ function verifyProof(proof, hash) {
30
+ Native.Username_Verify(proof, hash);
31
+ }
32
+ exports.verifyProof = verifyProof;
33
+ //# sourceMappingURL=usernames.js.map
@@ -11,9 +11,6 @@ const Constants_1 = require("./internal/Constants");
11
11
  const ServerPublicParams_1 = require("./ServerPublicParams");
12
12
  const NotarySignature_1 = require("./NotarySignature");
13
13
  class ServerSecretParams extends ByteArray_1.default {
14
- constructor(contents) {
15
- super(contents, Native.ServerSecretParams_CheckValidContents);
16
- }
17
14
  static generate() {
18
15
  const random = (0, crypto_1.randomBytes)(Constants_1.RANDOM_LENGTH);
19
16
  return ServerSecretParams.generateWithRandom(random);
@@ -21,6 +18,9 @@ class ServerSecretParams extends ByteArray_1.default {
21
18
  static generateWithRandom(random) {
22
19
  return new ServerSecretParams(Native.ServerSecretParams_GenerateDeterministic(random));
23
20
  }
21
+ constructor(contents) {
22
+ super(contents, Native.ServerSecretParams_CheckValidContents);
23
+ }
24
24
  getPublicParams() {
25
25
  return new ServerPublicParams_1.default(Native.ServerSecretParams_GetPublicParams(this.contents));
26
26
  }
@@ -11,9 +11,6 @@ const Constants_1 = require("../internal/Constants");
11
11
  const GroupMasterKey_1 = require("./GroupMasterKey");
12
12
  const GroupPublicParams_1 = require("./GroupPublicParams");
13
13
  class GroupSecretParams extends ByteArray_1.default {
14
- constructor(contents) {
15
- super(contents, Native.GroupSecretParams_CheckValidContents);
16
- }
17
14
  static generate() {
18
15
  const random = (0, crypto_1.randomBytes)(Constants_1.RANDOM_LENGTH);
19
16
  return GroupSecretParams.generateWithRandom(random);
@@ -24,6 +21,9 @@ class GroupSecretParams extends ByteArray_1.default {
24
21
  static deriveFromMasterKey(groupMasterKey) {
25
22
  return new GroupSecretParams(Native.GroupSecretParams_DeriveFromMasterKey(groupMasterKey.getContents()));
26
23
  }
24
+ constructor(contents) {
25
+ super(contents, Native.GroupSecretParams_CheckValidContents);
26
+ }
27
27
  getMasterKey() {
28
28
  return new GroupMasterKey_1.default(Native.GroupSecretParams_GetMasterKey(this.contents));
29
29
  }
@@ -11,7 +11,7 @@ class ByteArray {
11
11
  this.contents = Buffer.from(contents);
12
12
  }
13
13
  static checkLength(expectedLength) {
14
- return contents => {
14
+ return (contents) => {
15
15
  if (contents.length !== expectedLength) {
16
16
  throw new Errors_1.LibSignalErrorBase(`Length of array supplied was ${contents.length} expected ${expectedLength}`, undefined, this.name);
17
17
  }
@@ -1,4 +1,4 @@
1
1
  /// <reference types="node" />
2
- export declare type UUIDType = string;
2
+ export type UUIDType = string;
3
3
  export declare function toUUID(array: Buffer): UUIDType;
4
4
  export declare function fromUUID(uuid: UUIDType): Buffer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signalapp/libsignal-client",
3
- "version": "0.21.0",
3
+ "version": "0.22.0",
4
4
  "license": "AGPL-3.0-only",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -33,23 +33,23 @@
33
33
  "@types/chai": "^4.3.1",
34
34
  "@types/chai-as-promised": "^7.1.3",
35
35
  "@types/mocha": "^5.2.7",
36
- "@types/node": "*",
36
+ "@types/node": "16.18.3",
37
37
  "@types/uuid": "^8.3.0",
38
- "@typescript-eslint/eslint-plugin": "^4.6.0",
39
- "@typescript-eslint/parser": "^4.6.0",
38
+ "@typescript-eslint/eslint-plugin": "^5.47.0",
39
+ "@typescript-eslint/parser": "^5.47.0",
40
40
  "chai": "^4.2.0",
41
41
  "chai-as-promised": "^7.1.1",
42
- "eslint": "^7.12.1",
43
- "eslint-config-prettier": "^6.15.0",
42
+ "eslint": "^8.30.0",
43
+ "eslint-config-prettier": "^8.5.0",
44
44
  "eslint-plugin-header": "^3.1.0",
45
- "eslint-plugin-import": "^2.22.1",
46
- "eslint-plugin-mocha": "^8.0.0",
45
+ "eslint-plugin-import": "^2.26.0",
46
+ "eslint-plugin-mocha": "^10.1.0",
47
47
  "eslint-plugin-more": "^1.0.0",
48
48
  "mocha": "^9",
49
49
  "node-gyp": "^8.4.1",
50
- "prettier": "^1.19.1",
50
+ "prettier": "^2.7.1",
51
51
  "rimraf": "^3.0.1",
52
52
  "source-map-support": "^0.5.19",
53
- "typescript": "4.6.2"
53
+ "typescript": "4.9.3"
54
54
  }
55
55
  }
Binary file
Binary file
Binary file