internxt-crypto 1.5.0 → 1.6.1

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 (158) hide show
  1. package/README.md +9 -5
  2. package/dist/asymmetric-crypto.d.mts.map +1 -1
  3. package/dist/asymmetric-crypto.d.ts.map +1 -1
  4. package/dist/asymmetric-crypto.js +12 -2
  5. package/dist/asymmetric-crypto.js.map +1 -1
  6. package/dist/asymmetric-crypto.mjs +12 -2
  7. package/dist/asymmetric-crypto.mjs.map +1 -1
  8. package/dist/{email-crypto-_Wcbvr_n.mjs → email-crypto-CoRbTphp.mjs} +73 -106
  9. package/dist/email-crypto-CoRbTphp.mjs.map +1 -0
  10. package/dist/{email-crypto-CPL8ept8.js → email-crypto-DJb-I1wm.js} +90 -117
  11. package/dist/email-crypto-DJb-I1wm.js.map +1 -0
  12. package/dist/email-crypto.d.mts +33 -27
  13. package/dist/email-crypto.d.mts.map +1 -1
  14. package/dist/email-crypto.d.ts +33 -27
  15. package/dist/email-crypto.d.ts.map +1 -1
  16. package/dist/email-crypto.js +4 -3
  17. package/dist/email-crypto.mjs +2 -2
  18. package/dist/index.d.mts +3 -3
  19. package/dist/index.d.ts +3 -3
  20. package/dist/index.js +2 -3
  21. package/dist/index.mjs +2 -2
  22. package/dist/keystore-crypto.d.mts +1 -1
  23. package/dist/keystore-crypto.d.ts +1 -1
  24. package/dist/react-native/asymmetric-crypto.d.mts +21 -0
  25. package/dist/react-native/asymmetric-crypto.d.mts.map +1 -0
  26. package/dist/react-native/asymmetric-crypto.d.ts +21 -0
  27. package/dist/react-native/asymmetric-crypto.d.ts.map +1 -0
  28. package/dist/react-native/asymmetric-crypto.js +31 -0
  29. package/dist/react-native/asymmetric-crypto.js.map +1 -0
  30. package/dist/react-native/asymmetric-crypto.mjs +28 -0
  31. package/dist/react-native/asymmetric-crypto.mjs.map +1 -0
  32. package/dist/react-native/chunk-CfYAbeIz.mjs +13 -0
  33. package/dist/react-native/chunk-DskHE4z1.js +43 -0
  34. package/dist/react-native/constants.d.mts +27 -0
  35. package/dist/react-native/constants.d.mts.map +1 -0
  36. package/dist/react-native/constants.d.ts +27 -0
  37. package/dist/react-native/constants.d.ts.map +1 -0
  38. package/dist/react-native/constants.js +51 -0
  39. package/dist/react-native/constants.js.map +1 -0
  40. package/dist/react-native/constants.mjs +28 -0
  41. package/dist/react-native/constants.mjs.map +1 -0
  42. package/dist/react-native/derive-key.d.mts +32 -0
  43. package/dist/react-native/derive-key.d.mts.map +1 -0
  44. package/dist/react-native/derive-key.d.ts +32 -0
  45. package/dist/react-native/derive-key.d.ts.map +1 -0
  46. package/dist/react-native/derive-key.js +51 -0
  47. package/dist/react-native/derive-key.js.map +1 -0
  48. package/dist/react-native/derive-key.mjs +47 -0
  49. package/dist/react-native/derive-key.mjs.map +1 -0
  50. package/dist/react-native/derive-password-Bb3R3nyh.mjs +68 -0
  51. package/dist/react-native/derive-password-Bb3R3nyh.mjs.map +1 -0
  52. package/dist/react-native/derive-password-DIPrE8Mz.js +86 -0
  53. package/dist/react-native/derive-password-DIPrE8Mz.js.map +1 -0
  54. package/dist/react-native/derive-password.d.mts +28 -0
  55. package/dist/react-native/derive-password.d.mts.map +1 -0
  56. package/dist/react-native/derive-password.d.ts +28 -0
  57. package/dist/react-native/derive-password.d.ts.map +1 -0
  58. package/dist/react-native/derive-password.js +5 -0
  59. package/dist/react-native/derive-password.mjs +2 -0
  60. package/dist/react-native/email-crypto-C3ka3aAj.js +700 -0
  61. package/dist/react-native/email-crypto-C3ka3aAj.js.map +1 -0
  62. package/dist/react-native/email-crypto-CDM4iPK8.mjs +490 -0
  63. package/dist/react-native/email-crypto-CDM4iPK8.mjs.map +1 -0
  64. package/dist/react-native/email-crypto.d.mts +253 -0
  65. package/dist/react-native/email-crypto.d.mts.map +1 -0
  66. package/dist/react-native/email-crypto.d.ts +253 -0
  67. package/dist/react-native/email-crypto.d.ts.map +1 -0
  68. package/dist/react-native/email-crypto.js +35 -0
  69. package/dist/react-native/email-crypto.mjs +2 -0
  70. package/dist/react-native/hash.d.mts +50 -0
  71. package/dist/react-native/hash.d.mts.map +1 -0
  72. package/dist/react-native/hash.d.ts +50 -0
  73. package/dist/react-native/hash.d.ts.map +1 -0
  74. package/dist/react-native/hash.js +89 -0
  75. package/dist/react-native/hash.js.map +1 -0
  76. package/dist/react-native/hash.mjs +82 -0
  77. package/dist/react-native/hash.mjs.map +1 -0
  78. package/dist/react-native/index.d.mts +32 -0
  79. package/dist/react-native/index.d.mts.map +1 -0
  80. package/dist/react-native/index.d.ts +32 -0
  81. package/dist/react-native/index.d.ts.map +1 -0
  82. package/dist/react-native/index.js +106 -0
  83. package/dist/react-native/index.mjs +12 -0
  84. package/dist/react-native/keystore-crypto-BXPEVvzq.js +238 -0
  85. package/dist/react-native/keystore-crypto-BXPEVvzq.js.map +1 -0
  86. package/dist/react-native/keystore-crypto-C6F-NQdX.mjs +185 -0
  87. package/dist/react-native/keystore-crypto-C6F-NQdX.mjs.map +1 -0
  88. package/dist/react-native/keystore-crypto.d.mts +71 -0
  89. package/dist/react-native/keystore-crypto.d.mts.map +1 -0
  90. package/dist/react-native/keystore-crypto.d.ts +71 -0
  91. package/dist/react-native/keystore-crypto.d.ts.map +1 -0
  92. package/dist/react-native/keystore-crypto.js +11 -0
  93. package/dist/react-native/keystore-crypto.mjs +2 -0
  94. package/dist/react-native/post-quantum-crypto.d.mts +32 -0
  95. package/dist/react-native/post-quantum-crypto.d.mts.map +1 -0
  96. package/dist/react-native/post-quantum-crypto.d.ts +32 -0
  97. package/dist/react-native/post-quantum-crypto.d.ts.map +1 -0
  98. package/dist/react-native/post-quantum-crypto.js +50 -0
  99. package/dist/react-native/post-quantum-crypto.js.map +1 -0
  100. package/dist/react-native/post-quantum-crypto.mjs +46 -0
  101. package/dist/react-native/post-quantum-crypto.mjs.map +1 -0
  102. package/dist/react-native/storage-service.d.mts +47 -0
  103. package/dist/react-native/storage-service.d.mts.map +1 -0
  104. package/dist/react-native/storage-service.d.ts +47 -0
  105. package/dist/react-native/storage-service.d.ts.map +1 -0
  106. package/dist/react-native/storage-service.js +66 -0
  107. package/dist/react-native/storage-service.js.map +1 -0
  108. package/dist/react-native/storage-service.mjs +54 -0
  109. package/dist/react-native/storage-service.mjs.map +1 -0
  110. package/dist/react-native/symmetric-crypto.d.mts +28 -0
  111. package/dist/react-native/symmetric-crypto.d.mts.map +1 -0
  112. package/dist/react-native/symmetric-crypto.d.ts +28 -0
  113. package/dist/react-native/symmetric-crypto.d.ts.map +1 -0
  114. package/dist/react-native/symmetric-crypto.js +52 -0
  115. package/dist/react-native/symmetric-crypto.js.map +1 -0
  116. package/dist/react-native/symmetric-crypto.mjs +48 -0
  117. package/dist/react-native/symmetric-crypto.mjs.map +1 -0
  118. package/dist/{types-fhvOo6Gw.d.ts → react-native/types-D1R4_m5r.d.mts} +6 -10
  119. package/dist/react-native/types-D1R4_m5r.d.mts.map +1 -0
  120. package/dist/{types-cEyToM9T.d.mts → react-native/types-Y0wL7HUH.d.ts} +6 -10
  121. package/dist/react-native/types-Y0wL7HUH.d.ts.map +1 -0
  122. package/dist/react-native/types.d.mts +2 -0
  123. package/dist/react-native/types.d.ts +2 -0
  124. package/dist/react-native/types.js +11 -0
  125. package/dist/react-native/types.js.map +1 -0
  126. package/dist/react-native/types.mjs +10 -0
  127. package/dist/react-native/types.mjs.map +1 -0
  128. package/dist/react-native/utils.d.mts +78 -0
  129. package/dist/react-native/utils.d.mts.map +1 -0
  130. package/dist/react-native/utils.d.ts +78 -0
  131. package/dist/react-native/utils.d.ts.map +1 -0
  132. package/dist/react-native/utils.js +123 -0
  133. package/dist/react-native/utils.js.map +1 -0
  134. package/dist/react-native/utils.mjs +109 -0
  135. package/dist/react-native/utils.mjs.map +1 -0
  136. package/dist/react-native/xwing-B34h5e3Z.mjs +15 -0
  137. package/dist/react-native/xwing-B34h5e3Z.mjs.map +1 -0
  138. package/dist/react-native/xwing-CSdiyHAt.js +33 -0
  139. package/dist/react-native/xwing-CSdiyHAt.js.map +1 -0
  140. package/dist/types-D1R4_m5r.d.mts +55 -0
  141. package/dist/types-D1R4_m5r.d.mts.map +1 -0
  142. package/dist/types-Y0wL7HUH.d.ts +55 -0
  143. package/dist/types-Y0wL7HUH.d.ts.map +1 -0
  144. package/dist/types.d.mts +2 -2
  145. package/dist/types.d.ts +2 -2
  146. package/dist/types.js.map +1 -1
  147. package/dist/types.mjs.map +1 -1
  148. package/dist/utils.d.mts.map +1 -1
  149. package/dist/utils.d.ts.map +1 -1
  150. package/dist/utils.js +3 -8
  151. package/dist/utils.js.map +1 -1
  152. package/dist/utils.mjs +3 -8
  153. package/dist/utils.mjs.map +1 -1
  154. package/package.json +4 -1
  155. package/dist/email-crypto-CPL8ept8.js.map +0 -1
  156. package/dist/email-crypto-_Wcbvr_n.mjs.map +0 -1
  157. package/dist/types-cEyToM9T.d.mts.map +0 -1
  158. package/dist/types-fhvOo6Gw.d.ts.map +0 -1
@@ -0,0 +1,51 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/constants.ts
3
+ const AES_KEY_BYTE_LENGTH = 32;
4
+ const IV_LEN_BYTES = 12;
5
+ const CONTEXT_ENC_KEYSTORE = "CRYPTO library 2025-07-30 16:18:03 key for opening encryption keys keystore";
6
+ const CONTEXT_RECOVERY = "CRYPTO library 2025-07-30 16:20:00 key for account recovery";
7
+ const CONTEXT_DATABASE = "CRYPTO library 2025-07-30 17:20:00 key for protecting current search indices";
8
+ const CONTEXT_DRAFT = "CRYPTO library 2026-04-23 10:56:00 key for protecting email drafts";
9
+ const CONTEXT_TWO_KEYS = "CRYPTO library 2025-08-27 17:08:00 derive one key from two keys";
10
+ const ARGON2ID_PARALLELISM = 3;
11
+ const ARGON2ID_ITERATIONS = 4;
12
+ const ARGON2ID_MEMORY_SIZE = 65536;
13
+ const ARGON2ID_SALT_BYTE_LENGTH = 16;
14
+ const ARGON2ID_OUTPUT_BYTE_LENGTH = 32;
15
+ const KYBER768_PUBLIC_KEY_LENGTH = 1184;
16
+ const KYBER768_SECRET_KEY_LENGTH = 2400;
17
+ const KYBER_SEED_LENGTH = 64;
18
+ const MAX_CACHE_SIZE = 6e8;
19
+ const MAX_EMAIL_PER_BATCH = 100;
20
+ const DB_LABEL = "email";
21
+ const DB_VERSION = 1;
22
+ const XWING_PUBLIC_KEY_LENGTH = 1216;
23
+ const XWING_SECRET_KEY_LENGTH = 32;
24
+ const XWING_SEED_BYTE_LENGTH = 32;
25
+ const XWING_CIPHERTEXT_BYTE_LENGTH = 1120;
26
+ //#endregion
27
+ exports.AES_KEY_BYTE_LENGTH = AES_KEY_BYTE_LENGTH;
28
+ exports.ARGON2ID_ITERATIONS = ARGON2ID_ITERATIONS;
29
+ exports.ARGON2ID_MEMORY_SIZE = ARGON2ID_MEMORY_SIZE;
30
+ exports.ARGON2ID_OUTPUT_BYTE_LENGTH = ARGON2ID_OUTPUT_BYTE_LENGTH;
31
+ exports.ARGON2ID_PARALLELISM = ARGON2ID_PARALLELISM;
32
+ exports.ARGON2ID_SALT_BYTE_LENGTH = ARGON2ID_SALT_BYTE_LENGTH;
33
+ exports.CONTEXT_DATABASE = CONTEXT_DATABASE;
34
+ exports.CONTEXT_DRAFT = CONTEXT_DRAFT;
35
+ exports.CONTEXT_ENC_KEYSTORE = CONTEXT_ENC_KEYSTORE;
36
+ exports.CONTEXT_RECOVERY = CONTEXT_RECOVERY;
37
+ exports.CONTEXT_TWO_KEYS = CONTEXT_TWO_KEYS;
38
+ exports.DB_LABEL = DB_LABEL;
39
+ exports.DB_VERSION = DB_VERSION;
40
+ exports.IV_LEN_BYTES = IV_LEN_BYTES;
41
+ exports.KYBER768_PUBLIC_KEY_LENGTH = KYBER768_PUBLIC_KEY_LENGTH;
42
+ exports.KYBER768_SECRET_KEY_LENGTH = KYBER768_SECRET_KEY_LENGTH;
43
+ exports.KYBER_SEED_LENGTH = KYBER_SEED_LENGTH;
44
+ exports.MAX_CACHE_SIZE = MAX_CACHE_SIZE;
45
+ exports.MAX_EMAIL_PER_BATCH = MAX_EMAIL_PER_BATCH;
46
+ exports.XWING_CIPHERTEXT_BYTE_LENGTH = XWING_CIPHERTEXT_BYTE_LENGTH;
47
+ exports.XWING_PUBLIC_KEY_LENGTH = XWING_PUBLIC_KEY_LENGTH;
48
+ exports.XWING_SECRET_KEY_LENGTH = XWING_SECRET_KEY_LENGTH;
49
+ exports.XWING_SEED_BYTE_LENGTH = XWING_SEED_BYTE_LENGTH;
50
+
51
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../src/constants.ts"],"sourcesContent":["export const AES_KEY_BYTE_LENGTH = 32;\nexport const IV_LEN_BYTES = 12;\n\nexport const CONTEXT_ENC_KEYSTORE = 'CRYPTO library 2025-07-30 16:18:03 key for opening encryption keys keystore';\nexport const CONTEXT_RECOVERY = 'CRYPTO library 2025-07-30 16:20:00 key for account recovery';\nexport const CONTEXT_DATABASE = 'CRYPTO library 2025-07-30 17:20:00 key for protecting current search indices';\nexport const CONTEXT_DRAFT = 'CRYPTO library 2026-04-23 10:56:00 key for protecting email drafts';\nexport const CONTEXT_TWO_KEYS = 'CRYPTO library 2025-08-27 17:08:00 derive one key from two keys';\n\n// Second recommended parameter set from RFC 9106\nexport const ARGON2ID_PARALLELISM = 3;\nexport const ARGON2ID_ITERATIONS = 4;\nexport const ARGON2ID_MEMORY_SIZE = 65536;\nexport const ARGON2ID_SALT_BYTE_LENGTH = 16;\nexport const ARGON2ID_OUTPUT_BYTE_LENGTH = 32;\n\nexport const KYBER768_PUBLIC_KEY_LENGTH = 1184;\nexport const KYBER768_SECRET_KEY_LENGTH = 2400;\nexport const KYBER_SEED_LENGTH = 64;\n\nexport const MAX_CACHE_SIZE = 600000000; // 600 MB\nexport const MAX_EMAIL_PER_BATCH = 100;\nexport const DB_LABEL = 'email';\nexport const DB_VERSION = 1;\n\nexport const XWING_PUBLIC_KEY_LENGTH = 1216;\nexport const XWING_SECRET_KEY_LENGTH = 32;\nexport const XWING_SEED_BYTE_LENGTH = 32;\nexport const XWING_CIPHERTEXT_BYTE_LENGTH = 1120;\n"],"mappings":";;AAAA,MAAa,sBAAsB;AACnC,MAAa,eAAe;AAE5B,MAAa,uBAAuB;AACpC,MAAa,mBAAmB;AAChC,MAAa,mBAAmB;AAChC,MAAa,gBAAgB;AAC7B,MAAa,mBAAmB;AAGhC,MAAa,uBAAuB;AACpC,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,4BAA4B;AACzC,MAAa,8BAA8B;AAE3C,MAAa,6BAA6B;AAC1C,MAAa,6BAA6B;AAC1C,MAAa,oBAAoB;AAEjC,MAAa,iBAAiB;AAC9B,MAAa,sBAAsB;AACnC,MAAa,WAAW;AACxB,MAAa,aAAa;AAE1B,MAAa,0BAA0B;AACvC,MAAa,0BAA0B;AACvC,MAAa,yBAAyB;AACtC,MAAa,+BAA+B"}
@@ -0,0 +1,28 @@
1
+ //#region src/constants.ts
2
+ const AES_KEY_BYTE_LENGTH = 32;
3
+ const IV_LEN_BYTES = 12;
4
+ const CONTEXT_ENC_KEYSTORE = "CRYPTO library 2025-07-30 16:18:03 key for opening encryption keys keystore";
5
+ const CONTEXT_RECOVERY = "CRYPTO library 2025-07-30 16:20:00 key for account recovery";
6
+ const CONTEXT_DATABASE = "CRYPTO library 2025-07-30 17:20:00 key for protecting current search indices";
7
+ const CONTEXT_DRAFT = "CRYPTO library 2026-04-23 10:56:00 key for protecting email drafts";
8
+ const CONTEXT_TWO_KEYS = "CRYPTO library 2025-08-27 17:08:00 derive one key from two keys";
9
+ const ARGON2ID_PARALLELISM = 3;
10
+ const ARGON2ID_ITERATIONS = 4;
11
+ const ARGON2ID_MEMORY_SIZE = 65536;
12
+ const ARGON2ID_SALT_BYTE_LENGTH = 16;
13
+ const ARGON2ID_OUTPUT_BYTE_LENGTH = 32;
14
+ const KYBER768_PUBLIC_KEY_LENGTH = 1184;
15
+ const KYBER768_SECRET_KEY_LENGTH = 2400;
16
+ const KYBER_SEED_LENGTH = 64;
17
+ const MAX_CACHE_SIZE = 6e8;
18
+ const MAX_EMAIL_PER_BATCH = 100;
19
+ const DB_LABEL = "email";
20
+ const DB_VERSION = 1;
21
+ const XWING_PUBLIC_KEY_LENGTH = 1216;
22
+ const XWING_SECRET_KEY_LENGTH = 32;
23
+ const XWING_SEED_BYTE_LENGTH = 32;
24
+ const XWING_CIPHERTEXT_BYTE_LENGTH = 1120;
25
+ //#endregion
26
+ export { AES_KEY_BYTE_LENGTH, ARGON2ID_ITERATIONS, ARGON2ID_MEMORY_SIZE, ARGON2ID_OUTPUT_BYTE_LENGTH, ARGON2ID_PARALLELISM, ARGON2ID_SALT_BYTE_LENGTH, CONTEXT_DATABASE, CONTEXT_DRAFT, CONTEXT_ENC_KEYSTORE, CONTEXT_RECOVERY, CONTEXT_TWO_KEYS, DB_LABEL, DB_VERSION, IV_LEN_BYTES, KYBER768_PUBLIC_KEY_LENGTH, KYBER768_SECRET_KEY_LENGTH, KYBER_SEED_LENGTH, MAX_CACHE_SIZE, MAX_EMAIL_PER_BATCH, XWING_CIPHERTEXT_BYTE_LENGTH, XWING_PUBLIC_KEY_LENGTH, XWING_SECRET_KEY_LENGTH, XWING_SEED_BYTE_LENGTH };
27
+
28
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.mjs","names":[],"sources":["../../src/constants.ts"],"sourcesContent":["export const AES_KEY_BYTE_LENGTH = 32;\nexport const IV_LEN_BYTES = 12;\n\nexport const CONTEXT_ENC_KEYSTORE = 'CRYPTO library 2025-07-30 16:18:03 key for opening encryption keys keystore';\nexport const CONTEXT_RECOVERY = 'CRYPTO library 2025-07-30 16:20:00 key for account recovery';\nexport const CONTEXT_DATABASE = 'CRYPTO library 2025-07-30 17:20:00 key for protecting current search indices';\nexport const CONTEXT_DRAFT = 'CRYPTO library 2026-04-23 10:56:00 key for protecting email drafts';\nexport const CONTEXT_TWO_KEYS = 'CRYPTO library 2025-08-27 17:08:00 derive one key from two keys';\n\n// Second recommended parameter set from RFC 9106\nexport const ARGON2ID_PARALLELISM = 3;\nexport const ARGON2ID_ITERATIONS = 4;\nexport const ARGON2ID_MEMORY_SIZE = 65536;\nexport const ARGON2ID_SALT_BYTE_LENGTH = 16;\nexport const ARGON2ID_OUTPUT_BYTE_LENGTH = 32;\n\nexport const KYBER768_PUBLIC_KEY_LENGTH = 1184;\nexport const KYBER768_SECRET_KEY_LENGTH = 2400;\nexport const KYBER_SEED_LENGTH = 64;\n\nexport const MAX_CACHE_SIZE = 600000000; // 600 MB\nexport const MAX_EMAIL_PER_BATCH = 100;\nexport const DB_LABEL = 'email';\nexport const DB_VERSION = 1;\n\nexport const XWING_PUBLIC_KEY_LENGTH = 1216;\nexport const XWING_SECRET_KEY_LENGTH = 32;\nexport const XWING_SEED_BYTE_LENGTH = 32;\nexport const XWING_CIPHERTEXT_BYTE_LENGTH = 1120;\n"],"mappings":";AAAA,MAAa,sBAAsB;AACnC,MAAa,eAAe;AAE5B,MAAa,uBAAuB;AACpC,MAAa,mBAAmB;AAChC,MAAa,mBAAmB;AAChC,MAAa,gBAAgB;AAC7B,MAAa,mBAAmB;AAGhC,MAAa,uBAAuB;AACpC,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,4BAA4B;AACzC,MAAa,8BAA8B;AAE3C,MAAa,6BAA6B;AAC1C,MAAa,6BAA6B;AAC1C,MAAa,oBAAoB;AAEjC,MAAa,iBAAiB;AAC9B,MAAa,sBAAsB;AACnC,MAAa,WAAW;AACxB,MAAa,aAAa;AAE1B,MAAa,0BAA0B;AACvC,MAAa,0BAA0B;AACvC,MAAa,yBAAyB;AACtC,MAAa,+BAA+B"}
@@ -0,0 +1,32 @@
1
+ //#region src/derive-key/deriveKeysFromKey.d.ts
2
+ /**
3
+ * Derives a symmetric key from the base key and context string
4
+ *
5
+ * @param context - The context string.
6
+ * The context string should be hardcoded, globally unique, and application-specific.
7
+ * @param baseKey - The base key (NOT PASSWORD!)
8
+ * @returns The derived secret key
9
+ */
10
+ declare function deriveSymmetricKeyFromContext(context: string, baseKey: Uint8Array): Uint8Array;
11
+ /**
12
+ * Derives a symmetric key from two keys
13
+ *
14
+ * @param key1 - The 32-bytes key
15
+ * @param key2 - The 32-bytes key
16
+ * @returns The derived secret key
17
+ */
18
+ declare function deriveSymmetricKeyFromTwoKeys(key1: Uint8Array, key2: Uint8Array): Uint8Array;
19
+ //#endregion
20
+ //#region src/derive-key/deriveKeysFromMnemonic.d.ts
21
+ /**
22
+ * Derives encryption key from the user's mnemonic and context string
23
+ *
24
+ * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
25
+ * @param context - The context string.
26
+ * The context string should be hardcoded, globally unique, and application-specific.
27
+ * @returns The symmetric key for protecting database
28
+ */
29
+ declare const deriveKeyFromMnemonic: (mnemonic: string, context: string) => Promise<Uint8Array>;
30
+ //#endregion
31
+ export { deriveKeyFromMnemonic, deriveSymmetricKeyFromContext, deriveSymmetricKeyFromTwoKeys };
32
+ //# sourceMappingURL=derive-key.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-key.d.mts","names":[],"sources":["../../src/derive-key/deriveKeysFromKey.ts","../../src/derive-key/deriveKeysFromMnemonic.ts"],"mappings":";;AAYA;;;;;;;iBAAgB,6BAAA,CAA8B,OAAA,UAAiB,OAAA,EAAS,UAAA,GAAa,UAAA;;;AAWrF;;;;;iBAAgB,6BAAA,CAA8B,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,UAAA,GAAa,UAAA;;;;AAXnF;;;;;;;cCDa,qBAAA,GAA+B,QAAA,UAAkB,OAAA,aAAkB,OAAA,CAAQ,UAAA"}
@@ -0,0 +1,32 @@
1
+ //#region src/derive-key/deriveKeysFromKey.d.ts
2
+ /**
3
+ * Derives a symmetric key from the base key and context string
4
+ *
5
+ * @param context - The context string.
6
+ * The context string should be hardcoded, globally unique, and application-specific.
7
+ * @param baseKey - The base key (NOT PASSWORD!)
8
+ * @returns The derived secret key
9
+ */
10
+ declare function deriveSymmetricKeyFromContext(context: string, baseKey: Uint8Array): Uint8Array;
11
+ /**
12
+ * Derives a symmetric key from two keys
13
+ *
14
+ * @param key1 - The 32-bytes key
15
+ * @param key2 - The 32-bytes key
16
+ * @returns The derived secret key
17
+ */
18
+ declare function deriveSymmetricKeyFromTwoKeys(key1: Uint8Array, key2: Uint8Array): Uint8Array;
19
+ //#endregion
20
+ //#region src/derive-key/deriveKeysFromMnemonic.d.ts
21
+ /**
22
+ * Derives encryption key from the user's mnemonic and context string
23
+ *
24
+ * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
25
+ * @param context - The context string.
26
+ * The context string should be hardcoded, globally unique, and application-specific.
27
+ * @returns The symmetric key for protecting database
28
+ */
29
+ declare const deriveKeyFromMnemonic: (mnemonic: string, context: string) => Promise<Uint8Array>;
30
+ //#endregion
31
+ export { deriveKeyFromMnemonic, deriveSymmetricKeyFromContext, deriveSymmetricKeyFromTwoKeys };
32
+ //# sourceMappingURL=derive-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-key.d.ts","names":[],"sources":["../../src/derive-key/deriveKeysFromKey.ts","../../src/derive-key/deriveKeysFromMnemonic.ts"],"mappings":";;AAYA;;;;;;;iBAAgB,6BAAA,CAA8B,OAAA,UAAiB,OAAA,EAAS,UAAA,GAAa,UAAA;;;AAWrF;;;;;iBAAgB,6BAAA,CAA8B,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,UAAA,GAAa,UAAA;;;;AAXnF;;;;;;;cCDa,qBAAA,GAA+B,QAAA,UAAkB,OAAA,aAAkB,OAAA,CAAQ,UAAA"}
@@ -0,0 +1,51 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("./chunk-DskHE4z1.js");
3
+ const require_constants = require("./constants.js");
4
+ const require_utils = require("./utils.js");
5
+ let _noble_hashes_blake3_js = require("@noble/hashes/blake3.js");
6
+ //#region src/derive-key/deriveKeysFromKey.ts
7
+ /**
8
+ * Derives a symmetric key from the base key and context string
9
+ *
10
+ * @param context - The context string.
11
+ * The context string should be hardcoded, globally unique, and application-specific.
12
+ * @param baseKey - The base key (NOT PASSWORD!)
13
+ * @returns The derived secret key
14
+ */
15
+ function deriveSymmetricKeyFromContext(context, baseKey) {
16
+ return (0, _noble_hashes_blake3_js.blake3)(baseKey, { context: require_utils.UTF8ToUint8(context) });
17
+ }
18
+ /**
19
+ * Derives a symmetric key from two keys
20
+ *
21
+ * @param key1 - The 32-bytes key
22
+ * @param key2 - The 32-bytes key
23
+ * @returns The derived secret key
24
+ */
25
+ function deriveSymmetricKeyFromTwoKeys(key1, key2) {
26
+ try {
27
+ if (key2.length !== 32 || key1.length !== 32) throw new Error(`Input key length must be exactly 32 bytes`);
28
+ return deriveSymmetricKeyFromContext(require_constants.CONTEXT_TWO_KEYS, (0, _noble_hashes_blake3_js.blake3)(key1, { key: key2 }));
29
+ } catch (error) {
30
+ throw new Error("Failed to derive symmetric key from two keys and context", { cause: error });
31
+ }
32
+ }
33
+ //#endregion
34
+ //#region src/derive-key/deriveKeysFromMnemonic.ts
35
+ /**
36
+ * Derives encryption key from the user's mnemonic and context string
37
+ *
38
+ * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
39
+ * @param context - The context string.
40
+ * The context string should be hardcoded, globally unique, and application-specific.
41
+ * @returns The symmetric key for protecting database
42
+ */
43
+ const deriveKeyFromMnemonic = async (mnemonic, context) => {
44
+ return deriveSymmetricKeyFromContext(context, require_utils.mnemonicToBytes(mnemonic));
45
+ };
46
+ //#endregion
47
+ exports.deriveKeyFromMnemonic = deriveKeyFromMnemonic;
48
+ exports.deriveSymmetricKeyFromContext = deriveSymmetricKeyFromContext;
49
+ exports.deriveSymmetricKeyFromTwoKeys = deriveSymmetricKeyFromTwoKeys;
50
+
51
+ //# sourceMappingURL=derive-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-key.js","names":["UTF8ToUint8","CONTEXT_TWO_KEYS","mnemonicToBytes"],"sources":["../../src/derive-key/deriveKeysFromKey.ts","../../src/derive-key/deriveKeysFromMnemonic.ts"],"sourcesContent":["import { blake3 } from '@noble/hashes/blake3.js';\nimport { AES_KEY_BYTE_LENGTH, CONTEXT_TWO_KEYS } from '../constants';\nimport { UTF8ToUint8 } from '../utils';\n\n/**\n * Derives a symmetric key from the base key and context string\n *\n * @param context - The context string.\n * The context string should be hardcoded, globally unique, and application-specific.\n * @param baseKey - The base key (NOT PASSWORD!)\n * @returns The derived secret key\n */\nexport function deriveSymmetricKeyFromContext(context: string, baseKey: Uint8Array): Uint8Array {\n return blake3(baseKey, { context: UTF8ToUint8(context) });\n}\n\n/**\n * Derives a symmetric key from two keys\n *\n * @param key1 - The 32-bytes key\n * @param key2 - The 32-bytes key\n * @returns The derived secret key\n */\nexport function deriveSymmetricKeyFromTwoKeys(key1: Uint8Array, key2: Uint8Array): Uint8Array {\n try {\n if (key2.length !== AES_KEY_BYTE_LENGTH || key1.length !== AES_KEY_BYTE_LENGTH) {\n throw new Error(`Input key length must be exactly ${AES_KEY_BYTE_LENGTH} bytes`);\n }\n const key = blake3(key1, { key: key2 });\n return deriveSymmetricKeyFromContext(CONTEXT_TWO_KEYS, key);\n } catch (error) {\n throw new Error('Failed to derive symmetric key from two keys and context', { cause: error });\n }\n}\n","import { mnemonicToBytes } from '../utils';\nimport { deriveSymmetricKeyFromContext } from './deriveKeysFromKey';\n\n/**\n * Derives encryption key from the user's mnemonic and context string\n *\n * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)\n * @param context - The context string.\n * The context string should be hardcoded, globally unique, and application-specific.\n * @returns The symmetric key for protecting database\n */\nexport const deriveKeyFromMnemonic = async (mnemonic: string, context: string): Promise<Uint8Array> => {\n // mnemonic is always machine-generated with secure PRNG, so it is safe to convert it to bytes without additional processing\n const entropy = mnemonicToBytes(mnemonic);\n return deriveSymmetricKeyFromContext(context, entropy);\n};\n"],"mappings":";;;;;;;;;;;;;;AAYA,SAAgB,8BAA8B,SAAiB,SAAiC;AAC9F,SAAA,GAAA,wBAAA,QAAc,SAAS,EAAE,SAASA,cAAAA,YAAY,QAAQ,EAAE,CAAC;;;;;;;;;AAU3D,SAAgB,8BAA8B,MAAkB,MAA8B;AAC5F,KAAI;AACF,MAAI,KAAK,WAAA,MAAkC,KAAK,WAAA,GAC9C,OAAM,IAAI,MAAM,4CAAgE;AAGlF,SAAO,8BAA8BC,kBAAAA,mBAAAA,GAAAA,wBAAAA,QADlB,MAAM,EAAE,KAAK,MAAM,CACoB,CAAC;UACpD,OAAO;AACd,QAAM,IAAI,MAAM,4DAA4D,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;;;;ACpBjG,MAAa,wBAAwB,OAAO,UAAkB,YAAyC;AAGrG,QAAO,8BAA8B,SADrBC,cAAAA,gBAAgB,SACqB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { CONTEXT_TWO_KEYS } from "./constants.mjs";
2
+ import { UTF8ToUint8, mnemonicToBytes } from "./utils.mjs";
3
+ import { blake3 } from "@noble/hashes/blake3.js";
4
+ //#region src/derive-key/deriveKeysFromKey.ts
5
+ /**
6
+ * Derives a symmetric key from the base key and context string
7
+ *
8
+ * @param context - The context string.
9
+ * The context string should be hardcoded, globally unique, and application-specific.
10
+ * @param baseKey - The base key (NOT PASSWORD!)
11
+ * @returns The derived secret key
12
+ */
13
+ function deriveSymmetricKeyFromContext(context, baseKey) {
14
+ return blake3(baseKey, { context: UTF8ToUint8(context) });
15
+ }
16
+ /**
17
+ * Derives a symmetric key from two keys
18
+ *
19
+ * @param key1 - The 32-bytes key
20
+ * @param key2 - The 32-bytes key
21
+ * @returns The derived secret key
22
+ */
23
+ function deriveSymmetricKeyFromTwoKeys(key1, key2) {
24
+ try {
25
+ if (key2.length !== 32 || key1.length !== 32) throw new Error(`Input key length must be exactly 32 bytes`);
26
+ return deriveSymmetricKeyFromContext(CONTEXT_TWO_KEYS, blake3(key1, { key: key2 }));
27
+ } catch (error) {
28
+ throw new Error("Failed to derive symmetric key from two keys and context", { cause: error });
29
+ }
30
+ }
31
+ //#endregion
32
+ //#region src/derive-key/deriveKeysFromMnemonic.ts
33
+ /**
34
+ * Derives encryption key from the user's mnemonic and context string
35
+ *
36
+ * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)
37
+ * @param context - The context string.
38
+ * The context string should be hardcoded, globally unique, and application-specific.
39
+ * @returns The symmetric key for protecting database
40
+ */
41
+ const deriveKeyFromMnemonic = async (mnemonic, context) => {
42
+ return deriveSymmetricKeyFromContext(context, mnemonicToBytes(mnemonic));
43
+ };
44
+ //#endregion
45
+ export { deriveKeyFromMnemonic, deriveSymmetricKeyFromContext, deriveSymmetricKeyFromTwoKeys };
46
+
47
+ //# sourceMappingURL=derive-key.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-key.mjs","names":[],"sources":["../../src/derive-key/deriveKeysFromKey.ts","../../src/derive-key/deriveKeysFromMnemonic.ts"],"sourcesContent":["import { blake3 } from '@noble/hashes/blake3.js';\nimport { AES_KEY_BYTE_LENGTH, CONTEXT_TWO_KEYS } from '../constants';\nimport { UTF8ToUint8 } from '../utils';\n\n/**\n * Derives a symmetric key from the base key and context string\n *\n * @param context - The context string.\n * The context string should be hardcoded, globally unique, and application-specific.\n * @param baseKey - The base key (NOT PASSWORD!)\n * @returns The derived secret key\n */\nexport function deriveSymmetricKeyFromContext(context: string, baseKey: Uint8Array): Uint8Array {\n return blake3(baseKey, { context: UTF8ToUint8(context) });\n}\n\n/**\n * Derives a symmetric key from two keys\n *\n * @param key1 - The 32-bytes key\n * @param key2 - The 32-bytes key\n * @returns The derived secret key\n */\nexport function deriveSymmetricKeyFromTwoKeys(key1: Uint8Array, key2: Uint8Array): Uint8Array {\n try {\n if (key2.length !== AES_KEY_BYTE_LENGTH || key1.length !== AES_KEY_BYTE_LENGTH) {\n throw new Error(`Input key length must be exactly ${AES_KEY_BYTE_LENGTH} bytes`);\n }\n const key = blake3(key1, { key: key2 });\n return deriveSymmetricKeyFromContext(CONTEXT_TWO_KEYS, key);\n } catch (error) {\n throw new Error('Failed to derive symmetric key from two keys and context', { cause: error });\n }\n}\n","import { mnemonicToBytes } from '../utils';\nimport { deriveSymmetricKeyFromContext } from './deriveKeysFromKey';\n\n/**\n * Derives encryption key from the user's mnemonic and context string\n *\n * @param mnemonic - The user's mnemonic (machine-generated with secure PRNG)\n * @param context - The context string.\n * The context string should be hardcoded, globally unique, and application-specific.\n * @returns The symmetric key for protecting database\n */\nexport const deriveKeyFromMnemonic = async (mnemonic: string, context: string): Promise<Uint8Array> => {\n // mnemonic is always machine-generated with secure PRNG, so it is safe to convert it to bytes without additional processing\n const entropy = mnemonicToBytes(mnemonic);\n return deriveSymmetricKeyFromContext(context, entropy);\n};\n"],"mappings":";;;;;;;;;;;;AAYA,SAAgB,8BAA8B,SAAiB,SAAiC;AAC9F,QAAO,OAAO,SAAS,EAAE,SAAS,YAAY,QAAQ,EAAE,CAAC;;;;;;;;;AAU3D,SAAgB,8BAA8B,MAAkB,MAA8B;AAC5F,KAAI;AACF,MAAI,KAAK,WAAA,MAAkC,KAAK,WAAA,GAC9C,OAAM,IAAI,MAAM,4CAAgE;AAGlF,SAAO,8BAA8B,kBADzB,OAAO,MAAM,EAAE,KAAK,MAAM,CACoB,CAAC;UACpD,OAAO;AACd,QAAM,IAAI,MAAM,4DAA4D,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;;;;ACpBjG,MAAa,wBAAwB,OAAO,UAAkB,YAAyC;AAGrG,QAAO,8BAA8B,SADrB,gBAAgB,SACqB,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { ARGON2ID_MEMORY_SIZE } from "./constants.mjs";
2
+ import { randomBytes } from "@noble/hashes/utils.js";
3
+ import { argon2id } from "@noble/hashes/argon2.js";
4
+ //#region src/derive-password/core.native.ts
5
+ /**
6
+ * Calculates hash using the argon2id password-hashing function
7
+ *
8
+ * @param password - The user's password
9
+ * @param salt - The given salt
10
+ * @param parallelism - The degree of parallelism
11
+ * @param iterations - The number of iterations
12
+ * @param memorySize - The memory size in KB
13
+ * @param hashLength - The desired hash byte length
14
+ * @returns The resulting hash
15
+ */
16
+ async function argon2(password, salt, parallelism = 3, iterations = 4, memorySize = ARGON2ID_MEMORY_SIZE, hashLength = 32) {
17
+ return argon2id(password, salt, {
18
+ p: parallelism,
19
+ t: iterations,
20
+ m: memorySize,
21
+ dkLen: hashLength
22
+ });
23
+ }
24
+ //#endregion
25
+ //#region src/derive-password/deriveKeysFromPassword.ts
26
+ /**
27
+ * Samples a salt
28
+ *
29
+ * @returns The salt
30
+ */
31
+ function generateSalt() {
32
+ return randomBytes(16);
33
+ }
34
+ /**
35
+ * Derives a symmetric key from a user's password with a randomly sampled salt
36
+ *
37
+ * @param password - The user's password
38
+ * @returns The derived secret key and randomly sampled salt
39
+ */
40
+ async function getKeyFromPassword(password) {
41
+ try {
42
+ const salt = generateSalt();
43
+ return {
44
+ key: await argon2(password, salt),
45
+ salt
46
+ };
47
+ } catch (error) {
48
+ throw new Error("Failed to derive key from password", { cause: error });
49
+ }
50
+ }
51
+ /**
52
+ * Derives a symmetric key from a user's password and salt
53
+ *
54
+ * @param password - The user's password
55
+ * @param salt - The given salt
56
+ * @returns The derived secret key
57
+ */
58
+ async function getKeyFromPasswordAndSalt(password, salt) {
59
+ try {
60
+ return await argon2(password, salt);
61
+ } catch (error) {
62
+ throw new Error("Failed to derive key from password and salt", { cause: error });
63
+ }
64
+ }
65
+ //#endregion
66
+ export { getKeyFromPassword as n, getKeyFromPasswordAndSalt as r, generateSalt as t };
67
+
68
+ //# sourceMappingURL=derive-password-Bb3R3nyh.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-password-Bb3R3nyh.mjs","names":[],"sources":["../../src/derive-password/core.native.ts","../../src/derive-password/deriveKeysFromPassword.ts"],"sourcesContent":["import { argon2id } from '@noble/hashes/argon2.js';\nimport {\n ARGON2ID_ITERATIONS,\n ARGON2ID_MEMORY_SIZE,\n ARGON2ID_PARALLELISM,\n ARGON2ID_OUTPUT_BYTE_LENGTH,\n} from '../constants';\n\n/**\n * Calculates hash using the argon2id password-hashing function\n *\n * @param password - The user's password\n * @param salt - The given salt\n * @param parallelism - The degree of parallelism\n * @param iterations - The number of iterations\n * @param memorySize - The memory size in KB\n * @param hashLength - The desired hash byte length\n * @returns The resulting hash\n */\nexport async function argon2(\n password: string,\n salt: Uint8Array,\n parallelism: number = ARGON2ID_PARALLELISM,\n iterations: number = ARGON2ID_ITERATIONS,\n memorySize: number = ARGON2ID_MEMORY_SIZE,\n hashLength: number = ARGON2ID_OUTPUT_BYTE_LENGTH,\n): Promise<Uint8Array> {\n return argon2id(password, salt, {\n p: parallelism,\n t: iterations,\n m: memorySize,\n dkLen: hashLength,\n });\n}\n","import { argon2 } from './core';\nimport { ARGON2ID_SALT_BYTE_LENGTH } from '../constants';\nimport { randomBytes } from '@noble/hashes/utils.js';\n\n/**\n * Samples a salt\n *\n * @returns The salt\n */\nexport function generateSalt(): Uint8Array {\n return randomBytes(ARGON2ID_SALT_BYTE_LENGTH);\n}\n\n/**\n * Derives a symmetric key from a user's password with a randomly sampled salt\n *\n * @param password - The user's password\n * @returns The derived secret key and randomly sampled salt\n */\nexport async function getKeyFromPassword(password: string): Promise<{ key: Uint8Array; salt: Uint8Array }> {\n try {\n const salt = generateSalt();\n const key = await argon2(password, salt);\n return { key, salt };\n } catch (error) {\n throw new Error('Failed to derive key from password', { cause: error });\n }\n}\n\n/**\n * Derives a symmetric key from a user's password and salt\n *\n * @param password - The user's password\n * @param salt - The given salt\n * @returns The derived secret key\n */\nexport async function getKeyFromPasswordAndSalt(password: string, salt: Uint8Array): Promise<Uint8Array> {\n try {\n return await argon2(password, salt);\n } catch (error) {\n throw new Error('Failed to derive key from password and salt', { cause: error });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmBA,eAAsB,OACpB,UACA,MACA,cAAA,GACA,aAAA,GACA,aAAqB,sBACrB,aAAA,IACqB;AACrB,QAAO,SAAS,UAAU,MAAM;EAC9B,GAAG;EACH,GAAG;EACH,GAAG;EACH,OAAO;EACR,CAAC;;;;;;;;;ACvBJ,SAAgB,eAA2B;AACzC,QAAO,YAAA,GAAsC;;;;;;;;AAS/C,eAAsB,mBAAmB,UAAkE;AACzG,KAAI;EACF,MAAM,OAAO,cAAc;AAE3B,SAAO;GAAE,KAAA,MADS,OAAO,UAAU,KAAK;GAC1B;GAAM;UACb,OAAO;AACd,QAAM,IAAI,MAAM,sCAAsC,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;AAW3E,eAAsB,0BAA0B,UAAkB,MAAuC;AACvG,KAAI;AACF,SAAO,MAAM,OAAO,UAAU,KAAK;UAC5B,OAAO;AACd,QAAM,IAAI,MAAM,+CAA+C,EAAE,OAAO,OAAO,CAAC"}
@@ -0,0 +1,86 @@
1
+ require("./chunk-DskHE4z1.js");
2
+ const require_constants = require("./constants.js");
3
+ let _noble_hashes_utils_js = require("@noble/hashes/utils.js");
4
+ let _noble_hashes_argon2_js = require("@noble/hashes/argon2.js");
5
+ //#region src/derive-password/core.native.ts
6
+ /**
7
+ * Calculates hash using the argon2id password-hashing function
8
+ *
9
+ * @param password - The user's password
10
+ * @param salt - The given salt
11
+ * @param parallelism - The degree of parallelism
12
+ * @param iterations - The number of iterations
13
+ * @param memorySize - The memory size in KB
14
+ * @param hashLength - The desired hash byte length
15
+ * @returns The resulting hash
16
+ */
17
+ async function argon2(password, salt, parallelism = 3, iterations = 4, memorySize = require_constants.ARGON2ID_MEMORY_SIZE, hashLength = 32) {
18
+ return (0, _noble_hashes_argon2_js.argon2id)(password, salt, {
19
+ p: parallelism,
20
+ t: iterations,
21
+ m: memorySize,
22
+ dkLen: hashLength
23
+ });
24
+ }
25
+ //#endregion
26
+ //#region src/derive-password/deriveKeysFromPassword.ts
27
+ /**
28
+ * Samples a salt
29
+ *
30
+ * @returns The salt
31
+ */
32
+ function generateSalt() {
33
+ return (0, _noble_hashes_utils_js.randomBytes)(16);
34
+ }
35
+ /**
36
+ * Derives a symmetric key from a user's password with a randomly sampled salt
37
+ *
38
+ * @param password - The user's password
39
+ * @returns The derived secret key and randomly sampled salt
40
+ */
41
+ async function getKeyFromPassword(password) {
42
+ try {
43
+ const salt = generateSalt();
44
+ return {
45
+ key: await argon2(password, salt),
46
+ salt
47
+ };
48
+ } catch (error) {
49
+ throw new Error("Failed to derive key from password", { cause: error });
50
+ }
51
+ }
52
+ /**
53
+ * Derives a symmetric key from a user's password and salt
54
+ *
55
+ * @param password - The user's password
56
+ * @param salt - The given salt
57
+ * @returns The derived secret key
58
+ */
59
+ async function getKeyFromPasswordAndSalt(password, salt) {
60
+ try {
61
+ return await argon2(password, salt);
62
+ } catch (error) {
63
+ throw new Error("Failed to derive key from password and salt", { cause: error });
64
+ }
65
+ }
66
+ //#endregion
67
+ Object.defineProperty(exports, "generateSalt", {
68
+ enumerable: true,
69
+ get: function() {
70
+ return generateSalt;
71
+ }
72
+ });
73
+ Object.defineProperty(exports, "getKeyFromPassword", {
74
+ enumerable: true,
75
+ get: function() {
76
+ return getKeyFromPassword;
77
+ }
78
+ });
79
+ Object.defineProperty(exports, "getKeyFromPasswordAndSalt", {
80
+ enumerable: true,
81
+ get: function() {
82
+ return getKeyFromPasswordAndSalt;
83
+ }
84
+ });
85
+
86
+ //# sourceMappingURL=derive-password-DIPrE8Mz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-password-DIPrE8Mz.js","names":["ARGON2ID_MEMORY_SIZE"],"sources":["../../src/derive-password/core.native.ts","../../src/derive-password/deriveKeysFromPassword.ts"],"sourcesContent":["import { argon2id } from '@noble/hashes/argon2.js';\nimport {\n ARGON2ID_ITERATIONS,\n ARGON2ID_MEMORY_SIZE,\n ARGON2ID_PARALLELISM,\n ARGON2ID_OUTPUT_BYTE_LENGTH,\n} from '../constants';\n\n/**\n * Calculates hash using the argon2id password-hashing function\n *\n * @param password - The user's password\n * @param salt - The given salt\n * @param parallelism - The degree of parallelism\n * @param iterations - The number of iterations\n * @param memorySize - The memory size in KB\n * @param hashLength - The desired hash byte length\n * @returns The resulting hash\n */\nexport async function argon2(\n password: string,\n salt: Uint8Array,\n parallelism: number = ARGON2ID_PARALLELISM,\n iterations: number = ARGON2ID_ITERATIONS,\n memorySize: number = ARGON2ID_MEMORY_SIZE,\n hashLength: number = ARGON2ID_OUTPUT_BYTE_LENGTH,\n): Promise<Uint8Array> {\n return argon2id(password, salt, {\n p: parallelism,\n t: iterations,\n m: memorySize,\n dkLen: hashLength,\n });\n}\n","import { argon2 } from './core';\nimport { ARGON2ID_SALT_BYTE_LENGTH } from '../constants';\nimport { randomBytes } from '@noble/hashes/utils.js';\n\n/**\n * Samples a salt\n *\n * @returns The salt\n */\nexport function generateSalt(): Uint8Array {\n return randomBytes(ARGON2ID_SALT_BYTE_LENGTH);\n}\n\n/**\n * Derives a symmetric key from a user's password with a randomly sampled salt\n *\n * @param password - The user's password\n * @returns The derived secret key and randomly sampled salt\n */\nexport async function getKeyFromPassword(password: string): Promise<{ key: Uint8Array; salt: Uint8Array }> {\n try {\n const salt = generateSalt();\n const key = await argon2(password, salt);\n return { key, salt };\n } catch (error) {\n throw new Error('Failed to derive key from password', { cause: error });\n }\n}\n\n/**\n * Derives a symmetric key from a user's password and salt\n *\n * @param password - The user's password\n * @param salt - The given salt\n * @returns The derived secret key\n */\nexport async function getKeyFromPasswordAndSalt(password: string, salt: Uint8Array): Promise<Uint8Array> {\n try {\n return await argon2(password, salt);\n } catch (error) {\n throw new Error('Failed to derive key from password and salt', { cause: error });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,eAAsB,OACpB,UACA,MACA,cAAA,GACA,aAAA,GACA,aAAqBA,kBAAAA,sBACrB,aAAA,IACqB;AACrB,SAAA,GAAA,wBAAA,UAAgB,UAAU,MAAM;EAC9B,GAAG;EACH,GAAG;EACH,GAAG;EACH,OAAO;EACR,CAAC;;;;;;;;;ACvBJ,SAAgB,eAA2B;AACzC,SAAA,GAAA,uBAAA,aAAA,GAA6C;;;;;;;;AAS/C,eAAsB,mBAAmB,UAAkE;AACzG,KAAI;EACF,MAAM,OAAO,cAAc;AAE3B,SAAO;GAAE,KAAA,MADS,OAAO,UAAU,KAAK;GAC1B;GAAM;UACb,OAAO;AACd,QAAM,IAAI,MAAM,sCAAsC,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;AAW3E,eAAsB,0BAA0B,UAAkB,MAAuC;AACvG,KAAI;AACF,SAAO,MAAM,OAAO,UAAU,KAAK;UAC5B,OAAO;AACd,QAAM,IAAI,MAAM,+CAA+C,EAAE,OAAO,OAAO,CAAC"}
@@ -0,0 +1,28 @@
1
+ //#region src/derive-password/deriveKeysFromPassword.d.ts
2
+ /**
3
+ * Samples a salt
4
+ *
5
+ * @returns The salt
6
+ */
7
+ declare function generateSalt(): Uint8Array;
8
+ /**
9
+ * Derives a symmetric key from a user's password with a randomly sampled salt
10
+ *
11
+ * @param password - The user's password
12
+ * @returns The derived secret key and randomly sampled salt
13
+ */
14
+ declare function getKeyFromPassword(password: string): Promise<{
15
+ key: Uint8Array;
16
+ salt: Uint8Array;
17
+ }>;
18
+ /**
19
+ * Derives a symmetric key from a user's password and salt
20
+ *
21
+ * @param password - The user's password
22
+ * @param salt - The given salt
23
+ * @returns The derived secret key
24
+ */
25
+ declare function getKeyFromPasswordAndSalt(password: string, salt: Uint8Array): Promise<Uint8Array>;
26
+ //#endregion
27
+ export { generateSalt, getKeyFromPassword, getKeyFromPasswordAndSalt };
28
+ //# sourceMappingURL=derive-password.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-password.d.mts","names":[],"sources":["../../src/derive-password/deriveKeysFromPassword.ts"],"mappings":";;AASA;;;;iBAAgB,YAAA,CAAA,GAAgB,UAAA;AAUhC;;;;;;AAAA,iBAAsB,kBAAA,CAAmB,QAAA,WAAmB,OAAA;EAAU,GAAA,EAAK,UAAA;EAAY,IAAA,EAAM,UAAA;AAAA;;;;;;;AAiB7F;iBAAsB,yBAAA,CAA0B,QAAA,UAAkB,IAAA,EAAM,UAAA,GAAa,OAAA,CAAQ,UAAA"}
@@ -0,0 +1,28 @@
1
+ //#region src/derive-password/deriveKeysFromPassword.d.ts
2
+ /**
3
+ * Samples a salt
4
+ *
5
+ * @returns The salt
6
+ */
7
+ declare function generateSalt(): Uint8Array;
8
+ /**
9
+ * Derives a symmetric key from a user's password with a randomly sampled salt
10
+ *
11
+ * @param password - The user's password
12
+ * @returns The derived secret key and randomly sampled salt
13
+ */
14
+ declare function getKeyFromPassword(password: string): Promise<{
15
+ key: Uint8Array;
16
+ salt: Uint8Array;
17
+ }>;
18
+ /**
19
+ * Derives a symmetric key from a user's password and salt
20
+ *
21
+ * @param password - The user's password
22
+ * @param salt - The given salt
23
+ * @returns The derived secret key
24
+ */
25
+ declare function getKeyFromPasswordAndSalt(password: string, salt: Uint8Array): Promise<Uint8Array>;
26
+ //#endregion
27
+ export { generateSalt, getKeyFromPassword, getKeyFromPasswordAndSalt };
28
+ //# sourceMappingURL=derive-password.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-password.d.ts","names":[],"sources":["../../src/derive-password/deriveKeysFromPassword.ts"],"mappings":";;AASA;;;;iBAAgB,YAAA,CAAA,GAAgB,UAAA;AAUhC;;;;;;AAAA,iBAAsB,kBAAA,CAAmB,QAAA,WAAmB,OAAA;EAAU,GAAA,EAAK,UAAA;EAAY,IAAA,EAAM,UAAA;AAAA;;;;;;;AAiB7F;iBAAsB,yBAAA,CAA0B,QAAA,UAAkB,IAAA,EAAM,UAAA,GAAa,OAAA,CAAQ,UAAA"}
@@ -0,0 +1,5 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_derive_password = require("./derive-password-DIPrE8Mz.js");
3
+ exports.generateSalt = require_derive_password.generateSalt;
4
+ exports.getKeyFromPassword = require_derive_password.getKeyFromPassword;
5
+ exports.getKeyFromPasswordAndSalt = require_derive_password.getKeyFromPasswordAndSalt;
@@ -0,0 +1,2 @@
1
+ import { n as getKeyFromPassword, r as getKeyFromPasswordAndSalt, t as generateSalt } from "./derive-password-Bb3R3nyh.mjs";
2
+ export { generateSalt, getKeyFromPassword, getKeyFromPasswordAndSalt };