@wireapp/core-crypto 0.6.0-pre.4 → 0.6.0-pre.5

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -101,7 +101,7 @@ cargo make wasm
101
101
 
102
102
  ### Versioning
103
103
 
104
- * Run `cargo xtask bump [major|minor|patch|rc|pre]`
104
+ * Run `cargo xtask release bump [major|minor|patch|rc|pre]`
105
105
  * Update the internal dependencies of the updated crates to use the new version
106
106
  * Update the version in the `package.json`
107
107
  * Update the version in the `build.gradle.kts` inside `./kotlin/android` and `./kotlin/jvm`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wireapp/core-crypto",
3
- "version": "0.6.0-pre.4",
3
+ "version": "0.6.0-pre.5",
4
4
  "description": "CoreCrypto bindings for the Web",
5
5
  "type": "module",
6
6
  "module": "platforms/web/corecrypto.js",
@@ -423,6 +423,19 @@ export declare class CoreCrypto {
423
423
  * ````
424
424
  */
425
425
  static init({ databaseName, key, clientId, wasmFilePath, entropySeed }: CoreCryptoParams): Promise<CoreCrypto>;
426
+ /**
427
+ * Almost identical to {@link CoreCrypto.init} but allows a 2 phase initialization of MLS.
428
+ * First, calling this will set up the keystore and will allow generating proteus prekeys.
429
+ * Then, those keys can be traded for a clientId.
430
+ * Use this clientId to initialize MLS with {@link CoreCrypto.mlsInit}.
431
+ */
432
+ static deferredInit(databaseName: string, key: string, entropySeed?: Uint8Array, wasmFilePath?: string): Promise<CoreCrypto>;
433
+ /**
434
+ * Use this after {@link CoreCrypto.deferredInit} when you have a clientId. It initializes MLS.
435
+ *
436
+ * @param clientId - {@link CoreCryptoParams#clientId} but required
437
+ */
438
+ mlsInit(clientId: string): Promise<void>;
426
439
  /** @hidden */
427
440
  private constructor();
428
441
  /**
@@ -767,6 +780,18 @@ export declare class CoreCrypto {
767
780
  * @returns Hex-encoded public key string
768
781
  */
769
782
  proteusFingerprint(): Promise<string>;
783
+ /**
784
+ * Proteus session local fingerprint
785
+ *
786
+ * @returns Hex-encoded public key string
787
+ */
788
+ proteusFingerprintLocal(sessionId: string): Promise<string>;
789
+ /**
790
+ * Proteus session remote fingerprint
791
+ *
792
+ * @returns Hex-encoded public key string
793
+ */
794
+ proteusFingerprintRemote(sessionId: string): Promise<string>;
770
795
  /**
771
796
  * Imports all the data stored by Cryptobox into the CoreCrypto keystore
772
797
  *
@@ -36,15 +36,6 @@ function getObject(idx) { return heap[idx]; }
36
36
 
37
37
  let heap_next = heap.length;
38
38
 
39
- function addHeapObject(obj) {
40
- if (heap_next === heap.length) heap.push(heap.length + 1);
41
- const idx = heap_next;
42
- heap_next = heap[idx];
43
-
44
- heap[idx] = obj;
45
- return idx;
46
- }
47
-
48
39
  function dropObject(idx) {
49
40
  if (idx < 36) return;
50
41
  heap[idx] = heap_next;
@@ -57,6 +48,15 @@ function takeObject(idx) {
57
48
  return ret;
58
49
  }
59
50
 
51
+ function addHeapObject(obj) {
52
+ if (heap_next === heap.length) heap.push(heap.length + 1);
53
+ const idx = heap_next;
54
+ heap_next = heap[idx];
55
+
56
+ heap[idx] = obj;
57
+ return idx;
58
+ }
59
+
60
60
  const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
61
61
 
62
62
  cachedTextDecoder.decode();
@@ -328,7 +328,7 @@ function handleError(f, args) {
328
328
  function getArrayU8FromWasm0(ptr, len) {
329
329
  return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
330
330
  }
331
- function __wbg_adapter_213(arg0, arg1, arg2, arg3) {
331
+ function __wbg_adapter_217(arg0, arg1, arg2, arg3) {
332
332
  wasm$1.wasm_bindgen__convert__closures__invoke2_mut__h880776ea65aca59d(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
333
333
  }
334
334
 
@@ -519,6 +519,34 @@ class CoreCrypto$1 {
519
519
  return takeObject(ret);
520
520
  }
521
521
  /**
522
+ * see [core_crypto::MlsCentral::try_new]
523
+ * @param {string} path
524
+ * @param {string} key
525
+ * @param {Uint8Array | undefined} entropy_seed
526
+ * @returns {Promise<CoreCrypto>}
527
+ */
528
+ static deferred_init(path, key, entropy_seed) {
529
+ const ptr0 = passStringToWasm0(path, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
530
+ const len0 = WASM_VECTOR_LEN;
531
+ const ptr1 = passStringToWasm0(key, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
532
+ const len1 = WASM_VECTOR_LEN;
533
+ var ptr2 = isLikeNone(entropy_seed) ? 0 : passArray8ToWasm0(entropy_seed, wasm$1.__wbindgen_malloc);
534
+ var len2 = WASM_VECTOR_LEN;
535
+ const ret = wasm$1.corecrypto_deferred_init(ptr0, len0, ptr1, len1, ptr2, len2);
536
+ return takeObject(ret);
537
+ }
538
+ /**
539
+ * see [core_crypto::MlsCentral::mls_init]
540
+ * @param {string} client_id
541
+ * @returns {Promise<Promise<any>>}
542
+ */
543
+ mls_init(client_id) {
544
+ const ptr0 = passStringToWasm0(client_id, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
545
+ const len0 = WASM_VECTOR_LEN;
546
+ const ret = wasm$1.corecrypto_mls_init(this.ptr, ptr0, len0);
547
+ return takeObject(ret);
548
+ }
549
+ /**
522
550
  * Returns: [`WasmCryptoResult<()>`]
523
551
  *
524
552
  * see [core_crypto::MlsCentral::close]
@@ -1085,6 +1113,32 @@ class CoreCrypto$1 {
1085
1113
  return takeObject(ret);
1086
1114
  }
1087
1115
  /**
1116
+ * Returns: [`WasmCryptoResult<String>`]
1117
+ *
1118
+ * see [core_crypto::proteus::ProteusCentral::fingerprint_local]
1119
+ * @param {string} session_id
1120
+ * @returns {Promise<string>}
1121
+ */
1122
+ proteus_fingerprint_local(session_id) {
1123
+ const ptr0 = passStringToWasm0(session_id, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
1124
+ const len0 = WASM_VECTOR_LEN;
1125
+ const ret = wasm$1.corecrypto_proteus_fingerprint_local(this.ptr, ptr0, len0);
1126
+ return takeObject(ret);
1127
+ }
1128
+ /**
1129
+ * Returns: [`WasmCryptoResult<String>`]
1130
+ *
1131
+ * see [core_crypto::proteus::ProteusCentral::fingerprint_remote]
1132
+ * @param {string} session_id
1133
+ * @returns {Promise<string>}
1134
+ */
1135
+ proteus_fingerprint_remote(session_id) {
1136
+ const ptr0 = passStringToWasm0(session_id, wasm$1.__wbindgen_malloc, wasm$1.__wbindgen_realloc);
1137
+ const len0 = WASM_VECTOR_LEN;
1138
+ const ret = wasm$1.corecrypto_proteus_fingerprint_remote(this.ptr, ptr0, len0);
1139
+ return takeObject(ret);
1140
+ }
1141
+ /**
1088
1142
  * Returns: [`WasmCryptoResult<()>`]
1089
1143
  *
1090
1144
  * see [core_crypto::proteus::ProteusCentral::cryptobox_migrate]
@@ -1443,6 +1497,9 @@ async function load(module, imports) {
1443
1497
  function getImports() {
1444
1498
  const imports = {};
1445
1499
  imports.wbg = {};
1500
+ imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
1501
+ takeObject(arg0);
1502
+ };
1446
1503
  imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
1447
1504
  const ret = getObject(arg0);
1448
1505
  return addHeapObject(ret);
@@ -1452,9 +1509,6 @@ function getImports() {
1452
1509
  const ret = typeof(val) === 'object' && val !== null;
1453
1510
  return ret;
1454
1511
  };
1455
- imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
1456
- takeObject(arg0);
1457
- };
1458
1512
  imports.wbg.__wbg_getwithrefkey_15c62c2b8546208d = function(arg0, arg1) {
1459
1513
  const ret = getObject(arg0)[getObject(arg1)];
1460
1514
  return addHeapObject(ret);
@@ -1586,30 +1640,22 @@ function getImports() {
1586
1640
  const ret = getObject(arg0)[arg1 >>> 0];
1587
1641
  return addHeapObject(ret);
1588
1642
  };
1589
- imports.wbg.__wbg_new_8c3f0052272a457a = function(arg0) {
1590
- const ret = new Uint8Array(getObject(arg0));
1643
+ imports.wbg.__wbg_corecrypto_new = function(arg0) {
1644
+ const ret = CoreCrypto$1.__wrap(arg0);
1591
1645
  return addHeapObject(ret);
1592
1646
  };
1593
1647
  imports.wbg.__wbg_call_168da88779e35f61 = function() { return handleError(function (arg0, arg1, arg2) {
1594
1648
  const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
1595
1649
  return addHeapObject(ret);
1596
1650
  }, arguments) };
1597
- imports.wbg.__wbg_corecrypto_new = function(arg0) {
1598
- const ret = CoreCrypto$1.__wrap(arg0);
1651
+ imports.wbg.__wbg_new_8c3f0052272a457a = function(arg0) {
1652
+ const ret = new Uint8Array(getObject(arg0));
1599
1653
  return addHeapObject(ret);
1600
1654
  };
1601
1655
  imports.wbg.__wbg_push_740e4b286702d964 = function(arg0, arg1) {
1602
1656
  const ret = getObject(arg0).push(getObject(arg1));
1603
1657
  return ret;
1604
1658
  };
1605
- imports.wbg.__wbg_call_3999bee59e9f7719 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
1606
- const ret = getObject(arg0).call(getObject(arg1), getObject(arg2), getObject(arg3));
1607
- return addHeapObject(ret);
1608
- }, arguments) };
1609
- imports.wbg.__wbg_call_e1f72c051cdab859 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
1610
- const ret = getObject(arg0).call(getObject(arg1), getObject(arg2), getObject(arg3), getObject(arg4));
1611
- return addHeapObject(ret);
1612
- }, arguments) };
1613
1659
  imports.wbg.__wbg_new_9962f939219f1820 = function(arg0, arg1) {
1614
1660
  try {
1615
1661
  var state0 = {a: arg0, b: arg1};
@@ -1617,7 +1663,7 @@ function getImports() {
1617
1663
  const a = state0.a;
1618
1664
  state0.a = 0;
1619
1665
  try {
1620
- return __wbg_adapter_213(a, state0.b, arg0, arg1);
1666
+ return __wbg_adapter_217(a, state0.b, arg0, arg1);
1621
1667
  } finally {
1622
1668
  state0.a = a;
1623
1669
  }
@@ -1628,6 +1674,14 @@ function getImports() {
1628
1674
  state0.a = state0.b = 0;
1629
1675
  }
1630
1676
  };
1677
+ imports.wbg.__wbg_call_3999bee59e9f7719 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
1678
+ const ret = getObject(arg0).call(getObject(arg1), getObject(arg2), getObject(arg3));
1679
+ return addHeapObject(ret);
1680
+ }, arguments) };
1681
+ imports.wbg.__wbg_call_e1f72c051cdab859 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
1682
+ const ret = getObject(arg0).call(getObject(arg1), getObject(arg2), getObject(arg3), getObject(arg4));
1683
+ return addHeapObject(ret);
1684
+ }, arguments) };
1631
1685
  imports.wbg.__wbg_reject_72477563edad55b7 = function(arg0) {
1632
1686
  const ret = Promise.reject(getObject(arg0));
1633
1687
  return addHeapObject(ret);
@@ -1687,32 +1741,9 @@ function getImports() {
1687
1741
  const ret = false;
1688
1742
  return ret;
1689
1743
  };
1690
- imports.wbg.__wbg_get_6285bf458a1ee758 = function() { return handleError(function (arg0, arg1) {
1691
- const ret = getObject(arg0).get(getObject(arg1));
1692
- return addHeapObject(ret);
1693
- }, arguments) };
1694
- imports.wbg.__wbg_openCursor_e036069f0e326708 = function() { return handleError(function (arg0, arg1) {
1695
- const ret = getObject(arg0).openCursor(getObject(arg1));
1696
- return addHeapObject(ret);
1697
- }, arguments) };
1698
- imports.wbg.__wbg_openCursor_f055654a98eeab7f = function() { return handleError(function (arg0) {
1699
- const ret = getObject(arg0).openCursor();
1700
- return addHeapObject(ret);
1701
- }, arguments) };
1702
1744
  imports.wbg.__wbg_setonsuccess_5f71593bc51653a3 = function(arg0, arg1) {
1703
1745
  getObject(arg0).onsuccess = getObject(arg1);
1704
1746
  };
1705
- imports.wbg.__wbg_delete_8abedd1043b4105d = function() { return handleError(function (arg0, arg1) {
1706
- const ret = getObject(arg0).delete(getObject(arg1));
1707
- return addHeapObject(ret);
1708
- }, arguments) };
1709
- imports.wbg.__wbg_deleteDatabase_f6454de6a88aebde = function() { return handleError(function (arg0, arg1, arg2) {
1710
- const ret = getObject(arg0).deleteDatabase(getStringFromWasm0(arg1, arg2));
1711
- return addHeapObject(ret);
1712
- }, arguments) };
1713
- imports.wbg.__wbg_close_5a04b9ce11dade22 = function(arg0) {
1714
- getObject(arg0).close();
1715
- };
1716
1747
  imports.wbg.__wbg_setonerror_d5771cc5bf9ea74c = function(arg0, arg1) {
1717
1748
  getObject(arg0).onerror = getObject(arg1);
1718
1749
  };
@@ -1724,17 +1755,30 @@ function getImports() {
1724
1755
  const ret = getObject(arg0).put(getObject(arg1));
1725
1756
  return addHeapObject(ret);
1726
1757
  }, arguments) };
1727
- imports.wbg.__wbg_open_a31c3fe1fdc244eb = function() { return handleError(function (arg0, arg1, arg2) {
1728
- const ret = getObject(arg0).open(getStringFromWasm0(arg1, arg2));
1758
+ imports.wbg.__wbg_openCursor_e036069f0e326708 = function() { return handleError(function (arg0, arg1) {
1759
+ const ret = getObject(arg0).openCursor(getObject(arg1));
1729
1760
  return addHeapObject(ret);
1730
1761
  }, arguments) };
1731
- imports.wbg.__wbg_open_c5d5fb2df44b9d10 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
1732
- const ret = getObject(arg0).open(getStringFromWasm0(arg1, arg2), arg3 >>> 0);
1762
+ imports.wbg.__wbg_openCursor_f055654a98eeab7f = function() { return handleError(function (arg0) {
1763
+ const ret = getObject(arg0).openCursor();
1764
+ return addHeapObject(ret);
1765
+ }, arguments) };
1766
+ imports.wbg.__wbg_count_b0e88953a0ea909c = function() { return handleError(function (arg0) {
1767
+ const ret = getObject(arg0).count();
1768
+ return addHeapObject(ret);
1769
+ }, arguments) };
1770
+ imports.wbg.__wbg_count_46eda68a16dbe30e = function() { return handleError(function (arg0, arg1) {
1771
+ const ret = getObject(arg0).count(getObject(arg1));
1772
+ return addHeapObject(ret);
1773
+ }, arguments) };
1774
+ imports.wbg.__wbg_delete_8abedd1043b4105d = function() { return handleError(function (arg0, arg1) {
1775
+ const ret = getObject(arg0).delete(getObject(arg1));
1776
+ return addHeapObject(ret);
1777
+ }, arguments) };
1778
+ imports.wbg.__wbg_get_6285bf458a1ee758 = function() { return handleError(function (arg0, arg1) {
1779
+ const ret = getObject(arg0).get(getObject(arg1));
1733
1780
  return addHeapObject(ret);
1734
1781
  }, arguments) };
1735
- imports.wbg.__wbg_setonupgradeneeded_17d0b9530f1e0cac = function(arg0, arg1) {
1736
- getObject(arg0).onupgradeneeded = getObject(arg1);
1737
- };
1738
1782
  imports.wbg.__wbg_index_86861edf1478f49c = function() { return handleError(function (arg0, arg1, arg2) {
1739
1783
  const ret = getObject(arg0).index(getStringFromWasm0(arg1, arg2));
1740
1784
  return addHeapObject(ret);
@@ -1755,14 +1799,24 @@ function getImports() {
1755
1799
  const ret = getObject(arg0).openCursor(getObject(arg1));
1756
1800
  return addHeapObject(ret);
1757
1801
  }, arguments) };
1758
- imports.wbg.__wbg_count_b0e88953a0ea909c = function() { return handleError(function (arg0) {
1759
- const ret = getObject(arg0).count();
1802
+ imports.wbg.__wbg_deleteDatabase_f6454de6a88aebde = function() { return handleError(function (arg0, arg1, arg2) {
1803
+ const ret = getObject(arg0).deleteDatabase(getStringFromWasm0(arg1, arg2));
1760
1804
  return addHeapObject(ret);
1761
1805
  }, arguments) };
1762
- imports.wbg.__wbg_count_46eda68a16dbe30e = function() { return handleError(function (arg0, arg1) {
1763
- const ret = getObject(arg0).count(getObject(arg1));
1806
+ imports.wbg.__wbg_close_5a04b9ce11dade22 = function(arg0) {
1807
+ getObject(arg0).close();
1808
+ };
1809
+ imports.wbg.__wbg_open_a31c3fe1fdc244eb = function() { return handleError(function (arg0, arg1, arg2) {
1810
+ const ret = getObject(arg0).open(getStringFromWasm0(arg1, arg2));
1764
1811
  return addHeapObject(ret);
1765
1812
  }, arguments) };
1813
+ imports.wbg.__wbg_open_c5d5fb2df44b9d10 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
1814
+ const ret = getObject(arg0).open(getStringFromWasm0(arg1, arg2), arg3 >>> 0);
1815
+ return addHeapObject(ret);
1816
+ }, arguments) };
1817
+ imports.wbg.__wbg_setonupgradeneeded_17d0b9530f1e0cac = function(arg0, arg1) {
1818
+ getObject(arg0).onupgradeneeded = getObject(arg1);
1819
+ };
1766
1820
  imports.wbg.__wbg_randomFillSync_6894564c2c334c42 = function() { return handleError(function (arg0, arg1, arg2) {
1767
1821
  getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));
1768
1822
  }, arguments) };
@@ -2010,11 +2064,11 @@ function getImports() {
2010
2064
  const ret = getObject(arg0).objectStore(getStringFromWasm0(arg1, arg2));
2011
2065
  return addHeapObject(ret);
2012
2066
  }, arguments) };
2013
- imports.wbg.__wbindgen_closure_wrapper2302 = function(arg0, arg1, arg2) {
2067
+ imports.wbg.__wbindgen_closure_wrapper2358 = function(arg0, arg1, arg2) {
2014
2068
  const ret = makeMutClosure(arg0, arg1, 123, __wbg_adapter_52);
2015
2069
  return addHeapObject(ret);
2016
2070
  };
2017
- imports.wbg.__wbindgen_closure_wrapper3740 = function(arg0, arg1, arg2) {
2071
+ imports.wbg.__wbindgen_closure_wrapper3780 = function(arg0, arg1, arg2) {
2018
2072
  const ret = makeMutClosure(arg0, arg1, 123, __wbg_adapter_55);
2019
2073
  return addHeapObject(ret);
2020
2074
  };
@@ -2083,7 +2137,7 @@ var exports = /*#__PURE__*/Object.freeze({
2083
2137
  var wasm = async (opt = {}) => {
2084
2138
  let {importHook, serverPath} = opt;
2085
2139
 
2086
- let path = "assets/core_crypto_ffi-c0caf497.wasm";
2140
+ let path = "assets/core_crypto_ffi-bf5877ee.wasm";
2087
2141
 
2088
2142
  if (serverPath != null) {
2089
2143
  path = serverPath + /[^\/\\]*$/.exec(path)[0];
@@ -2252,6 +2306,29 @@ class CoreCrypto {
2252
2306
  const cc = await __classPrivateFieldGet(this, _a, "f", _CoreCrypto_module).CoreCrypto._internal_new(databaseName, key, clientId, entropySeed);
2253
2307
  return new this(cc);
2254
2308
  }
2309
+ /**
2310
+ * Almost identical to {@link CoreCrypto.init} but allows a 2 phase initialization of MLS.
2311
+ * First, calling this will set up the keystore and will allow generating proteus prekeys.
2312
+ * Then, those keys can be traded for a clientId.
2313
+ * Use this clientId to initialize MLS with {@link CoreCrypto.mlsInit}.
2314
+ */
2315
+ static async deferredInit(databaseName, key, entropySeed, wasmFilePath) {
2316
+ if (!__classPrivateFieldGet(this, _a, "f", _CoreCrypto_module)) {
2317
+ const wasmImportArgs = wasmFilePath ? { importHook: () => wasmFilePath } : undefined;
2318
+ const exports = (await wasm(wasmImportArgs));
2319
+ __classPrivateFieldSet(this, _a, exports, "f", _CoreCrypto_module);
2320
+ }
2321
+ const cc = await __classPrivateFieldGet(this, _a, "f", _CoreCrypto_module).CoreCrypto.deferred_init(databaseName, key, entropySeed);
2322
+ return new this(cc);
2323
+ }
2324
+ /**
2325
+ * Use this after {@link CoreCrypto.deferredInit} when you have a clientId. It initializes MLS.
2326
+ *
2327
+ * @param clientId - {@link CoreCryptoParams#clientId} but required
2328
+ */
2329
+ async mlsInit(clientId) {
2330
+ return await __classPrivateFieldGet(this, _CoreCrypto_cc, "f").mls_init(clientId);
2331
+ }
2255
2332
  /**
2256
2333
  * Wipes the {@link CoreCrypto} backing storage (i.e. {@link https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API | IndexedDB} database)
2257
2334
  *
@@ -2786,6 +2863,22 @@ class CoreCrypto {
2786
2863
  async proteusFingerprint() {
2787
2864
  return await __classPrivateFieldGet(this, _CoreCrypto_cc, "f").proteus_fingerprint();
2788
2865
  }
2866
+ /**
2867
+ * Proteus session local fingerprint
2868
+ *
2869
+ * @returns Hex-encoded public key string
2870
+ */
2871
+ async proteusFingerprintLocal(sessionId) {
2872
+ return await __classPrivateFieldGet(this, _CoreCrypto_cc, "f").proteus_fingerprint_local(sessionId);
2873
+ }
2874
+ /**
2875
+ * Proteus session remote fingerprint
2876
+ *
2877
+ * @returns Hex-encoded public key string
2878
+ */
2879
+ async proteusFingerprintRemote(sessionId) {
2880
+ return await __classPrivateFieldGet(this, _CoreCrypto_cc, "f").proteus_fingerprint_remote(sessionId);
2881
+ }
2789
2882
  /**
2790
2883
  * Imports all the data stored by Cryptobox into the CoreCrypto keystore
2791
2884
  *