@wireapp/core-crypto 1.0.0-rc.2 → 1.0.0-rc.20
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +3 -1
- package/package.json +12 -31
- package/platforms/web/core-crypto-ffi_bg.wasm +0 -0
- package/platforms/web/corecrypto.d.ts +271 -156
- package/platforms/web/corecrypto.js +3118 -4904
- package/platforms/web/assets/core_crypto_ffi-b7eb1191.wasm +0 -0
@@ -1,3 +1,133 @@
|
|
1
|
+
/* tslint:disable */
|
2
|
+
/* eslint-disable */
|
3
|
+
/**
|
4
|
+
* see [core_crypto::prelude::DeviceStatus]
|
5
|
+
*/
|
6
|
+
export enum DeviceStatus {
|
7
|
+
/**
|
8
|
+
* All is fine
|
9
|
+
*/
|
10
|
+
Valid = 0,
|
11
|
+
/**
|
12
|
+
* The Credential's certificate is expired
|
13
|
+
*/
|
14
|
+
Expired = 1,
|
15
|
+
/**
|
16
|
+
* The Credential's certificate is revoked (not implemented yet)
|
17
|
+
*/
|
18
|
+
Revoked = 2
|
19
|
+
}
|
20
|
+
/**
|
21
|
+
* For creating a challenge.
|
22
|
+
* @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.5.1
|
23
|
+
*/
|
24
|
+
export class AcmeChallenge {
|
25
|
+
free(): void;
|
26
|
+
/**
|
27
|
+
* Contains raw JSON data of this challenge. This is parsed by the underlying Rust library hence should not be accessed
|
28
|
+
*/
|
29
|
+
readonly delegate: Uint8Array;
|
30
|
+
/**
|
31
|
+
* Non-standard, Wire specific claim. Indicates the consumer from where it should get the challenge proof.
|
32
|
+
* Either from wire-server "/access-token" endpoint in case of a DPoP challenge, or from an OAuth token endpoint for an OIDC challenge
|
33
|
+
*/
|
34
|
+
readonly target: string;
|
35
|
+
/**
|
36
|
+
* URL of this challenge
|
37
|
+
*/
|
38
|
+
readonly url: string;
|
39
|
+
}
|
40
|
+
/**
|
41
|
+
* Holds URLs of all the standard ACME endpoint supported on an ACME server.
|
42
|
+
* @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.1.1
|
43
|
+
*/
|
44
|
+
export class AcmeDirectory {
|
45
|
+
free(): void;
|
46
|
+
/**
|
47
|
+
* URL for creating a new account.
|
48
|
+
*/
|
49
|
+
readonly newAccount: string;
|
50
|
+
/**
|
51
|
+
* URL for fetching a new nonce. Use this only for creating a new account.
|
52
|
+
*/
|
53
|
+
readonly newNonce: string;
|
54
|
+
/**
|
55
|
+
* URL for creating a new order.
|
56
|
+
*/
|
57
|
+
readonly newOrder: string;
|
58
|
+
/**
|
59
|
+
* Revocation URL
|
60
|
+
*/
|
61
|
+
readonly revokeCert: string;
|
62
|
+
}
|
63
|
+
/**
|
64
|
+
* Result of an authorization creation.
|
65
|
+
* @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.5
|
66
|
+
*/
|
67
|
+
export class NewAcmeAuthz {
|
68
|
+
free(): void;
|
69
|
+
/**
|
70
|
+
* DNS entry associated with those challenge
|
71
|
+
*/
|
72
|
+
readonly identifier: string;
|
73
|
+
/**
|
74
|
+
* Challenge for the deviceId owned by wire-server
|
75
|
+
*/
|
76
|
+
readonly wireDpopChallenge: AcmeChallenge | undefined;
|
77
|
+
/**
|
78
|
+
* Challenge for the userId and displayName owned by the identity provider
|
79
|
+
*/
|
80
|
+
readonly wireOidcChallenge: AcmeChallenge | undefined;
|
81
|
+
}
|
82
|
+
/**
|
83
|
+
* Result of an order creation.
|
84
|
+
* @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.4
|
85
|
+
*/
|
86
|
+
export class NewAcmeOrder {
|
87
|
+
free(): void;
|
88
|
+
/**
|
89
|
+
*/
|
90
|
+
readonly authorizations: (Uint8Array)[];
|
91
|
+
/**
|
92
|
+
* Contains raw JSON data of this order. This is parsed by the underlying Rust library hence should not be accessed
|
93
|
+
*/
|
94
|
+
readonly delegate: Uint8Array;
|
95
|
+
}
|
96
|
+
/**
|
97
|
+
* Represents the identity claims identifying a client
|
98
|
+
* Those claims are verifiable by any member in the group
|
99
|
+
*/
|
100
|
+
export class WireIdentity {
|
101
|
+
free(): void;
|
102
|
+
/**
|
103
|
+
* X509 certificate identifying this client in the MLS group ; PEM encoded
|
104
|
+
*/
|
105
|
+
readonly certificate: string;
|
106
|
+
/**
|
107
|
+
* Unique client identifier e.g. `T4Coy4vdRzianwfOgXpn6A:6add501bacd1d90e@whitehouse.gov`
|
108
|
+
*/
|
109
|
+
readonly clientId: string;
|
110
|
+
/**
|
111
|
+
* Name as displayed in the messaging application e.g. `John Fitzgerald Kennedy`
|
112
|
+
*/
|
113
|
+
readonly displayName: string;
|
114
|
+
/**
|
115
|
+
* DNS domain for which this identity proof was generated e.g. `whitehouse.gov`
|
116
|
+
*/
|
117
|
+
readonly domain: string;
|
118
|
+
/**
|
119
|
+
* user handle e.g. `john_wire`
|
120
|
+
*/
|
121
|
+
readonly handle: string;
|
122
|
+
/**
|
123
|
+
* Status of the Credential at the moment T when this object is created
|
124
|
+
*/
|
125
|
+
readonly status: DeviceStatus;
|
126
|
+
/**
|
127
|
+
* MLS thumbprint
|
128
|
+
*/
|
129
|
+
readonly thumbprint: string;
|
130
|
+
}
|
1
131
|
/**
|
2
132
|
* Error wrapper that takes care of extracting rich error details across the FFI (through JSON parsing)
|
3
133
|
*
|
@@ -262,7 +392,7 @@ export interface RotateBundle {
|
|
262
392
|
*
|
263
393
|
* @readonly
|
264
394
|
*/
|
265
|
-
commits: CommitBundle
|
395
|
+
commits: Map<string, CommitBundle>;
|
266
396
|
/**
|
267
397
|
* Fresh KeyPackages with the new Credential
|
268
398
|
*
|
@@ -303,6 +433,10 @@ export interface CoreCryptoDeferredParams {
|
|
303
433
|
* .wasm file path, this will be useful in case your bundling system likes to relocate files (i.e. what webpack does)
|
304
434
|
*/
|
305
435
|
wasmFilePath?: string;
|
436
|
+
/**
|
437
|
+
* Number of initial KeyPackage to create when initializing the client
|
438
|
+
*/
|
439
|
+
nbKeyPackage?: number;
|
306
440
|
}
|
307
441
|
/**
|
308
442
|
* Params for CoreCrypto initialization
|
@@ -315,19 +449,6 @@ export interface CoreCryptoParams extends CoreCryptoDeferredParams {
|
|
315
449
|
*/
|
316
450
|
clientId: ClientId;
|
317
451
|
}
|
318
|
-
/**
|
319
|
-
* Data shape for adding clients to a conversation
|
320
|
-
*/
|
321
|
-
export interface Invitee {
|
322
|
-
/**
|
323
|
-
* Client ID as a byte array
|
324
|
-
*/
|
325
|
-
id: ClientId;
|
326
|
-
/**
|
327
|
-
* MLS KeyPackage belonging to the aforementioned client
|
328
|
-
*/
|
329
|
-
kp: Uint8Array;
|
330
|
-
}
|
331
452
|
export interface ConversationInitBundle {
|
332
453
|
/**
|
333
454
|
* Conversation ID of the conversation created
|
@@ -386,27 +507,45 @@ export interface DecryptedMessage {
|
|
386
507
|
* Present for all messages
|
387
508
|
*/
|
388
509
|
identity?: WireIdentity;
|
510
|
+
/**
|
511
|
+
* Only set when the decrypted message is a commit.
|
512
|
+
* Contains buffered messages for next epoch which were received before the commit creating the epoch
|
513
|
+
* because the DS did not fan them out in order.
|
514
|
+
*/
|
515
|
+
bufferedMessages?: BufferedDecryptedMessage[];
|
389
516
|
}
|
390
517
|
/**
|
391
|
-
*
|
518
|
+
* Almost same as {@link DecryptedMessage} but avoids recursion
|
392
519
|
*/
|
393
|
-
export interface
|
520
|
+
export interface BufferedDecryptedMessage {
|
521
|
+
/**
|
522
|
+
* see {@link DecryptedMessage.message}
|
523
|
+
*/
|
524
|
+
message?: Uint8Array;
|
525
|
+
/**
|
526
|
+
* see {@link DecryptedMessage.proposals}
|
527
|
+
*/
|
528
|
+
proposals: ProposalBundle[];
|
394
529
|
/**
|
395
|
-
*
|
530
|
+
* see {@link DecryptedMessage.isActive}
|
396
531
|
*/
|
397
|
-
|
532
|
+
isActive: boolean;
|
533
|
+
/**
|
534
|
+
* see {@link DecryptedMessage.commitDelay}
|
535
|
+
*/
|
536
|
+
commitDelay?: number;
|
398
537
|
/**
|
399
|
-
*
|
538
|
+
* see {@link DecryptedMessage.senderClientId}
|
400
539
|
*/
|
401
|
-
|
540
|
+
senderClientId?: ClientId;
|
402
541
|
/**
|
403
|
-
*
|
542
|
+
* see {@link DecryptedMessage.hasEpochChanged}
|
404
543
|
*/
|
405
|
-
|
544
|
+
hasEpochChanged: boolean;
|
406
545
|
/**
|
407
|
-
*
|
546
|
+
* see {@link DecryptedMessage.identity}
|
408
547
|
*/
|
409
|
-
|
548
|
+
identity?: WireIdentity;
|
410
549
|
}
|
411
550
|
/**
|
412
551
|
* Returned by all methods creating proposals. Contains a proposal message and an identifier to roll back the proposal
|
@@ -573,7 +712,7 @@ export declare class CoreCrypto {
|
|
573
712
|
* });
|
574
713
|
* ````
|
575
714
|
*/
|
576
|
-
static init({ databaseName, key, clientId, wasmFilePath, ciphersuites, entropySeed }: CoreCryptoParams): Promise<CoreCrypto>;
|
715
|
+
static init({ databaseName, key, clientId, wasmFilePath, ciphersuites, entropySeed, nbKeyPackage, }: CoreCryptoParams): Promise<CoreCrypto>;
|
577
716
|
/**
|
578
717
|
* Almost identical to {@link CoreCrypto.init} but allows a 2 phase initialization of MLS.
|
579
718
|
* First, calling this will set up the keystore and will allow generating proteus prekeys.
|
@@ -581,14 +720,15 @@ export declare class CoreCrypto {
|
|
581
720
|
* Use this clientId to initialize MLS with {@link CoreCrypto.mlsInit}.
|
582
721
|
* @param params - {@link CoreCryptoDeferredParams}
|
583
722
|
*/
|
584
|
-
static deferredInit({ databaseName, key, ciphersuites, entropySeed, wasmFilePath }: CoreCryptoDeferredParams): Promise<CoreCrypto>;
|
723
|
+
static deferredInit({ databaseName, key, ciphersuites, entropySeed, wasmFilePath, nbKeyPackage, }: CoreCryptoDeferredParams): Promise<CoreCrypto>;
|
585
724
|
/**
|
586
725
|
* Use this after {@link CoreCrypto.deferredInit} when you have a clientId. It initializes MLS.
|
587
726
|
*
|
588
727
|
* @param clientId - {@link CoreCryptoParams#clientId} but required
|
589
728
|
* @param ciphersuites - All the ciphersuites supported by this MLS client
|
729
|
+
* @param nbKeyPackage - number of initial KeyPackage to create when initializing the client
|
590
730
|
*/
|
591
|
-
mlsInit(clientId: ClientId, ciphersuites: Ciphersuite[]): Promise<void>;
|
731
|
+
mlsInit(clientId: ClientId, ciphersuites: Ciphersuite[], nbKeyPackage?: number): Promise<void>;
|
592
732
|
/**
|
593
733
|
* Generates a MLS KeyPair/CredentialBundle with a temporary, random client ID.
|
594
734
|
* This method is designed to be used in conjunction with {@link CoreCrypto.mlsInitWithClientId} and represents the first step in this process
|
@@ -625,7 +765,7 @@ export declare class CoreCrypto {
|
|
625
765
|
/**
|
626
766
|
* Closes this {@link CoreCrypto} instance and deallocates all loaded resources
|
627
767
|
*
|
628
|
-
* **CAUTION**: This {@link CoreCrypto} instance won't be
|
768
|
+
* **CAUTION**: This {@link CoreCrypto} instance won't be usable after a call to this method, but there's no way to express this requirement in TypeScript, so you'll get errors instead!
|
629
769
|
*/
|
630
770
|
close(): Promise<void>;
|
631
771
|
/**
|
@@ -691,7 +831,12 @@ export declare class CoreCrypto {
|
|
691
831
|
*/
|
692
832
|
createConversation(conversationId: ConversationId, creatorCredentialType: CredentialType, configuration?: ConversationConfiguration): Promise<any>;
|
693
833
|
/**
|
694
|
-
* Decrypts a message for a given conversation
|
834
|
+
* Decrypts a message for a given conversation.
|
835
|
+
*
|
836
|
+
* Note: you should catch & ignore the following error reasons:
|
837
|
+
* * "We already decrypted this message once"
|
838
|
+
* * "You tried to join with an external commit but did not merge it yet. We will reapply this message for you when you merge your external commit"
|
839
|
+
* * "Incoming message is for a future epoch. We will buffer it until the commit for that epoch arrives"
|
695
840
|
*
|
696
841
|
* @param conversationId - The ID of the conversation
|
697
842
|
* @param payload - The encrypted message buffer
|
@@ -723,17 +868,24 @@ export declare class CoreCrypto {
|
|
723
868
|
*
|
724
869
|
* @returns A {@link CommitBundle}
|
725
870
|
*/
|
726
|
-
|
871
|
+
updateTrustAnchorsFromConversation(conversationId: ConversationId, removeDomainNames: string[], addTrustAnchors: PerDomainTrustAnchor[]): Promise<CommitBundle>;
|
727
872
|
/**
|
728
873
|
* Ingest a TLS-serialized MLS welcome message to join an existing MLS group
|
729
874
|
*
|
875
|
+
* Important: you have to catch the error with this reason "Although this Welcome seems valid, the local KeyPackage
|
876
|
+
* it references has already been deleted locally. Join this group with an external commit", ignore it and then try
|
877
|
+
* to join this group with an external commit.
|
878
|
+
*
|
730
879
|
* @param welcomeMessage - TLS-serialized MLS Welcome message
|
731
880
|
* @param configuration - configuration of the MLS group
|
732
881
|
* @returns The conversation ID of the newly joined group. You can use the same ID to decrypt/encrypt messages
|
733
882
|
*/
|
734
883
|
processWelcomeMessage(welcomeMessage: Uint8Array, configuration?: CustomConfiguration): Promise<ConversationId>;
|
735
884
|
/**
|
736
|
-
*
|
885
|
+
* Get the client's public signature key. To upload to the DS for further backend side validation
|
886
|
+
*
|
887
|
+
* @param ciphersuite - of the signature key to get
|
888
|
+
* @returns the client's public signature key
|
737
889
|
*/
|
738
890
|
clientPublicKey(ciphersuite: Ciphersuite): Promise<Uint8Array>;
|
739
891
|
/**
|
@@ -762,21 +914,21 @@ export declare class CoreCrypto {
|
|
762
914
|
/**
|
763
915
|
* Adds new clients to a conversation, assuming the current client has the right to add new clients to the conversation.
|
764
916
|
*
|
765
|
-
* **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called
|
917
|
+
* **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterward **ONLY IF** the Delivery Service responds
|
766
918
|
* '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
|
767
919
|
* epoch, use new encryption secrets etc...
|
768
920
|
*
|
769
921
|
* @param conversationId - The ID of the conversation
|
770
|
-
* @param
|
922
|
+
* @param keyPackages - KeyPackages of the new clients to add
|
771
923
|
*
|
772
924
|
* @returns A {@link CommitBundle}
|
773
925
|
*/
|
774
|
-
addClientsToConversation(conversationId: ConversationId,
|
926
|
+
addClientsToConversation(conversationId: ConversationId, keyPackages: Uint8Array[]): Promise<MemberAddedMessages>;
|
775
927
|
/**
|
776
928
|
* Removes the provided clients from a conversation; Assuming those clients exist and the current client is allowed
|
777
929
|
* to do so, otherwise this operation does nothing.
|
778
930
|
*
|
779
|
-
* **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called
|
931
|
+
* **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterward **ONLY IF** the Delivery Service responds
|
780
932
|
* '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
|
781
933
|
* epoch, use new encryption secrets etc...
|
782
934
|
*
|
@@ -787,9 +939,9 @@ export declare class CoreCrypto {
|
|
787
939
|
*/
|
788
940
|
removeClientsFromConversation(conversationId: ConversationId, clientIds: ClientId[]): Promise<CommitBundle>;
|
789
941
|
/**
|
790
|
-
* Creates an update commit which forces every client to update their
|
942
|
+
* Creates an update commit which forces every client to update their LeafNode in the conversation
|
791
943
|
*
|
792
|
-
* **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called
|
944
|
+
* **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterward **ONLY IF** the Delivery Service responds
|
793
945
|
* '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
|
794
946
|
* epoch, use new encryption secrets etc...
|
795
947
|
*
|
@@ -819,6 +971,9 @@ export declare class CoreCrypto {
|
|
819
971
|
* @returns A {@link ProposalBundle} containing the Proposal and its reference in order to roll it back if necessary
|
820
972
|
*/
|
821
973
|
newProposal(proposalType: ProposalType, args: ProposalArgs | AddProposalArgs | RemoveProposalArgs): Promise<ProposalBundle>;
|
974
|
+
/**
|
975
|
+
* Creates a new external Add proposal for self client to join a conversation.
|
976
|
+
*/
|
822
977
|
newExternalProposal(externalProposalType: ExternalProposalType, args: ExternalAddProposalArgs): Promise<Uint8Array>;
|
823
978
|
/**
|
824
979
|
* Allows to create an external commit to "apply" to join a group through its GroupInfo.
|
@@ -843,8 +998,9 @@ export declare class CoreCrypto {
|
|
843
998
|
* and deletes the temporary one. This step makes the group operational and ready to encrypt/decrypt message
|
844
999
|
*
|
845
1000
|
* @param conversationId - The ID of the conversation
|
1001
|
+
* @returns eventually decrypted buffered messages if any
|
846
1002
|
*/
|
847
|
-
mergePendingGroupFromExternalCommit(conversationId: ConversationId): Promise<
|
1003
|
+
mergePendingGroupFromExternalCommit(conversationId: ConversationId): Promise<BufferedDecryptedMessage[] | undefined>;
|
848
1004
|
/**
|
849
1005
|
* In case the external commit generated by {@link CoreCrypto.joinByExternalCommit} is rejected by the Delivery Service, and we
|
850
1006
|
* want to abort this external commit once for all, we can wipe out the pending group from the keystore in order
|
@@ -854,26 +1010,24 @@ export declare class CoreCrypto {
|
|
854
1010
|
*/
|
855
1011
|
clearPendingGroupFromExternalCommit(conversationId: ConversationId): Promise<void>;
|
856
1012
|
/**
|
857
|
-
* Allows to mark the latest commit produced as "accepted" and be able to safely merge it
|
858
|
-
* into the local group state
|
1013
|
+
* Allows to mark the latest commit produced as "accepted" and be able to safely merge it into the local group state
|
859
1014
|
*
|
860
1015
|
* @param conversationId - The group's ID
|
1016
|
+
* @returns the messages from current epoch which had been buffered, if any
|
861
1017
|
*/
|
862
|
-
commitAccepted(conversationId: ConversationId): Promise<
|
1018
|
+
commitAccepted(conversationId: ConversationId): Promise<BufferedDecryptedMessage[] | undefined>;
|
863
1019
|
/**
|
864
|
-
* Allows to remove a pending proposal (rollback). Use this when backend rejects the proposal you just sent e.g. if permissions
|
865
|
-
* have changed meanwhile.
|
1020
|
+
* Allows to remove a pending proposal (rollback). Use this when backend rejects the proposal you just sent e.g. if permissions have changed meanwhile.
|
866
1021
|
*
|
867
1022
|
* **CAUTION**: only use this when you had an explicit response from the Delivery Service
|
868
|
-
* e.g. 403 or 409. Do not use otherwise e.g. 5xx responses, timeout etc
|
1023
|
+
* e.g. 403 or 409. Do not use otherwise e.g. 5xx responses, timeout etc…
|
869
1024
|
*
|
870
1025
|
* @param conversationId - The group's ID
|
871
1026
|
* @param proposalRef - A reference to the proposal to delete. You get one when using {@link CoreCrypto.newProposal}
|
872
1027
|
*/
|
873
1028
|
clearPendingProposal(conversationId: ConversationId, proposalRef: ProposalRef): Promise<void>;
|
874
1029
|
/**
|
875
|
-
* Allows to remove a pending commit (rollback). Use this when backend rejects the commit you just sent e.g. if permissions
|
876
|
-
* have changed meanwhile.
|
1030
|
+
* Allows to remove a pending commit (rollback). Use this when backend rejects the commit you just sent e.g. if permissions have changed meanwhile.
|
877
1031
|
*
|
878
1032
|
* **CAUTION**: only use this when you had an explicit response from the Delivery Service
|
879
1033
|
* e.g. 403. Do not use otherwise e.g. 5xx responses, timeout etc..
|
@@ -917,7 +1071,7 @@ export declare class CoreCrypto {
|
|
917
1071
|
*/
|
918
1072
|
reseedRng(seed: Uint8Array): Promise<void>;
|
919
1073
|
/**
|
920
|
-
*
|
1074
|
+
* Initializes the proteus client
|
921
1075
|
*/
|
922
1076
|
proteusInit(): Promise<void>;
|
923
1077
|
/**
|
@@ -1050,47 +1204,53 @@ export declare class CoreCrypto {
|
|
1050
1204
|
* Creates an enrollment instance with private key material you can use in order to fetch
|
1051
1205
|
* a new x509 certificate from the acme server.
|
1052
1206
|
*
|
1053
|
-
* @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `
|
1054
|
-
* @param displayName human
|
1055
|
-
* @param handle user handle e.g. `alice.smith.qa@example.com`
|
1056
|
-
* @param expiryDays generated x509 certificate expiry
|
1207
|
+
* @param clientId - client identifier with user b64Url encoded & clientId hex encoded e.g. `t6wRpI8BRSeviBwwiFp5MQ:6add501bacd1d90e@example.com`
|
1208
|
+
* @param displayName - human-readable name displayed in the application e.g. `Smith, Alice M (QA)`
|
1209
|
+
* @param handle - user handle e.g. `alice.smith.qa@example.com`
|
1210
|
+
* @param expiryDays - generated x509 certificate expiry
|
1057
1211
|
* @param ciphersuite - for generating signing key material
|
1058
|
-
* @
|
1212
|
+
* @param team - name of the Wire team a user belongs to
|
1213
|
+
* @returns The new {@link E2eiEnrollment} enrollment instance to use with {@link CoreCrypto.e2eiMlsInitOnly}
|
1059
1214
|
*/
|
1060
|
-
e2eiNewEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite): Promise<
|
1215
|
+
e2eiNewEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite, team?: string): Promise<E2eiEnrollment>;
|
1061
1216
|
/**
|
1062
1217
|
* Generates an E2EI enrollment instance for a "regular" client (with a Basic credential) willing to migrate to E2EI.
|
1063
1218
|
* Once the enrollment is finished, use the instance in {@link CoreCrypto.e2eiRotateAll} to do the rotation.
|
1064
1219
|
*
|
1065
|
-
* @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `
|
1066
|
-
* @param displayName human
|
1067
|
-
* @param handle user handle e.g. `alice.smith.qa@example.com`
|
1068
|
-
* @param expiryDays generated x509 certificate expiry
|
1220
|
+
* @param clientId - client identifier with user b64Url encoded & clientId hex encoded e.g. `t6wRpI8BRSeviBwwiFp5MQ:6add501bacd1d90e@example.com`
|
1221
|
+
* @param displayName - human-readable name displayed in the application e.g. `Smith, Alice M (QA)`
|
1222
|
+
* @param handle - user handle e.g. `alice.smith.qa@example.com`
|
1223
|
+
* @param expiryDays - generated x509 certificate expiry
|
1069
1224
|
* @param ciphersuite - for generating signing key material
|
1070
|
-
* @
|
1225
|
+
* @param team - name of the Wire team a user belongs to
|
1226
|
+
* @returns The new {@link E2eiEnrollment} enrollment instance to use with {@link CoreCrypto.e2eiRotateAll}
|
1071
1227
|
*/
|
1072
|
-
e2eiNewActivationEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite): Promise<
|
1228
|
+
e2eiNewActivationEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite, team?: string): Promise<E2eiEnrollment>;
|
1073
1229
|
/**
|
1074
1230
|
* Generates an E2EI enrollment instance for a E2EI client (with a X509 certificate credential)
|
1075
1231
|
* having to change/rotate their credential, either because the former one is expired or it
|
1076
1232
|
* has been revoked. It lets you change the DisplayName or the handle
|
1077
1233
|
* if you need to. Once the enrollment is finished, use the instance in {@link CoreCrypto.e2eiRotateAll} to do the rotation.
|
1078
1234
|
*
|
1079
|
-
* @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `
|
1080
|
-
* @param expiryDays generated x509 certificate expiry
|
1235
|
+
* @param clientId - client identifier with user b64Url encoded & clientId hex encoded e.g. `t6wRpI8BRSeviBwwiFp5MQ:6add501bacd1d90e@example.com`
|
1236
|
+
* @param expiryDays - generated x509 certificate expiry
|
1081
1237
|
* @param ciphersuite - for generating signing key material
|
1082
|
-
* @param displayName human
|
1083
|
-
* @param handle user handle e.g. `alice.smith.qa@example.com`
|
1084
|
-
* @
|
1238
|
+
* @param displayName - human-readable name displayed in the application e.g. `Smith, Alice M (QA)`
|
1239
|
+
* @param handle - user handle e.g. `alice.smith.qa@example.com`
|
1240
|
+
* @param team - name of the Wire team a user belongs to
|
1241
|
+
* @returns The new {@link E2eiEnrollment} enrollment instance to use with {@link CoreCrypto.e2eiRotateAll}
|
1085
1242
|
*/
|
1086
|
-
e2eiNewRotateEnrollment(clientId: string, expiryDays: number, ciphersuite: Ciphersuite, displayName?: string, handle?: string): Promise<
|
1243
|
+
e2eiNewRotateEnrollment(clientId: string, expiryDays: number, ciphersuite: Ciphersuite, displayName?: string, handle?: string, team?: string): Promise<E2eiEnrollment>;
|
1087
1244
|
/**
|
1088
|
-
* Use this method to initialize end-to-end identity when a client signs up and the grace period is already expired ;
|
1245
|
+
* Use this method to initialize end-to-end identity when a client signs up and the grace period is already expired ;
|
1246
|
+
* that means he cannot initialize with a Basic credential
|
1089
1247
|
*
|
1090
1248
|
* @param enrollment - the enrollment instance used to fetch the certificates
|
1091
1249
|
* @param certificateChain - the raw response from ACME server
|
1250
|
+
* @param nbKeyPackage - number of initial KeyPackage to create when initializing the client
|
1251
|
+
* @returns a MlsClient initialized with only a x509 credential
|
1092
1252
|
*/
|
1093
|
-
e2eiMlsInitOnly(enrollment:
|
1253
|
+
e2eiMlsInitOnly(enrollment: E2eiEnrollment, certificateChain: string, nbKeyPackage?: number): Promise<void>;
|
1094
1254
|
/**
|
1095
1255
|
* Creates a commit in all local conversations for changing the credential. Requires first
|
1096
1256
|
* having enrolled a new X509 certificate with either {@link CoreCrypto.e2eiNewActivationEnrollment}
|
@@ -1099,8 +1259,9 @@ export declare class CoreCrypto {
|
|
1099
1259
|
* @param enrollment - the enrollment instance used to fetch the certificates
|
1100
1260
|
* @param certificateChain - the raw response from ACME server
|
1101
1261
|
* @param newKeyPackageCount - number of KeyPackages with new identity to generate
|
1262
|
+
* @returns a {@link RotateBundle} with commits to fan-out to other group members, KeyPackages to upload and old ones to delete
|
1102
1263
|
*/
|
1103
|
-
e2eiRotateAll(enrollment:
|
1264
|
+
e2eiRotateAll(enrollment: E2eiEnrollment, certificateChain: string, newKeyPackageCount: number): Promise<RotateBundle>;
|
1104
1265
|
/**
|
1105
1266
|
* Allows persisting an active enrollment (for example while redirecting the user during OAuth) in order to resume
|
1106
1267
|
* it later with {@link e2eiEnrollmentStashPop}
|
@@ -1108,22 +1269,48 @@ export declare class CoreCrypto {
|
|
1108
1269
|
* @param enrollment the enrollment instance to persist
|
1109
1270
|
* @returns a handle to fetch the enrollment later with {@link e2eiEnrollmentStashPop}
|
1110
1271
|
*/
|
1111
|
-
e2eiEnrollmentStash(enrollment:
|
1272
|
+
e2eiEnrollmentStash(enrollment: E2eiEnrollment): Promise<Uint8Array>;
|
1112
1273
|
/**
|
1113
1274
|
* Fetches the persisted enrollment and deletes it from the keystore
|
1114
1275
|
*
|
1115
1276
|
* @param handle returned by {@link e2eiEnrollmentStash}
|
1116
1277
|
* @returns the persisted enrollment instance
|
1117
1278
|
*/
|
1118
|
-
e2eiEnrollmentStashPop(handle: Uint8Array): Promise<
|
1279
|
+
e2eiEnrollmentStashPop(handle: Uint8Array): Promise<E2eiEnrollment>;
|
1119
1280
|
/**
|
1120
1281
|
* Indicates when to mark a conversation as degraded i.e. when not all its members have a X509.
|
1121
1282
|
* Credential generated by Wire's end-to-end identity enrollment
|
1122
1283
|
*
|
1123
1284
|
* @param conversationId The group's ID
|
1124
|
-
* @returns
|
1285
|
+
* @returns the conversation state given current members
|
1286
|
+
*/
|
1287
|
+
e2eiConversationState(conversationId: ConversationId): Promise<E2eiConversationState>;
|
1288
|
+
/**
|
1289
|
+
* Returns true when end-to-end-identity is enabled for the given Ciphersuite
|
1290
|
+
*
|
1291
|
+
* @param ciphersuite of the credential to check
|
1292
|
+
* @returns true if end-to-end identity is enabled for the given ciphersuite
|
1293
|
+
*/
|
1294
|
+
e2eiIsEnabled(ciphersuite: Ciphersuite): Promise<boolean>;
|
1295
|
+
/**
|
1296
|
+
* From a given conversation, get the identity of the members supplied. Identity is only present for members with a
|
1297
|
+
* Certificate Credential (after turning on end-to-end identity).
|
1298
|
+
*
|
1299
|
+
* @param conversationId - identifier of the conversation
|
1300
|
+
* @param deviceIds - identifiers of the devices
|
1301
|
+
* @returns identities or if no member has a x509 certificate, it will return an empty List
|
1302
|
+
*/
|
1303
|
+
getDeviceIdentities(conversationId: ConversationId, deviceIds: ClientId[]): Promise<WireIdentity[]>;
|
1304
|
+
/**
|
1305
|
+
* From a given conversation, get the identity of the users (device holders) supplied.
|
1306
|
+
* Identity is only present for devices with a Certificate Credential (after turning on end-to-end identity).
|
1307
|
+
* If no member has a x509 certificate, it will return an empty Vec.
|
1308
|
+
*
|
1309
|
+
* @param conversationId - identifier of the conversation
|
1310
|
+
* @param userIds - user identifiers e.g. t6wRpI8BRSeviBwwiFp5MQ which is a base64UrlUnpadded UUIDv4
|
1311
|
+
* @returns a Map with all the identities for a given users. Consumers are then recommended to reduce those identities to determine the actual status of a user.
|
1125
1312
|
*/
|
1126
|
-
|
1313
|
+
getUserIdentities(conversationId: ConversationId, userIds: string[]): Promise<Map<string, WireIdentity[]>>;
|
1127
1314
|
/**
|
1128
1315
|
* Returns the current version of {@link CoreCrypto}
|
1129
1316
|
*
|
@@ -1132,7 +1319,7 @@ export declare class CoreCrypto {
|
|
1132
1319
|
static version(): string;
|
1133
1320
|
}
|
1134
1321
|
type JsonRawData = Uint8Array;
|
1135
|
-
export declare class
|
1322
|
+
export declare class E2eiEnrollment {
|
1136
1323
|
#private;
|
1137
1324
|
/** @hidden */
|
1138
1325
|
constructor(e2ei: unknown);
|
@@ -1241,7 +1428,7 @@ export declare class WireE2eIdentity {
|
|
1241
1428
|
* Parses the response from `POST /acme/{provisioner-name}/order/{order-id}`.
|
1242
1429
|
*
|
1243
1430
|
* @param order HTTP response body
|
1244
|
-
* @return
|
1431
|
+
* @return finalize url to use with {@link finalizeRequest}
|
1245
1432
|
* @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.4
|
1246
1433
|
*/
|
1247
1434
|
checkOrderResponse(order: JsonRawData): string;
|
@@ -1269,95 +1456,23 @@ export declare class WireE2eIdentity {
|
|
1269
1456
|
certificateRequest(previousNonce: string): JsonRawData;
|
1270
1457
|
}
|
1271
1458
|
/**
|
1272
|
-
*
|
1273
|
-
*
|
1274
|
-
|
1275
|
-
export interface AcmeDirectory {
|
1276
|
-
/**
|
1277
|
-
* URL for fetching a new nonce. Use this only for creating a new account.
|
1278
|
-
*
|
1279
|
-
* @readonly
|
1280
|
-
*/
|
1281
|
-
newNonce: string;
|
1282
|
-
/**
|
1283
|
-
* URL for creating a new account.
|
1284
|
-
*
|
1285
|
-
* @readonly
|
1286
|
-
*/
|
1287
|
-
newAccount: string;
|
1288
|
-
/**
|
1289
|
-
* URL for creating a new order.
|
1290
|
-
*
|
1291
|
-
* @readonly
|
1292
|
-
*/
|
1293
|
-
newOrder: string;
|
1294
|
-
}
|
1295
|
-
/**
|
1296
|
-
* Result of an order creation
|
1297
|
-
* @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.4
|
1459
|
+
* Indicates the state of a Conversation regarding end-to-end identity.
|
1460
|
+
* Note: this does not check pending state (pending commit, pending proposals) so it does not
|
1461
|
+
* consider members about to be added/removed
|
1298
1462
|
*/
|
1299
|
-
export
|
1463
|
+
export declare enum E2eiConversationState {
|
1300
1464
|
/**
|
1301
|
-
*
|
1302
|
-
*
|
1303
|
-
* @readonly
|
1304
|
-
*/
|
1305
|
-
delegate: Uint8Array;
|
1306
|
-
/**
|
1307
|
-
* An authorization for each domain to create
|
1308
|
-
*
|
1309
|
-
* @readonly
|
1310
|
-
*/
|
1311
|
-
authorizations: Uint8Array[];
|
1312
|
-
}
|
1313
|
-
/**
|
1314
|
-
* Result of an authorization creation.
|
1315
|
-
* @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.5
|
1316
|
-
*/
|
1317
|
-
export interface NewAcmeAuthz {
|
1318
|
-
/**
|
1319
|
-
* DNS entry associated with those challenge
|
1320
|
-
*
|
1321
|
-
* @readonly
|
1322
|
-
*/
|
1323
|
-
identifier: string;
|
1324
|
-
/**
|
1325
|
-
* Challenge for the clientId
|
1326
|
-
*
|
1327
|
-
* @readonly
|
1328
|
-
*/
|
1329
|
-
wireDpopChallenge?: AcmeChallenge;
|
1330
|
-
/**
|
1331
|
-
* Challenge for the userId and displayName
|
1332
|
-
*
|
1333
|
-
* @readonly
|
1334
|
-
*/
|
1335
|
-
wireOidcChallenge?: AcmeChallenge;
|
1336
|
-
}
|
1337
|
-
/**
|
1338
|
-
* For creating a challenge
|
1339
|
-
* @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.5.1
|
1340
|
-
*/
|
1341
|
-
export interface AcmeChallenge {
|
1342
|
-
/**
|
1343
|
-
* Contains raw JSON data of this challenge. This is parsed by the underlying Rust library hence should not be accessed
|
1344
|
-
*
|
1345
|
-
* @readonly
|
1465
|
+
* All clients have a valid E2EI certificate
|
1346
1466
|
*/
|
1347
|
-
|
1467
|
+
Verified = 1,
|
1348
1468
|
/**
|
1349
|
-
*
|
1350
|
-
*
|
1351
|
-
* @readonly
|
1469
|
+
* Some clients are either still Basic or their certificate is expired
|
1352
1470
|
*/
|
1353
|
-
|
1471
|
+
Degraded = 2,
|
1354
1472
|
/**
|
1355
|
-
*
|
1356
|
-
* Either from wire-server "/access-token" endpoint in case of a DPoP challenge, or from an OAuth token endpoint for an OIDC challenge
|
1357
|
-
*
|
1358
|
-
* @readonly
|
1473
|
+
* All clients are still Basic. If all client have expired certificates, Degraded is returned.
|
1359
1474
|
*/
|
1360
|
-
|
1475
|
+
NotEnabled = 3
|
1361
1476
|
}
|
1362
1477
|
|
1363
1478
|
export {};
|