one 2.6.20 → 2.6.21

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.
Files changed (111) hide show
  1. package/cpp/HybridOneCrypto.cpp +327 -1
  2. package/cpp/HybridOneCrypto.hpp +8 -0
  3. package/dist/cjs/index.cjs +25 -22
  4. package/dist/cjs/index.native.cjs +25 -22
  5. package/dist/cjs/index.native.js +25 -22
  6. package/dist/cjs/index.native.js.map +1 -1
  7. package/dist/cjs/one.cjs +1 -0
  8. package/dist/cjs/one.native.cjs +1 -0
  9. package/dist/cjs/one.native.js +1 -0
  10. package/dist/cjs/one.native.js.map +1 -1
  11. package/dist/cjs/platform/crypto/aes.cjs +259 -0
  12. package/dist/cjs/platform/crypto/aes.native.cjs +343 -0
  13. package/dist/cjs/platform/crypto/aes.native.js +345 -0
  14. package/dist/cjs/platform/crypto/aes.native.js.map +1 -0
  15. package/dist/cjs/platform/crypto/bytes.cjs +132 -0
  16. package/dist/cjs/platform/crypto/bytes.native.cjs +175 -0
  17. package/dist/cjs/platform/crypto/bytes.native.js +177 -0
  18. package/dist/cjs/platform/crypto/bytes.native.js.map +1 -0
  19. package/dist/cjs/platform/crypto/digest-api.cjs +65 -0
  20. package/dist/cjs/platform/crypto/digest-api.native.cjs +69 -0
  21. package/dist/cjs/platform/crypto/digest-api.native.js +71 -0
  22. package/dist/cjs/platform/crypto/digest-api.native.js.map +1 -0
  23. package/dist/cjs/platform/crypto/digest.cjs +26 -15
  24. package/dist/cjs/platform/crypto/digest.native.cjs +26 -15
  25. package/dist/cjs/platform/crypto/digest.native.js +26 -15
  26. package/dist/cjs/platform/crypto/digest.native.js.map +1 -1
  27. package/dist/cjs/platform/crypto/index.cjs +19 -1
  28. package/dist/cjs/platform/crypto/index.native.cjs +39 -1
  29. package/dist/cjs/platform/crypto/index.native.js +39 -1
  30. package/dist/cjs/platform/crypto/index.native.js.map +1 -1
  31. package/dist/cjs/platform/crypto/types.cjs +16 -0
  32. package/dist/cjs/platform/crypto/types.native.cjs +18 -0
  33. package/dist/cjs/platform/crypto/types.native.js +20 -0
  34. package/dist/cjs/platform/crypto/types.native.js.map +1 -0
  35. package/dist/cjs/platform/crypto/web.cjs +73 -0
  36. package/dist/cjs/platform/extras.cjs +4 -0
  37. package/dist/cjs/platform/extras.native.cjs +4 -0
  38. package/dist/cjs/platform/extras.native.js +4 -0
  39. package/dist/cjs/platform/extras.native.js.map +1 -1
  40. package/dist/esm/index.js +2 -2
  41. package/dist/esm/index.mjs +2 -2
  42. package/dist/esm/index.native.js +2 -2
  43. package/dist/esm/one.mjs +2 -1
  44. package/dist/esm/one.mjs.map +1 -1
  45. package/dist/esm/one.native.js +2 -1
  46. package/dist/esm/one.native.js.map +1 -1
  47. package/dist/esm/platform/crypto/aes.mjs +236 -0
  48. package/dist/esm/platform/crypto/aes.mjs.map +1 -0
  49. package/dist/esm/platform/crypto/aes.native.js +318 -0
  50. package/dist/esm/platform/crypto/aes.native.js.map +1 -0
  51. package/dist/esm/platform/crypto/bytes.mjs +104 -0
  52. package/dist/esm/platform/crypto/bytes.mjs.map +1 -0
  53. package/dist/esm/platform/crypto/bytes.native.js +145 -0
  54. package/dist/esm/platform/crypto/bytes.native.js.map +1 -0
  55. package/dist/esm/platform/crypto/digest-api.mjs +42 -0
  56. package/dist/esm/platform/crypto/digest-api.mjs.map +1 -0
  57. package/dist/esm/platform/crypto/digest-api.native.js +44 -0
  58. package/dist/esm/platform/crypto/digest-api.native.js.map +1 -0
  59. package/dist/esm/platform/crypto/digest.mjs +23 -15
  60. package/dist/esm/platform/crypto/digest.mjs.map +1 -1
  61. package/dist/esm/platform/crypto/digest.native.js +23 -15
  62. package/dist/esm/platform/crypto/digest.native.js.map +1 -1
  63. package/dist/esm/platform/crypto/index.mjs +14 -1
  64. package/dist/esm/platform/crypto/index.mjs.map +1 -1
  65. package/dist/esm/platform/crypto/index.native.js +34 -1
  66. package/dist/esm/platform/crypto/index.native.js.map +1 -1
  67. package/dist/esm/platform/crypto/types.mjs +0 -0
  68. package/dist/esm/platform/crypto/types.native.js +0 -0
  69. package/dist/esm/platform/crypto/web.mjs +50 -0
  70. package/dist/esm/platform/crypto/web.mjs.map +1 -0
  71. package/dist/esm/platform/extras.mjs +2 -1
  72. package/dist/esm/platform/extras.native.js +2 -1
  73. package/nitrogen/generated/shared/c++/HybridOneCryptoSpec.cpp +2 -0
  74. package/nitrogen/generated/shared/c++/HybridOneCryptoSpec.hpp +4 -1
  75. package/package.json +12 -12
  76. package/src/index.ts +1 -0
  77. package/src/one.ts +3 -0
  78. package/src/platform/crypto/aes.ts +345 -0
  79. package/src/platform/crypto/bytes.ts +120 -0
  80. package/src/platform/crypto/digest-api.ts +50 -0
  81. package/src/platform/crypto/digest.ts +24 -15
  82. package/src/platform/crypto/index.native.ts +68 -0
  83. package/src/platform/crypto/index.ts +31 -0
  84. package/src/platform/crypto/types.ts +64 -0
  85. package/src/platform/crypto/web.ts +69 -0
  86. package/src/platform/extras.ts +15 -0
  87. package/src/platform/specs/OneCrypto.nitro.ts +19 -0
  88. package/types/index.d.ts +1 -0
  89. package/types/index.d.ts.map +1 -1
  90. package/types/one.d.ts +2 -1
  91. package/types/one.d.ts.map +1 -1
  92. package/types/platform/crypto/aes.d.ts +211 -0
  93. package/types/platform/crypto/aes.d.ts.map +1 -0
  94. package/types/platform/crypto/bytes.d.ts +8 -0
  95. package/types/platform/crypto/bytes.d.ts.map +1 -0
  96. package/types/platform/crypto/digest-api.d.ts +9 -0
  97. package/types/platform/crypto/digest-api.d.ts.map +1 -0
  98. package/types/platform/crypto/digest.d.ts +5 -0
  99. package/types/platform/crypto/digest.d.ts.map +1 -1
  100. package/types/platform/crypto/index.d.ts +127 -0
  101. package/types/platform/crypto/index.d.ts.map +1 -1
  102. package/types/platform/crypto/index.native.d.ts +127 -0
  103. package/types/platform/crypto/index.native.d.ts.map +1 -1
  104. package/types/platform/crypto/types.d.ts +43 -0
  105. package/types/platform/crypto/types.d.ts.map +1 -0
  106. package/types/platform/crypto/web.d.ts +5 -0
  107. package/types/platform/crypto/web.d.ts.map +1 -0
  108. package/types/platform/extras.d.ts +2 -0
  109. package/types/platform/extras.d.ts.map +1 -1
  110. package/types/platform/specs/OneCrypto.nitro.d.ts +2 -0
  111. package/types/platform/specs/OneCrypto.nitro.d.ts.map +1 -1
@@ -0,0 +1,42 @@
1
+ import { bytesToBase64, bytesToHex, utf8Encode } from "./bytes.mjs";
2
+ import { bufferSourceRange } from "./digest.mjs";
3
+
4
+ const DIGEST_ALGORITHMS = [
5
+ "MD5",
6
+ "SHA-1",
7
+ "SHA-256",
8
+ "SHA-384",
9
+ "SHA-512"
10
+ ];
11
+ function assertDigestAlgorithm(algorithm, verb) {
12
+ if (!DIGEST_ALGORITHMS.includes(algorithm)) {
13
+ throw new Error(`${verb}: unknown algorithm ${JSON.stringify(algorithm)}. Expected one of: ${DIGEST_ALGORITHMS.join(", ")}`);
14
+ }
15
+ }
16
+ function createDigestApi(source) {
17
+ async function digest(algorithm, data) {
18
+ assertDigestAlgorithm(algorithm, "Crypto.digest");
19
+ const { buffer, offset, length } = bufferSourceRange(data, "Crypto.digest");
20
+ return source(algorithm, buffer, offset, length);
21
+ }
22
+ async function digestString(algorithm, data, options = {}) {
23
+ assertDigestAlgorithm(algorithm, "Crypto.digestString");
24
+ if (typeof data !== "string") {
25
+ throw new TypeError("Crypto.digestString: data must be a string");
26
+ }
27
+ const encoding = options?.encoding ?? "hex";
28
+ if (encoding !== "hex" && encoding !== "base64") {
29
+ throw new Error(`Crypto.digestString: encoding must be 'hex' or 'base64'`);
30
+ }
31
+ const bytes = utf8Encode(data);
32
+ const hashed = new Uint8Array(await source(algorithm, bytes.buffer, 0, bytes.length));
33
+ return encoding === "base64" ? bytesToBase64(hashed) : bytesToHex(hashed);
34
+ }
35
+ return {
36
+ digest,
37
+ digestString
38
+ };
39
+ }
40
+
41
+ export { DIGEST_ALGORITHMS, assertDigestAlgorithm, createDigestApi };
42
+ //# sourceMappingURL=digest-api.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest-api.js","names":[],"sources":["esm/platform/crypto/digest-api.js"],"sourcesContent":["import { bytesToBase64, bytesToHex, utf8Encode } from \"./bytes\";\nimport { bufferSourceRange } from \"./digest\";\nconst DIGEST_ALGORITHMS = [\n \"MD5\",\n \"SHA-1\",\n \"SHA-256\",\n \"SHA-384\",\n \"SHA-512\"\n];\nfunction assertDigestAlgorithm(algorithm, verb) {\n if (!DIGEST_ALGORITHMS.includes(algorithm)) {\n throw new Error(\n `${verb}: unknown algorithm ${JSON.stringify(algorithm)}. Expected one of: ${DIGEST_ALGORITHMS.join(\", \")}`\n );\n }\n}\nfunction createDigestApi(source) {\n async function digest(algorithm, data) {\n assertDigestAlgorithm(algorithm, \"Crypto.digest\");\n const { buffer, offset, length } = bufferSourceRange(data, \"Crypto.digest\");\n return source(algorithm, buffer, offset, length);\n }\n async function digestString(algorithm, data, options = {}) {\n assertDigestAlgorithm(algorithm, \"Crypto.digestString\");\n if (typeof data !== \"string\") {\n throw new TypeError(\"Crypto.digestString: data must be a string\");\n }\n const encoding = options?.encoding ?? \"hex\";\n if (encoding !== \"hex\" && encoding !== \"base64\") {\n throw new Error(`Crypto.digestString: encoding must be 'hex' or 'base64'`);\n }\n const bytes = utf8Encode(data);\n const hashed = new Uint8Array(await source(algorithm, bytes.buffer, 0, bytes.length));\n return encoding === \"base64\" ? bytesToBase64(hashed) : bytesToHex(hashed);\n }\n return { digest, digestString };\n}\nexport {\n DIGEST_ALGORITHMS,\n assertDigestAlgorithm,\n createDigestApi\n};\n//# sourceMappingURL=digest-api.js.map\n"],"mappings":";;;;AAEA,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;CACA;AACF;AACA,SAAS,sBAAsB,WAAW,MAAM;CAC9C,IAAI,CAAC,kBAAkB,SAAS,SAAS,GAAG;EAC1C,MAAM,IAAI,MACR,GAAG,KAAK,sBAAsB,KAAK,UAAU,SAAS,EAAE,qBAAqB,kBAAkB,KAAK,IAAI,GAC1G;CACF;AACF;AACA,SAAS,gBAAgB,QAAQ;CAC/B,eAAe,OAAO,WAAW,MAAM;EACrC,sBAAsB,WAAW,eAAe;EAChD,MAAM,EAAE,QAAQ,QAAQ,WAAW,kBAAkB,MAAM,eAAe;EAC1E,OAAO,OAAO,WAAW,QAAQ,QAAQ,MAAM;CACjD;CACA,eAAe,aAAa,WAAW,MAAM,UAAU,CAAC,GAAG;EACzD,sBAAsB,WAAW,qBAAqB;EACtD,IAAI,OAAO,SAAS,UAAU;GAC5B,MAAM,IAAI,UAAU,4CAA4C;EAClE;EACA,MAAM,WAAW,SAAS,YAAY;EACtC,IAAI,aAAa,SAAS,aAAa,UAAU;GAC/C,MAAM,IAAI,MAAM,yDAAyD;EAC3E;EACA,MAAM,QAAQ,WAAW,IAAI;EAC7B,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO,WAAW,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;EACpF,OAAO,aAAa,WAAW,cAAc,MAAM,IAAI,WAAW,MAAM;CAC1E;CACA,OAAO;EAAE;EAAQ;CAAa;AAChC"}
@@ -0,0 +1,44 @@
1
+ import { bytesToBase64, bytesToHex, utf8Encode } from "./bytes.native.js";
2
+ import { bufferSourceRange } from "./digest.native.js";
3
+
4
+ var DIGEST_ALGORITHMS = [
5
+ "MD5",
6
+ "SHA-1",
7
+ "SHA-256",
8
+ "SHA-384",
9
+ "SHA-512"
10
+ ];
11
+ function assertDigestAlgorithm(algorithm, verb) {
12
+ if (!DIGEST_ALGORITHMS.includes(algorithm)) {
13
+ throw new Error(`${verb}: unknown algorithm ${JSON.stringify(algorithm)}. Expected one of: ${DIGEST_ALGORITHMS.join(", ")}`);
14
+ }
15
+ }
16
+ function createDigestApi(source) {
17
+ async function digest(algorithm, data) {
18
+ assertDigestAlgorithm(algorithm, "Crypto.digest");
19
+ var { buffer, offset, length } = bufferSourceRange(data, "Crypto.digest");
20
+ return source(algorithm, buffer, offset, length);
21
+ }
22
+ async function digestString(algorithm, data) {
23
+ var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
24
+ var _ref;
25
+ assertDigestAlgorithm(algorithm, "Crypto.digestString");
26
+ if (typeof data !== "string") {
27
+ throw new TypeError("Crypto.digestString: data must be a string");
28
+ }
29
+ var encoding = (_ref = options === null || options === void 0 ? void 0 : options.encoding) !== null && _ref !== void 0 ? _ref : "hex";
30
+ if (encoding !== "hex" && encoding !== "base64") {
31
+ throw new Error(`Crypto.digestString: encoding must be 'hex' or 'base64'`);
32
+ }
33
+ var bytes = utf8Encode(data);
34
+ var hashed = new Uint8Array(await source(algorithm, bytes.buffer, 0, bytes.length));
35
+ return encoding === "base64" ? bytesToBase64(hashed) : bytesToHex(hashed);
36
+ }
37
+ return {
38
+ digest,
39
+ digestString
40
+ };
41
+ }
42
+
43
+ export { DIGEST_ALGORITHMS, assertDigestAlgorithm, createDigestApi };
44
+ //# sourceMappingURL=digest-api.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest-api.native.js","names":[],"sources":["esm/platform/crypto/digest-api.native.js"],"sourcesContent":["import { bytesToBase64, bytesToHex, utf8Encode } from \"./bytes\";\nimport { bufferSourceRange } from \"./digest\";\nvar DIGEST_ALGORITHMS = [\n \"MD5\",\n \"SHA-1\",\n \"SHA-256\",\n \"SHA-384\",\n \"SHA-512\"\n];\nfunction assertDigestAlgorithm(algorithm, verb) {\n if (!DIGEST_ALGORITHMS.includes(algorithm)) {\n throw new Error(`${verb}: unknown algorithm ${JSON.stringify(algorithm)}. Expected one of: ${DIGEST_ALGORITHMS.join(\", \")}`);\n }\n}\nfunction createDigestApi(source) {\n async function digest(algorithm, data) {\n assertDigestAlgorithm(algorithm, \"Crypto.digest\");\n var { buffer, offset, length } = bufferSourceRange(data, \"Crypto.digest\");\n return source(algorithm, buffer, offset, length);\n }\n async function digestString(algorithm, data) {\n var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};\n var _ref;\n assertDigestAlgorithm(algorithm, \"Crypto.digestString\");\n if (typeof data !== \"string\") {\n throw new TypeError(\"Crypto.digestString: data must be a string\");\n }\n var encoding = (_ref = options === null || options === void 0 ? void 0 : options.encoding) !== null && _ref !== void 0 ? _ref : \"hex\";\n if (encoding !== \"hex\" && encoding !== \"base64\") {\n throw new Error(`Crypto.digestString: encoding must be 'hex' or 'base64'`);\n }\n var bytes = utf8Encode(data);\n var hashed = new Uint8Array(await source(algorithm, bytes.buffer, 0, bytes.length));\n return encoding === \"base64\" ? bytesToBase64(hashed) : bytesToHex(hashed);\n }\n return {\n digest,\n digestString\n };\n}\nexport {\n DIGEST_ALGORITHMS,\n assertDigestAlgorithm,\n createDigestApi\n};\n//# sourceMappingURL=digest-api.js.map\n"],"mappings":";;;;AAEA,IAAI,oBAAoB;CACtB;CACA;CACA;CACA;CACA;AACF;AACA,SAAS,sBAAsB,WAAW,MAAM;CAC9C,IAAI,CAAC,kBAAkB,SAAS,SAAS,GAAG;EAC1C,MAAM,IAAI,MAAM,GAAG,KAAK,sBAAsB,KAAK,UAAU,SAAS,EAAE,qBAAqB,kBAAkB,KAAK,IAAI,GAAG;CAC7H;AACF;AACA,SAAS,gBAAgB,QAAQ;CAC/B,eAAe,OAAO,WAAW,MAAM;EACrC,sBAAsB,WAAW,eAAe;EAChD,IAAI,EAAE,QAAQ,QAAQ,WAAW,kBAAkB,MAAM,eAAe;EACxE,OAAO,OAAO,WAAW,QAAQ,QAAQ,MAAM;CACjD;CACA,eAAe,aAAa,WAAW,MAAM;EAC3C,IAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,KAAK,IAAI,UAAU,KAAK,CAAC;EAChF,IAAI;EACJ,sBAAsB,WAAW,qBAAqB;EACtD,IAAI,OAAO,SAAS,UAAU;GAC5B,MAAM,IAAI,UAAU,4CAA4C;EAClE;EACA,IAAI,YAAY,OAAO,YAAY,QAAQ,YAAY,KAAK,IAAI,KAAK,IAAI,QAAQ,cAAc,QAAQ,SAAS,KAAK,IAAI,OAAO;EAChI,IAAI,aAAa,SAAS,aAAa,UAAU;GAC/C,MAAM,IAAI,MAAM,yDAAyD;EAC3E;EACA,IAAI,QAAQ,WAAW,IAAI;EAC3B,IAAI,SAAS,IAAI,WAAW,MAAM,OAAO,WAAW,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;EAClF,OAAO,aAAa,WAAW,cAAc,MAAM,IAAI,WAAW,MAAM;CAC1E;CACA,OAAO;EACL;EACA;CACF;AACF"}
@@ -3,24 +3,32 @@ function namedError(name, message) {
3
3
  error.name = name;
4
4
  return error;
5
5
  }
6
+ function bufferSourceRange(data, verb) {
7
+ let buffer;
8
+ let offset = 0;
9
+ let length;
10
+ if (data instanceof ArrayBuffer) {
11
+ buffer = data;
12
+ length = data.byteLength;
13
+ } else if (ArrayBuffer.isView(data) && data.buffer instanceof ArrayBuffer) {
14
+ buffer = data.buffer;
15
+ offset = data.byteOffset;
16
+ length = data.byteLength;
17
+ } else {
18
+ throw new TypeError(`${verb}: expected an ArrayBuffer or view.`);
19
+ }
20
+ new Uint8Array(buffer, offset, length);
21
+ return {
22
+ buffer,
23
+ offset,
24
+ length
25
+ };
26
+ }
6
27
  function installDigestPolyfill(source, target = globalThis) {
7
28
  const crypto = target.crypto;
8
29
  if (crypto == null || typeof crypto.subtle?.digest === "function") return;
9
30
  const digest = async (algorithm, data) => {
10
- let buffer;
11
- let offset = 0;
12
- let length;
13
- if (data instanceof ArrayBuffer) {
14
- buffer = data;
15
- length = data.byteLength;
16
- } else if (ArrayBuffer.isView(data) && data.buffer instanceof ArrayBuffer) {
17
- buffer = data.buffer;
18
- offset = data.byteOffset;
19
- length = data.byteLength;
20
- } else {
21
- throw new TypeError("crypto.subtle.digest: expected an ArrayBuffer or view.");
22
- }
23
- new Uint8Array(buffer, offset, length);
31
+ const { buffer, offset, length } = bufferSourceRange(data, "crypto.subtle.digest");
24
32
  let name;
25
33
  if (algorithm !== null && (typeof algorithm === "object" || typeof algorithm === "function")) {
26
34
  const value = algorithm.name;
@@ -44,5 +52,5 @@ function installDigestPolyfill(source, target = globalThis) {
44
52
  else crypto.subtle.digest = digest;
45
53
  }
46
54
 
47
- export { installDigestPolyfill };
55
+ export { bufferSourceRange, installDigestPolyfill };
48
56
  //# sourceMappingURL=digest.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"digest.js","names":[],"sources":["esm/platform/crypto/digest.js"],"sourcesContent":["function namedError(name, message) {\n const error = new Error(message);\n error.name = name;\n return error;\n}\nfunction installDigestPolyfill(source, target = globalThis) {\n const crypto = target.crypto;\n if (crypto == null || typeof crypto.subtle?.digest === \"function\") return;\n const digest = async (algorithm, data) => {\n let buffer;\n let offset = 0;\n let length;\n if (data instanceof ArrayBuffer) {\n buffer = data;\n length = data.byteLength;\n } else if (ArrayBuffer.isView(data) && data.buffer instanceof ArrayBuffer) {\n buffer = data.buffer;\n offset = data.byteOffset;\n length = data.byteLength;\n } else {\n throw new TypeError(\"crypto.subtle.digest: expected an ArrayBuffer or view.\");\n }\n new Uint8Array(buffer, offset, length);\n let name;\n if (algorithm !== null && (typeof algorithm === \"object\" || typeof algorithm === \"function\")) {\n const value = algorithm.name;\n if (value === void 0) {\n throw new TypeError(\"crypto.subtle.digest: algorithm.name is required.\");\n }\n name = `${value}`;\n } else {\n name = `${algorithm}`;\n }\n if (!/^sha-(1|256|384|512)$/i.test(name)) {\n throw namedError(\"NotSupportedError\", `Unsupported digest algorithm: ${name}.`);\n }\n try {\n return await source(name.toUpperCase(), buffer, offset, length);\n } catch (error) {\n throw namedError(\n \"OperationError\",\n error instanceof Error ? error.message : \"Native digest failed.\"\n );\n }\n };\n if (crypto.subtle == null) crypto.subtle = { digest };\n else crypto.subtle.digest = digest;\n}\nexport {\n installDigestPolyfill\n};\n//# sourceMappingURL=digest.js.map\n"],"mappings":";AAAA,SAAS,WAAW,MAAM,SAAS;CACjC,MAAM,QAAQ,IAAI,MAAM,OAAO;CAC/B,MAAM,OAAO;CACb,OAAO;AACT;AACA,SAAS,sBAAsB,QAAQ,SAAS,YAAY;CAC1D,MAAM,SAAS,OAAO;CACtB,IAAI,UAAU,QAAQ,OAAO,OAAO,QAAQ,WAAW,YAAY;CACnE,MAAM,SAAS,OAAO,WAAW,SAAS;EACxC,IAAI;EACJ,IAAI,SAAS;EACb,IAAI;EACJ,IAAI,gBAAgB,aAAa;GAC/B,SAAS;GACT,SAAS,KAAK;EAChB,OAAO,IAAI,YAAY,OAAO,IAAI,KAAK,KAAK,kBAAkB,aAAa;GACzE,SAAS,KAAK;GACd,SAAS,KAAK;GACd,SAAS,KAAK;EAChB,OAAO;GACL,MAAM,IAAI,UAAU,wDAAwD;EAC9E;EACA,IAAI,WAAW,QAAQ,QAAQ,MAAM;EACrC,IAAI;EACJ,IAAI,cAAc,SAAS,OAAO,cAAc,YAAY,OAAO,cAAc,aAAa;GAC5F,MAAM,QAAQ,UAAU;GACxB,IAAI,UAAU,KAAK,GAAG;IACpB,MAAM,IAAI,UAAU,mDAAmD;GACzE;GACA,OAAO,GAAG;EACZ,OAAO;GACL,OAAO,GAAG;EACZ;EACA,IAAI,CAAC,yBAAyB,KAAK,IAAI,GAAG;GACxC,MAAM,WAAW,qBAAqB,iCAAiC,KAAK,EAAE;EAChF;EACA,IAAI;GACF,OAAO,MAAM,OAAO,KAAK,YAAY,GAAG,QAAQ,QAAQ,MAAM;EAChE,SAAS,OAAO;GACd,MAAM,WACJ,kBACA,iBAAiB,QAAQ,MAAM,UAAU,uBAC3C;EACF;CACF;CACA,IAAI,OAAO,UAAU,MAAM,OAAO,SAAS,EAAE,OAAO;MAC/C,OAAO,OAAO,SAAS;AAC9B"}
1
+ {"version":3,"file":"digest.js","names":[],"sources":["esm/platform/crypto/digest.js"],"sourcesContent":["function namedError(name, message) {\n const error = new Error(message);\n error.name = name;\n return error;\n}\nfunction bufferSourceRange(data, verb) {\n let buffer;\n let offset = 0;\n let length;\n if (data instanceof ArrayBuffer) {\n buffer = data;\n length = data.byteLength;\n } else if (ArrayBuffer.isView(data) && data.buffer instanceof ArrayBuffer) {\n buffer = data.buffer;\n offset = data.byteOffset;\n length = data.byteLength;\n } else {\n throw new TypeError(`${verb}: expected an ArrayBuffer or view.`);\n }\n new Uint8Array(buffer, offset, length);\n return { buffer, offset, length };\n}\nfunction installDigestPolyfill(source, target = globalThis) {\n const crypto = target.crypto;\n if (crypto == null || typeof crypto.subtle?.digest === \"function\") return;\n const digest = async (algorithm, data) => {\n const { buffer, offset, length } = bufferSourceRange(data, \"crypto.subtle.digest\");\n let name;\n if (algorithm !== null && (typeof algorithm === \"object\" || typeof algorithm === \"function\")) {\n const value = algorithm.name;\n if (value === void 0) {\n throw new TypeError(\"crypto.subtle.digest: algorithm.name is required.\");\n }\n name = `${value}`;\n } else {\n name = `${algorithm}`;\n }\n if (!/^sha-(1|256|384|512)$/i.test(name)) {\n throw namedError(\"NotSupportedError\", `Unsupported digest algorithm: ${name}.`);\n }\n try {\n return await source(name.toUpperCase(), buffer, offset, length);\n } catch (error) {\n throw namedError(\n \"OperationError\",\n error instanceof Error ? error.message : \"Native digest failed.\"\n );\n }\n };\n if (crypto.subtle == null) crypto.subtle = { digest };\n else crypto.subtle.digest = digest;\n}\nexport {\n bufferSourceRange,\n installDigestPolyfill\n};\n//# sourceMappingURL=digest.js.map\n"],"mappings":";AAAA,SAAS,WAAW,MAAM,SAAS;CACjC,MAAM,QAAQ,IAAI,MAAM,OAAO;CAC/B,MAAM,OAAO;CACb,OAAO;AACT;AACA,SAAS,kBAAkB,MAAM,MAAM;CACrC,IAAI;CACJ,IAAI,SAAS;CACb,IAAI;CACJ,IAAI,gBAAgB,aAAa;EAC/B,SAAS;EACT,SAAS,KAAK;CAChB,OAAO,IAAI,YAAY,OAAO,IAAI,KAAK,KAAK,kBAAkB,aAAa;EACzE,SAAS,KAAK;EACd,SAAS,KAAK;EACd,SAAS,KAAK;CAChB,OAAO;EACL,MAAM,IAAI,UAAU,GAAG,KAAK,mCAAmC;CACjE;CACA,IAAI,WAAW,QAAQ,QAAQ,MAAM;CACrC,OAAO;EAAE;EAAQ;EAAQ;CAAO;AAClC;AACA,SAAS,sBAAsB,QAAQ,SAAS,YAAY;CAC1D,MAAM,SAAS,OAAO;CACtB,IAAI,UAAU,QAAQ,OAAO,OAAO,QAAQ,WAAW,YAAY;CACnE,MAAM,SAAS,OAAO,WAAW,SAAS;EACxC,MAAM,EAAE,QAAQ,QAAQ,WAAW,kBAAkB,MAAM,sBAAsB;EACjF,IAAI;EACJ,IAAI,cAAc,SAAS,OAAO,cAAc,YAAY,OAAO,cAAc,aAAa;GAC5F,MAAM,QAAQ,UAAU;GACxB,IAAI,UAAU,KAAK,GAAG;IACpB,MAAM,IAAI,UAAU,mDAAmD;GACzE;GACA,OAAO,GAAG;EACZ,OAAO;GACL,OAAO,GAAG;EACZ;EACA,IAAI,CAAC,yBAAyB,KAAK,IAAI,GAAG;GACxC,MAAM,WAAW,qBAAqB,iCAAiC,KAAK,EAAE;EAChF;EACA,IAAI;GACF,OAAO,MAAM,OAAO,KAAK,YAAY,GAAG,QAAQ,QAAQ,MAAM;EAChE,SAAS,OAAO;GACd,MAAM,WACJ,kBACA,iBAAiB,QAAQ,MAAM,UAAU,uBAC3C;EACF;CACF;CACA,IAAI,OAAO,UAAU,MAAM,OAAO,SAAS,EAAE,OAAO;MAC/C,OAAO,OAAO,SAAS;AAC9B"}
@@ -3,26 +3,34 @@ function namedError(name, message) {
3
3
  error.name = name;
4
4
  return error;
5
5
  }
6
+ function bufferSourceRange(data, verb) {
7
+ var buffer;
8
+ var offset = 0;
9
+ var length;
10
+ if (data instanceof ArrayBuffer) {
11
+ buffer = data;
12
+ length = data.byteLength;
13
+ } else if (ArrayBuffer.isView(data) && data.buffer instanceof ArrayBuffer) {
14
+ buffer = data.buffer;
15
+ offset = data.byteOffset;
16
+ length = data.byteLength;
17
+ } else {
18
+ throw new TypeError(`${verb}: expected an ArrayBuffer or view.`);
19
+ }
20
+ new Uint8Array(buffer, offset, length);
21
+ return {
22
+ buffer,
23
+ offset,
24
+ length
25
+ };
26
+ }
6
27
  function installDigestPolyfill(source) {
7
28
  var target = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : globalThis;
8
29
  var _crypto_subtle;
9
30
  var crypto = target.crypto;
10
31
  if (crypto == null || typeof ((_crypto_subtle = crypto.subtle) === null || _crypto_subtle === void 0 ? void 0 : _crypto_subtle.digest) === "function") return;
11
32
  var digest = async function digest2(algorithm, data) {
12
- var buffer;
13
- var offset = 0;
14
- var length;
15
- if (data instanceof ArrayBuffer) {
16
- buffer = data;
17
- length = data.byteLength;
18
- } else if (ArrayBuffer.isView(data) && data.buffer instanceof ArrayBuffer) {
19
- buffer = data.buffer;
20
- offset = data.byteOffset;
21
- length = data.byteLength;
22
- } else {
23
- throw new TypeError("crypto.subtle.digest: expected an ArrayBuffer or view.");
24
- }
25
- new Uint8Array(buffer, offset, length);
33
+ var { buffer, offset, length } = bufferSourceRange(data, "crypto.subtle.digest");
26
34
  var name;
27
35
  if (algorithm !== null && (typeof algorithm === "object" || typeof algorithm === "function")) {
28
36
  var value = algorithm.name;
@@ -46,5 +54,5 @@ function installDigestPolyfill(source) {
46
54
  else crypto.subtle.digest = digest;
47
55
  }
48
56
 
49
- export { installDigestPolyfill };
57
+ export { bufferSourceRange, installDigestPolyfill };
50
58
  //# sourceMappingURL=digest.native.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"digest.native.js","names":[],"sources":["esm/platform/crypto/digest.native.js"],"sourcesContent":["function namedError(name, message) {\n var error = new Error(message);\n error.name = name;\n return error;\n}\nfunction installDigestPolyfill(source) {\n var target = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : globalThis;\n var _crypto_subtle;\n var crypto = target.crypto;\n if (crypto == null || typeof ((_crypto_subtle = crypto.subtle) === null || _crypto_subtle === void 0 ? void 0 : _crypto_subtle.digest) === \"function\") return;\n var digest = async function digest2(algorithm, data) {\n var buffer;\n var offset = 0;\n var length;\n if (data instanceof ArrayBuffer) {\n buffer = data;\n length = data.byteLength;\n } else if (ArrayBuffer.isView(data) && data.buffer instanceof ArrayBuffer) {\n buffer = data.buffer;\n offset = data.byteOffset;\n length = data.byteLength;\n } else {\n throw new TypeError(\"crypto.subtle.digest: expected an ArrayBuffer or view.\");\n }\n new Uint8Array(buffer, offset, length);\n var name;\n if (algorithm !== null && (typeof algorithm === \"object\" || typeof algorithm === \"function\")) {\n var value = algorithm.name;\n if (value === void 0) {\n throw new TypeError(\"crypto.subtle.digest: algorithm.name is required.\");\n }\n name = `${value}`;\n } else {\n name = `${algorithm}`;\n }\n if (!/^sha-(1|256|384|512)$/i.test(name)) {\n throw namedError(\"NotSupportedError\", `Unsupported digest algorithm: ${name}.`);\n }\n try {\n return await source(name.toUpperCase(), buffer, offset, length);\n } catch (error) {\n throw namedError(\"OperationError\", error instanceof Error ? error.message : \"Native digest failed.\");\n }\n };\n if (crypto.subtle == null) crypto.subtle = {\n digest\n };\n else crypto.subtle.digest = digest;\n}\nexport {\n installDigestPolyfill\n};\n//# sourceMappingURL=digest.js.map\n"],"mappings":";AAAA,SAAS,WAAW,MAAM,SAAS;CACjC,IAAI,QAAQ,IAAI,MAAM,OAAO;CAC7B,MAAM,OAAO;CACb,OAAO;AACT;AACA,SAAS,sBAAsB,QAAQ;CACrC,IAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,KAAK,IAAI,UAAU,KAAK;CAC9E,IAAI;CACJ,IAAI,SAAS,OAAO;CACpB,IAAI,UAAU,QAAQ,SAAS,iBAAiB,OAAO,YAAY,QAAQ,mBAAmB,KAAK,IAAI,KAAK,IAAI,eAAe,YAAY,YAAY;CACvJ,IAAI,SAAS,eAAe,QAAQ,WAAW,MAAM;EACnD,IAAI;EACJ,IAAI,SAAS;EACb,IAAI;EACJ,IAAI,gBAAgB,aAAa;GAC/B,SAAS;GACT,SAAS,KAAK;EAChB,OAAO,IAAI,YAAY,OAAO,IAAI,KAAK,KAAK,kBAAkB,aAAa;GACzE,SAAS,KAAK;GACd,SAAS,KAAK;GACd,SAAS,KAAK;EAChB,OAAO;GACL,MAAM,IAAI,UAAU,wDAAwD;EAC9E;EACA,IAAI,WAAW,QAAQ,QAAQ,MAAM;EACrC,IAAI;EACJ,IAAI,cAAc,SAAS,OAAO,cAAc,YAAY,OAAO,cAAc,aAAa;GAC5F,IAAI,QAAQ,UAAU;GACtB,IAAI,UAAU,KAAK,GAAG;IACpB,MAAM,IAAI,UAAU,mDAAmD;GACzE;GACA,OAAO,GAAG;EACZ,OAAO;GACL,OAAO,GAAG;EACZ;EACA,IAAI,CAAC,yBAAyB,KAAK,IAAI,GAAG;GACxC,MAAM,WAAW,qBAAqB,iCAAiC,KAAK,EAAE;EAChF;EACA,IAAI;GACF,OAAO,MAAM,OAAO,KAAK,YAAY,GAAG,QAAQ,QAAQ,MAAM;EAChE,SAAS,OAAO;GACd,MAAM,WAAW,kBAAkB,iBAAiB,QAAQ,MAAM,UAAU,uBAAuB;EACrG;CACF;CACA,IAAI,OAAO,UAAU,MAAM,OAAO,SAAS,EACzC,OACF;MACK,OAAO,OAAO,SAAS;AAC9B"}
1
+ {"version":3,"file":"digest.native.js","names":[],"sources":["esm/platform/crypto/digest.native.js"],"sourcesContent":["function namedError(name, message) {\n var error = new Error(message);\n error.name = name;\n return error;\n}\nfunction bufferSourceRange(data, verb) {\n var buffer;\n var offset = 0;\n var length;\n if (data instanceof ArrayBuffer) {\n buffer = data;\n length = data.byteLength;\n } else if (ArrayBuffer.isView(data) && data.buffer instanceof ArrayBuffer) {\n buffer = data.buffer;\n offset = data.byteOffset;\n length = data.byteLength;\n } else {\n throw new TypeError(`${verb}: expected an ArrayBuffer or view.`);\n }\n new Uint8Array(buffer, offset, length);\n return {\n buffer,\n offset,\n length\n };\n}\nfunction installDigestPolyfill(source) {\n var target = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : globalThis;\n var _crypto_subtle;\n var crypto = target.crypto;\n if (crypto == null || typeof ((_crypto_subtle = crypto.subtle) === null || _crypto_subtle === void 0 ? void 0 : _crypto_subtle.digest) === \"function\") return;\n var digest = async function digest2(algorithm, data) {\n var { buffer, offset, length } = bufferSourceRange(data, \"crypto.subtle.digest\");\n var name;\n if (algorithm !== null && (typeof algorithm === \"object\" || typeof algorithm === \"function\")) {\n var value = algorithm.name;\n if (value === void 0) {\n throw new TypeError(\"crypto.subtle.digest: algorithm.name is required.\");\n }\n name = `${value}`;\n } else {\n name = `${algorithm}`;\n }\n if (!/^sha-(1|256|384|512)$/i.test(name)) {\n throw namedError(\"NotSupportedError\", `Unsupported digest algorithm: ${name}.`);\n }\n try {\n return await source(name.toUpperCase(), buffer, offset, length);\n } catch (error) {\n throw namedError(\"OperationError\", error instanceof Error ? error.message : \"Native digest failed.\");\n }\n };\n if (crypto.subtle == null) crypto.subtle = {\n digest\n };\n else crypto.subtle.digest = digest;\n}\nexport {\n bufferSourceRange,\n installDigestPolyfill\n};\n//# sourceMappingURL=digest.js.map\n"],"mappings":";AAAA,SAAS,WAAW,MAAM,SAAS;CACjC,IAAI,QAAQ,IAAI,MAAM,OAAO;CAC7B,MAAM,OAAO;CACb,OAAO;AACT;AACA,SAAS,kBAAkB,MAAM,MAAM;CACrC,IAAI;CACJ,IAAI,SAAS;CACb,IAAI;CACJ,IAAI,gBAAgB,aAAa;EAC/B,SAAS;EACT,SAAS,KAAK;CAChB,OAAO,IAAI,YAAY,OAAO,IAAI,KAAK,KAAK,kBAAkB,aAAa;EACzE,SAAS,KAAK;EACd,SAAS,KAAK;EACd,SAAS,KAAK;CAChB,OAAO;EACL,MAAM,IAAI,UAAU,GAAG,KAAK,mCAAmC;CACjE;CACA,IAAI,WAAW,QAAQ,QAAQ,MAAM;CACrC,OAAO;EACL;EACA;EACA;CACF;AACF;AACA,SAAS,sBAAsB,QAAQ;CACrC,IAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,KAAK,IAAI,UAAU,KAAK;CAC9E,IAAI;CACJ,IAAI,SAAS,OAAO;CACpB,IAAI,UAAU,QAAQ,SAAS,iBAAiB,OAAO,YAAY,QAAQ,mBAAmB,KAAK,IAAI,KAAK,IAAI,eAAe,YAAY,YAAY;CACvJ,IAAI,SAAS,eAAe,QAAQ,WAAW,MAAM;EACnD,IAAI,EAAE,QAAQ,QAAQ,WAAW,kBAAkB,MAAM,sBAAsB;EAC/E,IAAI;EACJ,IAAI,cAAc,SAAS,OAAO,cAAc,YAAY,OAAO,cAAc,aAAa;GAC5F,IAAI,QAAQ,UAAU;GACtB,IAAI,UAAU,KAAK,GAAG;IACpB,MAAM,IAAI,UAAU,mDAAmD;GACzE;GACA,OAAO,GAAG;EACZ,OAAO;GACL,OAAO,GAAG;EACZ;EACA,IAAI,CAAC,yBAAyB,KAAK,IAAI,GAAG;GACxC,MAAM,WAAW,qBAAqB,iCAAiC,KAAK,EAAE;EAChF;EACA,IAAI;GACF,OAAO,MAAM,OAAO,KAAK,YAAY,GAAG,QAAQ,QAAQ,MAAM;EAChE,SAAS,OAAO;GACd,MAAM,WAAW,kBAAkB,iBAAiB,QAAQ,MAAM,UAAU,uBAAuB;EACrG;CACF;CACA,IAAI,OAAO,UAAU,MAAM,OAAO,SAAS,EACzC,OACF;MACK,OAAO,OAAO,SAAS;AAC9B"}
@@ -1,4 +1,7 @@
1
+ import { createAesApi } from "./aes.mjs";
2
+ import { createDigestApi } from "./digest-api.mjs";
1
3
  import { formatUuidV4, installCryptoPolyfill } from "./random.mjs";
4
+ import { webAesEngine, webDigestSource } from "./web.mjs";
2
5
 
3
6
  function fill(bytes) {
4
7
  const getRandomValues = globalThis.crypto?.getRandomValues;
@@ -18,6 +21,16 @@ const source = {
18
21
  function installCrypto() {
19
22
  installCryptoPolyfill(source);
20
23
  }
24
+ const aes = createAesApi(webAesEngine);
25
+ const digestApi = createDigestApi(webDigestSource);
26
+ const AESEncryptionKey = aes.AESEncryptionKey;
27
+ const AESSealedData = aes.AESSealedData;
28
+ const Crypto = Object.freeze({
29
+ digest: digestApi.digest,
30
+ digestString: digestApi.digestString,
31
+ aesEncrypt: aes.aesEncrypt,
32
+ aesDecrypt: aes.aesDecrypt
33
+ });
21
34
 
22
- export { installCrypto };
35
+ export { AESEncryptionKey, AESSealedData, Crypto, installCrypto };
23
36
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["esm/platform/crypto/index.js"],"sourcesContent":["import { formatUuidV4, installCryptoPolyfill } from \"./random\";\nfunction fill(bytes) {\n const getRandomValues = globalThis.crypto?.getRandomValues;\n if (typeof getRandomValues !== \"function\") {\n throw new Error(\"secure random: web crypto is unavailable in this browser.\");\n }\n getRandomValues.call(globalThis.crypto, bytes);\n}\nconst source = {\n fill,\n randomUUID() {\n const bytes = new Uint8Array(16);\n fill(bytes);\n return formatUuidV4(bytes);\n }\n};\nfunction installCrypto() {\n installCryptoPolyfill(source);\n}\nexport {\n installCrypto\n};\n//# sourceMappingURL=index.js.map\n"],"mappings":";;;AACA,SAAS,KAAK,OAAO;CACnB,MAAM,kBAAkB,WAAW,QAAQ;CAC3C,IAAI,OAAO,oBAAoB,YAAY;EACzC,MAAM,IAAI,MAAM,2DAA2D;CAC7E;CACA,gBAAgB,KAAK,WAAW,QAAQ,KAAK;AAC/C;AACA,MAAM,SAAS;CACb;CACA,aAAa;EACX,MAAM,QAAQ,IAAI,WAAW,EAAE;EAC/B,KAAK,KAAK;EACV,OAAO,aAAa,KAAK;CAC3B;AACF;AACA,SAAS,gBAAgB;CACvB,sBAAsB,MAAM;AAC9B"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["esm/platform/crypto/index.js"],"sourcesContent":["import { createAesApi } from \"./aes\";\nimport { createDigestApi } from \"./digest-api\";\nimport { formatUuidV4, installCryptoPolyfill } from \"./random\";\nimport { webAesEngine, webDigestSource } from \"./web\";\nfunction fill(bytes) {\n const getRandomValues = globalThis.crypto?.getRandomValues;\n if (typeof getRandomValues !== \"function\") {\n throw new Error(\"secure random: web crypto is unavailable in this browser.\");\n }\n getRandomValues.call(globalThis.crypto, bytes);\n}\nconst source = {\n fill,\n randomUUID() {\n const bytes = new Uint8Array(16);\n fill(bytes);\n return formatUuidV4(bytes);\n }\n};\nfunction installCrypto() {\n installCryptoPolyfill(source);\n}\nconst aes = createAesApi(webAesEngine);\nconst digestApi = createDigestApi(webDigestSource);\nconst AESEncryptionKey = aes.AESEncryptionKey;\nconst AESSealedData = aes.AESSealedData;\nconst Crypto = Object.freeze({\n digest: digestApi.digest,\n digestString: digestApi.digestString,\n aesEncrypt: aes.aesEncrypt,\n aesDecrypt: aes.aesDecrypt\n});\nexport {\n AESEncryptionKey,\n AESSealedData,\n Crypto,\n installCrypto\n};\n//# sourceMappingURL=index.js.map\n"],"mappings":";;;;;;AAIA,SAAS,KAAK,OAAO;CACnB,MAAM,kBAAkB,WAAW,QAAQ;CAC3C,IAAI,OAAO,oBAAoB,YAAY;EACzC,MAAM,IAAI,MAAM,2DAA2D;CAC7E;CACA,gBAAgB,KAAK,WAAW,QAAQ,KAAK;AAC/C;AACA,MAAM,SAAS;CACb;CACA,aAAa;EACX,MAAM,QAAQ,IAAI,WAAW,EAAE;EAC/B,KAAK,KAAK;EACV,OAAO,aAAa,KAAK;CAC3B;AACF;AACA,SAAS,gBAAgB;CACvB,sBAAsB,MAAM;AAC9B;AACA,MAAM,MAAM,aAAa,YAAY;AACrC,MAAM,YAAY,gBAAgB,eAAe;AACjD,MAAM,mBAAmB,IAAI;AAC7B,MAAM,gBAAgB,IAAI;AAC1B,MAAM,SAAS,OAAO,OAAO;CAC3B,QAAQ,UAAU;CAClB,cAAc,UAAU;CACxB,YAAY,IAAI;CAChB,YAAY,IAAI;AAClB,CAAC"}
@@ -1,4 +1,6 @@
1
+ import { createAesApi } from "./aes.native.js";
1
2
  import { installDigestPolyfill } from "./digest.native.js";
3
+ import { createDigestApi } from "./digest-api.native.js";
2
4
  import { NitroModules } from "react-native-nitro-modules";
3
5
  import { installCryptoPolyfill } from "./random.native.js";
4
6
 
@@ -14,6 +16,37 @@ var nativeSource = {
14
16
  return native().randomUUID();
15
17
  }
16
18
  };
19
+ function required() {
20
+ if (!NitroModules.hasHybridObject("OneCrypto")) {
21
+ throw new Error("Crypto needs a native build that includes one");
22
+ }
23
+ return native();
24
+ }
25
+ var aesEngine = {
26
+ async seal(key, iv, plaintext, additionalData, tagLength) {
27
+ var sealed = await required().aesEncrypt(key.buffer, iv.buffer, plaintext.buffer, additionalData === null || additionalData === void 0 ? void 0 : additionalData.buffer, tagLength);
28
+ return new Uint8Array(sealed);
29
+ },
30
+ async open(key, iv, ciphertextWithTag, additionalData, tagLength) {
31
+ var opened = await required().aesDecrypt(key.buffer, iv.buffer, ciphertextWithTag.buffer, additionalData === null || additionalData === void 0 ? void 0 : additionalData.buffer, tagLength);
32
+ return new Uint8Array(opened);
33
+ },
34
+ random(bytes) {
35
+ required().fillRandomBytes(bytes.buffer, bytes.byteOffset, bytes.byteLength);
36
+ }
37
+ };
38
+ var aes = createAesApi(aesEngine);
39
+ var digestApi = createDigestApi(function(algorithm, buffer, offset, length) {
40
+ return required().digest(algorithm, buffer, offset, length);
41
+ });
42
+ var AESEncryptionKey = aes.AESEncryptionKey;
43
+ var AESSealedData = aes.AESSealedData;
44
+ var Crypto = Object.freeze({
45
+ digest: digestApi.digest,
46
+ digestString: digestApi.digestString,
47
+ aesEncrypt: aes.aesEncrypt,
48
+ aesDecrypt: aes.aesDecrypt
49
+ });
17
50
  function installCrypto() {
18
51
  if (!NitroModules.hasHybridObject("OneCrypto")) {
19
52
  return;
@@ -24,5 +57,5 @@ function installCrypto() {
24
57
  });
25
58
  }
26
59
 
27
- export { installCrypto };
60
+ export { AESEncryptionKey, AESSealedData, Crypto, installCrypto };
28
61
  //# sourceMappingURL=index.native.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.native.js","names":[],"sources":["esm/platform/crypto/index.native.js"],"sourcesContent":["import { installDigestPolyfill } from \"./digest\";\nimport { NitroModules } from \"react-native-nitro-modules\";\nimport { installCryptoPolyfill } from \"./random\";\nvar hybrid;\nfunction native() {\n return hybrid !== null && hybrid !== void 0 ? hybrid : hybrid = NitroModules.createHybridObject(\"OneCrypto\");\n}\nvar nativeSource = {\n fill(bytes) {\n native().fillRandomBytes(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n },\n randomUUID: function randomUUID() {\n return native().randomUUID();\n }\n};\nfunction installCrypto() {\n if (!NitroModules.hasHybridObject(\"OneCrypto\")) {\n return;\n }\n installCryptoPolyfill(nativeSource);\n installDigestPolyfill(function(algorithm, buffer, offset, length) {\n return native().digest(algorithm, buffer, offset, length);\n });\n}\nexport {\n installCrypto\n};\n//# sourceMappingURL=index.native.js.map\n"],"mappings":";;;;;AAGA,IAAI;AACJ,SAAS,SAAS;CAChB,OAAO,WAAW,QAAQ,WAAW,KAAK,IAAI,SAAS,SAAS,aAAa,mBAAmB,WAAW;AAC7G;AACA,IAAI,eAAe;CACjB,KAAK,OAAO;EACV,OAAO,CAAC,CAAC,gBAAgB,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;CAC3E;CACA,YAAY,SAAS,aAAa;EAChC,OAAO,OAAO,CAAC,CAAC,WAAW;CAC7B;AACF;AACA,SAAS,gBAAgB;CACvB,IAAI,CAAC,aAAa,gBAAgB,WAAW,GAAG;EAC9C;CACF;CACA,sBAAsB,YAAY;CAClC,sBAAsB,SAAS,WAAW,QAAQ,QAAQ,QAAQ;EAChE,OAAO,OAAO,CAAC,CAAC,OAAO,WAAW,QAAQ,QAAQ,MAAM;CAC1D,CAAC;AACH"}
1
+ {"version":3,"file":"index.native.js","names":[],"sources":["esm/platform/crypto/index.native.js"],"sourcesContent":["import { createAesApi } from \"./aes\";\nimport { installDigestPolyfill } from \"./digest\";\nimport { createDigestApi } from \"./digest-api\";\nimport { NitroModules } from \"react-native-nitro-modules\";\nimport { installCryptoPolyfill } from \"./random\";\nvar hybrid;\nfunction native() {\n return hybrid !== null && hybrid !== void 0 ? hybrid : hybrid = NitroModules.createHybridObject(\"OneCrypto\");\n}\nvar nativeSource = {\n fill(bytes) {\n native().fillRandomBytes(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n },\n randomUUID: function randomUUID() {\n return native().randomUUID();\n }\n};\nfunction required() {\n if (!NitroModules.hasHybridObject(\"OneCrypto\")) {\n throw new Error(\"Crypto needs a native build that includes one\");\n }\n return native();\n}\nvar aesEngine = {\n async seal(key, iv, plaintext, additionalData, tagLength) {\n var sealed = await required().aesEncrypt(key.buffer, iv.buffer, plaintext.buffer, additionalData === null || additionalData === void 0 ? void 0 : additionalData.buffer, tagLength);\n return new Uint8Array(sealed);\n },\n async open(key, iv, ciphertextWithTag, additionalData, tagLength) {\n var opened = await required().aesDecrypt(key.buffer, iv.buffer, ciphertextWithTag.buffer, additionalData === null || additionalData === void 0 ? void 0 : additionalData.buffer, tagLength);\n return new Uint8Array(opened);\n },\n random(bytes) {\n required().fillRandomBytes(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n }\n};\nvar aes = createAesApi(aesEngine);\nvar digestApi = createDigestApi(function(algorithm, buffer, offset, length) {\n return required().digest(algorithm, buffer, offset, length);\n});\nvar AESEncryptionKey = aes.AESEncryptionKey;\nvar AESSealedData = aes.AESSealedData;\nvar Crypto = Object.freeze({\n digest: digestApi.digest,\n digestString: digestApi.digestString,\n aesEncrypt: aes.aesEncrypt,\n aesDecrypt: aes.aesDecrypt\n});\nfunction installCrypto() {\n if (!NitroModules.hasHybridObject(\"OneCrypto\")) {\n return;\n }\n installCryptoPolyfill(nativeSource);\n installDigestPolyfill(function(algorithm, buffer, offset, length) {\n return native().digest(algorithm, buffer, offset, length);\n });\n}\nexport {\n AESEncryptionKey,\n AESSealedData,\n Crypto,\n installCrypto\n};\n//# sourceMappingURL=index.native.js.map\n"],"mappings":";;;;;;;AAKA,IAAI;AACJ,SAAS,SAAS;CAChB,OAAO,WAAW,QAAQ,WAAW,KAAK,IAAI,SAAS,SAAS,aAAa,mBAAmB,WAAW;AAC7G;AACA,IAAI,eAAe;CACjB,KAAK,OAAO;EACV,OAAO,CAAC,CAAC,gBAAgB,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;CAC3E;CACA,YAAY,SAAS,aAAa;EAChC,OAAO,OAAO,CAAC,CAAC,WAAW;CAC7B;AACF;AACA,SAAS,WAAW;CAClB,IAAI,CAAC,aAAa,gBAAgB,WAAW,GAAG;EAC9C,MAAM,IAAI,MAAM,+CAA+C;CACjE;CACA,OAAO,OAAO;AAChB;AACA,IAAI,YAAY;CACd,MAAM,KAAK,KAAK,IAAI,WAAW,gBAAgB,WAAW;EACxD,IAAI,SAAS,MAAM,SAAS,CAAC,CAAC,WAAW,IAAI,QAAQ,GAAG,QAAQ,UAAU,QAAQ,mBAAmB,QAAQ,mBAAmB,KAAK,IAAI,KAAK,IAAI,eAAe,QAAQ,SAAS;EAClL,OAAO,IAAI,WAAW,MAAM;CAC9B;CACA,MAAM,KAAK,KAAK,IAAI,mBAAmB,gBAAgB,WAAW;EAChE,IAAI,SAAS,MAAM,SAAS,CAAC,CAAC,WAAW,IAAI,QAAQ,GAAG,QAAQ,kBAAkB,QAAQ,mBAAmB,QAAQ,mBAAmB,KAAK,IAAI,KAAK,IAAI,eAAe,QAAQ,SAAS;EAC1L,OAAO,IAAI,WAAW,MAAM;CAC9B;CACA,OAAO,OAAO;EACZ,SAAS,CAAC,CAAC,gBAAgB,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;CAC7E;AACF;AACA,IAAI,MAAM,aAAa,SAAS;AAChC,IAAI,YAAY,gBAAgB,SAAS,WAAW,QAAQ,QAAQ,QAAQ;CAC1E,OAAO,SAAS,CAAC,CAAC,OAAO,WAAW,QAAQ,QAAQ,MAAM;AAC5D,CAAC;AACD,IAAI,mBAAmB,IAAI;AAC3B,IAAI,gBAAgB,IAAI;AACxB,IAAI,SAAS,OAAO,OAAO;CACzB,QAAQ,UAAU;CAClB,cAAc,UAAU;CACxB,YAAY,IAAI;CAChB,YAAY,IAAI;AAClB,CAAC;AACD,SAAS,gBAAgB;CACvB,IAAI,CAAC,aAAa,gBAAgB,WAAW,GAAG;EAC9C;CACF;CACA,sBAAsB,YAAY;CAClC,sBAAsB,SAAS,WAAW,QAAQ,QAAQ,QAAQ;EAChE,OAAO,OAAO,CAAC,CAAC,OAAO,WAAW,QAAQ,QAAQ,MAAM;CAC1D,CAAC;AACH"}
File without changes
File without changes
@@ -0,0 +1,50 @@
1
+ function subtle(verb) {
2
+ const found = globalThis.crypto?.subtle;
3
+ if (!found) {
4
+ throw new Error(`${verb} needs a browser with WebCrypto or a native build that includes one`);
5
+ }
6
+ return found;
7
+ }
8
+ const webDigestSource = async (algorithm, buffer, offset, length) => {
9
+ if (algorithm === "MD5") {
10
+ throw new Error("Crypto.digest: MD5 needs an iOS or Android build");
11
+ }
12
+ return subtle("Crypto.digest").digest(algorithm, new Uint8Array(buffer, offset, length));
13
+ };
14
+ async function importKey(raw) {
15
+ return subtle("Crypto.aesEncrypt").importKey("raw", raw, "AES-GCM", false, ["encrypt", "decrypt"]);
16
+ }
17
+ const webAesEngine = {
18
+ async seal(key, iv, plaintext, additionalData, tagLength) {
19
+ const sealed = await subtle("Crypto.aesEncrypt").encrypt({
20
+ name: "AES-GCM",
21
+ iv,
22
+ tagLength: tagLength * 8,
23
+ ...additionalData ? { additionalData } : {}
24
+ }, await importKey(key), plaintext);
25
+ return new Uint8Array(sealed);
26
+ },
27
+ async open(key, iv, ciphertextWithTag, additionalData, tagLength) {
28
+ try {
29
+ const opened = await subtle("Crypto.aesDecrypt").decrypt({
30
+ name: "AES-GCM",
31
+ iv,
32
+ tagLength: tagLength * 8,
33
+ ...additionalData ? { additionalData } : {}
34
+ }, await importKey(key), ciphertextWithTag);
35
+ return new Uint8Array(opened);
36
+ } catch {
37
+ throw new Error("Crypto.aesDecrypt: authentication failed");
38
+ }
39
+ },
40
+ random(bytes) {
41
+ const getRandomValues = globalThis.crypto?.getRandomValues;
42
+ if (typeof getRandomValues !== "function") {
43
+ throw new Error("secure random: web crypto is unavailable in this browser.");
44
+ }
45
+ getRandomValues.call(globalThis.crypto, bytes);
46
+ }
47
+ };
48
+
49
+ export { webAesEngine, webDigestSource };
50
+ //# sourceMappingURL=web.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","names":[],"sources":["esm/platform/crypto/web.js"],"sourcesContent":["function subtle(verb) {\n const found = globalThis.crypto?.subtle;\n if (!found) {\n throw new Error(`${verb} needs a browser with WebCrypto or a native build that includes one`);\n }\n return found;\n}\nconst webDigestSource = async (algorithm, buffer, offset, length) => {\n if (algorithm === \"MD5\") {\n throw new Error(\"Crypto.digest: MD5 needs an iOS or Android build\");\n }\n return subtle(\"Crypto.digest\").digest(algorithm, new Uint8Array(buffer, offset, length));\n};\nasync function importKey(raw) {\n return subtle(\"Crypto.aesEncrypt\").importKey(\"raw\", raw, \"AES-GCM\", false, [\n \"encrypt\",\n \"decrypt\"\n ]);\n}\nconst webAesEngine = {\n async seal(key, iv, plaintext, additionalData, tagLength) {\n const sealed = await subtle(\"Crypto.aesEncrypt\").encrypt(\n {\n name: \"AES-GCM\",\n iv,\n tagLength: tagLength * 8,\n ...additionalData ? { additionalData } : {}\n },\n await importKey(key),\n plaintext\n );\n return new Uint8Array(sealed);\n },\n async open(key, iv, ciphertextWithTag, additionalData, tagLength) {\n try {\n const opened = await subtle(\"Crypto.aesDecrypt\").decrypt(\n {\n name: \"AES-GCM\",\n iv,\n tagLength: tagLength * 8,\n ...additionalData ? { additionalData } : {}\n },\n await importKey(key),\n ciphertextWithTag\n );\n return new Uint8Array(opened);\n } catch {\n throw new Error(\"Crypto.aesDecrypt: authentication failed\");\n }\n },\n random(bytes) {\n const getRandomValues = globalThis.crypto?.getRandomValues;\n if (typeof getRandomValues !== \"function\") {\n throw new Error(\"secure random: web crypto is unavailable in this browser.\");\n }\n getRandomValues.call(globalThis.crypto, bytes);\n }\n};\nexport {\n webAesEngine,\n webDigestSource\n};\n//# sourceMappingURL=web.js.map\n"],"mappings":";AAAA,SAAS,OAAO,MAAM;CACpB,MAAM,QAAQ,WAAW,QAAQ;CACjC,IAAI,CAAC,OAAO;EACV,MAAM,IAAI,MAAM,GAAG,KAAK,oEAAoE;CAC9F;CACA,OAAO;AACT;AACA,MAAM,kBAAkB,OAAO,WAAW,QAAQ,QAAQ,WAAW;CACnE,IAAI,cAAc,OAAO;EACvB,MAAM,IAAI,MAAM,kDAAkD;CACpE;CACA,OAAO,OAAO,eAAe,CAAC,CAAC,OAAO,WAAW,IAAI,WAAW,QAAQ,QAAQ,MAAM,CAAC;AACzF;AACA,eAAe,UAAU,KAAK;CAC5B,OAAO,OAAO,mBAAmB,CAAC,CAAC,UAAU,OAAO,KAAK,WAAW,OAAO,CACzE,WACA,SACF,CAAC;AACH;AACA,MAAM,eAAe;CACnB,MAAM,KAAK,KAAK,IAAI,WAAW,gBAAgB,WAAW;EACxD,MAAM,SAAS,MAAM,OAAO,mBAAmB,CAAC,CAAC,QAC/C;GACE,MAAM;GACN;GACA,WAAW,YAAY;GACvB,GAAG,iBAAiB,EAAE,eAAe,IAAI,CAAC;EAC5C,GACA,MAAM,UAAU,GAAG,GACnB,SACF;EACA,OAAO,IAAI,WAAW,MAAM;CAC9B;CACA,MAAM,KAAK,KAAK,IAAI,mBAAmB,gBAAgB,WAAW;EAChE,IAAI;GACF,MAAM,SAAS,MAAM,OAAO,mBAAmB,CAAC,CAAC,QAC/C;IACE,MAAM;IACN;IACA,WAAW,YAAY;IACvB,GAAG,iBAAiB,EAAE,eAAe,IAAI,CAAC;GAC5C,GACA,MAAM,UAAU,GAAG,GACnB,iBACF;GACA,OAAO,IAAI,WAAW,MAAM;EAC9B,QAAQ;GACN,MAAM,IAAI,MAAM,0CAA0C;EAC5D;CACF;CACA,OAAO,OAAO;EACZ,MAAM,kBAAkB,WAAW,QAAQ;EAC3C,IAAI,OAAO,oBAAoB,YAAY;GACzC,MAAM,IAAI,MAAM,2DAA2D;EAC7E;EACA,gBAAgB,KAAK,WAAW,QAAQ,KAAK;CAC/C;AACF"}
@@ -15,9 +15,10 @@ import { SpeechSynthesis } from "./speech-synthesis/index.mjs";
15
15
  import { Browser } from "./browser/index.mjs";
16
16
  import { Updates } from "./updates/index.mjs";
17
17
  import { Network, useNetworkState } from "./network/index.mjs";
18
+ import { AESEncryptionKey, AESSealedData, Crypto } from "./crypto/index.mjs";
18
19
  import { Localization, useCalendars, useLocales } from "./localization/index.mjs";
19
20
  import { SecureStore } from "./secure-store/index.mjs";
20
21
  import { Auth } from "./auth/index.mjs";
21
22
  import { Speech } from "./speech/index.mjs";
22
23
 
23
- export { Auth, Barometer, Battery, Brightness, Browser, Clipboard, Color, Fonts, LightSensor, Localization, MenuAction, Network, Pedometer, SecureStore, Speech, SpeechSynthesis, SplitView, ToolbarHost, ToolbarItem, Updates, ZoomTransitionAlignmentRectDetector, ZoomTransitionEnabler, ZoomTransitionSource, useAudioPlayer, useAudioPlayerStatus, useBatteryLevel, useBatteryState, useCalendars, useFonts, useLocales, useLowPowerMode, useNetworkState, usePowerState };
24
+ export { AESEncryptionKey, AESSealedData, Auth, Barometer, Battery, Brightness, Browser, Clipboard, Color, Crypto, Fonts, LightSensor, Localization, MenuAction, Network, Pedometer, SecureStore, Speech, SpeechSynthesis, SplitView, ToolbarHost, ToolbarItem, Updates, ZoomTransitionAlignmentRectDetector, ZoomTransitionEnabler, ZoomTransitionSource, useAudioPlayer, useAudioPlayerStatus, useBatteryLevel, useBatteryState, useCalendars, useFonts, useLocales, useLowPowerMode, useNetworkState, usePowerState };
@@ -15,9 +15,10 @@ import { SpeechSynthesis } from "./speech-synthesis/index.native.js";
15
15
  import { Browser } from "./browser/index.native.js";
16
16
  import { Updates } from "./updates/index.native.js";
17
17
  import { Network, useNetworkState } from "./network/index.native.js";
18
+ import { AESEncryptionKey, AESSealedData, Crypto } from "./crypto/index.native.js";
18
19
  import { Localization, useCalendars, useLocales } from "./localization/index.native.js";
19
20
  import { SecureStore } from "./secure-store/index.native.js";
20
21
  import { Auth } from "./auth/index.native.js";
21
22
  import { Speech } from "./speech/index.native.js";
22
23
 
23
- export { Auth, Barometer, Battery, Brightness, Browser, Clipboard, Color, Fonts, LightSensor, Localization, MenuAction, Network, Pedometer, SecureStore, Speech, SpeechSynthesis, SplitView, ToolbarHost, ToolbarItem, Updates, ZoomTransitionAlignmentRectDetector, ZoomTransitionEnabler, ZoomTransitionSource, useAudioPlayer, useAudioPlayerStatus, useBatteryLevel, useBatteryState, useCalendars, useFonts, useLocales, useLowPowerMode, useNetworkState, usePowerState };
24
+ export { AESEncryptionKey, AESSealedData, Auth, Barometer, Battery, Brightness, Browser, Clipboard, Color, Crypto, Fonts, LightSensor, Localization, MenuAction, Network, Pedometer, SecureStore, Speech, SpeechSynthesis, SplitView, ToolbarHost, ToolbarItem, Updates, ZoomTransitionAlignmentRectDetector, ZoomTransitionEnabler, ZoomTransitionSource, useAudioPlayer, useAudioPlayerStatus, useBatteryLevel, useBatteryState, useCalendars, useFonts, useLocales, useLowPowerMode, useNetworkState, usePowerState };
@@ -17,6 +17,8 @@ namespace margelo::nitro::one {
17
17
  prototype.registerHybridMethod("fillRandomBytes", &HybridOneCryptoSpec::fillRandomBytes);
18
18
  prototype.registerHybridMethod("randomUUID", &HybridOneCryptoSpec::randomUUID);
19
19
  prototype.registerHybridMethod("digest", &HybridOneCryptoSpec::digest);
20
+ prototype.registerHybridMethod("aesEncrypt", &HybridOneCryptoSpec::aesEncrypt);
21
+ prototype.registerHybridMethod("aesDecrypt", &HybridOneCryptoSpec::aesDecrypt);
20
22
  });
21
23
  }
22
24
 
@@ -18,6 +18,7 @@
18
18
  #include <NitroModules/ArrayBuffer.hpp>
19
19
  #include <string>
20
20
  #include <NitroModules/Promise.hpp>
21
+ #include <optional>
21
22
 
22
23
  namespace margelo::nitro::one {
23
24
 
@@ -46,13 +47,15 @@ namespace margelo::nitro::one {
46
47
 
47
48
  public:
48
49
  // Properties
49
-
50
+
50
51
 
51
52
  public:
52
53
  // Methods
53
54
  virtual void fillRandomBytes(const std::shared_ptr<ArrayBuffer>& buffer, double offset, double length) = 0;
54
55
  virtual std::string randomUUID() = 0;
55
56
  virtual std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> digest(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& buffer, double offset, double length) = 0;
57
+ virtual std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> aesEncrypt(const std::shared_ptr<ArrayBuffer>& key, const std::shared_ptr<ArrayBuffer>& iv, const std::shared_ptr<ArrayBuffer>& plaintext, const std::optional<std::shared_ptr<ArrayBuffer>>& additionalData, double tagLength) = 0;
58
+ virtual std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> aesDecrypt(const std::shared_ptr<ArrayBuffer>& key, const std::shared_ptr<ArrayBuffer>& iv, const std::shared_ptr<ArrayBuffer>& ciphertext, const std::optional<std::shared_ptr<ArrayBuffer>>& additionalData, double tagLength) = 0;
56
59
 
57
60
  protected:
58
61
  // Hybrid Setup
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "one",
3
- "version": "2.6.20",
3
+ "version": "2.6.21",
4
4
  "description": "One is a React framework for web, iOS, and Android apps.",
5
5
  "license": "BSD-3-Clause",
6
6
  "sideEffects": [
@@ -236,18 +236,18 @@
236
236
  "@react-navigation/native-stack": "8.0.0-alpha.58",
237
237
  "@react-navigation/routers": "8.0.0-alpha.20",
238
238
  "@ungap/structured-clone": "^1.2.0",
239
- "@vxrn/color-scheme": "2.6.20",
240
- "@vxrn/compiler": "2.6.20",
241
- "@vxrn/resolve": "2.6.20",
242
- "@vxrn/tslib-lite": "2.6.20",
243
- "@vxrn/use-isomorphic-layout-effect": "2.6.20",
244
- "@vxrn/utils": "2.6.20",
245
- "@vxrn/vite-plugin-metro": "2.6.20",
239
+ "@vxrn/color-scheme": "2.6.21",
240
+ "@vxrn/compiler": "2.6.21",
241
+ "@vxrn/resolve": "2.6.21",
242
+ "@vxrn/tslib-lite": "2.6.21",
243
+ "@vxrn/use-isomorphic-layout-effect": "2.6.21",
244
+ "@vxrn/utils": "2.6.21",
245
+ "@vxrn/vite-plugin-metro": "2.6.21",
246
246
  "babel-dead-code-elimination": "1.0.10",
247
247
  "babel-plugin-module-resolver": "^5.0.2",
248
248
  "citty": "^0.1.6",
249
249
  "core-js": "^3.38.1",
250
- "create-vxrn": "2.6.20",
250
+ "create-vxrn": "2.6.21",
251
251
  "escape-string-regexp": "^5.0.0",
252
252
  "fast-deep-equal": "^3.1.3",
253
253
  "fast-glob": "^3.3.3",
@@ -269,7 +269,7 @@
269
269
  "tsconfig-paths": "^4",
270
270
  "use-latest-callback": "^0.2.3",
271
271
  "vite": "^8.2.2",
272
- "vxrn": "2.6.20",
272
+ "vxrn": "2.6.21",
273
273
  "web-streams-polyfill": "^4.3.0",
274
274
  "ws": "^8.21.0",
275
275
  "xxhashjs": "^0.2.2"
@@ -337,7 +337,7 @@
337
337
  "@types/react-dom": "^19.2.2",
338
338
  "@types/react-test-renderer": "^19.1.0",
339
339
  "@types/xxhashjs": "^0.2.4",
340
- "@vxrn/emitter": "2.6.20",
340
+ "@vxrn/emitter": "2.6.21",
341
341
  "depcheck": "^1.4.7",
342
342
  "esbuild": "^0.25.12",
343
343
  "immer": "^10.1.1",
@@ -513,7 +513,7 @@
513
513
  }
514
514
  }
515
515
  },
516
- "releaseSourceCommit": "1b992f990d752550fb6fc0894878f5e86f612d06",
516
+ "releaseSourceCommit": "e08c1bc6bc698fb2ae68b3d47a52b39a764657ed",
517
517
  "repository": {
518
518
  "type": "git",
519
519
  "url": "git+https://github.com/onejs/one.git",
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { createApp } from './createApp'
2
2
 
3
3
  export { One } from './one'
4
+ export { AESEncryptionKey, AESSealedData } from './platform'
4
5
  // native hooks and adaptive reads are named exports for react-hooks lint.
5
6
  export {
6
7
  useFonts,
package/src/one.ts CHANGED
@@ -27,6 +27,7 @@ import {
27
27
  Purchases,
28
28
  ImageManipulator,
29
29
  Device,
30
+ Crypto as NativeCrypto,
30
31
  Localization,
31
32
  Motion,
32
33
  BackgroundTasks,
@@ -157,6 +158,7 @@ export type OneAPI = {
157
158
  readonly Purchases: typeof Purchases
158
159
  readonly ImageManipulator: typeof ImageManipulator
159
160
  readonly Device: typeof Device
161
+ readonly Crypto: typeof NativeCrypto
160
162
  readonly Localization: typeof Localization
161
163
  readonly Motion: typeof Motion
162
164
  readonly BackgroundTasks: typeof BackgroundTasks
@@ -268,6 +270,7 @@ export const One: OneAPI = Object.freeze({
268
270
  Purchases,
269
271
  ImageManipulator,
270
272
  Device,
273
+ Crypto: NativeCrypto,
271
274
  Localization,
272
275
  Motion,
273
276
  BackgroundTasks,