@secrecy/lib 1.0.0-dev.64 → 1.0.0-dev.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseClient-7c38f650.d.ts +351 -0
- package/dist/BaseClient.cjs +2 -0
- package/dist/BaseClient.cjs.map +1 -0
- package/dist/BaseClient.d.ts +16 -104
- package/dist/BaseClient.js +2 -430
- package/dist/BaseClient.js.map +1 -0
- package/dist/PopupTools.cjs +2 -0
- package/dist/PopupTools.cjs.map +1 -0
- package/dist/PopupTools.d.ts +5 -4
- package/dist/PopupTools.js +2 -196
- package/dist/PopupTools.js.map +1 -0
- package/dist/ZeusThunder.cjs +2 -0
- package/dist/ZeusThunder.cjs.map +1 -0
- package/dist/ZeusThunder.d.ts +6 -2
- package/dist/ZeusThunder.js +2 -65
- package/dist/ZeusThunder.js.map +1 -0
- package/dist/cache.cjs +2 -0
- package/dist/cache.cjs.map +1 -0
- package/dist/cache.d.ts +22 -4
- package/dist/cache.js +2 -4
- package/dist/cache.js.map +1 -0
- package/dist/chunk-5WPCTUWH.cjs +2 -0
- package/dist/chunk-5WPCTUWH.cjs.map +1 -0
- package/dist/chunk-KMTF2BZE.js +2 -0
- package/dist/chunk-KMTF2BZE.js.map +1 -0
- package/dist/client/SecrecyAppClient.cjs +2 -0
- package/dist/client/SecrecyAppClient.cjs.map +1 -0
- package/dist/client/SecrecyAppClient.d.ts +16 -17
- package/dist/client/SecrecyAppClient.js +2 -227
- package/dist/client/SecrecyAppClient.js.map +1 -0
- package/dist/client/SecrecyCloudClient.cjs +2 -0
- package/dist/client/SecrecyCloudClient.cjs.map +1 -0
- package/dist/client/SecrecyCloudClient.d.ts +16 -89
- package/dist/client/SecrecyCloudClient.js +2 -1411
- package/dist/client/SecrecyCloudClient.js.map +1 -0
- package/dist/client/SecrecyDbClient.cjs +2 -0
- package/dist/client/SecrecyDbClient.cjs.map +1 -0
- package/dist/client/SecrecyDbClient.d.ts +16 -21
- package/dist/client/SecrecyDbClient.js +2 -177
- package/dist/client/SecrecyDbClient.js.map +1 -0
- package/dist/client/SecrecyMailClient.cjs +2 -0
- package/dist/client/SecrecyMailClient.cjs.map +1 -0
- package/dist/client/SecrecyMailClient.d.ts +16 -42
- package/dist/client/SecrecyMailClient.js +2 -1022
- package/dist/client/SecrecyMailClient.js.map +1 -0
- package/dist/client/SecrecyPayClient.cjs +2 -0
- package/dist/client/SecrecyPayClient.cjs.map +1 -0
- package/dist/client/SecrecyPayClient.d.ts +16 -7
- package/dist/client/SecrecyPayClient.js +2 -36
- package/dist/client/SecrecyPayClient.js.map +1 -0
- package/dist/client/SecrecyWalletClient.cjs +2 -0
- package/dist/client/SecrecyWalletClient.cjs.map +1 -0
- package/dist/client/SecrecyWalletClient.d.ts +16 -30
- package/dist/client/SecrecyWalletClient.js +2 -73
- package/dist/client/SecrecyWalletClient.js.map +1 -0
- package/dist/client/convert/file.cjs +2 -0
- package/dist/client/convert/file.cjs.map +1 -0
- package/dist/client/convert/file.d.ts +11 -5
- package/dist/client/convert/file.js +2 -33
- package/dist/client/convert/file.js.map +1 -0
- package/dist/client/convert/mail.cjs +2 -0
- package/dist/client/convert/mail.cjs.map +1 -0
- package/dist/client/convert/mail.d.ts +13 -3
- package/dist/client/convert/mail.js +2 -43
- package/dist/client/convert/mail.js.map +1 -0
- package/dist/client/convert/node.cjs +2 -0
- package/dist/client/convert/node.cjs.map +1 -0
- package/dist/client/convert/node.d.ts +18 -9
- package/dist/client/convert/node.js +2 -88
- package/dist/client/convert/node.js.map +1 -0
- package/dist/client/helpers.cjs +2 -0
- package/dist/client/helpers.cjs.map +1 -0
- package/dist/client/helpers.d.ts +16 -28
- package/dist/client/helpers.js +2 -113
- package/dist/client/helpers.js.map +1 -0
- package/dist/client/index.cjs +2 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.ts +16 -34
- package/dist/client/index.js +2 -46
- package/dist/client/index.js.map +1 -0
- package/dist/client/storage.cjs +2 -0
- package/dist/client/storage.cjs.map +1 -0
- package/dist/client/storage.d.ts +6 -3
- package/dist/client/storage.js +2 -12
- package/dist/client/storage.js.map +1 -0
- package/dist/client/types/File.cjs +1 -0
- package/dist/client/types/File.cjs.map +1 -0
- package/dist/client/types/File.d.ts +9 -5
- package/dist/client/types/File.js +1 -3
- package/dist/client/types/File.js.map +1 -0
- package/dist/client/types/Inputs.cjs +1 -0
- package/dist/client/types/Inputs.cjs.map +1 -0
- package/dist/client/types/Inputs.d.ts +6 -4
- package/dist/client/types/Inputs.js +1 -3
- package/dist/client/types/Inputs.js.map +1 -0
- package/dist/client/types/Node.cjs +1 -0
- package/dist/client/types/Node.cjs.map +1 -0
- package/dist/client/types/Node.d.ts +9 -56
- package/dist/client/types/Node.js +1 -3
- package/dist/client/types/Node.js.map +1 -0
- package/dist/client/types/UserAppNotifications.cjs +1 -0
- package/dist/client/types/UserAppNotifications.cjs.map +1 -0
- package/dist/client/types/UserAppNotifications.d.ts +3 -1
- package/dist/client/types/UserAppNotifications.js +1 -3
- package/dist/client/types/UserAppNotifications.js.map +1 -0
- package/dist/client/types/UserAppSettings.cjs +1 -0
- package/dist/client/types/UserAppSettings.cjs.map +1 -0
- package/dist/client/types/UserAppSettings.d.ts +3 -1
- package/dist/client/types/UserAppSettings.js +1 -3
- package/dist/client/types/UserAppSettings.js.map +1 -0
- package/dist/client/types/index.cjs +2 -0
- package/dist/client/types/index.cjs.map +1 -0
- package/dist/client/types/index.d.ts +86 -30
- package/dist/client/types/index.js +2 -8
- package/dist/client/types/index.js.map +1 -0
- package/dist/client/types/selectors.cjs +2 -0
- package/dist/client/types/selectors.cjs.map +1 -0
- package/dist/client/types/selectors.d.ts +7 -5
- package/dist/client/types/selectors.js +2 -135
- package/dist/client/types/selectors.js.map +1 -0
- package/dist/crypto/file.cjs +2 -0
- package/dist/crypto/file.cjs.map +1 -0
- package/dist/crypto/file.d.ts +8 -6
- package/dist/crypto/file.js +2 -195
- package/dist/crypto/file.js.map +1 -0
- package/dist/crypto/index.cjs +2 -0
- package/dist/crypto/index.cjs.map +1 -0
- package/dist/crypto/index.d.ts +11 -9
- package/dist/crypto/index.js +2 -45
- package/dist/crypto/index.js.map +1 -0
- package/dist/error.cjs +1 -0
- package/dist/error.cjs.map +1 -0
- package/dist/error.d.ts +15 -10
- package/dist/error.js +1 -3
- package/dist/error.js.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +19 -11
- package/dist/index.js +2 -9
- package/dist/index.js.map +1 -0
- package/dist/minify/index.cjs +2 -0
- package/dist/minify/index.cjs.map +1 -0
- package/dist/minify/index.d.ts +4 -2
- package/dist/minify/index.js +2 -23
- package/dist/minify/index.js.map +1 -0
- package/dist/minify/lz4.cjs +3 -0
- package/dist/minify/lz4.cjs.map +1 -0
- package/dist/minify/lz4.d.ts +7 -5
- package/dist/minify/lz4.js +3 -539
- package/dist/minify/lz4.js.map +1 -0
- package/dist/sodium.cjs +2 -0
- package/dist/sodium.cjs.map +1 -0
- package/dist/sodium.d.ts +5 -3
- package/dist/sodium.js +2 -6
- package/dist/sodium.js.map +1 -0
- package/dist/utils/store-buddy.cjs +2 -0
- package/dist/utils/store-buddy.cjs.map +1 -0
- package/dist/utils/store-buddy.d.ts +4 -3
- package/dist/utils/store-buddy.js +2 -58
- package/dist/utils/store-buddy.js.map +1 -0
- package/dist/utils/time.cjs +2 -0
- package/dist/utils/time.cjs.map +1 -0
- package/dist/utils/time.d.ts +4 -2
- package/dist/utils/time.js +2 -12
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/utils.cjs +2 -0
- package/dist/utils/utils.cjs.map +1 -0
- package/dist/utils/utils.d.ts +6 -4
- package/dist/utils/utils.js +2 -47
- package/dist/utils/utils.js.map +1 -0
- package/dist/worker/md5.cjs +2 -0
- package/dist/worker/md5.cjs.map +1 -0
- package/dist/worker/md5.d.ts +3 -1
- package/dist/worker/md5.js +2 -24
- package/dist/worker/md5.js.map +1 -0
- package/dist/worker/sodium.cjs +2 -0
- package/dist/worker/sodium.cjs.map +1 -0
- package/dist/worker/sodium.d.ts +6 -3
- package/dist/worker/sodium.js +2 -118
- package/dist/worker/sodium.js.map +1 -0
- package/dist/worker/workerCodes.cjs +254 -0
- package/dist/worker/workerCodes.cjs.map +1 -0
- package/dist/worker/workerCodes.d.ts +4 -2
- package/dist/worker/workerCodes.js +4 -5
- package/dist/worker/workerCodes.js.map +1 -0
- package/dist/zeus/const.cjs +2 -0
- package/dist/zeus/const.cjs.map +1 -0
- package/dist/zeus/const.d.ts +5 -3
- package/dist/zeus/const.js +2 -1287
- package/dist/zeus/const.js.map +1 -0
- package/dist/zeus/index.cjs +5 -0
- package/dist/zeus/index.cjs.map +1 -0
- package/dist/zeus/index.d.ts +2215 -116
- package/dist/zeus/index.js +5 -562
- package/dist/zeus/index.js.map +1 -0
- package/package.json +21 -21
|
@@ -1,135 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
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{a as r,b as t}from"../../chunk-KMTF2BZE.js";import{Selector as u}from"../../zeus/index.js";const s=u("File")({id:!0,size:!0,sizeBefore:!0,createdAt:!0,md5:!0,md5Encrypted:!0,access:{key:!0,sharedBy:{keyPair:{pub:!0}}}}),e=u("User")({id:!0,firstname:!0,lastname:!0,email:!0,publicKey:!0}),i=u("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}),c=u("Node")(t(r({},i),{parent:i,children:i,history:s,current:s})),d=u("Mail")({id:!0,type:!0,body:!0,subject:!0,openedAt:!0,createdAt:!0,deletedAt:!0,recipients:t(r({},e),{publicKey:!1}),recipient:t(r({},e),{publicKey:!1}),sender:e,mailIntegrity:{id:!0,hash:!0,hashKey:!0,replyTo:{id:!0},temporaryRecipients:{email:!0},recipients:t(r({},e),{publicKey:!1})},mailIntegrityDraft:{id:!0,hash:!0,hashKey:!0,replyTo:{id:!0},temporaryRecipients:{email:!0},recipients:t(r({},e),{publicKey:!1})},files:{fileKey:!0,filename:!0,file:{id:!0}}});export{s as fileSelector,d as mailSelector,c as nodeFullSelector,i 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":"mDAAA,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,EAAEK,EAAAC,EAAA,GAC5CH,GAD4C,CAE/C,OAAQA,EACR,SAAUA,EACV,QAASF,EACT,QAASA,CACX,EAAC,EAEYM,EAAeP,EAAS,MAAM,EAAE,CAC3C,GAAI,GACJ,KAAM,GACN,KAAM,GACN,QAAS,GACT,SAAU,GACV,UAAW,GACX,UAAW,GACX,WAAYK,EAAAC,EAAA,GACPJ,GADO,CAEV,UAAW,EACb,GACA,UAAWG,EAAAC,EAAA,GACNJ,GADM,CAET,UAAW,EACb,GACA,OAAQA,EACR,cAAe,CACb,GAAI,GACJ,KAAM,GACN,QAAS,GACT,QAAS,CACP,GAAI,EACN,EACA,oBAAqB,CACnB,MAAO,EACT,EACA,WAAYG,EAAAC,EAAA,GACPJ,GADO,CAEV,UAAW,EACb,EACF,EACA,mBAAoB,CAClB,GAAI,GACJ,KAAM,GACN,QAAS,GACT,QAAS,CACP,GAAI,EACN,EACA,oBAAqB,CACnB,MAAO,EACT,EACA,WAAYG,EAAAC,EAAA,GACPJ,GADO,CAEV,UAAW,EACb,EACF,EACA,MAAO,CACL,QAAS,GACT,SAAU,GACV,KAAM,CACJ,GAAI,EACN,CACF,CACF,CAAC","names":["Selector","fileSelector","userSelector","nodeSelector","nodeFullSelector","__spreadProps","__spreadValues","mailSelector"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }require('../chunk-5WPCTUWH.cjs');var _sodiumjs = require('../sodium.js');var _sparkmd5 = require('spark-md5'); var _sparkmd52 = _interopRequireDefault(_sparkmd5);var _utilsjs = require('../utils/utils.js');function _(o,e){if(!o)throw new Error(e)}function k(){return _sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_keygen()}function T(o){let e=!1;const{state:t,header:y}=_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_init_push(o),l=(i,d)=>(_(e===!1,"state already destroyed"),_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_push(t,d,null,i));function p(){_(e===!1,"state already destroyed"),e=!0}return{encrypt:l,destroy:p,header:y}}function w(o,e){_(o.byteLength>=_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES,`header must be at least HEADERBYTES (${_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES}) long`),_(e.byteLength>=_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES,`key must be at least KEYBYTES (${_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES}) long`);let t=!1;const y=_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_init_pull(o,e),l=i=>(_(t===!1,"state already destroyed"),_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_pull(y,i));function p(){_(t===!1,"state already destroyed"),t=!0}return{decrypt:l,destroy:p}}const m=8192;async function F(o,e,t,y){await _sodiumjs.setup.call(void 0, );const{encrypt:l,destroy:p,header:i}=T(o),d=m+_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_ABYTES,c=Math.ceil(e.byteLength/m)*d+i.byteLength;t==null||t({percent:0,total:c,current:0});const h=new Uint8Array(c),n=new _sparkmd52.default.ArrayBuffer,u=new _sparkmd52.default.ArrayBuffer;h.set(i),n.append(i);let a=i.byteLength;t==null||t({percent:a/c,total:c,current:a});let E=a/c;for(const s of _utilsjs.chunks.call(void 0, e,m)){if(y!=null&&y.signal.aborted)throw new Error("Encrypt aborted");u.append(s);const b=s.length<m?_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL:_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE,f=l(b,s);n.append(f),h.set(f,a),a+=f.byteLength;const A=a/c;A>E+.01&&(t==null||t({percent:A,total:c,current:a}),E=A)}return p(),t==null||t({percent:1,total:a,current:a}),{data:h.slice(0,a),md5Encrypted:n.end(),md5:u.end()}}async function L(o,e,t,y){await _sodiumjs.setup.call(void 0, );const l=e.slice(0,_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);e=e.slice(_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);const{decrypt:p,destroy:i}=w(l,o),d=m+_sodiumjs.sodium.crypto_secretstream_xchacha20poly1305_ABYTES,c=Math.ceil(e.byteLength/d)*m;t==null||t({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, e,d)){if(y!=null&&y.signal.aborted)throw new Error("Decrypt aborted");const E=p(a);h.set(E.message,n),n+=E.message.byteLength;const s=n/c;s>u+.01&&(t==null||t({percent:s,total:c,current:n}),u=s)}return i(),t==null||t({percent:1,total:n,current:n}),h.slice(0,n)}exports.CHUNK_SIZE = m; exports.decryptSecretstream = L; exports.encryptSecretstream = F; exports.secretstreamKeygen = k;
|
|
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"]}
|
package/dist/crypto/file.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
declare type EncryptedFile = {
|
|
2
2
|
data: Uint8Array;
|
|
3
3
|
md5: string;
|
|
4
4
|
md5Encrypted: string;
|
|
5
5
|
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
declare function secretstreamKeygen(): Uint8Array;
|
|
7
|
+
declare const CHUNK_SIZE = 8192;
|
|
8
|
+
declare type Progress = {
|
|
9
9
|
percent: number;
|
|
10
10
|
total: number;
|
|
11
11
|
current: number;
|
|
12
12
|
};
|
|
13
|
-
|
|
14
|
-
|
|
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 };
|
package/dist/crypto/file.js
CHANGED
|
@@ -1,195 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
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 == null ? void 0 : 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 == null ? void 0 : 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 != null && 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 == null ? void 0 : progress({
|
|
90
|
-
percent,
|
|
91
|
-
total: max,
|
|
92
|
-
current: total
|
|
93
|
-
});
|
|
94
|
-
lastPercent = percent;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
destroy();
|
|
98
|
-
progress == null ? void 0 : 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 == null ? void 0 : 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 != null && 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 == null ? void 0 : progress({
|
|
137
|
-
percent,
|
|
138
|
-
total: max,
|
|
139
|
-
current: total
|
|
140
|
-
});
|
|
141
|
-
lastPercent = percent;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
destroy();
|
|
145
|
-
progress == null ? void 0 : 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"../chunk-KMTF2BZE.js";import{setup as x,sodium as r}from"../sodium.js";import S from"spark-md5";import{chunks as U}from"../utils/utils.js";function _(o,e){if(!o)throw new Error(e)}function k(){return r.crypto_secretstream_xchacha20poly1305_keygen()}function T(o){let e=!1;const{state:t,header:y}=r.crypto_secretstream_xchacha20poly1305_init_push(o),l=(i,d)=>(_(e===!1,"state already destroyed"),r.crypto_secretstream_xchacha20poly1305_push(t,d,null,i));function p(){_(e===!1,"state already destroyed"),e=!0}return{encrypt:l,destroy:p,header:y}}function w(o,e){_(o.byteLength>=r.crypto_secretstream_xchacha20poly1305_HEADERBYTES,`header must be at least HEADERBYTES (${r.crypto_secretstream_xchacha20poly1305_HEADERBYTES}) long`),_(e.byteLength>=r.crypto_secretstream_xchacha20poly1305_KEYBYTES,`key must be at least KEYBYTES (${r.crypto_secretstream_xchacha20poly1305_KEYBYTES}) long`);let t=!1;const y=r.crypto_secretstream_xchacha20poly1305_init_pull(o,e),l=i=>(_(t===!1,"state already destroyed"),r.crypto_secretstream_xchacha20poly1305_pull(y,i));function p(){_(t===!1,"state already destroyed"),t=!0}return{decrypt:l,destroy:p}}const m=8192;async function F(o,e,t,y){await x();const{encrypt:l,destroy:p,header:i}=T(o),d=m+r.crypto_secretstream_xchacha20poly1305_ABYTES,c=Math.ceil(e.byteLength/m)*d+i.byteLength;t==null||t({percent:0,total:c,current:0});const h=new Uint8Array(c),n=new S.ArrayBuffer,u=new S.ArrayBuffer;h.set(i),n.append(i);let a=i.byteLength;t==null||t({percent:a/c,total:c,current:a});let E=a/c;for(const s of U(e,m)){if(y!=null&&y.signal.aborted)throw new Error("Encrypt aborted");u.append(s);const b=s.length<m?r.crypto_secretstream_xchacha20poly1305_TAG_FINAL:r.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE,f=l(b,s);n.append(f),h.set(f,a),a+=f.byteLength;const A=a/c;A>E+.01&&(t==null||t({percent:A,total:c,current:a}),E=A)}return p(),t==null||t({percent:1,total:a,current:a}),{data:h.slice(0,a),md5Encrypted:n.end(),md5:u.end()}}async function L(o,e,t,y){await x();const l=e.slice(0,r.crypto_secretstream_xchacha20poly1305_HEADERBYTES);e=e.slice(r.crypto_secretstream_xchacha20poly1305_HEADERBYTES);const{decrypt:p,destroy:i}=w(l,o),d=m+r.crypto_secretstream_xchacha20poly1305_ABYTES,c=Math.ceil(e.byteLength/d)*m;t==null||t({percent:0,total:c,current:0});const h=new Uint8Array(c);let n=0,u=n/c;for(const a of U(e,d)){if(y!=null&&y.signal.aborted)throw new Error("Decrypt aborted");const E=p(a);h.set(E.message,n),n+=E.message.byteLength;const s=n/c;s>u+.01&&(t==null||t({percent:s,total:c,current:n}),u=s)}return i(),t==null||t({percent:1,total:n,current:n}),h.slice(0,n)}export{m as CHUNK_SIZE,L as decryptSecretstream,F as encryptSecretstream,k 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":"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","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});require('../chunk-5WPCTUWH.cjs');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":"8BAAA,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"]}
|
package/dist/crypto/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
interface KeyPair {
|
|
2
2
|
publicKey: string;
|
|
3
3
|
privateKey: string;
|
|
4
4
|
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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 };
|
package/dist/crypto/index.js
CHANGED
|
@@ -1,45 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export function encryptCryptoBox(data, publicKeyBob, privateKeyAlice) {
|
|
4
|
-
const nonce = sodium.randombytes_buf(sodium.crypto_box_NONCEBYTES);
|
|
5
|
-
const crypt = sodium.crypto_box_easy(data, nonce, sodium.from_hex(publicKeyBob), sodium.from_hex(privateKeyAlice));
|
|
6
|
-
return concatenate(nonce, crypt);
|
|
7
|
-
}
|
|
8
|
-
export function generateCryptoBoxKeyPair() {
|
|
9
|
-
return sodium.crypto_box_keypair("hex");
|
|
10
|
-
}
|
|
11
|
-
export function decryptCryptoBox(data, publicKeyAlice, privateKeyBob) {
|
|
12
|
-
if (data.length < sodium.crypto_box_NONCEBYTES + sodium.crypto_box_MACBYTES) {
|
|
13
|
-
throw "data too short";
|
|
14
|
-
}
|
|
15
|
-
const nonce = data.slice(0, sodium.crypto_box_NONCEBYTES);
|
|
16
|
-
const cipher = data.slice(sodium.crypto_box_NONCEBYTES);
|
|
17
|
-
return sodium.crypto_box_open_easy(cipher, nonce, sodium.from_hex(publicKeyAlice), sodium.from_hex(privateKeyBob));
|
|
18
|
-
}
|
|
19
|
-
export function generateSecretBoxKey() {
|
|
20
|
-
return sodium.randombytes_buf(sodium.crypto_secretbox_KEYBYTES, "hex");
|
|
21
|
-
}
|
|
22
|
-
export function encryptSecretBox(data, key) {
|
|
23
|
-
const nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);
|
|
24
|
-
const crypt = sodium.crypto_secretbox_easy(data, nonce, sodium.from_hex(key));
|
|
25
|
-
return concatenate(nonce, crypt);
|
|
26
|
-
}
|
|
27
|
-
export function decryptSecretBox(data, key) {
|
|
28
|
-
if (data.length < sodium.crypto_secretbox_NONCEBYTES + sodium.crypto_secretbox_MACBYTES) {
|
|
29
|
-
throw "data too short";
|
|
30
|
-
}
|
|
31
|
-
const nonce = data.slice(0, sodium.crypto_secretbox_NONCEBYTES);
|
|
32
|
-
const cipher = data.slice(sodium.crypto_secretbox_NONCEBYTES);
|
|
33
|
-
return sodium.crypto_secretbox_open_easy(cipher, nonce, sodium.from_hex(key));
|
|
34
|
-
}
|
|
35
|
-
export function encryptAnonymous(data, receiverPublicKey) {
|
|
36
|
-
return sodium.crypto_box_seal(data, sodium.from_hex(receiverPublicKey));
|
|
37
|
-
}
|
|
38
|
-
export function decryptAnonymous(data, _ref) {
|
|
39
|
-
let {
|
|
40
|
-
privateKey,
|
|
41
|
-
publicKey
|
|
42
|
-
} = _ref;
|
|
43
|
-
return sodium.crypto_box_seal_open(data, sodium.from_hex(publicKey), sodium.from_hex(privateKey));
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25jYXRlbmF0ZSIsInNvZGl1bSIsImVuY3J5cHRDcnlwdG9Cb3giLCJkYXRhIiwicHVibGljS2V5Qm9iIiwicHJpdmF0ZUtleUFsaWNlIiwibm9uY2UiLCJyYW5kb21ieXRlc19idWYiLCJjcnlwdG9fYm94X05PTkNFQllURVMiLCJjcnlwdCIsImNyeXB0b19ib3hfZWFzeSIsImZyb21faGV4IiwiZ2VuZXJhdGVDcnlwdG9Cb3hLZXlQYWlyIiwiY3J5cHRvX2JveF9rZXlwYWlyIiwiZGVjcnlwdENyeXB0b0JveCIsInB1YmxpY0tleUFsaWNlIiwicHJpdmF0ZUtleUJvYiIsImxlbmd0aCIsImNyeXB0b19ib3hfTUFDQllURVMiLCJzbGljZSIsImNpcGhlciIsImNyeXB0b19ib3hfb3Blbl9lYXN5IiwiZ2VuZXJhdGVTZWNyZXRCb3hLZXkiLCJjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTIiwiZW5jcnlwdFNlY3JldEJveCIsImtleSIsImNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyIsImNyeXB0b19zZWNyZXRib3hfZWFzeSIsImRlY3J5cHRTZWNyZXRCb3giLCJjcnlwdG9fc2VjcmV0Ym94X01BQ0JZVEVTIiwiY3J5cHRvX3NlY3JldGJveF9vcGVuX2Vhc3kiLCJlbmNyeXB0QW5vbnltb3VzIiwicmVjZWl2ZXJQdWJsaWNLZXkiLCJjcnlwdG9fYm94X3NlYWwiLCJkZWNyeXB0QW5vbnltb3VzIiwicHJpdmF0ZUtleSIsInB1YmxpY0tleSIsImNyeXB0b19ib3hfc2VhbF9vcGVuIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NyeXB0by9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25jYXRlbmF0ZSB9IGZyb20gXCIuLi91dGlscy91dGlscy5qc1wiO1xuaW1wb3J0IHsgc29kaXVtIH0gZnJvbSBcIi4uL3NvZGl1bS5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEtleVBhaXIge1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgcHJpdmF0ZUtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdENyeXB0b0JveChcbiAgZGF0YTogVWludDhBcnJheSxcbiAgcHVibGljS2V5Qm9iOiBzdHJpbmcsXG4gIHByaXZhdGVLZXlBbGljZTogc3RyaW5nXG4pOiBVaW50OEFycmF5IHtcbiAgY29uc3Qgbm9uY2UgPSBzb2RpdW0ucmFuZG9tYnl0ZXNfYnVmKHNvZGl1bS5jcnlwdG9fYm94X05PTkNFQllURVMpO1xuICBjb25zdCBjcnlwdCA9IHNvZGl1bS5jcnlwdG9fYm94X2Vhc3koXG4gICAgZGF0YSxcbiAgICBub25jZSxcbiAgICBzb2RpdW0uZnJvbV9oZXgocHVibGljS2V5Qm9iKSxcbiAgICBzb2RpdW0uZnJvbV9oZXgocHJpdmF0ZUtleUFsaWNlKVxuICApO1xuICByZXR1cm4gY29uY2F0ZW5hdGUobm9uY2UsIGNyeXB0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ3J5cHRvQm94S2V5UGFpcigpOiBLZXlQYWlyIHtcbiAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fYm94X2tleXBhaXIoXCJoZXhcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNyeXB0Q3J5cHRvQm94KFxuICBkYXRhOiBVaW50OEFycmF5LFxuICBwdWJsaWNLZXlBbGljZTogc3RyaW5nLFxuICBwcml2YXRlS2V5Qm9iOiBzdHJpbmdcbik6IFVpbnQ4QXJyYXkge1xuICBpZiAoZGF0YS5sZW5ndGggPCBzb2RpdW0uY3J5cHRvX2JveF9OT05DRUJZVEVTICsgc29kaXVtLmNyeXB0b19ib3hfTUFDQllURVMpIHtcbiAgICB0aHJvdyBcImRhdGEgdG9vIHNob3J0XCI7XG4gIH1cbiAgY29uc3Qgbm9uY2UgPSBkYXRhLnNsaWNlKDAsIHNvZGl1bS5jcnlwdG9fYm94X05PTkNFQllURVMpO1xuICBjb25zdCBjaXBoZXIgPSBkYXRhLnNsaWNlKHNvZGl1bS5jcnlwdG9fYm94X05PTkNFQllURVMpO1xuICByZXR1cm4gc29kaXVtLmNyeXB0b19ib3hfb3Blbl9lYXN5KFxuICAgIGNpcGhlcixcbiAgICBub25jZSxcbiAgICBzb2RpdW0uZnJvbV9oZXgocHVibGljS2V5QWxpY2UpLFxuICAgIHNvZGl1bS5mcm9tX2hleChwcml2YXRlS2V5Qm9iKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTZWNyZXRCb3hLZXkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNvZGl1bS5yYW5kb21ieXRlc19idWYoc29kaXVtLmNyeXB0b19zZWNyZXRib3hfS0VZQllURVMsIFwiaGV4XCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFNlY3JldEJveChkYXRhOiBVaW50OEFycmF5LCBrZXk6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICBjb25zdCBub25jZSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoc29kaXVtLmNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyk7XG4gIGNvbnN0IGNyeXB0ID0gc29kaXVtLmNyeXB0b19zZWNyZXRib3hfZWFzeShkYXRhLCBub25jZSwgc29kaXVtLmZyb21faGV4KGtleSkpO1xuICByZXR1cm4gY29uY2F0ZW5hdGUobm9uY2UsIGNyeXB0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRTZWNyZXRCb3goZGF0YTogVWludDhBcnJheSwga2V5OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgaWYgKFxuICAgIGRhdGEubGVuZ3RoIDxcbiAgICBzb2RpdW0uY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTICsgc29kaXVtLmNyeXB0b19zZWNyZXRib3hfTUFDQllURVNcbiAgKSB7XG4gICAgdGhyb3cgXCJkYXRhIHRvbyBzaG9ydFwiO1xuICB9XG4gIGNvbnN0IG5vbmNlID0gZGF0YS5zbGljZSgwLCBzb2RpdW0uY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTKTtcbiAgY29uc3QgY2lwaGVyID0gZGF0YS5zbGljZShzb2RpdW0uY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTKTtcbiAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fc2VjcmV0Ym94X29wZW5fZWFzeShjaXBoZXIsIG5vbmNlLCBzb2RpdW0uZnJvbV9oZXgoa2V5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0QW5vbnltb3VzKFxuICBkYXRhOiBVaW50OEFycmF5LFxuICByZWNlaXZlclB1YmxpY0tleTogc3RyaW5nXG4pOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fYm94X3NlYWwoZGF0YSwgc29kaXVtLmZyb21faGV4KHJlY2VpdmVyUHVibGljS2V5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNyeXB0QW5vbnltb3VzKFxuICBkYXRhOiBVaW50OEFycmF5LFxuICB7IHByaXZhdGVLZXksIHB1YmxpY0tleSB9OiBLZXlQYWlyXG4pOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fYm94X3NlYWxfb3BlbihcbiAgICBkYXRhLFxuICAgIHNvZGl1bS5mcm9tX2hleChwdWJsaWNLZXkpLFxuICAgIHNvZGl1bS5mcm9tX2hleChwcml2YXRlS2V5KVxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxXQUFXLFFBQVEsbUJBQW1CO0FBQy9DLFNBQVNDLE1BQU0sUUFBUSxjQUFjO0FBT3JDLE9BQU8sU0FBU0MsZ0JBQWdCLENBQzlCQyxJQUFnQixFQUNoQkMsWUFBb0IsRUFDcEJDLGVBQXVCLEVBQ1g7RUFDWixNQUFNQyxLQUFLLEdBQUdMLE1BQU0sQ0FBQ00sZUFBZSxDQUFDTixNQUFNLENBQUNPLHFCQUFxQixDQUFDO0VBQ2xFLE1BQU1DLEtBQUssR0FBR1IsTUFBTSxDQUFDUyxlQUFlLENBQ2xDUCxJQUFJLEVBQ0pHLEtBQUssRUFDTEwsTUFBTSxDQUFDVSxRQUFRLENBQUNQLFlBQVksQ0FBQyxFQUM3QkgsTUFBTSxDQUFDVSxRQUFRLENBQUNOLGVBQWUsQ0FBQyxDQUNqQztFQUNELE9BQU9MLFdBQVcsQ0FBQ00sS0FBSyxFQUFFRyxLQUFLLENBQUM7QUFD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
|
|
1
|
+
import"../chunk-KMTF2BZE.js";import{concatenate as y}from"../utils/utils.js";import{sodium as r}from"../sodium.js";function p(t,o,e){const n=r.randombytes_buf(r.crypto_box_NONCEBYTES),c=r.crypto_box_easy(t,n,r.from_hex(o),r.from_hex(e));return y(n,c)}function s(){return r.crypto_box_keypair("hex")}function x(t,o,e){if(t.length<r.crypto_box_NONCEBYTES+r.crypto_box_MACBYTES)throw"data too short";const n=t.slice(0,r.crypto_box_NONCEBYTES),c=t.slice(r.crypto_box_NONCEBYTES);return r.crypto_box_open_easy(c,n,r.from_hex(o),r.from_hex(e))}function a(){return r.randombytes_buf(r.crypto_secretbox_KEYBYTES,"hex")}function b(t,o){const e=r.randombytes_buf(r.crypto_secretbox_NONCEBYTES),n=r.crypto_secretbox_easy(t,e,r.from_hex(o));return y(e,n)}function f(t,o){if(t.length<r.crypto_secretbox_NONCEBYTES+r.crypto_secretbox_MACBYTES)throw"data too short";const e=t.slice(0,r.crypto_secretbox_NONCEBYTES),n=t.slice(r.crypto_secretbox_NONCEBYTES);return r.crypto_secretbox_open_easy(n,e,r.from_hex(o))}function u(t,o){return r.crypto_box_seal(t,r.from_hex(o))}function E(t,{privateKey:o,publicKey:e}){return r.crypto_box_seal_open(t,r.from_hex(e),r.from_hex(o))}export{E as decryptAnonymous,x as decryptCryptoBox,f as decryptSecretBox,u as encryptAnonymous,p as encryptCryptoBox,b as encryptSecretBox,s as generateCryptoBoxKeyPair,a as generateSecretBoxKey};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/crypto/index.ts"],"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"],"mappings":"6BAAA,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","names":["concatenate","sodium","encryptCryptoBox","data","publicKeyBob","privateKeyAlice","nonce","crypt","generateCryptoBoxKeyPair","decryptCryptoBox","publicKeyAlice","privateKeyBob","cipher","generateSecretBoxKey","encryptSecretBox","key","decryptSecretBox","encryptAnonymous","receiverPublicKey","decryptAnonymous","privateKey","publicKey"]}
|
package/dist/error.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";//# sourceMappingURL=error.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|