@secrecy/lib 1.6.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 (197) hide show
  1. package/dist/BaseClient-ca94a07f.d.ts +405 -0
  2. package/dist/BaseClient.cjs +2 -0
  3. package/dist/BaseClient.cjs.map +1 -0
  4. package/dist/BaseClient.d.ts +16 -111
  5. package/dist/BaseClient.js +2 -506
  6. package/dist/BaseClient.js.map +1 -0
  7. package/dist/PopupTools.cjs +2 -0
  8. package/dist/PopupTools.cjs.map +1 -0
  9. package/dist/PopupTools.d.ts +5 -4
  10. package/dist/PopupTools.js +2 -195
  11. package/dist/PopupTools.js.map +1 -0
  12. package/dist/ZeusThunder.cjs +2 -0
  13. package/dist/ZeusThunder.cjs.map +1 -0
  14. package/dist/ZeusThunder.d.ts +6 -2
  15. package/dist/ZeusThunder.js +2 -65
  16. package/dist/ZeusThunder.js.map +1 -0
  17. package/dist/cache.cjs +2 -0
  18. package/dist/cache.cjs.map +1 -0
  19. package/dist/cache.d.ts +22 -4
  20. package/dist/cache.js +2 -4
  21. package/dist/cache.js.map +1 -0
  22. package/dist/client/SecrecyAppClient.cjs +2 -0
  23. package/dist/client/SecrecyAppClient.cjs.map +1 -0
  24. package/dist/client/SecrecyAppClient.d.ts +16 -17
  25. package/dist/client/SecrecyAppClient.js +2 -226
  26. package/dist/client/SecrecyAppClient.js.map +1 -0
  27. package/dist/client/SecrecyCloudClient.cjs +2 -0
  28. package/dist/client/SecrecyCloudClient.cjs.map +1 -0
  29. package/dist/client/SecrecyCloudClient.d.ts +16 -89
  30. package/dist/client/SecrecyCloudClient.js +2 -1405
  31. package/dist/client/SecrecyCloudClient.js.map +1 -0
  32. package/dist/client/SecrecyDbClient.cjs +2 -0
  33. package/dist/client/SecrecyDbClient.cjs.map +1 -0
  34. package/dist/client/SecrecyDbClient.d.ts +16 -48
  35. package/dist/client/SecrecyDbClient.js +2 -419
  36. package/dist/client/SecrecyDbClient.js.map +1 -0
  37. package/dist/client/SecrecyMailClient.cjs +2 -0
  38. package/dist/client/SecrecyMailClient.cjs.map +1 -0
  39. package/dist/client/SecrecyMailClient.d.ts +16 -42
  40. package/dist/client/SecrecyMailClient.js +2 -1022
  41. package/dist/client/SecrecyMailClient.js.map +1 -0
  42. package/dist/client/SecrecyPayClient.cjs +2 -0
  43. package/dist/client/SecrecyPayClient.cjs.map +1 -0
  44. package/dist/client/SecrecyPayClient.d.ts +16 -28
  45. package/dist/client/SecrecyPayClient.js +2 -68
  46. package/dist/client/SecrecyPayClient.js.map +1 -0
  47. package/dist/client/SecrecyWalletClient.cjs +2 -0
  48. package/dist/client/SecrecyWalletClient.cjs.map +1 -0
  49. package/dist/client/SecrecyWalletClient.d.ts +16 -30
  50. package/dist/client/SecrecyWalletClient.js +2 -73
  51. package/dist/client/SecrecyWalletClient.js.map +1 -0
  52. package/dist/client/convert/file.cjs +2 -0
  53. package/dist/client/convert/file.cjs.map +1 -0
  54. package/dist/client/convert/file.d.ts +11 -5
  55. package/dist/client/convert/file.js +2 -33
  56. package/dist/client/convert/file.js.map +1 -0
  57. package/dist/client/convert/mail.cjs +2 -0
  58. package/dist/client/convert/mail.cjs.map +1 -0
  59. package/dist/client/convert/mail.d.ts +13 -3
  60. package/dist/client/convert/mail.js +2 -42
  61. package/dist/client/convert/mail.js.map +1 -0
  62. package/dist/client/convert/node.cjs +2 -0
  63. package/dist/client/convert/node.cjs.map +1 -0
  64. package/dist/client/convert/node.d.ts +18 -9
  65. package/dist/client/convert/node.js +2 -87
  66. package/dist/client/convert/node.js.map +1 -0
  67. package/dist/client/helpers.cjs +2 -0
  68. package/dist/client/helpers.cjs.map +1 -0
  69. package/dist/client/helpers.d.ts +16 -28
  70. package/dist/client/helpers.js +2 -119
  71. package/dist/client/helpers.js.map +1 -0
  72. package/dist/client/index.cjs +2 -0
  73. package/dist/client/index.cjs.map +1 -0
  74. package/dist/client/index.d.ts +16 -34
  75. package/dist/client/index.js +2 -46
  76. package/dist/client/index.js.map +1 -0
  77. package/dist/client/storage.cjs +2 -0
  78. package/dist/client/storage.cjs.map +1 -0
  79. package/dist/client/storage.d.ts +6 -3
  80. package/dist/client/storage.js +2 -12
  81. package/dist/client/storage.js.map +1 -0
  82. package/dist/client/types/File.cjs +1 -0
  83. package/dist/client/types/File.cjs.map +1 -0
  84. package/dist/client/types/File.d.ts +9 -5
  85. package/dist/client/types/File.js +1 -3
  86. package/dist/client/types/File.js.map +1 -0
  87. package/dist/client/types/Inputs.cjs +1 -0
  88. package/dist/client/types/Inputs.cjs.map +1 -0
  89. package/dist/client/types/Inputs.d.ts +6 -4
  90. package/dist/client/types/Inputs.js +1 -3
  91. package/dist/client/types/Inputs.js.map +1 -0
  92. package/dist/client/types/Node.cjs +1 -0
  93. package/dist/client/types/Node.cjs.map +1 -0
  94. package/dist/client/types/Node.d.ts +9 -56
  95. package/dist/client/types/Node.js +1 -3
  96. package/dist/client/types/Node.js.map +1 -0
  97. package/dist/client/types/UserAppNotifications.cjs +1 -0
  98. package/dist/client/types/UserAppNotifications.cjs.map +1 -0
  99. package/dist/client/types/UserAppNotifications.d.ts +3 -1
  100. package/dist/client/types/UserAppNotifications.js +1 -3
  101. package/dist/client/types/UserAppNotifications.js.map +1 -0
  102. package/dist/client/types/UserAppSettings.cjs +1 -0
  103. package/dist/client/types/UserAppSettings.cjs.map +1 -0
  104. package/dist/client/types/UserAppSettings.d.ts +3 -1
  105. package/dist/client/types/UserAppSettings.js +1 -3
  106. package/dist/client/types/UserAppSettings.js.map +1 -0
  107. package/dist/client/types/index.cjs +2 -0
  108. package/dist/client/types/index.cjs.map +1 -0
  109. package/dist/client/types/index.d.ts +86 -30
  110. package/dist/client/types/index.js +2 -8
  111. package/dist/client/types/index.js.map +1 -0
  112. package/dist/client/types/selectors.cjs +2 -0
  113. package/dist/client/types/selectors.cjs.map +1 -0
  114. package/dist/client/types/selectors.d.ts +7 -5
  115. package/dist/client/types/selectors.js +2 -135
  116. package/dist/client/types/selectors.js.map +1 -0
  117. package/dist/crypto/file.cjs +2 -0
  118. package/dist/crypto/file.cjs.map +1 -0
  119. package/dist/crypto/file.d.ts +8 -6
  120. package/dist/crypto/file.js +2 -195
  121. package/dist/crypto/file.js.map +1 -0
  122. package/dist/crypto/index.cjs +2 -0
  123. package/dist/crypto/index.cjs.map +1 -0
  124. package/dist/crypto/index.d.ts +11 -9
  125. package/dist/crypto/index.js +2 -45
  126. package/dist/crypto/index.js.map +1 -0
  127. package/dist/error.cjs +1 -0
  128. package/dist/error.cjs.map +1 -0
  129. package/dist/error.d.ts +13 -11
  130. package/dist/error.js +1 -3
  131. package/dist/error.js.map +1 -0
  132. package/dist/index.cjs +2 -0
  133. package/dist/index.cjs.map +1 -0
  134. package/dist/index.d.ts +19 -14
  135. package/dist/index.js +2 -10
  136. package/dist/index.js.map +1 -0
  137. package/dist/minify/index.cjs +2 -0
  138. package/dist/minify/index.cjs.map +1 -0
  139. package/dist/minify/index.d.ts +4 -2
  140. package/dist/minify/index.js +2 -23
  141. package/dist/minify/index.js.map +1 -0
  142. package/dist/minify/lz4.cjs +3 -0
  143. package/dist/minify/lz4.cjs.map +1 -0
  144. package/dist/minify/lz4.d.ts +7 -5
  145. package/dist/minify/lz4.js +2 -538
  146. package/dist/minify/lz4.js.map +1 -0
  147. package/dist/sodium.cjs +2 -0
  148. package/dist/sodium.cjs.map +1 -0
  149. package/dist/sodium.d.ts +5 -3
  150. package/dist/sodium.js +2 -6
  151. package/dist/sodium.js.map +1 -0
  152. package/dist/utils/encoders.cjs +2 -0
  153. package/dist/utils/encoders.cjs.map +1 -0
  154. package/dist/utils/encoders.d.ts +6 -4
  155. package/dist/utils/encoders.js +2 -18
  156. package/dist/utils/encoders.js.map +1 -0
  157. package/dist/utils/store-buddy.cjs +2 -0
  158. package/dist/utils/store-buddy.cjs.map +1 -0
  159. package/dist/utils/store-buddy.d.ts +4 -3
  160. package/dist/utils/store-buddy.js +2 -58
  161. package/dist/utils/store-buddy.js.map +1 -0
  162. package/dist/utils/time.cjs +2 -0
  163. package/dist/utils/time.cjs.map +1 -0
  164. package/dist/utils/time.d.ts +4 -2
  165. package/dist/utils/time.js +2 -12
  166. package/dist/utils/time.js.map +1 -0
  167. package/dist/utils/utils.cjs +2 -0
  168. package/dist/utils/utils.cjs.map +1 -0
  169. package/dist/utils/utils.d.ts +6 -4
  170. package/dist/utils/utils.js +2 -47
  171. package/dist/utils/utils.js.map +1 -0
  172. package/dist/worker/md5.cjs +2 -0
  173. package/dist/worker/md5.cjs.map +1 -0
  174. package/dist/worker/md5.d.ts +3 -1
  175. package/dist/worker/md5.js +2 -24
  176. package/dist/worker/md5.js.map +1 -0
  177. package/dist/worker/sodium.cjs +2 -0
  178. package/dist/worker/sodium.cjs.map +1 -0
  179. package/dist/worker/sodium.d.ts +6 -3
  180. package/dist/worker/sodium.js +2 -118
  181. package/dist/worker/sodium.js.map +1 -0
  182. package/dist/worker/workerCodes.cjs +254 -0
  183. package/dist/worker/workerCodes.cjs.map +1 -0
  184. package/dist/worker/workerCodes.d.ts +4 -2
  185. package/dist/worker/workerCodes.js +4 -5
  186. package/dist/worker/workerCodes.js.map +1 -0
  187. package/dist/zeus/const.cjs +2 -0
  188. package/dist/zeus/const.cjs.map +1 -0
  189. package/dist/zeus/const.d.ts +5 -3
  190. package/dist/zeus/const.js +2 -1846
  191. package/dist/zeus/const.js.map +1 -0
  192. package/dist/zeus/index.cjs +5 -0
  193. package/dist/zeus/index.cjs.map +1 -0
  194. package/dist/zeus/index.d.ts +91 -89
  195. package/dist/zeus/index.js +5 -642
  196. package/dist/zeus/index.js.map +1 -0
  197. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- export declare const fileSelector: {
1
+ declare const fileSelector: {
2
2
  id: true;
3
3
  size: true;
4
4
  sizeBefore: true;
@@ -14,14 +14,14 @@ export declare const fileSelector: {
14
14
  };
15
15
  };
16
16
  };
17
- export declare const userSelector: {
17
+ declare const userSelector: {
18
18
  id: true;
19
19
  firstname: true;
20
20
  lastname: true;
21
21
  email: true;
22
22
  publicKey: true;
23
23
  };
24
- export declare const nodeSelector: {
24
+ declare const nodeSelector: {
25
25
  id: true;
26
26
  isFavorite: true;
27
27
  type: true;
@@ -89,7 +89,7 @@ export declare const nodeSelector: {
89
89
  parentId: true;
90
90
  currentFileId: true;
91
91
  };
92
- export declare const nodeFullSelector: {
92
+ declare const nodeFullSelector: {
93
93
  parent: {
94
94
  id: true;
95
95
  isFavorite: true;
@@ -325,7 +325,7 @@ export declare const nodeFullSelector: {
325
325
  parentId: true;
326
326
  currentFileId: true;
327
327
  };
328
- export declare const mailSelector: {
328
+ declare const mailSelector: {
329
329
  id: true;
330
330
  type: true;
331
331
  body: true;
@@ -398,3 +398,5 @@ export declare const mailSelector: {
398
398
  };
399
399
  };
400
400
  };
401
+
402
+ export { fileSelector, mailSelector, nodeFullSelector, nodeSelector, userSelector };
@@ -1,135 +1,2 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
- import { Selector } from "../../zeus/index.js";
5
- export const fileSelector = Selector("File")({
6
- id: true,
7
- size: true,
8
- sizeBefore: true,
9
- createdAt: true,
10
- md5: true,
11
- md5Encrypted: true,
12
- access: {
13
- key: true,
14
- sharedBy: {
15
- keyPair: {
16
- pub: true
17
- }
18
- }
19
- }
20
- });
21
- export const userSelector = Selector("User")({
22
- id: true,
23
- firstname: true,
24
- lastname: true,
25
- email: true,
26
- publicKey: true
27
- });
28
- export const nodeSelector = Selector("Node")({
29
- id: true,
30
- isFavorite: true,
31
- type: true,
32
- createdAt: true,
33
- deletedAt: true,
34
- createdBy: {
35
- user: userSelector
36
- },
37
- sizes: {
38
- size: true,
39
- sizeBefore: true
40
- },
41
- updatedAt: true,
42
- name: true,
43
- access: {
44
- rights: true,
45
- isRoot: true,
46
- nameKey: true,
47
- sharedBy: {
48
- keyPair: {
49
- pub: true
50
- }
51
- },
52
- userApp: {
53
- user: userSelector
54
- }
55
- },
56
- accesses: {
57
- rights: true,
58
- isRoot: true,
59
- nameKey: true,
60
- sharedBy: {
61
- keyPair: {
62
- pub: true
63
- }
64
- },
65
- userApp: {
66
- user: userSelector
67
- }
68
- },
69
- breadcrumb: {
70
- id: true,
71
- name: true,
72
- nameKey: true,
73
- pubKey: true
74
- },
75
- parentId: true,
76
- currentFileId: true
77
- });
78
- export const nodeFullSelector = Selector("Node")(_objectSpread(_objectSpread({}, nodeSelector), {}, {
79
- parent: nodeSelector,
80
- children: nodeSelector,
81
- history: fileSelector,
82
- current: fileSelector
83
- }));
84
- export const mailSelector = Selector("Mail")({
85
- id: true,
86
- type: true,
87
- body: true,
88
- subject: true,
89
- openedAt: true,
90
- createdAt: true,
91
- deletedAt: true,
92
- recipients: _objectSpread(_objectSpread({}, userSelector), {}, {
93
- publicKey: false
94
- }),
95
- recipient: _objectSpread(_objectSpread({}, userSelector), {}, {
96
- publicKey: false
97
- }),
98
- sender: userSelector,
99
- mailIntegrity: {
100
- id: true,
101
- hash: true,
102
- hashKey: true,
103
- replyTo: {
104
- id: true
105
- },
106
- temporaryRecipients: {
107
- email: true
108
- },
109
- recipients: _objectSpread(_objectSpread({}, userSelector), {}, {
110
- publicKey: false
111
- })
112
- },
113
- mailIntegrityDraft: {
114
- id: true,
115
- hash: true,
116
- hashKey: true,
117
- replyTo: {
118
- id: true
119
- },
120
- temporaryRecipients: {
121
- email: true
122
- },
123
- recipients: _objectSpread(_objectSpread({}, userSelector), {}, {
124
- publicKey: false
125
- })
126
- },
127
- files: {
128
- fileKey: true,
129
- filename: true,
130
- file: {
131
- id: true
132
- }
133
- }
134
- });
135
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTZWxlY3RvciIsImZpbGVTZWxlY3RvciIsImlkIiwic2l6ZSIsInNpemVCZWZvcmUiLCJjcmVhdGVkQXQiLCJtZDUiLCJtZDVFbmNyeXB0ZWQiLCJhY2Nlc3MiLCJrZXkiLCJzaGFyZWRCeSIsImtleVBhaXIiLCJwdWIiLCJ1c2VyU2VsZWN0b3IiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImVtYWlsIiwicHVibGljS2V5Iiwibm9kZVNlbGVjdG9yIiwiaXNGYXZvcml0ZSIsInR5cGUiLCJkZWxldGVkQXQiLCJjcmVhdGVkQnkiLCJ1c2VyIiwic2l6ZXMiLCJ1cGRhdGVkQXQiLCJuYW1lIiwicmlnaHRzIiwiaXNSb290IiwibmFtZUtleSIsInVzZXJBcHAiLCJhY2Nlc3NlcyIsImJyZWFkY3J1bWIiLCJwdWJLZXkiLCJwYXJlbnRJZCIsImN1cnJlbnRGaWxlSWQiLCJub2RlRnVsbFNlbGVjdG9yIiwicGFyZW50IiwiY2hpbGRyZW4iLCJoaXN0b3J5IiwiY3VycmVudCIsIm1haWxTZWxlY3RvciIsImJvZHkiLCJzdWJqZWN0Iiwib3BlbmVkQXQiLCJyZWNpcGllbnRzIiwicmVjaXBpZW50Iiwic2VuZGVyIiwibWFpbEludGVncml0eSIsImhhc2giLCJoYXNoS2V5IiwicmVwbHlUbyIsInRlbXBvcmFyeVJlY2lwaWVudHMiLCJtYWlsSW50ZWdyaXR5RHJhZnQiLCJmaWxlcyIsImZpbGVLZXkiLCJmaWxlbmFtZSIsImZpbGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpZW50L3R5cGVzL3NlbGVjdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gXCIuLi8uLi96ZXVzL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBjb25zdCBmaWxlU2VsZWN0b3IgPSBTZWxlY3RvcihcIkZpbGVcIikoe1xuICBpZDogdHJ1ZSxcbiAgc2l6ZTogdHJ1ZSxcbiAgc2l6ZUJlZm9yZTogdHJ1ZSxcbiAgY3JlYXRlZEF0OiB0cnVlLFxuICBtZDU6IHRydWUsXG4gIG1kNUVuY3J5cHRlZDogdHJ1ZSxcbiAgYWNjZXNzOiB7XG4gICAga2V5OiB0cnVlLFxuICAgIHNoYXJlZEJ5OiB7XG4gICAgICBrZXlQYWlyOiB7XG4gICAgICAgIHB1YjogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCB1c2VyU2VsZWN0b3IgPSBTZWxlY3RvcihcIlVzZXJcIikoe1xuICBpZDogdHJ1ZSxcbiAgZmlyc3RuYW1lOiB0cnVlLFxuICBsYXN0bmFtZTogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIHB1YmxpY0tleTogdHJ1ZVxufSk7XG5cbmV4cG9ydCBjb25zdCBub2RlU2VsZWN0b3IgPSBTZWxlY3RvcihcIk5vZGVcIikoe1xuICBpZDogdHJ1ZSxcbiAgaXNGYXZvcml0ZTogdHJ1ZSxcbiAgdHlwZTogdHJ1ZSxcbiAgY3JlYXRlZEF0OiB0cnVlLFxuICBkZWxldGVkQXQ6IHRydWUsXG4gIGNyZWF0ZWRCeToge1xuICAgIHVzZXI6IHVzZXJTZWxlY3RvclxuICB9LFxuICBzaXplczoge1xuICAgIHNpemU6IHRydWUsXG4gICAgc2l6ZUJlZm9yZTogdHJ1ZVxuICB9LFxuICB1cGRhdGVkQXQ6IHRydWUsXG4gIG5hbWU6IHRydWUsXG4gIGFjY2Vzczoge1xuICAgIHJpZ2h0czogdHJ1ZSxcbiAgICBpc1Jvb3Q6IHRydWUsXG4gICAgbmFtZUtleTogdHJ1ZSxcbiAgICBzaGFyZWRCeToge1xuICAgICAga2V5UGFpcjoge1xuICAgICAgICBwdWI6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZXJBcHA6IHtcbiAgICAgIHVzZXI6IHVzZXJTZWxlY3RvclxuICAgIH1cbiAgfSxcbiAgYWNjZXNzZXM6IHtcbiAgICByaWdodHM6IHRydWUsXG4gICAgaXNSb290OiB0cnVlLFxuICAgIG5hbWVLZXk6IHRydWUsXG4gICAgc2hhcmVkQnk6IHtcbiAgICAgIGtleVBhaXI6IHtcbiAgICAgICAgcHViOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VyQXBwOiB7XG4gICAgICB1c2VyOiB1c2VyU2VsZWN0b3JcbiAgICB9XG4gIH0sXG4gIGJyZWFkY3J1bWI6IHtcbiAgICBpZDogdHJ1ZSxcbiAgICBuYW1lOiB0cnVlLFxuICAgIG5hbWVLZXk6IHRydWUsXG4gICAgcHViS2V5OiB0cnVlXG4gIH0sXG4gIHBhcmVudElkOiB0cnVlLFxuICBjdXJyZW50RmlsZUlkOiB0cnVlXG59KTtcblxuZXhwb3J0IGNvbnN0IG5vZGVGdWxsU2VsZWN0b3IgPSBTZWxlY3RvcihcIk5vZGVcIikoe1xuICAuLi5ub2RlU2VsZWN0b3IsXG4gIHBhcmVudDogbm9kZVNlbGVjdG9yLFxuICBjaGlsZHJlbjogbm9kZVNlbGVjdG9yLFxuICBoaXN0b3J5OiBmaWxlU2VsZWN0b3IsXG4gIGN1cnJlbnQ6IGZpbGVTZWxlY3RvclxufSk7XG5cbmV4cG9ydCBjb25zdCBtYWlsU2VsZWN0b3IgPSBTZWxlY3RvcihcIk1haWxcIikoe1xuICBpZDogdHJ1ZSxcbiAgdHlwZTogdHJ1ZSxcbiAgYm9keTogdHJ1ZSxcbiAgc3ViamVjdDogdHJ1ZSxcbiAgb3BlbmVkQXQ6IHRydWUsXG4gIGNyZWF0ZWRBdDogdHJ1ZSxcbiAgZGVsZXRlZEF0OiB0cnVlLFxuICByZWNpcGllbnRzOiB7XG4gICAgLi4udXNlclNlbGVjdG9yLFxuICAgIHB1YmxpY0tleTogZmFsc2VcbiAgfSxcbiAgcmVjaXBpZW50OiB7XG4gICAgLi4udXNlclNlbGVjdG9yLFxuICAgIHB1YmxpY0tleTogZmFsc2VcbiAgfSxcbiAgc2VuZGVyOiB1c2VyU2VsZWN0b3IsXG4gIG1haWxJbnRlZ3JpdHk6IHtcbiAgICBpZDogdHJ1ZSxcbiAgICBoYXNoOiB0cnVlLFxuICAgIGhhc2hLZXk6IHRydWUsXG4gICAgcmVwbHlUbzoge1xuICAgICAgaWQ6IHRydWVcbiAgICB9LFxuICAgIHRlbXBvcmFyeVJlY2lwaWVudHM6IHtcbiAgICAgIGVtYWlsOiB0cnVlXG4gICAgfSxcbiAgICByZWNpcGllbnRzOiB7XG4gICAgICAuLi51c2VyU2VsZWN0b3IsXG4gICAgICBwdWJsaWNLZXk6IGZhbHNlXG4gICAgfVxuICB9LFxuICBtYWlsSW50ZWdyaXR5RHJhZnQ6IHtcbiAgICBpZDogdHJ1ZSxcbiAgICBoYXNoOiB0cnVlLFxuICAgIGhhc2hLZXk6IHRydWUsXG4gICAgcmVwbHlUbzoge1xuICAgICAgaWQ6IHRydWVcbiAgICB9LFxuICAgIHRlbXBvcmFyeVJlY2lwaWVudHM6IHtcbiAgICAgIGVtYWlsOiB0cnVlXG4gICAgfSxcbiAgICByZWNpcGllbnRzOiB7XG4gICAgICAuLi51c2VyU2VsZWN0b3IsXG4gICAgICBwdWJsaWNLZXk6IGZhbHNlXG4gICAgfVxuICB9LFxuICBmaWxlczoge1xuICAgIGZpbGVLZXk6IHRydWUsXG4gICAgZmlsZW5hbWU6IHRydWUsXG4gICAgZmlsZToge1xuICAgICAgaWQ6IHRydWVcbiAgICB9XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxRQUFRLFFBQVEscUJBQXFCO0FBRTlDLE9BQU8sTUFBTUMsWUFBWSxHQUFHRCxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDM0NFLEVBQUUsRUFBRSxJQUFJO0VBQ1JDLElBQUksRUFBRSxJQUFJO0VBQ1ZDLFVBQVUsRUFBRSxJQUFJO0VBQ2hCQyxTQUFTLEVBQUUsSUFBSTtFQUNmQyxHQUFHLEVBQUUsSUFBSTtFQUNUQyxZQUFZLEVBQUUsSUFBSTtFQUNsQkMsTUFBTSxFQUFFO0lBQ05DLEdBQUcsRUFBRSxJQUFJO0lBQ1RDLFFBQVEsRUFBRTtNQUNSQyxPQUFPLEVBQUU7UUFDUEMsR0FBRyxFQUFFO01BQ1A7SUFDRjtFQUNGO0FBQ0YsQ0FBQyxDQUFDO0FBRUYsT0FBTyxNQUFNQyxZQUFZLEdBQUdiLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUMzQ0UsRUFBRSxFQUFFLElBQUk7RUFDUlksU0FBUyxFQUFFLElBQUk7RUFDZkMsUUFBUSxFQUFFLElBQUk7RUFDZEMsS0FBSyxFQUFFLElBQUk7RUFD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
1
+ import{Selector as r}from"../../zeus/index.js";const u=r("File")({id:!0,size:!0,sizeBefore:!0,createdAt:!0,md5:!0,md5Encrypted:!0,access:{key:!0,sharedBy:{keyPair:{pub:!0}}}}),e=r("User")({id:!0,firstname:!0,lastname:!0,email:!0,publicKey:!0}),t=r("Node")({id:!0,isFavorite:!0,type:!0,createdAt:!0,deletedAt:!0,createdBy:{user:e},sizes:{size:!0,sizeBefore:!0},updatedAt:!0,name:!0,access:{rights:!0,isRoot:!0,nameKey:!0,sharedBy:{keyPair:{pub:!0}},userApp:{user:e}},accesses:{rights:!0,isRoot:!0,nameKey:!0,sharedBy:{keyPair:{pub:!0}},userApp:{user:e}},breadcrumb:{id:!0,name:!0,nameKey:!0,pubKey:!0},parentId:!0,currentFileId:!0}),s=r("Node")({...t,parent:t,children:t,history:u,current:u}),a=r("Mail")({id:!0,type:!0,body:!0,subject:!0,openedAt:!0,createdAt:!0,deletedAt:!0,recipients:{...e,publicKey:!1},recipient:{...e,publicKey:!1},sender:e,mailIntegrity:{id:!0,hash:!0,hashKey:!0,replyTo:{id:!0},temporaryRecipients:{email:!0},recipients:{...e,publicKey:!1}},mailIntegrityDraft:{id:!0,hash:!0,hashKey:!0,replyTo:{id:!0},temporaryRecipients:{email:!0},recipients:{...e,publicKey:!1}},files:{fileKey:!0,filename:!0,file:{id:!0}}});export{u as fileSelector,a as mailSelector,s as nodeFullSelector,t as nodeSelector,e as userSelector};
2
+ //# sourceMappingURL=selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/client/types/selectors.ts"],"sourcesContent":["import { Selector } from \"../../zeus/index.js\";\n\nexport const fileSelector = Selector(\"File\")({\n id: true,\n size: true,\n sizeBefore: true,\n createdAt: true,\n md5: true,\n md5Encrypted: true,\n access: {\n key: true,\n sharedBy: {\n keyPair: {\n pub: true\n }\n }\n }\n});\n\nexport const userSelector = Selector(\"User\")({\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n});\n\nexport const nodeSelector = Selector(\"Node\")({\n id: true,\n isFavorite: true,\n type: true,\n createdAt: true,\n deletedAt: true,\n createdBy: {\n user: userSelector\n },\n sizes: {\n size: true,\n sizeBefore: true\n },\n updatedAt: true,\n name: true,\n access: {\n rights: true,\n isRoot: true,\n nameKey: true,\n sharedBy: {\n keyPair: {\n pub: true\n }\n },\n userApp: {\n user: userSelector\n }\n },\n accesses: {\n rights: true,\n isRoot: true,\n nameKey: true,\n sharedBy: {\n keyPair: {\n pub: true\n }\n },\n userApp: {\n user: userSelector\n }\n },\n breadcrumb: {\n id: true,\n name: true,\n nameKey: true,\n pubKey: true\n },\n parentId: true,\n currentFileId: true\n});\n\nexport const nodeFullSelector = Selector(\"Node\")({\n ...nodeSelector,\n parent: nodeSelector,\n children: nodeSelector,\n history: fileSelector,\n current: fileSelector\n});\n\nexport const mailSelector = Selector(\"Mail\")({\n id: true,\n type: true,\n body: true,\n subject: true,\n openedAt: true,\n createdAt: true,\n deletedAt: true,\n recipients: {\n ...userSelector,\n publicKey: false\n },\n recipient: {\n ...userSelector,\n publicKey: false\n },\n sender: userSelector,\n mailIntegrity: {\n id: true,\n hash: true,\n hashKey: true,\n replyTo: {\n id: true\n },\n temporaryRecipients: {\n email: true\n },\n recipients: {\n ...userSelector,\n publicKey: false\n }\n },\n mailIntegrityDraft: {\n id: true,\n hash: true,\n hashKey: true,\n replyTo: {\n id: true\n },\n temporaryRecipients: {\n email: true\n },\n recipients: {\n ...userSelector,\n publicKey: false\n }\n },\n files: {\n fileKey: true,\n filename: true,\n file: {\n id: true\n }\n }\n});\n"],"mappings":"AAAA,OAAS,YAAAA,MAAgB,sBAElB,MAAMC,EAAeD,EAAS,MAAM,EAAE,CAC3C,GAAI,GACJ,KAAM,GACN,WAAY,GACZ,UAAW,GACX,IAAK,GACL,aAAc,GACd,OAAQ,CACN,IAAK,GACL,SAAU,CACR,QAAS,CACP,IAAK,EACP,CACF,CACF,CACF,CAAC,EAEYE,EAAeF,EAAS,MAAM,EAAE,CAC3C,GAAI,GACJ,UAAW,GACX,SAAU,GACV,MAAO,GACP,UAAW,EACb,CAAC,EAEYG,EAAeH,EAAS,MAAM,EAAE,CAC3C,GAAI,GACJ,WAAY,GACZ,KAAM,GACN,UAAW,GACX,UAAW,GACX,UAAW,CACT,KAAME,CACR,EACA,MAAO,CACL,KAAM,GACN,WAAY,EACd,EACA,UAAW,GACX,KAAM,GACN,OAAQ,CACN,OAAQ,GACR,OAAQ,GACR,QAAS,GACT,SAAU,CACR,QAAS,CACP,IAAK,EACP,CACF,EACA,QAAS,CACP,KAAMA,CACR,CACF,EACA,SAAU,CACR,OAAQ,GACR,OAAQ,GACR,QAAS,GACT,SAAU,CACR,QAAS,CACP,IAAK,EACP,CACF,EACA,QAAS,CACP,KAAMA,CACR,CACF,EACA,WAAY,CACV,GAAI,GACJ,KAAM,GACN,QAAS,GACT,OAAQ,EACV,EACA,SAAU,GACV,cAAe,EACjB,CAAC,EAEYE,EAAmBJ,EAAS,MAAM,EAAE,CAC/C,GAAGG,EACH,OAAQA,EACR,SAAUA,EACV,QAASF,EACT,QAASA,CACX,CAAC,EAEYI,EAAeL,EAAS,MAAM,EAAE,CAC3C,GAAI,GACJ,KAAM,GACN,KAAM,GACN,QAAS,GACT,SAAU,GACV,UAAW,GACX,UAAW,GACX,WAAY,CACV,GAAGE,EACH,UAAW,EACb,EACA,UAAW,CACT,GAAGA,EACH,UAAW,EACb,EACA,OAAQA,EACR,cAAe,CACb,GAAI,GACJ,KAAM,GACN,QAAS,GACT,QAAS,CACP,GAAI,EACN,EACA,oBAAqB,CACnB,MAAO,EACT,EACA,WAAY,CACV,GAAGA,EACH,UAAW,EACb,CACF,EACA,mBAAoB,CAClB,GAAI,GACJ,KAAM,GACN,QAAS,GACT,QAAS,CACP,GAAI,EACN,EACA,oBAAqB,CACnB,MAAO,EACT,EACA,WAAY,CACV,GAAGA,EACH,UAAW,EACb,CACF,EACA,MAAO,CACL,QAAS,GACT,SAAU,GACV,KAAM,CACJ,GAAI,EACN,CACF,CACF,CAAC","names":["Selector","fileSelector","userSelector","nodeSelector","nodeFullSelector","mailSelector"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _sodiumjs = require('../sodium.js');var _sparkmd5 = require('spark-md5'); var _sparkmd52 = _interopRequireDefault(_sparkmd5);var _utilsjs = require('../utils/utils.js');function _(o,t){if(!o)throw new Error(t)}function D(){return _sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_keygen()}function U(o){let t=!1;const{state:r,header:y}=_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_init_push(o),p=(s,d)=>(_(t===!1,"state already destroyed"),_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_push(r,d,null,s));function i(){_(t===!1,"state already destroyed"),t=!0}return{encrypt:p,destroy:i,header:y}}function T(o,t){_(o.byteLength>=_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES,`header must be at least HEADERBYTES (${_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES}) long`),_(t.byteLength>=_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES,`key must be at least KEYBYTES (${_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES}) long`);let r=!1;const y=_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_init_pull(o,t),p=s=>(_(r===!1,"state already destroyed"),_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_pull(y,s));function i(){_(r===!1,"state already destroyed"),r=!0}return{decrypt:p,destroy:i}}const m=8192;async function k(o,t,r,y){await _sodiumjs.setup.call(void 0, );const{encrypt:p,destroy:i,header:s}=U(o),d=m+_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_ABYTES,c=Math.ceil(t.byteLength/m)*d+s.byteLength;_optionalChain([r, 'optionalCall', _2 => _2({percent:0,total:c,current:0})]);const h=new Uint8Array(c),n=new _sparkmd52.default.ArrayBuffer,u=new _sparkmd52.default.ArrayBuffer;h.set(s),n.append(s);let a=s.byteLength;_optionalChain([r, 'optionalCall', _3 => _3({percent:a/c,total:c,current:a})]);let E=a/c;for(const l of _utilsjs.chunks.call(void 0, t,m)){if(_optionalChain([y, 'optionalAccess', _4 => _4.signal, 'access', _5 => _5.aborted]))throw new Error("Encrypt aborted");u.append(l);const S=l.length<m?_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL:_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE,f=p(S,l);n.append(f),h.set(f,a),a+=f.byteLength;const A=a/c;A>E+.01&&(_optionalChain([r, 'optionalCall', _6 => _6({percent:A,total:c,current:a})]),E=A)}return i(),_optionalChain([r, 'optionalCall', _7 => _7({percent:1,total:a,current:a})]),{data:h.slice(0,a),md5Encrypted:n.end(),md5:u.end()}}async function F(o,t,r,y){await _sodiumjs.setup.call(void 0, );const p=t.slice(0,_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);t=t.slice(_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);const{decrypt:i,destroy:s}=T(p,o),d=m+_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_ABYTES,c=Math.ceil(t.byteLength/d)*m;_optionalChain([r, 'optionalCall', _8 => _8({percent:0,total:c,current:0})]);const h=new Uint8Array(c);let n=0,u=n/c;for(const a of _utilsjs.chunks.call(void 0, t,d)){if(_optionalChain([y, 'optionalAccess', _9 => _9.signal, 'access', _10 => _10.aborted]))throw new Error("Decrypt aborted");const E=i(a);h.set(E.message,n),n+=E.message.byteLength;const l=n/c;l>u+.01&&(_optionalChain([r, 'optionalCall', _11 => _11({percent:l,total:c,current:n})]),u=l)}return s(),_optionalChain([r, 'optionalCall', _12 => _12({percent:1,total:n,current:n})]),h.slice(0,n)}exports.CHUNK_SIZE = m; exports.decryptSecretstream = F; exports.encryptSecretstream = k; exports.secretstreamKeygen = D;
2
+ //# sourceMappingURL=file.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/crypto/file.ts"],"names":["setup","sodium","SparkMD5","chunks","assert","c","message","secretstreamKeygen","encrypt","key","destroyed","state","header","tag","plaintext","destroy","decrypt","ciphertext","CHUNK_SIZE","encryptSecretstream","data","progress","abort","crypt","cryptedChunk","max","final","sparkEncrypted","spark","total","lastPercent","chunk","crypted","percent","decryptSecretstream","decryptt","chunkSize","tmp"],"mappings":"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","sourcesContent":["import type { MessageTag } from \"libsodium-wrappers\";\nimport { setup, sodium } from \"../sodium.js\";\nimport SparkMD5 from \"spark-md5\";\nimport { chunks } from \"../utils/utils.js\";\n\nexport type EncryptedFile = {\n data: Uint8Array;\n md5: string;\n md5Encrypted: string;\n};\n\nfunction assert(c: boolean, message: string): void {\n if (!c) {\n throw new Error(message);\n }\n}\n\ntype EncryptFn = (tag: number, plaintext: Uint8Array) => Uint8Array;\n\ntype DecryptFn = (ciphertext: Uint8Array) => MessageTag;\n\nexport function secretstreamKeygen(): Uint8Array {\n return sodium.crypto_secretstream_xchacha20poly1305_keygen();\n}\n\nfunction encrypt(key: Uint8Array): {\n destroy: () => void;\n encrypt: EncryptFn;\n header: Uint8Array;\n} {\n let destroyed = false;\n const { state, header } =\n sodium.crypto_secretstream_xchacha20poly1305_init_push(key);\n\n const encrypt: EncryptFn = (tag, plaintext) => {\n assert(destroyed === false, \"state already destroyed\");\n\n return sodium.crypto_secretstream_xchacha20poly1305_push(\n state,\n plaintext,\n null,\n tag\n );\n };\n\n function destroy(): void {\n assert(destroyed === false, \"state already destroyed\");\n destroyed = true;\n }\n\n return {\n encrypt,\n destroy,\n header\n };\n}\n\nfunction decrypt(\n header: Uint8Array,\n key: Uint8Array\n): {\n destroy: () => void;\n decrypt: DecryptFn;\n} {\n assert(\n header.byteLength >=\n sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES,\n `header must be at least HEADERBYTES (${sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES}) long`\n );\n assert(\n key.byteLength >= sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES,\n `key must be at least KEYBYTES (${sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES}) long`\n );\n\n let destroyed = false;\n const state = sodium.crypto_secretstream_xchacha20poly1305_init_pull(\n header,\n key\n );\n\n const decrypt: DecryptFn = ciphertext => {\n assert(destroyed === false, \"state already destroyed\");\n\n return sodium.crypto_secretstream_xchacha20poly1305_pull(state, ciphertext);\n };\n\n function destroy(): void {\n assert(destroyed === false, \"state already destroyed\");\n destroyed = true;\n }\n\n return {\n decrypt,\n destroy\n };\n}\n\nexport const CHUNK_SIZE = 8192;\n\nexport type Progress = {\n percent: number;\n total: number;\n current: number;\n};\n\nexport async function encryptSecretstream(\n key: Uint8Array,\n data: Uint8Array,\n progress?: (progress: Progress) => Promise<void>,\n abort?: AbortController\n): Promise<EncryptedFile> {\n await setup();\n const { encrypt: crypt, destroy, header } = encrypt(key);\n const cryptedChunk =\n CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;\n const max =\n Math.ceil(data.byteLength / CHUNK_SIZE) * cryptedChunk + header.byteLength;\n\n progress?.({\n percent: 0,\n total: max,\n current: 0\n });\n const final = new Uint8Array(max);\n const sparkEncrypted = new SparkMD5.ArrayBuffer();\n const spark = new SparkMD5.ArrayBuffer();\n\n final.set(header);\n sparkEncrypted.append(header);\n let total = header.byteLength;\n progress?.({\n percent: total / max,\n total: max,\n current: total\n });\n let lastPercent = total / max;\n\n for (const chunk of chunks(data, CHUNK_SIZE)) {\n if (abort?.signal.aborted) {\n throw new Error(`Encrypt aborted`);\n }\n spark.append(chunk);\n const tag =\n chunk.length < CHUNK_SIZE\n ? sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL\n : sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE;\n const crypted = crypt(tag, chunk);\n sparkEncrypted.append(crypted);\n final.set(crypted, total);\n total += crypted.byteLength;\n const percent = total / max;\n if (percent > lastPercent + 0.01) {\n progress?.({\n percent,\n total: max,\n current: total\n });\n lastPercent = percent;\n }\n }\n\n destroy();\n progress?.({\n percent: 1,\n total,\n current: total\n });\n return {\n data: final.slice(0, total),\n md5Encrypted: sparkEncrypted.end(),\n md5: spark.end()\n };\n}\n\nexport async function decryptSecretstream(\n key: Uint8Array,\n data: Uint8Array,\n progress?: (progress: Progress) => Promise<void>,\n abort?: AbortController\n): Promise<Uint8Array> {\n await setup();\n const header = data.slice(\n 0,\n sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES\n );\n data = data.slice(sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);\n\n const { decrypt: decryptt, destroy } = decrypt(header, key);\n const chunkSize =\n CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;\n const max = Math.ceil(data.byteLength / chunkSize) * CHUNK_SIZE;\n\n progress?.({\n percent: 0,\n total: max,\n current: 0\n });\n const final = new Uint8Array(max);\n let total = 0;\n\n let lastPercent = total / max;\n\n for (const chunk of chunks(data, chunkSize)) {\n if (abort?.signal.aborted) {\n throw new Error(`Decrypt aborted`);\n }\n const tmp = decryptt(chunk);\n final.set(tmp.message, total);\n total += tmp.message.byteLength;\n const percent = total / max;\n if (percent > lastPercent + 0.01) {\n progress?.({\n percent,\n total: max,\n current: total\n });\n lastPercent = percent;\n }\n }\n\n destroy();\n progress?.({\n percent: 1,\n total,\n current: total\n });\n return final.slice(0, total);\n}\n\n// async function mainSecretstream(random: Uint8Array): Promise<void> {\n// const key = secretstreamKeygen();\n// console.time(\"secretstream_encrypt\");\n// const crypted = encryptSecretstream(key, random);\n// console.timeEnd(\"secretstream_encrypt\");\n// console.time(\"secretstream_decrypt\");\n// const decrypted = decryptSecretstream(key, crypted);\n// console.timeEnd(\"secretstream_decrypt\");\n// const first = to_hex(random).slice(0, 32);\n// const final = to_hex(decrypted).slice(0, 32);\n// console.log({\n// first,\n// final,\n// equals: first === final\n// });\n// }\n// async function mainSecretbox(random: Uint8Array): Promise<void> {\n// const key = generateSecretBox();\n// console.time(\"secretbox_encrypt\");\n// const crypted = encryptFile(random, key);\n// console.timeEnd(\"secretbox_encrypt\");\n// console.time(\"secretbox_decrypt\");\n// const decrypted = decryptFile(crypted, key);\n// console.timeEnd(\"secretbox_decrypt\");\n// const first = to_hex(random).slice(0, 32);\n// const final = to_hex(decrypted).slice(0, 32);\n// console.log({\n// first,\n// final,\n// equals: first === final\n// });\n// }\n\n// async function main(): Promise<void> {\n// await ready;\n// console.time(\"randombytes_buf\");\n// const random = randombytes_buf(1_000_000 * 1024);\n// console.timeEnd(\"randombytes_buf\");\n// await Promise.all([mainSecretstream(random), mainSecretbox(random)]);\n// }\n\n// main();\n"]}
@@ -1,14 +1,16 @@
1
- export type EncryptedFile = {
1
+ type EncryptedFile = {
2
2
  data: Uint8Array;
3
3
  md5: string;
4
4
  md5Encrypted: string;
5
5
  };
6
- export declare function secretstreamKeygen(): Uint8Array;
7
- export declare const CHUNK_SIZE = 8192;
8
- export type Progress = {
6
+ declare function secretstreamKeygen(): Uint8Array;
7
+ declare const CHUNK_SIZE = 8192;
8
+ type Progress = {
9
9
  percent: number;
10
10
  total: number;
11
11
  current: number;
12
12
  };
13
- export declare function encryptSecretstream(key: Uint8Array, data: Uint8Array, progress?: (progress: Progress) => Promise<void>, abort?: AbortController): Promise<EncryptedFile>;
14
- export declare function decryptSecretstream(key: Uint8Array, data: Uint8Array, progress?: (progress: Progress) => Promise<void>, abort?: AbortController): Promise<Uint8Array>;
13
+ declare function encryptSecretstream(key: Uint8Array, data: Uint8Array, progress?: (progress: Progress) => Promise<void>, abort?: AbortController): Promise<EncryptedFile>;
14
+ declare function decryptSecretstream(key: Uint8Array, data: Uint8Array, progress?: (progress: Progress) => Promise<void>, abort?: AbortController): Promise<Uint8Array>;
15
+
16
+ export { CHUNK_SIZE, EncryptedFile, Progress, decryptSecretstream, encryptSecretstream, secretstreamKeygen };
@@ -1,195 +1,2 @@
1
- import { setup, sodium } from "../sodium.js";
2
- import SparkMD5 from "spark-md5";
3
- import { chunks } from "../utils/utils.js";
4
- function assert(c, message) {
5
- if (!c) {
6
- throw new Error(message);
7
- }
8
- }
9
- export function secretstreamKeygen() {
10
- return sodium.crypto_secretstream_xchacha20poly1305_keygen();
11
- }
12
- function encrypt(key) {
13
- let destroyed = false;
14
- const {
15
- state,
16
- header
17
- } = sodium.crypto_secretstream_xchacha20poly1305_init_push(key);
18
- const encrypt = (tag, plaintext) => {
19
- assert(destroyed === false, "state already destroyed");
20
- return sodium.crypto_secretstream_xchacha20poly1305_push(state, plaintext, null, tag);
21
- };
22
- function destroy() {
23
- assert(destroyed === false, "state already destroyed");
24
- destroyed = true;
25
- }
26
- return {
27
- encrypt,
28
- destroy,
29
- header
30
- };
31
- }
32
- function decrypt(header, key) {
33
- assert(header.byteLength >= sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES, `header must be at least HEADERBYTES (${sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES}) long`);
34
- assert(key.byteLength >= sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES, `key must be at least KEYBYTES (${sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES}) long`);
35
- let destroyed = false;
36
- const state = sodium.crypto_secretstream_xchacha20poly1305_init_pull(header, key);
37
- const decrypt = ciphertext => {
38
- assert(destroyed === false, "state already destroyed");
39
- return sodium.crypto_secretstream_xchacha20poly1305_pull(state, ciphertext);
40
- };
41
- function destroy() {
42
- assert(destroyed === false, "state already destroyed");
43
- destroyed = true;
44
- }
45
- return {
46
- decrypt,
47
- destroy
48
- };
49
- }
50
- export const CHUNK_SIZE = 8192;
51
- export async function encryptSecretstream(key, data, progress, abort) {
52
- await setup();
53
- const {
54
- encrypt: crypt,
55
- destroy,
56
- header
57
- } = encrypt(key);
58
- const cryptedChunk = CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;
59
- const max = Math.ceil(data.byteLength / CHUNK_SIZE) * cryptedChunk + header.byteLength;
60
- progress?.({
61
- percent: 0,
62
- total: max,
63
- current: 0
64
- });
65
- const final = new Uint8Array(max);
66
- const sparkEncrypted = new SparkMD5.ArrayBuffer();
67
- const spark = new SparkMD5.ArrayBuffer();
68
- final.set(header);
69
- sparkEncrypted.append(header);
70
- let total = header.byteLength;
71
- progress?.({
72
- percent: total / max,
73
- total: max,
74
- current: total
75
- });
76
- let lastPercent = total / max;
77
- for (const chunk of chunks(data, CHUNK_SIZE)) {
78
- if (abort?.signal.aborted) {
79
- throw new Error(`Encrypt aborted`);
80
- }
81
- spark.append(chunk);
82
- const tag = chunk.length < CHUNK_SIZE ? sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL : sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE;
83
- const crypted = crypt(tag, chunk);
84
- sparkEncrypted.append(crypted);
85
- final.set(crypted, total);
86
- total += crypted.byteLength;
87
- const percent = total / max;
88
- if (percent > lastPercent + 0.01) {
89
- progress?.({
90
- percent,
91
- total: max,
92
- current: total
93
- });
94
- lastPercent = percent;
95
- }
96
- }
97
- destroy();
98
- progress?.({
99
- percent: 1,
100
- total,
101
- current: total
102
- });
103
- return {
104
- data: final.slice(0, total),
105
- md5Encrypted: sparkEncrypted.end(),
106
- md5: spark.end()
107
- };
108
- }
109
- export async function decryptSecretstream(key, data, progress, abort) {
110
- await setup();
111
- const header = data.slice(0, sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);
112
- data = data.slice(sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);
113
- const {
114
- decrypt: decryptt,
115
- destroy
116
- } = decrypt(header, key);
117
- const chunkSize = CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;
118
- const max = Math.ceil(data.byteLength / chunkSize) * CHUNK_SIZE;
119
- progress?.({
120
- percent: 0,
121
- total: max,
122
- current: 0
123
- });
124
- const final = new Uint8Array(max);
125
- let total = 0;
126
- let lastPercent = total / max;
127
- for (const chunk of chunks(data, chunkSize)) {
128
- if (abort?.signal.aborted) {
129
- throw new Error(`Decrypt aborted`);
130
- }
131
- const tmp = decryptt(chunk);
132
- final.set(tmp.message, total);
133
- total += tmp.message.byteLength;
134
- const percent = total / max;
135
- if (percent > lastPercent + 0.01) {
136
- progress?.({
137
- percent,
138
- total: max,
139
- current: total
140
- });
141
- lastPercent = percent;
142
- }
143
- }
144
- destroy();
145
- progress?.({
146
- percent: 1,
147
- total,
148
- current: total
149
- });
150
- return final.slice(0, total);
151
- }
152
-
153
- // async function mainSecretstream(random: Uint8Array): Promise<void> {
154
- // const key = secretstreamKeygen();
155
- // console.time("secretstream_encrypt");
156
- // const crypted = encryptSecretstream(key, random);
157
- // console.timeEnd("secretstream_encrypt");
158
- // console.time("secretstream_decrypt");
159
- // const decrypted = decryptSecretstream(key, crypted);
160
- // console.timeEnd("secretstream_decrypt");
161
- // const first = to_hex(random).slice(0, 32);
162
- // const final = to_hex(decrypted).slice(0, 32);
163
- // console.log({
164
- // first,
165
- // final,
166
- // equals: first === final
167
- // });
168
- // }
169
- // async function mainSecretbox(random: Uint8Array): Promise<void> {
170
- // const key = generateSecretBox();
171
- // console.time("secretbox_encrypt");
172
- // const crypted = encryptFile(random, key);
173
- // console.timeEnd("secretbox_encrypt");
174
- // console.time("secretbox_decrypt");
175
- // const decrypted = decryptFile(crypted, key);
176
- // console.timeEnd("secretbox_decrypt");
177
- // const first = to_hex(random).slice(0, 32);
178
- // const final = to_hex(decrypted).slice(0, 32);
179
- // console.log({
180
- // first,
181
- // final,
182
- // equals: first === final
183
- // });
184
- // }
185
-
186
- // async function main(): Promise<void> {
187
- // await ready;
188
- // console.time("randombytes_buf");
189
- // const random = randombytes_buf(1_000_000 * 1024);
190
- // console.timeEnd("randombytes_buf");
191
- // await Promise.all([mainSecretstream(random), mainSecretbox(random)]);
192
- // }
193
-
194
- // main();
195
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZXR1cCIsInNvZGl1bSIsIlNwYXJrTUQ1IiwiY2h1bmtzIiwiYXNzZXJ0IiwiYyIsIm1lc3NhZ2UiLCJFcnJvciIsInNlY3JldHN0cmVhbUtleWdlbiIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfa2V5Z2VuIiwiZW5jcnlwdCIsImtleSIsImRlc3Ryb3llZCIsInN0YXRlIiwiaGVhZGVyIiwiY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9pbml0X3B1c2giLCJ0YWciLCJwbGFpbnRleHQiLCJjcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X3B1c2giLCJkZXN0cm95IiwiZGVjcnlwdCIsImJ5dGVMZW5ndGgiLCJjcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0hFQURFUkJZVEVTIiwiY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9LRVlCWVRFUyIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfaW5pdF9wdWxsIiwiY2lwaGVydGV4dCIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfcHVsbCIsIkNIVU5LX1NJWkUiLCJlbmNyeXB0U2VjcmV0c3RyZWFtIiwiZGF0YSIsInByb2dyZXNzIiwiYWJvcnQiLCJjcnlwdCIsImNyeXB0ZWRDaHVuayIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfQUJZVEVTIiwibWF4IiwiTWF0aCIsImNlaWwiLCJwZXJjZW50IiwidG90YWwiLCJjdXJyZW50IiwiZmluYWwiLCJVaW50OEFycmF5Iiwic3BhcmtFbmNyeXB0ZWQiLCJBcnJheUJ1ZmZlciIsInNwYXJrIiwic2V0IiwiYXBwZW5kIiwibGFzdFBlcmNlbnQiLCJjaHVuayIsInNpZ25hbCIsImFib3J0ZWQiLCJsZW5ndGgiLCJjcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X1RBR19GSU5BTCIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfVEFHX01FU1NBR0UiLCJjcnlwdGVkIiwic2xpY2UiLCJtZDVFbmNyeXB0ZWQiLCJlbmQiLCJtZDUiLCJkZWNyeXB0U2VjcmV0c3RyZWFtIiwiZGVjcnlwdHQiLCJjaHVua1NpemUiLCJ0bXAiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY3J5cHRvL2ZpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNZXNzYWdlVGFnIH0gZnJvbSBcImxpYnNvZGl1bS13cmFwcGVyc1wiO1xuaW1wb3J0IHsgc2V0dXAsIHNvZGl1bSB9IGZyb20gXCIuLi9zb2RpdW0uanNcIjtcbmltcG9ydCBTcGFya01ENSBmcm9tIFwic3BhcmstbWQ1XCI7XG5pbXBvcnQgeyBjaHVua3MgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHMuanNcIjtcblxuZXhwb3J0IHR5cGUgRW5jcnlwdGVkRmlsZSA9IHtcbiAgZGF0YTogVWludDhBcnJheTtcbiAgbWQ1OiBzdHJpbmc7XG4gIG1kNUVuY3J5cHRlZDogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0KGM6IGJvb2xlYW4sIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoIWMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cbn1cblxudHlwZSBFbmNyeXB0Rm4gPSAodGFnOiBudW1iZXIsIHBsYWludGV4dDogVWludDhBcnJheSkgPT4gVWludDhBcnJheTtcblxudHlwZSBEZWNyeXB0Rm4gPSAoY2lwaGVydGV4dDogVWludDhBcnJheSkgPT4gTWVzc2FnZVRhZztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3JldHN0cmVhbUtleWdlbigpOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X2tleWdlbigpO1xufVxuXG5mdW5jdGlvbiBlbmNyeXB0KGtleTogVWludDhBcnJheSk6IHtcbiAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgZW5jcnlwdDogRW5jcnlwdEZuO1xuICBoZWFkZXI6IFVpbnQ4QXJyYXk7XG59IHtcbiAgbGV0IGRlc3Ryb3llZCA9IGZhbHNlO1xuICBjb25zdCB7IHN0YXRlLCBoZWFkZXIgfSA9XG4gICAgc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfaW5pdF9wdXNoKGtleSk7XG5cbiAgY29uc3QgZW5jcnlwdDogRW5jcnlwdEZuID0gKHRhZywgcGxhaW50ZXh0KSA9PiB7XG4gICAgYXNzZXJ0KGRlc3Ryb3llZCA9PT0gZmFsc2UsIFwic3RhdGUgYWxyZWFkeSBkZXN0cm95ZWRcIik7XG5cbiAgICByZXR1cm4gc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfcHVzaChcbiAgICAgIHN0YXRlLFxuICAgICAgcGxhaW50ZXh0LFxuICAgICAgbnVsbCxcbiAgICAgIHRhZ1xuICAgICk7XG4gIH07XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpOiB2b2lkIHtcbiAgICBhc3NlcnQoZGVzdHJveWVkID09PSBmYWxzZSwgXCJzdGF0ZSBhbHJlYWR5IGRlc3Ryb3llZFwiKTtcbiAgICBkZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbmNyeXB0LFxuICAgIGRlc3Ryb3ksXG4gICAgaGVhZGVyXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlY3J5cHQoXG4gIGhlYWRlcjogVWludDhBcnJheSxcbiAga2V5OiBVaW50OEFycmF5XG4pOiB7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIGRlY3J5cHQ6IERlY3J5cHRGbjtcbn0ge1xuICBhc3NlcnQoXG4gICAgaGVhZGVyLmJ5dGVMZW5ndGggPj1cbiAgICAgIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0hFQURFUkJZVEVTLFxuICAgIGBoZWFkZXIgbXVzdCBiZSBhdCBsZWFzdCBIRUFERVJCWVRFUyAoJHtzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9IRUFERVJCWVRFU30pIGxvbmdgXG4gICk7XG4gIGFzc2VydChcbiAgICBrZXkuYnl0ZUxlbmd0aCA+PSBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9LRVlCWVRFUyxcbiAgICBga2V5IG11c3QgYmUgYXQgbGVhc3QgS0VZQllURVMgKCR7c29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfS0VZQllURVN9KSBsb25nYFxuICApO1xuXG4gIGxldCBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgY29uc3Qgc3RhdGUgPSBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9pbml0X3B1bGwoXG4gICAgaGVhZGVyLFxuICAgIGtleVxuICApO1xuXG4gIGNvbnN0IGRlY3J5cHQ6IERlY3J5cHRGbiA9IGNpcGhlcnRleHQgPT4ge1xuICAgIGFzc2VydChkZXN0cm95ZWQgPT09IGZhbHNlLCBcInN0YXRlIGFscmVhZHkgZGVzdHJveWVkXCIpO1xuXG4gICAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X3B1bGwoc3RhdGUsIGNpcGhlcnRleHQpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgYXNzZXJ0KGRlc3Ryb3llZCA9PT0gZmFsc2UsIFwic3RhdGUgYWxyZWFkeSBkZXN0cm95ZWRcIik7XG4gICAgZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGVjcnlwdCxcbiAgICBkZXN0cm95XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBDSFVOS19TSVpFID0gODE5MjtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3MgPSB7XG4gIHBlcmNlbnQ6IG51bWJlcjtcbiAgdG90YWw6IG51bWJlcjtcbiAgY3VycmVudDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3J5cHRTZWNyZXRzdHJlYW0oXG4gIGtleTogVWludDhBcnJheSxcbiAgZGF0YTogVWludDhBcnJheSxcbiAgcHJvZ3Jlc3M/OiAocHJvZ3Jlc3M6IFByb2dyZXNzKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBhYm9ydD86IEFib3J0Q29udHJvbGxlclxuKTogUHJvbWlzZTxFbmNyeXB0ZWRGaWxlPiB7XG4gIGF3YWl0IHNldHVwKCk7XG4gIGNvbnN0IHsgZW5jcnlwdDogY3J5cHQsIGRlc3Ryb3ksIGhlYWRlciB9ID0gZW5jcnlwdChrZXkpO1xuICBjb25zdCBjcnlwdGVkQ2h1bmsgPVxuICAgIENIVU5LX1NJWkUgKyBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9BQllURVM7XG4gIGNvbnN0IG1heCA9XG4gICAgTWF0aC5jZWlsKGRhdGEuYnl0ZUxlbmd0aCAvIENIVU5LX1NJWkUpICogY3J5cHRlZENodW5rICsgaGVhZGVyLmJ5dGVMZW5ndGg7XG5cbiAgcHJvZ3Jlc3M/Lih7XG4gICAgcGVyY2VudDogMCxcbiAgICB0b3RhbDogbWF4LFxuICAgIGN1cnJlbnQ6IDBcbiAgfSk7XG4gIGNvbnN0IGZpbmFsID0gbmV3IFVpbnQ4QXJyYXkobWF4KTtcbiAgY29uc3Qgc3BhcmtFbmNyeXB0ZWQgPSBuZXcgU3BhcmtNRDUuQXJyYXlCdWZmZXIoKTtcbiAgY29uc3Qgc3BhcmsgPSBuZXcgU3BhcmtNRDUuQXJyYXlCdWZmZXIoKTtcblxuICBmaW5hbC5zZXQoaGVhZGVyKTtcbiAgc3BhcmtFbmNyeXB0ZWQuYXBwZW5kKGhlYWRlcik7XG4gIGxldCB0b3RhbCA9IGhlYWRlci5ieXRlTGVuZ3RoO1xuICBwcm9ncmVzcz8uKHtcbiAgICBwZXJjZW50OiB0b3RhbCAvIG1heCxcbiAgICB0b3RhbDogbWF4LFxuICAgIGN1cnJlbnQ6IHRvdGFsXG4gIH0pO1xuICBsZXQgbGFzdFBlcmNlbnQgPSB0b3RhbCAvIG1heDtcblxuICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcyhkYXRhLCBDSFVOS19TSVpFKSkge1xuICAgIGlmIChhYm9ydD8uc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5jcnlwdCBhYm9ydGVkYCk7XG4gICAgfVxuICAgIHNwYXJrLmFwcGVuZChjaHVuayk7XG4gICAgY29uc3QgdGFnID1cbiAgICAgIGNodW5rLmxlbmd0aCA8IENIVU5LX1NJWkVcbiAgICAgICAgPyBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9UQUdfRklOQUxcbiAgICAgICAgOiBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9UQUdfTUVTU0FHRTtcbiAgICBjb25zdCBjcnlwdGVkID0gY3J5cHQodGFnLCBjaHVuayk7XG4gICAgc3BhcmtFbmNyeXB0ZWQuYXBwZW5kKGNyeXB0ZWQpO1xuICAgIGZpbmFsLnNldChjcnlwdGVkLCB0b3RhbCk7XG4gICAgdG90YWwgKz0gY3J5cHRlZC5ieXRlTGVuZ3RoO1xuICAgIGNvbnN0IHBlcmNlbnQgPSB0b3RhbCAvIG1heDtcbiAgICBpZiAocGVyY2VudCA+IGxhc3RQZXJjZW50ICsgMC4wMSkge1xuICAgICAgcHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQsXG4gICAgICAgIHRvdGFsOiBtYXgsXG4gICAgICAgIGN1cnJlbnQ6IHRvdGFsXG4gICAgICB9KTtcbiAgICAgIGxhc3RQZXJjZW50ID0gcGVyY2VudDtcbiAgICB9XG4gIH1cblxuICBkZXN0cm95KCk7XG4gIHByb2dyZXNzPy4oe1xuICAgIHBlcmNlbnQ6IDEsXG4gICAgdG90YWwsXG4gICAgY3VycmVudDogdG90YWxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZGF0YTogZmluYWwuc2xpY2UoMCwgdG90YWwpLFxuICAgIG1kNUVuY3J5cHRlZDogc3BhcmtFbmNyeXB0ZWQuZW5kKCksXG4gICAgbWQ1OiBzcGFyay5lbmQoKVxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdFNlY3JldHN0cmVhbShcbiAga2V5OiBVaW50OEFycmF5LFxuICBkYXRhOiBVaW50OEFycmF5LFxuICBwcm9ncmVzcz86IChwcm9ncmVzczogUHJvZ3Jlc3MpID0+IFByb21pc2U8dm9pZD4sXG4gIGFib3J0PzogQWJvcnRDb250cm9sbGVyXG4pOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgYXdhaXQgc2V0dXAoKTtcbiAgY29uc3QgaGVhZGVyID0gZGF0YS5zbGljZShcbiAgICAwLFxuICAgIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0hFQURFUkJZVEVTXG4gICk7XG4gIGRhdGEgPSBkYXRhLnNsaWNlKHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0hFQURFUkJZVEVTKTtcblxuICBjb25zdCB7IGRlY3J5cHQ6IGRlY3J5cHR0LCBkZXN0cm95IH0gPSBkZWNyeXB0KGhlYWRlciwga2V5KTtcbiAgY29uc3QgY2h1bmtTaXplID1cbiAgICBDSFVOS19TSVpFICsgc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfQUJZVEVTO1xuICBjb25zdCBtYXggPSBNYXRoLmNlaWwoZGF0YS5ieXRlTGVuZ3RoIC8gY2h1bmtTaXplKSAqIENIVU5LX1NJWkU7XG5cbiAgcHJvZ3Jlc3M/Lih7XG4gICAgcGVyY2VudDogMCxcbiAgICB0b3RhbDogbWF4LFxuICAgIGN1cnJlbnQ6IDBcbiAgfSk7XG4gIGNvbnN0IGZpbmFsID0gbmV3IFVpbnQ4QXJyYXkobWF4KTtcbiAgbGV0IHRvdGFsID0gMDtcblxuICBsZXQgbGFzdFBlcmNlbnQgPSB0b3RhbCAvIG1heDtcblxuICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcyhkYXRhLCBjaHVua1NpemUpKSB7XG4gICAgaWYgKGFib3J0Py5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZWNyeXB0IGFib3J0ZWRgKTtcbiAgICB9XG4gICAgY29uc3QgdG1wID0gZGVjcnlwdHQoY2h1bmspO1xuICAgIGZpbmFsLnNldCh0bXAubWVzc2FnZSwgdG90YWwpO1xuICAgIHRvdGFsICs9IHRtcC5tZXNzYWdlLmJ5dGVMZW5ndGg7XG4gICAgY29uc3QgcGVyY2VudCA9IHRvdGFsIC8gbWF4O1xuICAgIGlmIChwZXJjZW50ID4gbGFzdFBlcmNlbnQgKyAwLjAxKSB7XG4gICAgICBwcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudCxcbiAgICAgICAgdG90YWw6IG1heCxcbiAgICAgICAgY3VycmVudDogdG90YWxcbiAgICAgIH0pO1xuICAgICAgbGFzdFBlcmNlbnQgPSBwZXJjZW50O1xuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKTtcbiAgcHJvZ3Jlc3M/Lih7XG4gICAgcGVyY2VudDogMSxcbiAgICB0b3RhbCxcbiAgICBjdXJyZW50OiB0b3RhbFxuICB9KTtcbiAgcmV0dXJuIGZpbmFsLnNsaWNlKDAsIHRvdGFsKTtcbn1cblxuLy8gYXN5bmMgZnVuY3Rpb24gbWFpblNlY3JldHN0cmVhbShyYW5kb206IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHZvaWQ+IHtcbi8vICAgY29uc3Qga2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4vLyAgIGNvbnNvbGUudGltZShcInNlY3JldHN0cmVhbV9lbmNyeXB0XCIpO1xuLy8gICBjb25zdCBjcnlwdGVkID0gZW5jcnlwdFNlY3JldHN0cmVhbShrZXksIHJhbmRvbSk7XG4vLyAgIGNvbnNvbGUudGltZUVuZChcInNlY3JldHN0cmVhbV9lbmNyeXB0XCIpO1xuLy8gICBjb25zb2xlLnRpbWUoXCJzZWNyZXRzdHJlYW1fZGVjcnlwdFwiKTtcbi8vICAgY29uc3QgZGVjcnlwdGVkID0gZGVjcnlwdFNlY3JldHN0cmVhbShrZXksIGNyeXB0ZWQpO1xuLy8gICBjb25zb2xlLnRpbWVFbmQoXCJzZWNyZXRzdHJlYW1fZGVjcnlwdFwiKTtcbi8vICAgY29uc3QgZmlyc3QgPSB0b19oZXgocmFuZG9tKS5zbGljZSgwLCAzMik7XG4vLyAgIGNvbnN0IGZpbmFsID0gdG9faGV4KGRlY3J5cHRlZCkuc2xpY2UoMCwgMzIpO1xuLy8gICBjb25zb2xlLmxvZyh7XG4vLyAgICAgZmlyc3QsXG4vLyAgICAgZmluYWwsXG4vLyAgICAgZXF1YWxzOiBmaXJzdCA9PT0gZmluYWxcbi8vICAgfSk7XG4vLyB9XG4vLyBhc3luYyBmdW5jdGlvbiBtYWluU2VjcmV0Ym94KHJhbmRvbTogVWludDhBcnJheSk6IFByb21pc2U8dm9pZD4ge1xuLy8gICBjb25zdCBrZXkgPSBnZW5lcmF0ZVNlY3JldEJveCgpO1xuLy8gICBjb25zb2xlLnRpbWUoXCJzZWNyZXRib3hfZW5jcnlwdFwiKTtcbi8vICAgY29uc3QgY3J5cHRlZCA9IGVuY3J5cHRGaWxlKHJhbmRvbSwga2V5KTtcbi8vICAgY29uc29sZS50aW1lRW5kKFwic2VjcmV0Ym94X2VuY3J5cHRcIik7XG4vLyAgIGNvbnNvbGUudGltZShcInNlY3JldGJveF9kZWNyeXB0XCIpO1xuLy8gICBjb25zdCBkZWNyeXB0ZWQgPSBkZWNyeXB0RmlsZShjcnlwdGVkLCBrZXkpO1xuLy8gICBjb25zb2xlLnRpbWVFbmQoXCJzZWNyZXRib3hfZGVjcnlwdFwiKTtcbi8vICAgY29uc3QgZmlyc3QgPSB0b19oZXgocmFuZG9tKS5zbGljZSgwLCAzMik7XG4vLyAgIGNvbnN0IGZpbmFsID0gdG9faGV4KGRlY3J5cHRlZCkuc2xpY2UoMCwgMzIpO1xuLy8gICBjb25zb2xlLmxvZyh7XG4vLyAgICAgZmlyc3QsXG4vLyAgICAgZmluYWwsXG4vLyAgICAgZXF1YWxzOiBmaXJzdCA9PT0gZmluYWxcbi8vICAgfSk7XG4vLyB9XG5cbi8vIGFzeW5jIGZ1bmN0aW9uIG1haW4oKTogUHJvbWlzZTx2b2lkPiB7XG4vLyAgIGF3YWl0IHJlYWR5O1xuLy8gICBjb25zb2xlLnRpbWUoXCJyYW5kb21ieXRlc19idWZcIik7XG4vLyAgIGNvbnN0IHJhbmRvbSA9IHJhbmRvbWJ5dGVzX2J1ZigxXzAwMF8wMDAgKiAxMDI0KTtcbi8vICAgY29uc29sZS50aW1lRW5kKFwicmFuZG9tYnl0ZXNfYnVmXCIpO1xuLy8gICBhd2FpdCBQcm9taXNlLmFsbChbbWFpblNlY3JldHN0cmVhbShyYW5kb20pLCBtYWluU2VjcmV0Ym94KHJhbmRvbSldKTtcbi8vIH1cblxuLy8gbWFpbigpO1xuIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxLQUFLLEVBQUVDLE1BQU0sUUFBUSxjQUFjO0FBQzVDLE9BQU9DLFFBQVEsTUFBTSxXQUFXO0FBQ2hDLFNBQVNDLE1BQU0sUUFBUSxtQkFBbUI7QUFRMUMsU0FBU0MsTUFBTSxDQUFDQyxDQUFVLEVBQUVDLE9BQWUsRUFBUTtFQUNqRCxJQUFJLENBQUNELENBQUMsRUFBRTtJQUNOLE1BQU0sSUFBSUUsS0FBSyxDQUFDRCxPQUFPLENBQUM7RUFDMUI7QUFDRjtBQU1BLE9BQU8sU0FBU0Usa0JBQWtCLEdBQWU7RUFDL0MsT0FBT1AsTUFBTSxDQUFDUSw0Q0FBNEMsRUFBRTtBQUM5RDtBQUVBLFNBQVNDLE9BQU8sQ0FBQ0MsR0FBZSxFQUk5QjtFQUNBLElBQUlDLFNBQVMsR0FBRyxLQUFLO0VBQ3JCLE1BQU07SUFBRUMsS0FBSztJQUFFQztFQUFPLENBQUMsR0FDckJiLE1BQU0sQ0FBQ2MsK0NBQStDLENBQUNKLEdBQUcsQ0FBQztFQUU3RCxNQUFNRCxPQUFrQixHQUFHLENBQUNNLEdBQUcsRUFBRUMsU0FBUyxLQUFLO0lBQzdDYixNQUFNLENBQUNRLFNBQVMsS0FBSyxLQUFLLEVBQUUseUJBQXlCLENBQUM7SUFFdEQsT0FBT1gsTUFBTSxDQUFDaUIsMENBQTBDLENBQ3RETCxLQUFLLEVBQ0xJLFNBQVMsRUFDVCxJQUFJLEVBQ0pELEdBQUcsQ0FDSjtFQUNILENBQUM7RUFFRCxTQUFTRyxPQUFPLEdBQVM7SUFDdkJmLE1BQU0sQ0FBQ1EsU0FBUyxLQUFLLEtBQUssRUFBRSx5QkFBeUIsQ0FBQztJQUN0REEsU0FBUyxHQUFHLElBQUk7RUFD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
1
+ import{setup as g,sodium as e}from"../sodium.js";import x from"spark-md5";import{chunks as b}from"../utils/utils.js";function _(o,t){if(!o)throw new Error(t)}function D(){return e.crypto_secretstream_xchacha20poly1305_keygen()}function U(o){let t=!1;const{state:r,header:y}=e.crypto_secretstream_xchacha20poly1305_init_push(o),p=(s,d)=>(_(t===!1,"state already destroyed"),e.crypto_secretstream_xchacha20poly1305_push(r,d,null,s));function i(){_(t===!1,"state already destroyed"),t=!0}return{encrypt:p,destroy:i,header:y}}function T(o,t){_(o.byteLength>=e.crypto_secretstream_xchacha20poly1305_HEADERBYTES,`header must be at least HEADERBYTES (${e.crypto_secretstream_xchacha20poly1305_HEADERBYTES}) long`),_(t.byteLength>=e.crypto_secretstream_xchacha20poly1305_KEYBYTES,`key must be at least KEYBYTES (${e.crypto_secretstream_xchacha20poly1305_KEYBYTES}) long`);let r=!1;const y=e.crypto_secretstream_xchacha20poly1305_init_pull(o,t),p=s=>(_(r===!1,"state already destroyed"),e.crypto_secretstream_xchacha20poly1305_pull(y,s));function i(){_(r===!1,"state already destroyed"),r=!0}return{decrypt:p,destroy:i}}const m=8192;async function k(o,t,r,y){await g();const{encrypt:p,destroy:i,header:s}=U(o),d=m+e.crypto_secretstream_xchacha20poly1305_ABYTES,c=Math.ceil(t.byteLength/m)*d+s.byteLength;r?.({percent:0,total:c,current:0});const h=new Uint8Array(c),n=new x.ArrayBuffer,u=new x.ArrayBuffer;h.set(s),n.append(s);let a=s.byteLength;r?.({percent:a/c,total:c,current:a});let E=a/c;for(const l of b(t,m)){if(y?.signal.aborted)throw new Error("Encrypt aborted");u.append(l);const S=l.length<m?e.crypto_secretstream_xchacha20poly1305_TAG_FINAL:e.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE,f=p(S,l);n.append(f),h.set(f,a),a+=f.byteLength;const A=a/c;A>E+.01&&(r?.({percent:A,total:c,current:a}),E=A)}return i(),r?.({percent:1,total:a,current:a}),{data:h.slice(0,a),md5Encrypted:n.end(),md5:u.end()}}async function F(o,t,r,y){await g();const p=t.slice(0,e.crypto_secretstream_xchacha20poly1305_HEADERBYTES);t=t.slice(e.crypto_secretstream_xchacha20poly1305_HEADERBYTES);const{decrypt:i,destroy:s}=T(p,o),d=m+e.crypto_secretstream_xchacha20poly1305_ABYTES,c=Math.ceil(t.byteLength/d)*m;r?.({percent:0,total:c,current:0});const h=new Uint8Array(c);let n=0,u=n/c;for(const a of b(t,d)){if(y?.signal.aborted)throw new Error("Decrypt aborted");const E=i(a);h.set(E.message,n),n+=E.message.byteLength;const l=n/c;l>u+.01&&(r?.({percent:l,total:c,current:n}),u=l)}return s(),r?.({percent:1,total:n,current:n}),h.slice(0,n)}export{m as CHUNK_SIZE,F as decryptSecretstream,k as encryptSecretstream,D as secretstreamKeygen};
2
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/crypto/file.ts"],"sourcesContent":["import type { MessageTag } from \"libsodium-wrappers\";\nimport { setup, sodium } from \"../sodium.js\";\nimport SparkMD5 from \"spark-md5\";\nimport { chunks } from \"../utils/utils.js\";\n\nexport type EncryptedFile = {\n data: Uint8Array;\n md5: string;\n md5Encrypted: string;\n};\n\nfunction assert(c: boolean, message: string): void {\n if (!c) {\n throw new Error(message);\n }\n}\n\ntype EncryptFn = (tag: number, plaintext: Uint8Array) => Uint8Array;\n\ntype DecryptFn = (ciphertext: Uint8Array) => MessageTag;\n\nexport function secretstreamKeygen(): Uint8Array {\n return sodium.crypto_secretstream_xchacha20poly1305_keygen();\n}\n\nfunction encrypt(key: Uint8Array): {\n destroy: () => void;\n encrypt: EncryptFn;\n header: Uint8Array;\n} {\n let destroyed = false;\n const { state, header } =\n sodium.crypto_secretstream_xchacha20poly1305_init_push(key);\n\n const encrypt: EncryptFn = (tag, plaintext) => {\n assert(destroyed === false, \"state already destroyed\");\n\n return sodium.crypto_secretstream_xchacha20poly1305_push(\n state,\n plaintext,\n null,\n tag\n );\n };\n\n function destroy(): void {\n assert(destroyed === false, \"state already destroyed\");\n destroyed = true;\n }\n\n return {\n encrypt,\n destroy,\n header\n };\n}\n\nfunction decrypt(\n header: Uint8Array,\n key: Uint8Array\n): {\n destroy: () => void;\n decrypt: DecryptFn;\n} {\n assert(\n header.byteLength >=\n sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES,\n `header must be at least HEADERBYTES (${sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES}) long`\n );\n assert(\n key.byteLength >= sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES,\n `key must be at least KEYBYTES (${sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES}) long`\n );\n\n let destroyed = false;\n const state = sodium.crypto_secretstream_xchacha20poly1305_init_pull(\n header,\n key\n );\n\n const decrypt: DecryptFn = ciphertext => {\n assert(destroyed === false, \"state already destroyed\");\n\n return sodium.crypto_secretstream_xchacha20poly1305_pull(state, ciphertext);\n };\n\n function destroy(): void {\n assert(destroyed === false, \"state already destroyed\");\n destroyed = true;\n }\n\n return {\n decrypt,\n destroy\n };\n}\n\nexport const CHUNK_SIZE = 8192;\n\nexport type Progress = {\n percent: number;\n total: number;\n current: number;\n};\n\nexport async function encryptSecretstream(\n key: Uint8Array,\n data: Uint8Array,\n progress?: (progress: Progress) => Promise<void>,\n abort?: AbortController\n): Promise<EncryptedFile> {\n await setup();\n const { encrypt: crypt, destroy, header } = encrypt(key);\n const cryptedChunk =\n CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;\n const max =\n Math.ceil(data.byteLength / CHUNK_SIZE) * cryptedChunk + header.byteLength;\n\n progress?.({\n percent: 0,\n total: max,\n current: 0\n });\n const final = new Uint8Array(max);\n const sparkEncrypted = new SparkMD5.ArrayBuffer();\n const spark = new SparkMD5.ArrayBuffer();\n\n final.set(header);\n sparkEncrypted.append(header);\n let total = header.byteLength;\n progress?.({\n percent: total / max,\n total: max,\n current: total\n });\n let lastPercent = total / max;\n\n for (const chunk of chunks(data, CHUNK_SIZE)) {\n if (abort?.signal.aborted) {\n throw new Error(`Encrypt aborted`);\n }\n spark.append(chunk);\n const tag =\n chunk.length < CHUNK_SIZE\n ? sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL\n : sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE;\n const crypted = crypt(tag, chunk);\n sparkEncrypted.append(crypted);\n final.set(crypted, total);\n total += crypted.byteLength;\n const percent = total / max;\n if (percent > lastPercent + 0.01) {\n progress?.({\n percent,\n total: max,\n current: total\n });\n lastPercent = percent;\n }\n }\n\n destroy();\n progress?.({\n percent: 1,\n total,\n current: total\n });\n return {\n data: final.slice(0, total),\n md5Encrypted: sparkEncrypted.end(),\n md5: spark.end()\n };\n}\n\nexport async function decryptSecretstream(\n key: Uint8Array,\n data: Uint8Array,\n progress?: (progress: Progress) => Promise<void>,\n abort?: AbortController\n): Promise<Uint8Array> {\n await setup();\n const header = data.slice(\n 0,\n sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES\n );\n data = data.slice(sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);\n\n const { decrypt: decryptt, destroy } = decrypt(header, key);\n const chunkSize =\n CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;\n const max = Math.ceil(data.byteLength / chunkSize) * CHUNK_SIZE;\n\n progress?.({\n percent: 0,\n total: max,\n current: 0\n });\n const final = new Uint8Array(max);\n let total = 0;\n\n let lastPercent = total / max;\n\n for (const chunk of chunks(data, chunkSize)) {\n if (abort?.signal.aborted) {\n throw new Error(`Decrypt aborted`);\n }\n const tmp = decryptt(chunk);\n final.set(tmp.message, total);\n total += tmp.message.byteLength;\n const percent = total / max;\n if (percent > lastPercent + 0.01) {\n progress?.({\n percent,\n total: max,\n current: total\n });\n lastPercent = percent;\n }\n }\n\n destroy();\n progress?.({\n percent: 1,\n total,\n current: total\n });\n return final.slice(0, total);\n}\n\n// async function mainSecretstream(random: Uint8Array): Promise<void> {\n// const key = secretstreamKeygen();\n// console.time(\"secretstream_encrypt\");\n// const crypted = encryptSecretstream(key, random);\n// console.timeEnd(\"secretstream_encrypt\");\n// console.time(\"secretstream_decrypt\");\n// const decrypted = decryptSecretstream(key, crypted);\n// console.timeEnd(\"secretstream_decrypt\");\n// const first = to_hex(random).slice(0, 32);\n// const final = to_hex(decrypted).slice(0, 32);\n// console.log({\n// first,\n// final,\n// equals: first === final\n// });\n// }\n// async function mainSecretbox(random: Uint8Array): Promise<void> {\n// const key = generateSecretBox();\n// console.time(\"secretbox_encrypt\");\n// const crypted = encryptFile(random, key);\n// console.timeEnd(\"secretbox_encrypt\");\n// console.time(\"secretbox_decrypt\");\n// const decrypted = decryptFile(crypted, key);\n// console.timeEnd(\"secretbox_decrypt\");\n// const first = to_hex(random).slice(0, 32);\n// const final = to_hex(decrypted).slice(0, 32);\n// console.log({\n// first,\n// final,\n// equals: first === final\n// });\n// }\n\n// async function main(): Promise<void> {\n// await ready;\n// console.time(\"randombytes_buf\");\n// const random = randombytes_buf(1_000_000 * 1024);\n// console.timeEnd(\"randombytes_buf\");\n// await Promise.all([mainSecretstream(random), mainSecretbox(random)]);\n// }\n\n// main();\n"],"mappings":"AACA,OAAS,SAAAA,EAAO,UAAAC,MAAc,eAC9B,OAAOC,MAAc,YACrB,OAAS,UAAAC,MAAc,oBAQvB,SAASC,EAAOC,EAAYC,EAAuB,CACjD,GAAI,CAACD,EACH,MAAM,IAAI,MAAMC,CAAO,CAE3B,CAMO,SAASC,GAAiC,CAC/C,OAAON,EAAO,6CAA6C,CAC7D,CAEA,SAASO,EAAQC,EAIf,CACA,IAAIC,EAAY,GAChB,KAAM,CAAE,MAAAC,EAAO,OAAAC,CAAO,EACpBX,EAAO,gDAAgDQ,CAAG,EAEtDD,EAAqB,CAACK,EAAKC,KAC/BV,EAAOM,IAAc,GAAO,yBAAyB,EAE9CT,EAAO,2CACZU,EACAG,EACA,KACAD,CACF,GAGF,SAASE,GAAgB,CACvBX,EAAOM,IAAc,GAAO,yBAAyB,EACrDA,EAAY,EACd,CAEA,MAAO,CACL,QAAAF,EACA,QAAAO,EACA,OAAAH,CACF,CACF,CAEA,SAASI,EACPJ,EACAH,EAIA,CACAL,EACEQ,EAAO,YACLX,EAAO,kDACT,wCAAwCA,EAAO,yDACjD,EACAG,EACEK,EAAI,YAAcR,EAAO,+CACzB,kCAAkCA,EAAO,sDAC3C,EAEA,IAAIS,EAAY,GAChB,MAAMC,EAAQV,EAAO,gDACnBW,EACAH,CACF,EAEMO,EAAqBC,IACzBb,EAAOM,IAAc,GAAO,yBAAyB,EAE9CT,EAAO,2CAA2CU,EAAOM,CAAU,GAG5E,SAASF,GAAgB,CACvBX,EAAOM,IAAc,GAAO,yBAAyB,EACrDA,EAAY,EACd,CAEA,MAAO,CACL,QAAAM,EACA,QAAAD,CACF,CACF,CAEO,MAAMG,EAAa,KAQ1B,eAAsBC,EACpBV,EACAW,EACAC,EACAC,EACwB,CACxB,MAAMtB,EAAM,EACZ,KAAM,CAAE,QAASuB,EAAO,QAAAR,EAAS,OAAAH,CAAO,EAAIJ,EAAQC,CAAG,EACjDe,EACJN,EAAajB,EAAO,6CAChBwB,EACJ,KAAK,KAAKL,EAAK,WAAaF,CAAU,EAAIM,EAAeZ,EAAO,WAElES,IAAW,CACT,QAAS,EACT,MAAOI,EACP,QAAS,CACX,CAAC,EACD,MAAMC,EAAQ,IAAI,WAAWD,CAAG,EAC1BE,EAAiB,IAAIzB,EAAS,YAC9B0B,EAAQ,IAAI1B,EAAS,YAE3BwB,EAAM,IAAId,CAAM,EAChBe,EAAe,OAAOf,CAAM,EAC5B,IAAIiB,EAAQjB,EAAO,WACnBS,IAAW,CACT,QAASQ,EAAQJ,EACjB,MAAOA,EACP,QAASI,CACX,CAAC,EACD,IAAIC,EAAcD,EAAQJ,EAE1B,UAAWM,KAAS5B,EAAOiB,EAAMF,CAAU,EAAG,CAC5C,GAAII,GAAO,OAAO,QAChB,MAAM,IAAI,MAAM,iBAAiB,EAEnCM,EAAM,OAAOG,CAAK,EAClB,MAAMlB,EACJkB,EAAM,OAASb,EACXjB,EAAO,gDACPA,EAAO,kDACP+B,EAAUT,EAAMV,EAAKkB,CAAK,EAChCJ,EAAe,OAAOK,CAAO,EAC7BN,EAAM,IAAIM,EAASH,CAAK,EACxBA,GAASG,EAAQ,WACjB,MAAMC,EAAUJ,EAAQJ,EACpBQ,EAAUH,EAAc,MAC1BT,IAAW,CACT,QAAAY,EACA,MAAOR,EACP,QAASI,CACX,CAAC,EACDC,EAAcG,EAElB,CAEA,OAAAlB,EAAQ,EACRM,IAAW,CACT,QAAS,EACT,MAAAQ,EACA,QAASA,CACX,CAAC,EACM,CACL,KAAMH,EAAM,MAAM,EAAGG,CAAK,EAC1B,aAAcF,EAAe,IAAI,EACjC,IAAKC,EAAM,IAAI,CACjB,CACF,CAEA,eAAsBM,EACpBzB,EACAW,EACAC,EACAC,EACqB,CACrB,MAAMtB,EAAM,EACZ,MAAMY,EAASQ,EAAK,MAClB,EACAnB,EAAO,iDACT,EACAmB,EAAOA,EAAK,MAAMnB,EAAO,iDAAiD,EAE1E,KAAM,CAAE,QAASkC,EAAU,QAAApB,CAAQ,EAAIC,EAAQJ,EAAQH,CAAG,EACpD2B,EACJlB,EAAajB,EAAO,6CAChBwB,EAAM,KAAK,KAAKL,EAAK,WAAagB,CAAS,EAAIlB,EAErDG,IAAW,CACT,QAAS,EACT,MAAOI,EACP,QAAS,CACX,CAAC,EACD,MAAMC,EAAQ,IAAI,WAAWD,CAAG,EAChC,IAAII,EAAQ,EAERC,EAAcD,EAAQJ,EAE1B,UAAWM,KAAS5B,EAAOiB,EAAMgB,CAAS,EAAG,CAC3C,GAAId,GAAO,OAAO,QAChB,MAAM,IAAI,MAAM,iBAAiB,EAEnC,MAAMe,EAAMF,EAASJ,CAAK,EAC1BL,EAAM,IAAIW,EAAI,QAASR,CAAK,EAC5BA,GAASQ,EAAI,QAAQ,WACrB,MAAMJ,EAAUJ,EAAQJ,EACpBQ,EAAUH,EAAc,MAC1BT,IAAW,CACT,QAAAY,EACA,MAAOR,EACP,QAASI,CACX,CAAC,EACDC,EAAcG,EAElB,CAEA,OAAAlB,EAAQ,EACRM,IAAW,CACT,QAAS,EACT,MAAAQ,EACA,QAASA,CACX,CAAC,EACMH,EAAM,MAAM,EAAGG,CAAK,CAC7B","names":["setup","sodium","SparkMD5","chunks","assert","c","message","secretstreamKeygen","encrypt","key","destroyed","state","header","tag","plaintext","destroy","decrypt","ciphertext","CHUNK_SIZE","encryptSecretstream","data","progress","abort","crypt","cryptedChunk","max","final","sparkEncrypted","spark","total","lastPercent","chunk","crypted","percent","decryptSecretstream","decryptt","chunkSize","tmp"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _utilsjs = require('../utils/utils.js');var _sodiumjs = require('../sodium.js');function p(t,o,e){const n=_sodiumjs.sodium.randombytes_buf(_sodiumjs.sodium.crypto_box_NONCEBYTES),c=_sodiumjs.sodium.crypto_box_easy(t,n,_sodiumjs.sodium.from_hex(o),_sodiumjs.sodium.from_hex(e));return _utilsjs.concatenate.call(void 0, n,c)}function s(){return _sodiumjs.sodium.crypto_box_keypair("hex")}function x(t,o,e){if(t.length<_sodiumjs.sodium.crypto_box_NONCEBYTES+_sodiumjs.sodium.crypto_box_MACBYTES)throw"data too short";const n=t.slice(0,_sodiumjs.sodium.crypto_box_NONCEBYTES),c=t.slice(_sodiumjs.sodium.crypto_box_NONCEBYTES);return _sodiumjs.sodium.crypto_box_open_easy(c,n,_sodiumjs.sodium.from_hex(o),_sodiumjs.sodium.from_hex(e))}function a(){return _sodiumjs.sodium.randombytes_buf(_sodiumjs.sodium.crypto_secretbox_KEYBYTES,"hex")}function b(t,o){const e=_sodiumjs.sodium.randombytes_buf(_sodiumjs.sodium.crypto_secretbox_NONCEBYTES),n=_sodiumjs.sodium.crypto_secretbox_easy(t,e,_sodiumjs.sodium.from_hex(o));return _utilsjs.concatenate.call(void 0, e,n)}function f(t,o){if(t.length<_sodiumjs.sodium.crypto_secretbox_NONCEBYTES+_sodiumjs.sodium.crypto_secretbox_MACBYTES)throw"data too short";const e=t.slice(0,_sodiumjs.sodium.crypto_secretbox_NONCEBYTES),n=t.slice(_sodiumjs.sodium.crypto_secretbox_NONCEBYTES);return _sodiumjs.sodium.crypto_secretbox_open_easy(n,e,_sodiumjs.sodium.from_hex(o))}function u(t,o){return _sodiumjs.sodium.crypto_box_seal(t,_sodiumjs.sodium.from_hex(o))}function E(t,{privateKey:o,publicKey:e}){return _sodiumjs.sodium.crypto_box_seal_open(t,_sodiumjs.sodium.from_hex(e),_sodiumjs.sodium.from_hex(o))}exports.decryptAnonymous = E; exports.decryptCryptoBox = x; exports.decryptSecretBox = f; exports.encryptAnonymous = u; exports.encryptCryptoBox = p; exports.encryptSecretBox = b; exports.generateCryptoBoxKeyPair = s; exports.generateSecretBoxKey = a;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/crypto/index.ts"],"names":["concatenate","sodium","encryptCryptoBox","data","publicKeyBob","privateKeyAlice","nonce","crypt","generateCryptoBoxKeyPair","decryptCryptoBox","publicKeyAlice","privateKeyBob","cipher","generateSecretBoxKey","encryptSecretBox","key","decryptSecretBox","encryptAnonymous","receiverPublicKey","decryptAnonymous","privateKey","publicKey"],"mappings":"AAAA,OAAS,eAAAA,MAAmB,oBAC5B,OAAS,UAAAC,MAAc,eAOhB,SAASC,EACdC,EACAC,EACAC,EACY,CACZ,MAAMC,EAAQL,EAAO,gBAAgBA,EAAO,qBAAqB,EAC3DM,EAAQN,EAAO,gBACnBE,EACAG,EACAL,EAAO,SAASG,CAAY,EAC5BH,EAAO,SAASI,CAAe,CACjC,EACA,OAAOL,EAAYM,EAAOC,CAAK,CACjC,CAEO,SAASC,GAAoC,CAClD,OAAOP,EAAO,mBAAmB,KAAK,CACxC,CAEO,SAASQ,EACdN,EACAO,EACAC,EACY,CACZ,GAAIR,EAAK,OAASF,EAAO,sBAAwBA,EAAO,oBACtD,KAAM,iBAER,MAAMK,EAAQH,EAAK,MAAM,EAAGF,EAAO,qBAAqB,EAClDW,EAAST,EAAK,MAAMF,EAAO,qBAAqB,EACtD,OAAOA,EAAO,qBACZW,EACAN,EACAL,EAAO,SAASS,CAAc,EAC9BT,EAAO,SAASU,CAAa,CAC/B,CACF,CAEO,SAASE,GAA+B,CAC7C,OAAOZ,EAAO,gBAAgBA,EAAO,0BAA2B,KAAK,CACvE,CAEO,SAASa,EAAiBX,EAAkBY,EAAyB,CAC1E,MAAMT,EAAQL,EAAO,gBAAgBA,EAAO,2BAA2B,EACjEM,EAAQN,EAAO,sBAAsBE,EAAMG,EAAOL,EAAO,SAASc,CAAG,CAAC,EAC5E,OAAOf,EAAYM,EAAOC,CAAK,CACjC,CAEO,SAASS,EAAiBb,EAAkBY,EAAyB,CAC1E,GACEZ,EAAK,OACLF,EAAO,4BAA8BA,EAAO,0BAE5C,KAAM,iBAER,MAAMK,EAAQH,EAAK,MAAM,EAAGF,EAAO,2BAA2B,EACxDW,EAAST,EAAK,MAAMF,EAAO,2BAA2B,EAC5D,OAAOA,EAAO,2BAA2BW,EAAQN,EAAOL,EAAO,SAASc,CAAG,CAAC,CAC9E,CAEO,SAASE,EACdd,EACAe,EACY,CACZ,OAAOjB,EAAO,gBAAgBE,EAAMF,EAAO,SAASiB,CAAiB,CAAC,CACxE,CAEO,SAASC,EACdhB,EACA,CAAE,WAAAiB,EAAY,UAAAC,CAAU,EACZ,CACZ,OAAOpB,EAAO,qBACZE,EACAF,EAAO,SAASoB,CAAS,EACzBpB,EAAO,SAASmB,CAAU,CAC5B,CACF","sourcesContent":["import { concatenate } from \"../utils/utils.js\";\nimport { sodium } from \"../sodium.js\";\n\nexport interface KeyPair {\n publicKey: string;\n privateKey: string;\n}\n\nexport function encryptCryptoBox(\n data: Uint8Array,\n publicKeyBob: string,\n privateKeyAlice: string\n): Uint8Array {\n const nonce = sodium.randombytes_buf(sodium.crypto_box_NONCEBYTES);\n const crypt = sodium.crypto_box_easy(\n data,\n nonce,\n sodium.from_hex(publicKeyBob),\n sodium.from_hex(privateKeyAlice)\n );\n return concatenate(nonce, crypt);\n}\n\nexport function generateCryptoBoxKeyPair(): KeyPair {\n return sodium.crypto_box_keypair(\"hex\");\n}\n\nexport function decryptCryptoBox(\n data: Uint8Array,\n publicKeyAlice: string,\n privateKeyBob: string\n): Uint8Array {\n if (data.length < sodium.crypto_box_NONCEBYTES + sodium.crypto_box_MACBYTES) {\n throw \"data too short\";\n }\n const nonce = data.slice(0, sodium.crypto_box_NONCEBYTES);\n const cipher = data.slice(sodium.crypto_box_NONCEBYTES);\n return sodium.crypto_box_open_easy(\n cipher,\n nonce,\n sodium.from_hex(publicKeyAlice),\n sodium.from_hex(privateKeyBob)\n );\n}\n\nexport function generateSecretBoxKey(): string {\n return sodium.randombytes_buf(sodium.crypto_secretbox_KEYBYTES, \"hex\");\n}\n\nexport function encryptSecretBox(data: Uint8Array, key: string): Uint8Array {\n const nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);\n const crypt = sodium.crypto_secretbox_easy(data, nonce, sodium.from_hex(key));\n return concatenate(nonce, crypt);\n}\n\nexport function decryptSecretBox(data: Uint8Array, key: string): Uint8Array {\n if (\n data.length <\n sodium.crypto_secretbox_NONCEBYTES + sodium.crypto_secretbox_MACBYTES\n ) {\n throw \"data too short\";\n }\n const nonce = data.slice(0, sodium.crypto_secretbox_NONCEBYTES);\n const cipher = data.slice(sodium.crypto_secretbox_NONCEBYTES);\n return sodium.crypto_secretbox_open_easy(cipher, nonce, sodium.from_hex(key));\n}\n\nexport function encryptAnonymous(\n data: Uint8Array,\n receiverPublicKey: string\n): Uint8Array {\n return sodium.crypto_box_seal(data, sodium.from_hex(receiverPublicKey));\n}\n\nexport function decryptAnonymous(\n data: Uint8Array,\n { privateKey, publicKey }: KeyPair\n): Uint8Array {\n return sodium.crypto_box_seal_open(\n data,\n sodium.from_hex(publicKey),\n sodium.from_hex(privateKey)\n );\n}\n"]}
@@ -1,12 +1,14 @@
1
- export interface KeyPair {
1
+ interface KeyPair {
2
2
  publicKey: string;
3
3
  privateKey: string;
4
4
  }
5
- export declare function encryptCryptoBox(data: Uint8Array, publicKeyBob: string, privateKeyAlice: string): Uint8Array;
6
- export declare function generateCryptoBoxKeyPair(): KeyPair;
7
- export declare function decryptCryptoBox(data: Uint8Array, publicKeyAlice: string, privateKeyBob: string): Uint8Array;
8
- export declare function generateSecretBoxKey(): string;
9
- export declare function encryptSecretBox(data: Uint8Array, key: string): Uint8Array;
10
- export declare function decryptSecretBox(data: Uint8Array, key: string): Uint8Array;
11
- export declare function encryptAnonymous(data: Uint8Array, receiverPublicKey: string): Uint8Array;
12
- export declare function decryptAnonymous(data: Uint8Array, { privateKey, publicKey }: KeyPair): Uint8Array;
5
+ declare function encryptCryptoBox(data: Uint8Array, publicKeyBob: string, privateKeyAlice: string): Uint8Array;
6
+ declare function generateCryptoBoxKeyPair(): KeyPair;
7
+ declare function decryptCryptoBox(data: Uint8Array, publicKeyAlice: string, privateKeyBob: string): Uint8Array;
8
+ declare function generateSecretBoxKey(): string;
9
+ declare function encryptSecretBox(data: Uint8Array, key: string): Uint8Array;
10
+ declare function decryptSecretBox(data: Uint8Array, key: string): Uint8Array;
11
+ declare function encryptAnonymous(data: Uint8Array, receiverPublicKey: string): Uint8Array;
12
+ declare function decryptAnonymous(data: Uint8Array, { privateKey, publicKey }: KeyPair): Uint8Array;
13
+
14
+ export { KeyPair, decryptAnonymous, decryptCryptoBox, decryptSecretBox, encryptAnonymous, encryptCryptoBox, encryptSecretBox, generateCryptoBoxKeyPair, generateSecretBoxKey };