@wireapp/core-crypto 1.0.0-rc.1 → 1.0.0-rc.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wireapp/core-crypto",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0-rc.5",
4
4
  "description": "CoreCrypto bindings for the Web",
5
5
  "type": "module",
6
6
  "module": "platforms/web/corecrypto.js",
@@ -79,6 +79,24 @@ export interface ConversationConfiguration {
79
79
  * Implementation specific configuration
80
80
  */
81
81
  custom?: CustomConfiguration;
82
+ /**
83
+ * Trust anchors to be added in the group's context extensions
84
+ */
85
+ perDomainTrustAnchors?: PerDomainTrustAnchor[];
86
+ }
87
+ /**
88
+ * A wrapper containing the configuration for trust anchors to be added in the group's context
89
+ * extensions
90
+ */
91
+ export interface PerDomainTrustAnchor {
92
+ /**
93
+ * Domain name of the owning backend this anchor refers to. One of the certificate in the chain has to have this domain in its SANs
94
+ */
95
+ domain_name: string;
96
+ /**
97
+ * PEM encoded (partial) certificate chain. This contains the certificate chain for the CA certificate issuing the E2E Identity certificates
98
+ */
99
+ intermediate_certificate_chain: string;
82
100
  }
83
101
  /**
84
102
  * see [core_crypto::prelude::MlsWirePolicy]
@@ -690,6 +708,22 @@ export declare class CoreCrypto {
690
708
  * @returns The encrypted payload for the given group. This needs to be fanned out to the other members of the group.
691
709
  */
692
710
  encryptMessage(conversationId: ConversationId, message: Uint8Array): Promise<Uint8Array>;
711
+ /**
712
+ * Updates the trust anchors for a conversation. This should be called when a federated event happens (new team added/removed).
713
+ * Clients should add and/or remove trust anchors from the new backend to the conversation. The method will check
714
+ * for duplicated domains and the validity of the certificate chain.
715
+ *
716
+ * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterwards **ONLY IF** the Delivery Service responds
717
+ * '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
718
+ * epoch, use new encryption secrets etc...
719
+ *
720
+ * @param conversationId - The ID of the conversation
721
+ * @param removeDomainNames - Domains to remove from the trust anchors
722
+ * @param addTrustAnchors - New trust anchors to add to the conversation
723
+ *
724
+ * @returns A {@link CommitBundle}
725
+ */
726
+ update_trust_anchors_from_conversation(conversationId: ConversationId, removeDomainNames: string[], addTrustAnchors: PerDomainTrustAnchor[]): Promise<CommitBundle>;
693
727
  /**
694
728
  * Ingest a TLS-serialized MLS welcome message to join an existing MLS group
695
729
  *
@@ -1026,30 +1060,30 @@ export declare class CoreCrypto {
1026
1060
  e2eiNewEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite): Promise<WireE2eIdentity>;
1027
1061
  /**
1028
1062
  * Generates an E2EI enrollment instance for a "regular" client (with a Basic credential) willing to migrate to E2EI.
1029
- * As a consequence, this method does not support changing the ClientId which should remain the same as the Basic one.
1030
1063
  * Once the enrollment is finished, use the instance in {@link CoreCrypto.e2eiRotateAll} to do the rotation.
1031
1064
  *
1065
+ * @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
1032
1066
  * @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
1033
1067
  * @param handle user handle e.g. `alice.smith.qa@example.com`
1034
1068
  * @param expiryDays generated x509 certificate expiry
1035
1069
  * @param ciphersuite - for generating signing key material
1036
1070
  * @returns The new {@link WireE2eIdentity} object
1037
1071
  */
1038
- e2eiNewActivationEnrollment(displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite): Promise<WireE2eIdentity>;
1072
+ e2eiNewActivationEnrollment(clientId: string, displayName: string, handle: string, expiryDays: number, ciphersuite: Ciphersuite): Promise<WireE2eIdentity>;
1039
1073
  /**
1040
1074
  * Generates an E2EI enrollment instance for a E2EI client (with a X509 certificate credential)
1041
1075
  * having to change/rotate their credential, either because the former one is expired or it
1042
- * has been revoked. As a consequence, this method does not support changing neither ClientId which
1043
- * should remain the same as the previous one. It lets you change the DisplayName or the handle
1076
+ * has been revoked. It lets you change the DisplayName or the handle
1044
1077
  * if you need to. Once the enrollment is finished, use the instance in {@link CoreCrypto.e2eiRotateAll} to do the rotation.
1045
1078
  *
1079
+ * @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
1046
1080
  * @param expiryDays generated x509 certificate expiry
1047
1081
  * @param ciphersuite - for generating signing key material
1048
1082
  * @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
1049
1083
  * @param handle user handle e.g. `alice.smith.qa@example.com`
1050
1084
  * @returns The new {@link WireE2eIdentity} object
1051
1085
  */
1052
- e2eiNewRotateEnrollment(expiryDays: number, ciphersuite: Ciphersuite, displayName?: string, handle?: string): Promise<WireE2eIdentity>;
1086
+ e2eiNewRotateEnrollment(clientId: string, expiryDays: number, ciphersuite: Ciphersuite, displayName?: string, handle?: string): Promise<WireE2eIdentity>;
1053
1087
  /**
1054
1088
  * Use this method to initialize end-to-end identity when a client signs up and the grace period is already expired ; that means he cannot initialize with a Basic credential
1055
1089
  *
@@ -1087,9 +1121,16 @@ export declare class CoreCrypto {
1087
1121
  * Credential generated by Wire's end-to-end identity enrollment
1088
1122
  *
1089
1123
  * @param conversationId The group's ID
1090
- * @returns true if all the members have valid X509 credentials
1124
+ * @returns the conversation state given current members
1091
1125
  */
1092
- e2eiIsDegraded(conversationId: ConversationId): Promise<boolean>;
1126
+ e2eiConversationState(conversationId: ConversationId): Promise<E2eiConversationState>;
1127
+ /**
1128
+ * Returns true when end-to-end-identity is enabled for the given Ciphersuite
1129
+ *
1130
+ * @param ciphersuite of the credential to check
1131
+ * @returns true end-to-end identity is enabled for the given ciphersuite
1132
+ */
1133
+ e2eiIsEnabled(ciphersuite: Ciphersuite): Promise<boolean>;
1093
1134
  /**
1094
1135
  * Returns the current version of {@link CoreCrypto}
1095
1136
  *
@@ -1325,5 +1366,24 @@ export interface AcmeChallenge {
1325
1366
  */
1326
1367
  target: string;
1327
1368
  }
1369
+ /**
1370
+ * Indicates the state of a Conversation regarding end-to-end identity.
1371
+ * Note: this does not check pending state (pending commit, pending proposals) so it does not
1372
+ * consider members about to be added/removed
1373
+ */
1374
+ export declare enum E2eiConversationState {
1375
+ /**
1376
+ * All clients have a valid E2EI certificate
1377
+ */
1378
+ Verified = 1,
1379
+ /**
1380
+ * Some clients are either still Basic or their certificate is expired
1381
+ */
1382
+ Degraded = 2,
1383
+ /**
1384
+ * All clients are still Basic. If all client have expired certificates, Degraded is returned.
1385
+ */
1386
+ NotEnabled = 3
1387
+ }
1328
1388
 
1329
1389
  export {};
@@ -39,14 +39,6 @@ const heap = new Array(128).fill(undefined);
39
39
  heap.push(undefined, null, true, false);
40
40
  function getObject(idx) { return heap[idx]; }
41
41
  let heap_next = heap.length;
42
- function addHeapObject(obj) {
43
- if (heap_next === heap.length)
44
- heap.push(heap.length + 1);
45
- const idx = heap_next;
46
- heap_next = heap[idx];
47
- heap[idx] = obj;
48
- return idx;
49
- }
50
42
  function dropObject(idx) {
51
43
  if (idx < 132)
52
44
  return;
@@ -58,6 +50,14 @@ function takeObject(idx) {
58
50
  dropObject(idx);
59
51
  return ret;
60
52
  }
53
+ function addHeapObject(obj) {
54
+ if (heap_next === heap.length)
55
+ heap.push(heap.length + 1);
56
+ const idx = heap_next;
57
+ heap_next = heap[idx];
58
+ heap[idx] = obj;
59
+ return idx;
60
+ }
61
61
  const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available'); } });
62
62
  if (typeof TextDecoder !== 'undefined') {
63
63
  cachedTextDecoder.decode();
@@ -234,12 +234,12 @@ function makeMutClosure(arg0, arg1, dtor, f) {
234
234
  return real;
235
235
  }
236
236
  function __wbg_adapter_52(arg0, arg1, arg2) {
237
- wasm$1.wasm_bindgen__convert__closures__invoke1_mut__h8d579dd3e9d6cb9a(arg0, arg1, addHeapObject(arg2));
237
+ wasm$1.wasm_bindgen__convert__closures__invoke1_mut__hb865a4e905934256(arg0, arg1, addHeapObject(arg2));
238
238
  }
239
239
  function __wbg_adapter_55(arg0, arg1, arg2) {
240
240
  try {
241
241
  const retptr = wasm$1.__wbindgen_add_to_stack_pointer(-16);
242
- wasm$1.wasm_bindgen__convert__closures__invoke1_mut__h746b8b0ddaf8393e(retptr, arg0, arg1, addHeapObject(arg2));
242
+ wasm$1.wasm_bindgen__convert__closures__invoke1_mut__h2720c46d5ff6c929(retptr, arg0, arg1, addHeapObject(arg2));
243
243
  var r0 = getInt32Memory0()[retptr / 4 + 0];
244
244
  var r1 = getInt32Memory0()[retptr / 4 + 1];
245
245
  if (r1) {
@@ -313,8 +313,8 @@ function handleError(f, args) {
313
313
  wasm$1.__wbindgen_exn_store(addHeapObject(e));
314
314
  }
315
315
  }
316
- function __wbg_adapter_296(arg0, arg1, arg2, arg3) {
317
- wasm$1.wasm_bindgen__convert__closures__invoke2_mut__h80912c0a9461abcd(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
316
+ function __wbg_adapter_299(arg0, arg1, arg2, arg3) {
317
+ wasm$1.wasm_bindgen__convert__closures__invoke2_mut__h22687e7c7a9c3c35(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
318
318
  }
319
319
  /**
320
320
  * see [core_crypto::prelude::MlsWirePolicy]
@@ -617,12 +617,25 @@ class ConversationConfiguration {
617
617
  * @param {(Uint8Array)[] | undefined} external_senders
618
618
  * @param {number | undefined} key_rotation_span
619
619
  * @param {number | undefined} wire_policy
620
+ * @param {Array<any>} per_domain_trust_anchors
620
621
  */
621
- constructor(ciphersuite, external_senders, key_rotation_span, wire_policy) {
622
- var ptr0 = isLikeNone(external_senders) ? 0 : passArrayJsValueToWasm0(external_senders, wasm$1.__wbindgen_malloc);
623
- var len0 = WASM_VECTOR_LEN;
624
- const ret = wasm$1.conversationconfiguration_new(isLikeNone(ciphersuite) ? 8 : ciphersuite, ptr0, len0, !isLikeNone(key_rotation_span), isLikeNone(key_rotation_span) ? 0 : key_rotation_span, isLikeNone(wire_policy) ? 3 : wire_policy);
625
- return ConversationConfiguration.__wrap(ret);
622
+ constructor(ciphersuite, external_senders, key_rotation_span, wire_policy, per_domain_trust_anchors) {
623
+ try {
624
+ const retptr = wasm$1.__wbindgen_add_to_stack_pointer(-16);
625
+ var ptr0 = isLikeNone(external_senders) ? 0 : passArrayJsValueToWasm0(external_senders, wasm$1.__wbindgen_malloc);
626
+ var len0 = WASM_VECTOR_LEN;
627
+ wasm$1.conversationconfiguration_new(retptr, isLikeNone(ciphersuite) ? 8 : ciphersuite, ptr0, len0, !isLikeNone(key_rotation_span), isLikeNone(key_rotation_span) ? 0 : key_rotation_span, isLikeNone(wire_policy) ? 3 : wire_policy, addHeapObject(per_domain_trust_anchors));
628
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
629
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
630
+ var r2 = getInt32Memory0()[retptr / 4 + 2];
631
+ if (r2) {
632
+ throw takeObject(r1);
633
+ }
634
+ return ConversationConfiguration.__wrap(r0);
635
+ }
636
+ finally {
637
+ wasm$1.__wbindgen_add_to_stack_pointer(16);
638
+ }
626
639
  }
627
640
  }
628
641
  /**
@@ -702,36 +715,42 @@ let CoreCrypto$1 = class CoreCrypto {
702
715
  * Returns: [`WasmCryptoResult<WireE2eIdentity>`]
703
716
  *
704
717
  * see [core_crypto::mls::MlsCentral::e2ei_new_activation_enrollment]
718
+ * @param {string} client_id
705
719
  * @param {string} display_name
706
720
  * @param {string} handle
707
721
  * @param {number} expiry_days
708
722
  * @param {number} ciphersuite
709
723
  * @returns {Promise<any>}
710
724
  */
711
- e2ei_new_activation_enrollment(display_name, handle, expiry_days, ciphersuite) {
712
- const ptr0 = passStringToWasm0(display_name, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
725
+ e2ei_new_activation_enrollment(client_id, display_name, handle, expiry_days, ciphersuite) {
726
+ const ptr0 = passStringToWasm0(client_id, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
713
727
  const len0 = WASM_VECTOR_LEN;
714
- const ptr1 = passStringToWasm0(handle, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
728
+ const ptr1 = passStringToWasm0(display_name, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
715
729
  const len1 = WASM_VECTOR_LEN;
716
- const ret = wasm$1.corecrypto_e2ei_new_activation_enrollment(this.__wbg_ptr, ptr0, len0, ptr1, len1, expiry_days, ciphersuite);
730
+ const ptr2 = passStringToWasm0(handle, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
731
+ const len2 = WASM_VECTOR_LEN;
732
+ const ret = wasm$1.corecrypto_e2ei_new_activation_enrollment(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, expiry_days, ciphersuite);
717
733
  return takeObject(ret);
718
734
  }
719
735
  /**
720
736
  * Returns: [`WasmCryptoResult<WireE2eIdentity>`]
721
737
  *
722
738
  * see [core_crypto::mls::MlsCentral::e2ei_new_rotate_enrollment]
739
+ * @param {string} client_id
723
740
  * @param {string | undefined} display_name
724
741
  * @param {string | undefined} handle
725
742
  * @param {number} expiry_days
726
743
  * @param {number} ciphersuite
727
744
  * @returns {Promise<any>}
728
745
  */
729
- e2ei_new_rotate_enrollment(display_name, handle, expiry_days, ciphersuite) {
730
- var ptr0 = isLikeNone(display_name) ? 0 : passStringToWasm0(display_name, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
731
- var len0 = WASM_VECTOR_LEN;
732
- var ptr1 = isLikeNone(handle) ? 0 : passStringToWasm0(handle, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
746
+ e2ei_new_rotate_enrollment(client_id, display_name, handle, expiry_days, ciphersuite) {
747
+ const ptr0 = passStringToWasm0(client_id, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
748
+ const len0 = WASM_VECTOR_LEN;
749
+ var ptr1 = isLikeNone(display_name) ? 0 : passStringToWasm0(display_name, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
733
750
  var len1 = WASM_VECTOR_LEN;
734
- const ret = wasm$1.corecrypto_e2ei_new_rotate_enrollment(this.__wbg_ptr, ptr0, len0, ptr1, len1, expiry_days, ciphersuite);
751
+ var ptr2 = isLikeNone(handle) ? 0 : passStringToWasm0(handle, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
752
+ var len2 = WASM_VECTOR_LEN;
753
+ const ret = wasm$1.corecrypto_e2ei_new_rotate_enrollment(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, expiry_days, ciphersuite);
735
754
  return takeObject(ret);
736
755
  }
737
756
  /**
@@ -788,14 +807,25 @@ let CoreCrypto$1 = class CoreCrypto {
788
807
  /**
789
808
  * Returns [`WasmCryptoResult<bool>`]
790
809
  *
791
- * see [core_crypto::mls::MlsCentral::e2ei_is_degraded]
810
+ * see [core_crypto::mls::MlsCentral::e2ei_conversation_state]
792
811
  * @param {Uint8Array} conversation_id
793
812
  * @returns {Promise<any>}
794
813
  */
795
- e2ei_is_degraded(conversation_id) {
814
+ e2ei_conversation_state(conversation_id) {
796
815
  const ptr0 = passArray8ToWasm0(conversation_id, wasm$1.__wbindgen_malloc);
797
816
  const len0 = WASM_VECTOR_LEN;
798
- const ret = wasm$1.corecrypto_e2ei_is_degraded(this.__wbg_ptr, ptr0, len0);
817
+ const ret = wasm$1.corecrypto_e2ei_conversation_state(this.__wbg_ptr, ptr0, len0);
818
+ return takeObject(ret);
819
+ }
820
+ /**
821
+ * Returns [`WasmCryptoResult<bool>`]
822
+ *
823
+ * see [core_crypto::mls::MlsCentral::e2ei_is_enabled]
824
+ * @param {number} ciphersuite
825
+ * @returns {Promise<any>}
826
+ */
827
+ e2ei_is_enabled(ciphersuite) {
828
+ const ret = wasm$1.corecrypto_e2ei_is_enabled(this.__wbg_ptr, ciphersuite);
799
829
  return takeObject(ret);
800
830
  }
801
831
  /**
@@ -1177,9 +1207,26 @@ let CoreCrypto$1 = class CoreCrypto {
1177
1207
  return takeObject(ret);
1178
1208
  }
1179
1209
  /**
1210
+ * Returns: [`WasmCryptoResult<CommitBundle>`]
1211
+ *
1212
+ * see [core_crypto::mls::MlsCentral::update_trust_anchors_from_conversation]
1213
+ * @param {Uint8Array} conversation_id
1214
+ * @param {(string)[]} remove_domain_names
1215
+ * @param {Array<any>} add_trust_anchors
1216
+ * @returns {Promise<any>}
1217
+ */
1218
+ update_trust_anchors_from_conversation(conversation_id, remove_domain_names, add_trust_anchors) {
1219
+ const ptr0 = passArray8ToWasm0(conversation_id, wasm$1.__wbindgen_malloc);
1220
+ const len0 = WASM_VECTOR_LEN;
1221
+ const ptr1 = passArrayJsValueToWasm0(remove_domain_names, wasm$1.__wbindgen_malloc);
1222
+ const len1 = WASM_VECTOR_LEN;
1223
+ const ret = wasm$1.corecrypto_update_trust_anchors_from_conversation(this.__wbg_ptr, ptr0, len0, ptr1, len1, addHeapObject(add_trust_anchors));
1224
+ return takeObject(ret);
1225
+ }
1226
+ /**
1180
1227
  * Returns: [`WasmCryptoResult<js_sys::Uint8Array>`]
1181
1228
  *
1182
- * see [core_crypto::mls::MlsCentral::new_proposal]
1229
+ * see [core_crypto::mls::MlsCentral::new_add_proposal]
1183
1230
  * @param {Uint8Array} conversation_id
1184
1231
  * @param {Uint8Array} keypackage
1185
1232
  * @returns {Promise<any>}
@@ -1195,7 +1242,7 @@ let CoreCrypto$1 = class CoreCrypto {
1195
1242
  /**
1196
1243
  * Returns: [`WasmCryptoResult<js_sys::Uint8Array>`]
1197
1244
  *
1198
- * see [core_crypto::mls::MlsCentral::new_proposal]
1245
+ * see [core_crypto::mls::MlsCentral::new_update_proposal]
1199
1246
  * @param {Uint8Array} conversation_id
1200
1247
  * @returns {Promise<any>}
1201
1248
  */
@@ -1208,7 +1255,7 @@ let CoreCrypto$1 = class CoreCrypto {
1208
1255
  /**
1209
1256
  * Returns: [`WasmCryptoResult<js_sys::Uint8Array>`]
1210
1257
  *
1211
- * see [core_crypto::mls::MlsCentral::new_proposal]
1258
+ * see [core_crypto::mls::MlsCentral::new_remove_proposal]
1212
1259
  * @param {Uint8Array} conversation_id
1213
1260
  * @param {Uint8Array} client_id
1214
1261
  * @returns {Promise<any>}
@@ -2436,6 +2483,37 @@ class NewAcmeOrder {
2436
2483
  }
2437
2484
  /**
2438
2485
  */
2486
+ class PerDomainTrustAnchor {
2487
+ static __wrap(ptr) {
2488
+ ptr = ptr >>> 0;
2489
+ const obj = Object.create(PerDomainTrustAnchor.prototype);
2490
+ obj.__wbg_ptr = ptr;
2491
+ return obj;
2492
+ }
2493
+ __destroy_into_raw() {
2494
+ const ptr = this.__wbg_ptr;
2495
+ this.__wbg_ptr = 0;
2496
+ return ptr;
2497
+ }
2498
+ free() {
2499
+ const ptr = this.__destroy_into_raw();
2500
+ wasm$1.__wbg_perdomaintrustanchor_free(ptr);
2501
+ }
2502
+ /**
2503
+ * @param {string} domain_name
2504
+ * @param {string} intermediate_certificate_chain
2505
+ */
2506
+ constructor(domain_name, intermediate_certificate_chain) {
2507
+ const ptr0 = passStringToWasm0(domain_name, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
2508
+ const len0 = WASM_VECTOR_LEN;
2509
+ const ptr1 = passStringToWasm0(intermediate_certificate_chain, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
2510
+ const len1 = WASM_VECTOR_LEN;
2511
+ const ret = wasm$1.perdomaintrustanchor_new(ptr0, len0, ptr1, len1);
2512
+ return PerDomainTrustAnchor.__wrap(ret);
2513
+ }
2514
+ }
2515
+ /**
2516
+ */
2439
2517
  class ProposalBundle {
2440
2518
  static __wrap(ptr) {
2441
2519
  ptr = ptr >>> 0;
@@ -2727,6 +2805,9 @@ async function __wbg_load(module, imports) {
2727
2805
  function __wbg_get_imports() {
2728
2806
  const imports = {};
2729
2807
  imports.wbg = {};
2808
+ imports.wbg.__wbindgen_object_drop_ref = function (arg0) {
2809
+ takeObject(arg0);
2810
+ };
2730
2811
  imports.wbg.__wbindgen_object_clone_ref = function (arg0) {
2731
2812
  const ret = getObject(arg0);
2732
2813
  return addHeapObject(ret);
@@ -2736,9 +2817,6 @@ function __wbg_get_imports() {
2736
2817
  const ret = typeof (val) === 'object' && val !== null;
2737
2818
  return ret;
2738
2819
  };
2739
- imports.wbg.__wbindgen_object_drop_ref = function (arg0) {
2740
- takeObject(arg0);
2741
- };
2742
2820
  imports.wbg.__wbg_getwithrefkey_5e6d9547403deab8 = function (arg0, arg1) {
2743
2821
  const ret = getObject(arg0)[getObject(arg1)];
2744
2822
  return addHeapObject(ret);
@@ -2797,41 +2875,41 @@ function __wbg_get_imports() {
2797
2875
  return addHeapObject(ret);
2798
2876
  }, arguments);
2799
2877
  };
2800
- imports.wbg.__wbg_new_8125e318e6245eed = function (arg0) {
2801
- const ret = new Uint8Array(getObject(arg0));
2878
+ imports.wbg.__wbindgen_number_new = function (arg0) {
2879
+ const ret = arg0;
2802
2880
  return addHeapObject(ret);
2803
2881
  };
2804
2882
  imports.wbg.__wbg_new_898a68150f225f2e = function () {
2805
2883
  const ret = new Array();
2806
2884
  return addHeapObject(ret);
2807
2885
  };
2808
- imports.wbg.__wbg_push_ca1c26067ef907ac = function (arg0, arg1) {
2809
- const ret = getObject(arg0).push(getObject(arg1));
2810
- return ret;
2886
+ imports.wbg.__wbg_set_502d29070ea18557 = function (arg0, arg1, arg2) {
2887
+ getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
2811
2888
  };
2812
- imports.wbg.__wbg_ffiwiree2eidentity_new = function (arg0) {
2813
- const ret = FfiWireE2EIdentity.__wrap(arg0);
2889
+ imports.wbg.__wbg_new_8125e318e6245eed = function (arg0) {
2890
+ const ret = new Uint8Array(getObject(arg0));
2891
+ return addHeapObject(ret);
2892
+ };
2893
+ imports.wbg.__wbg_new_b51585de1b234aff = function () {
2894
+ const ret = new Object();
2814
2895
  return addHeapObject(ret);
2815
2896
  };
2816
2897
  imports.wbg.__wbg_proteusautoprekeybundle_new = function (arg0) {
2817
2898
  const ret = ProteusAutoPrekeyBundle.__wrap(arg0);
2818
2899
  return addHeapObject(ret);
2819
2900
  };
2820
- imports.wbg.__wbg_new_b51585de1b234aff = function () {
2821
- const ret = new Object();
2822
- return addHeapObject(ret);
2901
+ imports.wbg.__wbg_push_ca1c26067ef907ac = function (arg0, arg1) {
2902
+ const ret = getObject(arg0).push(getObject(arg1));
2903
+ return ret;
2823
2904
  };
2824
- imports.wbg.__wbg_set_502d29070ea18557 = function (arg0, arg1, arg2) {
2825
- getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
2905
+ imports.wbg.__wbg_ffiwiree2eidentity_new = function (arg0) {
2906
+ const ret = FfiWireE2EIdentity.__wrap(arg0);
2907
+ return addHeapObject(ret);
2826
2908
  };
2827
2909
  imports.wbg.__wbindgen_bigint_from_u64 = function (arg0) {
2828
2910
  const ret = BigInt.asUintN(64, arg0);
2829
2911
  return addHeapObject(ret);
2830
2912
  };
2831
- imports.wbg.__wbindgen_number_new = function (arg0) {
2832
- const ret = arg0;
2833
- return addHeapObject(ret);
2834
- };
2835
2913
  imports.wbg.__wbg_new_56693dbed0c32988 = function () {
2836
2914
  const ret = new Map();
2837
2915
  return addHeapObject(ret);
@@ -2840,6 +2918,9 @@ function __wbg_get_imports() {
2840
2918
  const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));
2841
2919
  return addHeapObject(ret);
2842
2920
  };
2921
+ imports.wbg.__wbg_set_841ac57cff3d672b = function (arg0, arg1, arg2) {
2922
+ getObject(arg0)[takeObject(arg1)] = takeObject(arg2);
2923
+ };
2843
2924
  imports.wbg.__wbg_new_d258248ed531ff54 = function (arg0, arg1) {
2844
2925
  const ret = new Error(getStringFromWasm0(arg0, arg1));
2845
2926
  return addHeapObject(ret);
@@ -2912,9 +2993,6 @@ function __wbg_get_imports() {
2912
2993
  const ret = CoreCrypto$1.__wrap(arg0);
2913
2994
  return addHeapObject(ret);
2914
2995
  };
2915
- imports.wbg.__wbg_set_841ac57cff3d672b = function (arg0, arg1, arg2) {
2916
- getObject(arg0)[takeObject(arg1)] = takeObject(arg2);
2917
- };
2918
2996
  imports.wbg.__wbg_instanceof_Promise_0e98a5bf082e090f = function (arg0) {
2919
2997
  let result;
2920
2998
  try {
@@ -2966,7 +3044,7 @@ function __wbg_get_imports() {
2966
3044
  const a = state0.a;
2967
3045
  state0.a = 0;
2968
3046
  try {
2969
- return __wbg_adapter_296(a, state0.b, arg0, arg1);
3047
+ return __wbg_adapter_299(a, state0.b, arg0, arg1);
2970
3048
  }
2971
3049
  finally {
2972
3050
  state0.a = a;
@@ -3415,11 +3493,11 @@ function __wbg_get_imports() {
3415
3493
  return addHeapObject(ret);
3416
3494
  }, arguments);
3417
3495
  };
3418
- imports.wbg.__wbindgen_closure_wrapper1977 = function (arg0, arg1, arg2) {
3496
+ imports.wbg.__wbindgen_closure_wrapper1966 = function (arg0, arg1, arg2) {
3419
3497
  const ret = makeMutClosure(arg0, arg1, 166, __wbg_adapter_52);
3420
3498
  return addHeapObject(ret);
3421
3499
  };
3422
- imports.wbg.__wbindgen_closure_wrapper4646 = function (arg0, arg1, arg2) {
3500
+ imports.wbg.__wbindgen_closure_wrapper4730 = function (arg0, arg1, arg2) {
3423
3501
  const ret = makeMutClosure(arg0, arg1, 166, __wbg_adapter_55);
3424
3502
  return addHeapObject(ret);
3425
3503
  };
@@ -3476,6 +3554,7 @@ var exports = /*#__PURE__*/Object.freeze({
3476
3554
  MemberAddedMessages: MemberAddedMessages,
3477
3555
  NewAcmeAuthz: NewAcmeAuthz,
3478
3556
  NewAcmeOrder: NewAcmeOrder,
3557
+ PerDomainTrustAnchor: PerDomainTrustAnchor,
3479
3558
  ProposalBundle: ProposalBundle,
3480
3559
  ProteusAutoPrekeyBundle: ProteusAutoPrekeyBundle,
3481
3560
  RotateBundle: RotateBundle,
@@ -3488,7 +3567,7 @@ var exports = /*#__PURE__*/Object.freeze({
3488
3567
  var wasm = async (opt = {}) => {
3489
3568
  let {importHook, serverPath} = opt;
3490
3569
 
3491
- let path = "assets/core_crypto_ffi-ca75d34d.wasm";
3570
+ let path = "assets/core_crypto_ffi-9ad99558.wasm";
3492
3571
 
3493
3572
  if (serverPath != null) {
3494
3573
  path = serverPath + /[^\/\\]*$/.exec(path)[0];
@@ -3896,8 +3975,8 @@ class CoreCrypto {
3896
3975
  */
3897
3976
  async createConversation(conversationId, creatorCredentialType, configuration = {}) {
3898
3977
  try {
3899
- const { ciphersuite, externalSenders, custom = {} } = configuration || {};
3900
- const config = new (__classPrivateFieldGet(CoreCrypto, _a, "f", _CoreCrypto_module).ConversationConfiguration)(ciphersuite, externalSenders, custom?.keyRotationSpan);
3978
+ const { ciphersuite, externalSenders, custom = {}, perDomainTrustAnchors = [] } = configuration || {};
3979
+ const config = new (__classPrivateFieldGet(CoreCrypto, _a, "f", _CoreCrypto_module).ConversationConfiguration)(ciphersuite, externalSenders, custom?.keyRotationSpan, custom?.wirePolicy, perDomainTrustAnchors);
3901
3980
  const ret = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").create_conversation(conversationId, creatorCredentialType, config));
3902
3981
  return ret;
3903
3982
  }
@@ -3949,6 +4028,40 @@ class CoreCrypto {
3949
4028
  async encryptMessage(conversationId, message) {
3950
4029
  return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").encrypt_message(conversationId, message));
3951
4030
  }
4031
+ /**
4032
+ * Updates the trust anchors for a conversation. This should be called when a federated event happens (new team added/removed).
4033
+ * Clients should add and/or remove trust anchors from the new backend to the conversation. The method will check
4034
+ * for duplicated domains and the validity of the certificate chain.
4035
+ *
4036
+ * **CAUTION**: {@link CoreCrypto.commitAccepted} **HAS TO** be called afterwards **ONLY IF** the Delivery Service responds
4037
+ * '200 OK' to the {@link CommitBundle} upload. It will "merge" the commit locally i.e. increment the local group
4038
+ * epoch, use new encryption secrets etc...
4039
+ *
4040
+ * @param conversationId - The ID of the conversation
4041
+ * @param removeDomainNames - Domains to remove from the trust anchors
4042
+ * @param addTrustAnchors - New trust anchors to add to the conversation
4043
+ *
4044
+ * @returns A {@link CommitBundle}
4045
+ */
4046
+ async update_trust_anchors_from_conversation(conversationId, removeDomainNames, addTrustAnchors) {
4047
+ try {
4048
+ const ffiRet = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").update_trust_anchors_from_conversation(conversationId, removeDomainNames, addTrustAnchors));
4049
+ const gi = ffiRet.group_info;
4050
+ const ret = {
4051
+ welcome: ffiRet.welcome,
4052
+ commit: ffiRet.commit,
4053
+ groupInfo: {
4054
+ encryptionType: gi.encryption_type,
4055
+ ratchetTreeType: gi.ratchet_tree_type,
4056
+ payload: gi.payload
4057
+ },
4058
+ };
4059
+ return ret;
4060
+ }
4061
+ catch (e) {
4062
+ throw CoreCryptoError.fromStdError(e);
4063
+ }
4064
+ }
3952
4065
  /**
3953
4066
  * Ingest a TLS-serialized MLS welcome message to join an existing MLS group
3954
4067
  *
@@ -4495,34 +4608,34 @@ class CoreCrypto {
4495
4608
  }
4496
4609
  /**
4497
4610
  * Generates an E2EI enrollment instance for a "regular" client (with a Basic credential) willing to migrate to E2EI.
4498
- * As a consequence, this method does not support changing the ClientId which should remain the same as the Basic one.
4499
4611
  * Once the enrollment is finished, use the instance in {@link CoreCrypto.e2eiRotateAll} to do the rotation.
4500
4612
  *
4613
+ * @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
4501
4614
  * @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
4502
4615
  * @param handle user handle e.g. `alice.smith.qa@example.com`
4503
4616
  * @param expiryDays generated x509 certificate expiry
4504
4617
  * @param ciphersuite - for generating signing key material
4505
4618
  * @returns The new {@link WireE2eIdentity} object
4506
4619
  */
4507
- async e2eiNewActivationEnrollment(displayName, handle, expiryDays, ciphersuite) {
4508
- const e2ei = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_new_activation_enrollment(displayName, handle, expiryDays, ciphersuite));
4620
+ async e2eiNewActivationEnrollment(clientId, displayName, handle, expiryDays, ciphersuite) {
4621
+ const e2ei = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_new_activation_enrollment(clientId, displayName, handle, expiryDays, ciphersuite));
4509
4622
  return new WireE2eIdentity(e2ei);
4510
4623
  }
4511
4624
  /**
4512
4625
  * Generates an E2EI enrollment instance for a E2EI client (with a X509 certificate credential)
4513
4626
  * having to change/rotate their credential, either because the former one is expired or it
4514
- * has been revoked. As a consequence, this method does not support changing neither ClientId which
4515
- * should remain the same as the previous one. It lets you change the DisplayName or the handle
4627
+ * has been revoked. It lets you change the DisplayName or the handle
4516
4628
  * if you need to. Once the enrollment is finished, use the instance in {@link CoreCrypto.e2eiRotateAll} to do the rotation.
4517
4629
  *
4630
+ * @param clientId client identifier with user b64Url encoded & clientId hex encoded e.g. `NDUyMGUyMmY2YjA3NGU3NjkyZjE1NjJjZTAwMmQ2NTQ:6add501bacd1d90e@example.com`
4518
4631
  * @param expiryDays generated x509 certificate expiry
4519
4632
  * @param ciphersuite - for generating signing key material
4520
4633
  * @param displayName human readable name displayed in the application e.g. `Smith, Alice M (QA)`
4521
4634
  * @param handle user handle e.g. `alice.smith.qa@example.com`
4522
4635
  * @returns The new {@link WireE2eIdentity} object
4523
4636
  */
4524
- async e2eiNewRotateEnrollment(expiryDays, ciphersuite, displayName, handle) {
4525
- const e2ei = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_new_rotate_enrollment(displayName, handle, expiryDays, ciphersuite));
4637
+ async e2eiNewRotateEnrollment(clientId, expiryDays, ciphersuite, displayName, handle) {
4638
+ const e2ei = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_new_rotate_enrollment(clientId, displayName, handle, expiryDays, ciphersuite));
4526
4639
  return new WireE2eIdentity(e2ei);
4527
4640
  }
4528
4641
  /**
@@ -4571,10 +4684,21 @@ class CoreCrypto {
4571
4684
  * Credential generated by Wire's end-to-end identity enrollment
4572
4685
  *
4573
4686
  * @param conversationId The group's ID
4574
- * @returns true if all the members have valid X509 credentials
4687
+ * @returns the conversation state given current members
4688
+ */
4689
+ async e2eiConversationState(conversationId) {
4690
+ let state = await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_conversation_state(conversationId));
4691
+ // @ts-ignore
4692
+ return E2eiConversationState[E2eiConversationState[state]];
4693
+ }
4694
+ /**
4695
+ * Returns true when end-to-end-identity is enabled for the given Ciphersuite
4696
+ *
4697
+ * @param ciphersuite of the credential to check
4698
+ * @returns true end-to-end identity is enabled for the given ciphersuite
4575
4699
  */
4576
- async e2eiIsDegraded(conversationId) {
4577
- return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_is_degraded(conversationId));
4700
+ async e2eiIsEnabled(ciphersuite) {
4701
+ return await CoreCryptoError.asyncMapErr(__classPrivateFieldGet(this, _CoreCrypto_cc, "f").e2ei_is_enabled(ciphersuite));
4578
4702
  }
4579
4703
  /**
4580
4704
  * Returns the current version of {@link CoreCrypto}
@@ -4849,5 +4973,25 @@ class WireE2eIdentity {
4849
4973
  }
4850
4974
  }
4851
4975
  _WireE2eIdentity_e2ei = new WeakMap();
4976
+ /**
4977
+ * Indicates the state of a Conversation regarding end-to-end identity.
4978
+ * Note: this does not check pending state (pending commit, pending proposals) so it does not
4979
+ * consider members about to be added/removed
4980
+ */
4981
+ var E2eiConversationState;
4982
+ (function (E2eiConversationState) {
4983
+ /**
4984
+ * All clients have a valid E2EI certificate
4985
+ */
4986
+ E2eiConversationState[E2eiConversationState["Verified"] = 1] = "Verified";
4987
+ /**
4988
+ * Some clients are either still Basic or their certificate is expired
4989
+ */
4990
+ E2eiConversationState[E2eiConversationState["Degraded"] = 2] = "Degraded";
4991
+ /**
4992
+ * All clients are still Basic. If all client have expired certificates, Degraded is returned.
4993
+ */
4994
+ E2eiConversationState[E2eiConversationState["NotEnabled"] = 3] = "NotEnabled";
4995
+ })(E2eiConversationState || (E2eiConversationState = {}));
4852
4996
 
4853
- export { Ciphersuite, CoreCrypto, CoreCryptoError, CredentialType, ExternalProposalType, GroupInfoEncryptionType, ProposalType, RatchetTreeType, WireE2eIdentity, WirePolicy };
4997
+ export { Ciphersuite, CoreCrypto, CoreCryptoError, CredentialType, E2eiConversationState, ExternalProposalType, GroupInfoEncryptionType, ProposalType, RatchetTreeType, WireE2eIdentity, WirePolicy };