@wireapp/core-crypto 0.8.2 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
package/package.json
CHANGED
Binary file
|
@@ -49,6 +49,16 @@ export declare enum Ciphersuite {
|
|
49
49
|
*/
|
50
50
|
MLS_256_DHKEMP384_AES256GCM_SHA384_P384 = 7
|
51
51
|
}
|
52
|
+
export declare enum CredentialType {
|
53
|
+
/**
|
54
|
+
* Just a KeyPair
|
55
|
+
*/
|
56
|
+
Basic = 1,
|
57
|
+
/**
|
58
|
+
* A certificate obtained through e2e identity enrollment process
|
59
|
+
*/
|
60
|
+
X509 = 2
|
61
|
+
}
|
52
62
|
/**
|
53
63
|
* Configuration object for new conversations
|
54
64
|
*/
|
@@ -235,6 +245,10 @@ export interface CoreCryptoDeferredParams {
|
|
235
245
|
* This should be appropriately stored in a secure location (i.e. WebCrypto private key storage)
|
236
246
|
*/
|
237
247
|
key: string;
|
248
|
+
/**
|
249
|
+
* All the ciphersuites this MLS client can support
|
250
|
+
*/
|
251
|
+
ciphersuites: Ciphersuite[];
|
238
252
|
/**
|
239
253
|
* External PRNG entropy pool seed.
|
240
254
|
* This **must** be exactly 32 bytes
|
@@ -440,6 +454,17 @@ export interface ExternalRemoveProposalArgs extends ExternalProposalArgs {
|
|
440
454
|
*/
|
441
455
|
keyPackageRef: Uint8Array;
|
442
456
|
}
|
457
|
+
export interface ExternalAddProposalArgs extends ExternalProposalArgs {
|
458
|
+
/**
|
459
|
+
* {@link Ciphersuite} to propose to join the MLS group with.
|
460
|
+
*/
|
461
|
+
ciphersuite: Ciphersuite;
|
462
|
+
/**
|
463
|
+
* Fails when it is {@link CredentialType.X509} and no Credential has been created
|
464
|
+
* for it beforehand with {@link CoreCrypto.e2eiMlsInit} or variants.
|
465
|
+
*/
|
466
|
+
credentialType: CredentialType;
|
467
|
+
}
|
443
468
|
export interface CoreCryptoCallbacks {
|
444
469
|
/**
|
445
470
|
* This callback is called by CoreCrypto to know whether a given clientId is authorized to "write"
|
@@ -513,7 +538,7 @@ export declare class CoreCrypto {
|
|
513
538
|
* });
|
514
539
|
* ````
|
515
540
|
*/
|
516
|
-
static init({ databaseName, key, clientId, wasmFilePath, entropySeed }: CoreCryptoParams): Promise<CoreCrypto>;
|
541
|
+
static init({ databaseName, key, clientId, wasmFilePath, ciphersuites, entropySeed }: CoreCryptoParams): Promise<CoreCrypto>;
|
517
542
|
/**
|
518
543
|
* Almost identical to {@link CoreCrypto.init} but allows a 2 phase initialization of MLS.
|
519
544
|
* First, calling this will set up the keystore and will allow generating proteus prekeys.
|
@@ -521,29 +546,32 @@ export declare class CoreCrypto {
|
|
521
546
|
* Use this clientId to initialize MLS with {@link CoreCrypto.mlsInit}.
|
522
547
|
* @param params - {@link CoreCryptoDeferredParams}
|
523
548
|
*/
|
524
|
-
static deferredInit({ databaseName, key, entropySeed, wasmFilePath }: CoreCryptoDeferredParams): Promise<CoreCrypto>;
|
549
|
+
static deferredInit({ databaseName, key, ciphersuites, entropySeed, wasmFilePath }: CoreCryptoDeferredParams): Promise<CoreCrypto>;
|
525
550
|
/**
|
526
551
|
* Use this after {@link CoreCrypto.deferredInit} when you have a clientId. It initializes MLS.
|
527
552
|
*
|
528
553
|
* @param clientId - {@link CoreCryptoParams#clientId} but required
|
554
|
+
* @param ciphersuites - All the ciphersuites supported by this MLS client
|
529
555
|
*/
|
530
|
-
mlsInit(clientId: ClientId): Promise<void>;
|
556
|
+
mlsInit(clientId: ClientId, ciphersuites: Ciphersuite[]): Promise<void>;
|
531
557
|
/**
|
532
558
|
* Generates a MLS KeyPair/CredentialBundle with a temporary, random client ID.
|
533
|
-
* This method is designed to be used in conjunction with {@link CoreCrypto.
|
559
|
+
* This method is designed to be used in conjunction with {@link CoreCrypto.mlsInitWithClientId} and represents the first step in this process
|
534
560
|
*
|
561
|
+
* @param ciphersuites - All the ciphersuites supported by this MLS client
|
535
562
|
* @returns This returns the TLS-serialized identity key (i.e. the signature keypair's public key)
|
536
563
|
*/
|
537
|
-
mlsGenerateKeypair(): Promise<Uint8Array>;
|
564
|
+
mlsGenerateKeypair(ciphersuites: Ciphersuite[]): Promise<Uint8Array[]>;
|
538
565
|
/**
|
539
566
|
* Updates the current temporary Client ID with the newly provided one. This is the second step in the externally-generated clients process
|
540
567
|
*
|
541
|
-
* Important: This is designed to be called after {@link CoreCrypto.
|
568
|
+
* Important: This is designed to be called after {@link CoreCrypto.mlsGenerateKeypair}
|
542
569
|
*
|
543
570
|
* @param clientId - The newly-allocated client ID by the MLS Authentication Service
|
544
|
-
* @param
|
571
|
+
* @param signaturePublicKeys - The public key you were given at the first step; This is for authentication purposes
|
572
|
+
* @param ciphersuites - All the ciphersuites supported by this MLS client
|
545
573
|
*/
|
546
|
-
mlsInitWithClientId(clientId: ClientId,
|
574
|
+
mlsInitWithClientId(clientId: ClientId, signaturePublicKeys: Uint8Array[], ciphersuites: Ciphersuite[]): Promise<void>;
|
547
575
|
/** @hidden */
|
548
576
|
private constructor();
|
549
577
|
/**
|
@@ -655,18 +683,21 @@ export declare class CoreCrypto {
|
|
655
683
|
/**
|
656
684
|
* @returns The client's public key
|
657
685
|
*/
|
658
|
-
clientPublicKey(): Promise<Uint8Array>;
|
686
|
+
clientPublicKey(ciphersuite: Ciphersuite): Promise<Uint8Array>;
|
659
687
|
/**
|
688
|
+
*
|
689
|
+
* @param ciphersuite - of the KeyPackages to count
|
660
690
|
* @returns The amount of valid, non-expired KeyPackages that are persisted in the backing storage
|
661
691
|
*/
|
662
|
-
clientValidKeypackagesCount(): Promise<number>;
|
692
|
+
clientValidKeypackagesCount(ciphersuite: Ciphersuite): Promise<number>;
|
663
693
|
/**
|
664
694
|
* Fetches a requested amount of keypackages
|
665
695
|
*
|
696
|
+
* @param ciphersuite - of the KeyPackages to generate
|
666
697
|
* @param amountRequested - The amount of keypackages requested
|
667
698
|
* @returns An array of length `amountRequested` containing TLS-serialized KeyPackages
|
668
699
|
*/
|
669
|
-
clientKeypackages(amountRequested: number): Promise<Array<Uint8Array>>;
|
700
|
+
clientKeypackages(ciphersuite: Ciphersuite, amountRequested: number): Promise<Array<Uint8Array>>;
|
670
701
|
/**
|
671
702
|
* Adds new clients to a conversation, assuming the current client has the right to add new clients to the conversation.
|
672
703
|
*
|
@@ -727,7 +758,7 @@ export declare class CoreCrypto {
|
|
727
758
|
* @returns A {@link ProposalBundle} containing the Proposal and its reference in order to roll it back if necessary
|
728
759
|
*/
|
729
760
|
newProposal(proposalType: ProposalType, args: ProposalArgs | AddProposalArgs | RemoveProposalArgs): Promise<ProposalBundle>;
|
730
|
-
newExternalProposal(externalProposalType: ExternalProposalType, args:
|
761
|
+
newExternalProposal(externalProposalType: ExternalProposalType, args: ExternalAddProposalArgs | ExternalRemoveProposalArgs): Promise<Uint8Array>;
|
731
762
|
/**
|
732
763
|
* Exports public group state for use in external commits
|
733
764
|
*
|
@@ -746,10 +777,13 @@ export declare class CoreCrypto {
|
|
746
777
|
* bad can happen if you forget to except some storage space wasted.
|
747
778
|
*
|
748
779
|
* @param publicGroupState - a TLS encoded PublicGroupState fetched from the Delivery Service
|
780
|
+
* @param credentialType - kind of Credential to use for joining this group. If {@link CredentialType.Basic} is
|
781
|
+
* chosen and no Credential has been created yet for it, a new one will be generated.
|
749
782
|
* @param configuration - configuration of the MLS group
|
783
|
+
* When {@link CredentialType.X509} is chosen, it fails when no Credential has been created for the given {@link Ciphersuite}.
|
750
784
|
* @returns see {@link ConversationInitBundle}
|
751
785
|
*/
|
752
|
-
joinByExternalCommit(publicGroupState: Uint8Array, configuration?: CustomConfiguration): Promise<ConversationInitBundle>;
|
786
|
+
joinByExternalCommit(publicGroupState: Uint8Array, credentialType: CredentialType, configuration?: CustomConfiguration): Promise<ConversationInitBundle>;
|
753
787
|
/**
|
754
788
|
* This merges the commit generated by {@link CoreCrypto.joinByExternalCommit}, persists the group permanently
|
755
789
|
* and deletes the temporary one. This step makes the group operational and ready to encrypt/decrypt message
|
@@ -966,17 +1000,32 @@ export declare class CoreCrypto {
|
|
966
1000
|
* @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
|
967
1001
|
* @param handle user handle e.g. `alice.smith.qa@example.com`
|
968
1002
|
* @param expiryDays generated x509 certificate expiry
|
969
|
-
* @param ciphersuite -
|
1003
|
+
* @param ciphersuite - for generating signing key material
|
970
1004
|
* @returns The new {@link WireE2eIdentity} object
|
971
1005
|
*/
|
972
|
-
|
1006
|
+
e2eiNewEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite): Promise<WireE2eIdentity>;
|
973
1007
|
/**
|
974
1008
|
* Parses the ACME server response from the endpoint fetching x509 certificates and uses it to initialize the MLS client with a certificate
|
975
1009
|
*
|
976
|
-
* @param
|
1010
|
+
* @param enrollment - the enrollment instance used to fetch the certificates
|
977
1011
|
* @param certificateChain - the raw response from ACME server
|
978
1012
|
*/
|
979
|
-
e2eiMlsInit(
|
1013
|
+
e2eiMlsInit(enrollment: WireE2eIdentity, certificateChain: string): Promise<void>;
|
1014
|
+
/**
|
1015
|
+
* Allows persisting an active enrollment (for example while redirecting the user during OAuth) in order to resume
|
1016
|
+
* it later with {@link e2eiEnrollmentStashPop}
|
1017
|
+
*
|
1018
|
+
* @param enrollment the enrollment instance to persist
|
1019
|
+
* @returns a handle to fetch the enrollment later with {@link e2eiEnrollmentStashPop}
|
1020
|
+
*/
|
1021
|
+
e2eiEnrollmentStash(enrollment: WireE2eIdentity): Promise<Uint8Array>;
|
1022
|
+
/**
|
1023
|
+
* Fetches the persisted enrollment and deletes it from the keystore
|
1024
|
+
*
|
1025
|
+
* @param handle returned by {@link e2eiEnrollmentStash}
|
1026
|
+
* @returns the persisted enrollment instance
|
1027
|
+
*/
|
1028
|
+
e2eiEnrollmentStashPop(handle: Uint8Array): Promise<WireE2eIdentity>;
|
980
1029
|
/**
|
981
1030
|
* Returns the current version of {@link CoreCrypto}
|
982
1031
|
*
|
@@ -1055,11 +1104,10 @@ export declare class WireE2eIdentity {
|
|
1055
1104
|
* Then send it to `POST /clients/{id}/access-token`
|
1056
1105
|
* {@link https://staging-nginz-https.zinfra.io/api/swagger-ui/#/default/post_clients__cid__access_token} on wire-server.
|
1057
1106
|
*
|
1058
|
-
* @param accessTokenUrl backend endpoint where this token will be sent. Should be this one {@link https://staging-nginz-https.zinfra.io/api/swagger-ui/#/default/post_clients__cid__access_token}
|
1059
1107
|
* @param expirySecs of the client Dpop JWT. This should be equal to the grace period set in Team Management
|
1060
1108
|
* @param backendNonce you get by calling `GET /clients/token/nonce` on wire-server as defined here {@link https://staging-nginz-https.zinfra.io/api/swagger-ui/#/default/get_clients__client__nonce}
|
1061
1109
|
*/
|
1062
|
-
createDpopToken(
|
1110
|
+
createDpopToken(expirySecs: number, backendNonce: string): Uint8Array;
|
1063
1111
|
/**
|
1064
1112
|
* Creates a new challenge request for Wire Dpop challenge.
|
1065
1113
|
*
|
@@ -1096,9 +1144,10 @@ export declare class WireE2eIdentity {
|
|
1096
1144
|
* Parses the response from `POST /acme/{provisioner-name}/order/{order-id}`.
|
1097
1145
|
*
|
1098
1146
|
* @param order HTTP response body
|
1147
|
+
* @return the finalize url to use with {@link finalizeRequest}
|
1099
1148
|
* @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.4
|
1100
1149
|
*/
|
1101
|
-
checkOrderResponse(order: JsonRawData):
|
1150
|
+
checkOrderResponse(order: JsonRawData): string;
|
1102
1151
|
/**
|
1103
1152
|
* Final step before fetching the certificate.
|
1104
1153
|
*
|
@@ -1111,9 +1160,10 @@ export declare class WireE2eIdentity {
|
|
1111
1160
|
* Parses the response from `POST /acme/{provisioner-name}/order/{order-id}/finalize`.
|
1112
1161
|
*
|
1113
1162
|
* @param finalize HTTP response body
|
1163
|
+
* @return the certificate url to use with {@link certificateRequest}
|
1114
1164
|
* @see https://www.rfc-editor.org/rfc/rfc8555.html#section-7.4
|
1115
1165
|
*/
|
1116
|
-
finalizeResponse(finalize: JsonRawData):
|
1166
|
+
finalizeResponse(finalize: JsonRawData): string;
|
1117
1167
|
/**
|
1118
1168
|
* Creates a request for finally fetching the x509 certificate.
|
1119
1169
|
*
|
@@ -1205,6 +1255,13 @@ export interface AcmeChallenge {
|
|
1205
1255
|
* @readonly
|
1206
1256
|
*/
|
1207
1257
|
url: string;
|
1258
|
+
/**
|
1259
|
+
* Non-standard, Wire specific claim. Indicates the consumer from where it should get the challenge proof.
|
1260
|
+
* Either from wire-server "/access-token" endpoint in case of a DPoP challenge, or from an OAuth token endpoint for an OIDC challenge
|
1261
|
+
*
|
1262
|
+
* @readonly
|
1263
|
+
*/
|
1264
|
+
target: string;
|
1208
1265
|
}
|
1209
1266
|
|
1210
1267
|
export {};
|