@cloudpss/crypto 0.5.25 → 0.5.26
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/benchmark.js +2 -2
- package/dist/encryption/browser.js +1 -2
- package/dist/encryption/browser.js.map +1 -1
- package/dist/encryption/common.js +4 -2
- package/dist/encryption/common.js.map +1 -1
- package/dist/encryption/module.d.ts +1 -1
- package/dist/encryption/module.js.map +1 -1
- package/dist/encryption/{pure-js.d.ts → wasm.d.ts} +2 -2
- package/dist/encryption/wasm.js +21 -0
- package/dist/encryption/wasm.js.map +1 -0
- package/lib/wasm.d.ts +26 -0
- package/lib/wasm.js +149 -0
- package/package.json +10 -12
- package/src/encryption/browser.ts +1 -2
- package/src/encryption/common.ts +6 -2
- package/src/encryption/module.ts +1 -1
- package/src/encryption/wasm.ts +46 -0
- package/tests/encryption.js +48 -29
- package/tsconfig.json +2 -1
- package/wasm-build.js +30 -0
- package/dist/encryption/js/aes.d.ts +0 -20
- package/dist/encryption/js/aes.js +0 -151
- package/dist/encryption/js/aes.js.map +0 -1
- package/dist/encryption/js/gcm.d.ts +0 -26
- package/dist/encryption/js/gcm.js +0 -226
- package/dist/encryption/js/gcm.js.map +0 -1
- package/dist/encryption/pure-js.js +0 -82
- package/dist/encryption/pure-js.js.map +0 -1
- package/src/encryption/js/aes.ts +0 -191
- package/src/encryption/js/gcm.ts +0 -258
- package/src/encryption/pure-js.ts +0 -105
package/benchmark.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import prettyBytes from 'pretty-bytes';
|
|
3
3
|
import files from '../../benchmark-files/index.js';
|
|
4
4
|
import { createModule } from './dist/encryption/module.js';
|
|
5
|
-
import * as
|
|
5
|
+
import * as wasm from './dist/encryption/wasm.js';
|
|
6
6
|
import * as web from './dist/encryption/web.js';
|
|
7
7
|
import * as node from './dist/encryption/node.js';
|
|
8
8
|
|
|
@@ -30,7 +30,7 @@ function createTest(/** @type {string} */ name, { encrypt, decrypt }, /** @type
|
|
|
30
30
|
const tests = [
|
|
31
31
|
createTest('web', createModule(web)),
|
|
32
32
|
createTest('node', createModule(node)),
|
|
33
|
-
createTest('
|
|
33
|
+
createTest('wasm', createModule(wasm)),
|
|
34
34
|
];
|
|
35
35
|
for await (const { file, data } of files()) {
|
|
36
36
|
console.log(`File: ${file} \tRaw: ${pb(data.length)}`);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
2
2
|
const module = () => {
|
|
3
3
|
if (typeof crypto == 'object' &&
|
|
4
|
-
typeof crypto.getRandomValues == 'function' &&
|
|
5
4
|
typeof crypto.subtle == 'object' &&
|
|
6
5
|
typeof crypto.subtle.importKey == 'function' &&
|
|
7
6
|
typeof crypto.subtle.deriveKey == 'function' &&
|
|
@@ -10,7 +9,7 @@ const module = () => {
|
|
|
10
9
|
return import('./web.js');
|
|
11
10
|
}
|
|
12
11
|
else {
|
|
13
|
-
return import('./
|
|
12
|
+
return import('./wasm.js');
|
|
14
13
|
}
|
|
15
14
|
};
|
|
16
15
|
/** browser encrypt */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/encryption/browser.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,MAAM,GAAG,GAAG,EAAE;IAChB,IACI,OAAO,MAAM,IAAI,QAAQ;QACzB,OAAO,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/encryption/browser.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,MAAM,GAAG,GAAG,EAAE;IAChB,IACI,OAAO,MAAM,IAAI,QAAQ;QACzB,OAAO,MAAM,CAAC,MAAM,IAAI,QAAQ;QAChC,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,UAAU;QAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,UAAU;QAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,UAAU;QAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,UAAU,EAC5C,CAAC;QACC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACJ,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;AACL,CAAC,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAe,EAAE,UAAkB;IAC7D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;IACnC,OAAO,MAAM,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,sBAAsB;AACtB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAmB,EAAE,UAAkB;IACjE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;IACnC,OAAO,MAAM,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -47,11 +47,13 @@ export function parseEncrypted(data) {
|
|
|
47
47
|
(buffer[MAGIC_NUMBER.length + NONCE_SIZE + 1] << 16) |
|
|
48
48
|
(buffer[MAGIC_NUMBER.length + NONCE_SIZE + 2] << 8) |
|
|
49
49
|
buffer[MAGIC_NUMBER.length + NONCE_SIZE + 3];
|
|
50
|
-
if (aadSize > AAD_MAX_SIZE || aadSize < 0)
|
|
50
|
+
if (aadSize > AAD_MAX_SIZE || aadSize < 0) {
|
|
51
51
|
return undefined;
|
|
52
|
+
}
|
|
52
53
|
const paddingAadSize = padding(aadSize, AAD_PADDING);
|
|
53
|
-
if (buffer.byteLength < paddingAadSize + MIN_ENCRYPTED_SIZE)
|
|
54
|
+
if (buffer.byteLength < paddingAadSize + MIN_ENCRYPTED_SIZE) {
|
|
54
55
|
return undefined;
|
|
56
|
+
}
|
|
55
57
|
const aad = aadSize
|
|
56
58
|
? buffer.subarray(MAGIC_NUMBER.length + NONCE_SIZE + AAD_LEN_SIZE, MAGIC_NUMBER.length + NONCE_SIZE + AAD_LEN_SIZE + aadSize)
|
|
57
59
|
: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/encryption/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,kBAAkB;AAClB,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AACzC,qBAAqB;AACrB,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC;AACjC,qBAAqB;AACrB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AACvD,uBAAuB;AACvB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAE9B,aAAa;AACb,kBAAkB;AAClB,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC;AACnC,mBAAmB;AACnB,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC;AACpC,wBAAwB;AACxB,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC;AAoBpC;;;;;;;;;;;;;GAaG;AAEH,oBAAoB;AACpB,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE9F,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;AAE1F,eAAe;AACf,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,OAAe;IACjD,OAAO,CAAC,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,UAAU,GAAG,kBAAkB;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IACrF,MAAM,OAAO,GACT,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,YAAY,IAAI,OAAO,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/encryption/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,5 +18,5 @@ interface Module {
|
|
|
18
18
|
decrypt(data: BinaryData, passphrase: string): Promise<Uint8Array>;
|
|
19
19
|
}
|
|
20
20
|
/** 创建模块 */
|
|
21
|
-
export declare function createModule(impl: typeof import('#encryption')): Module;
|
|
21
|
+
export declare function createModule(impl: typeof import('#encryption') | typeof import('./wasm.js')): Module;
|
|
22
22
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/encryption/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACH,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,OAAO,EACP,cAAc,GAEjB,MAAM,aAAa,CAAC;AAErB,WAAW;AACX,SAAS,gBAAgB,CAAC,UAAkB;IACxC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IACjE,CAAC;AACL,CAAC;AAsBD,WAAW;AACX,MAAM,UAAU,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/encryption/module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type EncryptedData, type PlainData } from './common.js';
|
|
2
2
|
/** crypto-js encrypt */
|
|
3
|
-
export declare function encrypt({ data, aad }: PlainData, passphrase: string):
|
|
3
|
+
export declare function encrypt({ data, aad }: PlainData, passphrase: string): EncryptedData;
|
|
4
4
|
/** crypto-js decrypt */
|
|
5
|
-
export declare function decrypt({ data, aad, nonce }: EncryptedData, passphrase: string):
|
|
5
|
+
export declare function decrypt({ data, aad, nonce }: EncryptedData, passphrase: string): PlainData;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NONCE_SIZE, AES_KEY_SIZE, AES_TAG_SIZE, PBKDF2_ITERATIONS, } from './common.js';
|
|
2
|
+
import * as mod from '#lib-wasm';
|
|
3
|
+
const EMPTY = new Uint8Array(0);
|
|
4
|
+
const encoder = new TextEncoder();
|
|
5
|
+
/** crypto-js encrypt */
|
|
6
|
+
export function encrypt({ data, aad }, passphrase) {
|
|
7
|
+
const nonce = crypto.getRandomValues(new Uint8Array(NONCE_SIZE));
|
|
8
|
+
const result = mod.encrypt(encoder.encode(passphrase), data, aad ?? EMPTY, nonce, PBKDF2_ITERATIONS, AES_KEY_SIZE, AES_TAG_SIZE);
|
|
9
|
+
return {
|
|
10
|
+
nonce,
|
|
11
|
+
data: result,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** crypto-js decrypt */
|
|
15
|
+
export function decrypt({ data, aad, nonce }, passphrase) {
|
|
16
|
+
const decrypted = mod.decrypt(encoder.encode(passphrase), data, aad ?? EMPTY, nonce, PBKDF2_ITERATIONS, AES_KEY_SIZE, AES_TAG_SIZE);
|
|
17
|
+
return {
|
|
18
|
+
data: decrypted,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=wasm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../src/encryption/wasm.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,YAAY,EACZ,YAAY,EAEZ,iBAAiB,GAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AAEjC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,wBAAwB;AACxB,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAa,EAAE,UAAkB;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CACtB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAC1B,IAAI,EACJ,GAAG,IAAI,KAAK,EACZ,KAAK,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,CACf,CAAC;IACF,OAAO;QACH,KAAK;QACL,IAAI,EAAE,MAAM;KACf,CAAC;AACN,CAAC;AAED,wBAAwB;AACxB,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAiB,EAAE,UAAkB;IAC3E,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CACzB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAC1B,IAAI,EACJ,GAAG,IAAI,KAAK,EACZ,KAAK,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,CACf,CAAC;IACF,OAAO;QACH,IAAI,EAAE,SAAS;KAClB,CAAC;AACN,CAAC"}
|
package/lib/wasm.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
/**
|
|
4
|
+
* Encrypts the given data using PBKDF2 and AES-GCM.
|
|
5
|
+
* @param {Uint8Array} passphrase
|
|
6
|
+
* @param {Uint8Array} data
|
|
7
|
+
* @param {Uint8Array} aad
|
|
8
|
+
* @param {Uint8Array} nonce
|
|
9
|
+
* @param {number} pbkdf2_iterations
|
|
10
|
+
* @param {number} aes_key_size
|
|
11
|
+
* @param {number} aes_tag_size
|
|
12
|
+
* @returns {Uint8Array}
|
|
13
|
+
*/
|
|
14
|
+
export function encrypt(passphrase: Uint8Array, data: Uint8Array, aad: Uint8Array, nonce: Uint8Array, pbkdf2_iterations: number, aes_key_size: number, aes_tag_size: number): Uint8Array;
|
|
15
|
+
/**
|
|
16
|
+
* Decrypts the given data using PBKDF2 and AES-GCM.
|
|
17
|
+
* @param {Uint8Array} passphrase
|
|
18
|
+
* @param {Uint8Array} data
|
|
19
|
+
* @param {Uint8Array} aad
|
|
20
|
+
* @param {Uint8Array} nonce
|
|
21
|
+
* @param {number} pbkdf2_iterations
|
|
22
|
+
* @param {number} aes_key_size
|
|
23
|
+
* @param {number} aes_tag_size
|
|
24
|
+
* @returns {Uint8Array}
|
|
25
|
+
*/
|
|
26
|
+
export function decrypt(passphrase: Uint8Array, data: Uint8Array, aad: Uint8Array, nonce: Uint8Array, pbkdf2_iterations: number, aes_key_size: number, aes_tag_size: number): Uint8Array;
|
package/lib/wasm.js
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __export = (target, all) => {
|
|
3
|
+
for (var name in all)
|
|
4
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
+
};
|
|
6
|
+
var __toBinary = /* @__PURE__ */ (() => {
|
|
7
|
+
var table = new Uint8Array(128);
|
|
8
|
+
for (var i = 0; i < 64; i++)
|
|
9
|
+
table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;
|
|
10
|
+
return (base64) => {
|
|
11
|
+
var n = base64.length, bytes = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0);
|
|
12
|
+
for (var i2 = 0, j = 0; i2 < n; ) {
|
|
13
|
+
var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];
|
|
14
|
+
var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];
|
|
15
|
+
bytes[j++] = c0 << 2 | c1 >> 4;
|
|
16
|
+
bytes[j++] = c1 << 4 | c2 >> 2;
|
|
17
|
+
bytes[j++] = c2 << 6 | c3;
|
|
18
|
+
}
|
|
19
|
+
return bytes;
|
|
20
|
+
};
|
|
21
|
+
})();
|
|
22
|
+
|
|
23
|
+
// wasm-module:C:\Users\lzy\Documents\Sources\cloudpssnet\sdk\packages\05-crypto\wasm\pkg\wasm_bg.wasm
|
|
24
|
+
var wasm_bg_exports = {};
|
|
25
|
+
__export(wasm_bg_exports, {
|
|
26
|
+
__wbindgen_add_to_stack_pointer: () => __wbindgen_add_to_stack_pointer,
|
|
27
|
+
__wbindgen_export_0: () => __wbindgen_export_0,
|
|
28
|
+
__wbindgen_export_1: () => __wbindgen_export_1,
|
|
29
|
+
decrypt: () => decrypt,
|
|
30
|
+
encrypt: () => encrypt,
|
|
31
|
+
instance: () => instance,
|
|
32
|
+
memory: () => memory,
|
|
33
|
+
module: () => module
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// wasm-embedded:C:\Users\lzy\Documents\Sources\cloudpssnet\sdk\packages\05-crypto\wasm\pkg\wasm_bg.wasm
|
|
37
|
+
var wasm_bg_default = __toBinary("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IABBGHZycjYC6AIgBiAGKALMASIAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZycjYC5AIgBiAGKALIASIAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZycjYC4AIgBiAGKALEASIAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZycjYC3AIgBiAGKALAASIAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZycjYC2AIgBiAGKAK8ASIAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZycjYC1AIgBiAGKAK4ASIAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZycjYC0AIMAQsgBkHQAmogACABEEAaCyAGQfABaiAGQYgDaikDADcDACAGQegBaiAGQYADaikDADcDACAGQeABaiAGQfgCaikDADcDACAGQdgBaiAGQfACaikDADcDACAGQdABaiAGQegCaikDADcDACAGQcgBaiAGQeACaikDADcDACAGQcABaiAGQdgCaikDADcDACAGIAYpA9ACNwO4AUEAIQADQCAGQbgBaiAAaiIBIAEtAABBNnM6AAAgAUEBaiIHIActAABBNnM6AAAgAUECaiIHIActAABBNnM6AAAgAUEDaiIBIAEtAABBNnM6AAAgAEEEaiIAQcAARw0AC0EAIQAgBkGoA2pB0IHAACkDADcDACAGQaADakHIgcAAKQMANwMAIAZBmANqQcCBwAApAwA3AwAgBkIBNwOwAyAGQbiBwAApAwA3A5ADIAZBkANqIAZBuAFqQQEQAANAIAZBuAFqIABqIgEgAS0AAEHqAHM6AAAgAUEBaiIHIActAABB6gBzOgAAIAFBAmoiByAHLQAAQeoAczoAACABQQNqIgEgAS0AAEHqAHM6AAAgAEEEaiIAQcAARw0ACyAGQThqIgBB0IHAACkDADcDACAGQTBqIgFByIHAACkDADcDACAGQShqIgdBwIHAACkDADcDACAGQgE3A0AgBkG4gcAAKQMANwMgIAZBIGogBkG4AWpBARAAIAZBGGoiCSAAKQMANwMAIAZBEGoiCCABKQMANwMAIAZBCGoiCiAHKQMANwMAIAZB2AJqIgwgBkGYA2opAwA3AwAgBkHgAmoiCyAGQaADaikDADcDACAGQegC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AUEEai0AACEVIAFBBWotAAAhFiABQQZqLQAAIRcgAUEHai0AACEYIAFBCGotAAAhGSABQQlqLQAAIRogAUEKai0AACEbIAFBC2otAAAhHCABQQxqLQAAIR0gAUENai0AACEeIAFBDmotAAAhHyABQQ9qLQAAISAgAUEQai0AACEiIAFBEWotAAAhIyABQRJqLQAAISQgAUETai0AACElIAFBFGotAAAhJiABQRVqLQAAIScgAUEWai0AACEoIAFBF2otAAAhKSABQRhqLQAAISogAUEZai0AACErIAFBGmotAAAhLCABQRtqLQAAIS0gAUEcai0AACEuIAFBHWotAAAhLyABQR5qLQAAITAgBy0AACEHIAYtAAAhBiADLQAAITEgAi0AACEyIAItAAEhMyACLQACITQgAi0AAyE1IAItAAQhNiACLQAFITcgAi0ABiE4IAItAAchOSACLQAJITogAi0ACiE7IAItAAshPCACLQAMIT0gAi0ADSE+IAItAA4hPyACLQAPIUAgAi0AESFBIAItABIhQiACLQATIUMgAi0AFCFEIAItABUhRSACLQAWIUYgAi0AFyFHIAItABkhSCACLQAaIUkgAi0AGyFKIAItABwhSyACLQAdIUwgAi0AHiFNIAQgIWoiA0EfaiACLQAfIAFBH2otAABzOgAAIANBHmogMCBNczoAACADQR1qIC8gTHM6AAAgA0EcaiAuIEtzOgAAIANBG2ogLSBKczoAACADQRpqICwgSXM6AAAgA0EZaiArIEhzOgAAIANBGGogKiAxczoAACADQRdqICkgR3M6AAAgA0EWaiAoIEZzOgAAIANBFWogJyBFczoAACADQRRqICYgRHM6AAAgA0ETaiAlIENzOgAAIANBEmogJCBCczoAACADQRFqICMgQXM6AAAgA0EQaiAGICJzOgAAIANBD2ogICBAczoAACADQQ5qIB8gP3M6AAAgA0ENaiAeID5zOgAAIANBDGogHSA9czoAACADQQtqIBwgPHM6AAAgA0EKaiAbIDtzOgAAIANBCWogGiA6czoAACADQQhqIAcgGXM6AAAgA0EHaiAYIDlzOgAAIANBBmogFyA4czoAACADQQVqIBYgN3M6AAAgA0EEaiAVIDZzOgAAIANBA2ogFCA1czoAACADQQJqIBMgNHM6AAAgA0EBaiASIDNz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RQ0AQQAhAQJAQYCTwAAoAgAiBEEpSQ0AQdyQwAAhAANAIAIgACgCACIFTwRAIAUgACgCBGogAksNAgsgACgCCCIADQALC0HkkMAAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQZyTwABB/x8gASABQf8fTRs2AgAgAyAETw0AQZSTwABBfzYCAAsPCyAAQXhxQeyQwABqIQICf0H0ksAAKAIAIgNBASAAQQN2dCIAcUUEQEH0ksAAIAAgA3I2AgAgAgwBCyACKAIICyEAIAIgATYCCCAAIAE2AgwgASACNgIMIAEgADYCCA8LQYSTwAAgATYCAEH8ksAAQfySwAAoAgAgAGoiADYCACABIABBAXI2AgQgACABaiAANgIAC4YFAQp/IwBBMGsiAyQAIANBJGogATYCACADQQM6ACwgA0EgNgIcIANBADYCKCADIAA2AiAgA0EANgIUIANBADYCDAJ/AkACQAJAIAIoAhAiCkUEQCACQQxqKAIAIgBFDQEgAigCCCIBIABBA3RqIQQgAEEBa0H/////AXFBAWohByACKAIAIQADQCAAQQRqKAIAIgUEQCADKAIgIAAoAgAgBSADKAIkKAIMEQIADQQLIAEoAgAgA0EMaiABQQRqKAIAEQEADQMgAEEIaiEAIAFBCGoiASAERw0ACwwBCyACQRRqKAIAIgBFDQAgAEEFdCELIABBAWtB////P3FBAWohByACKAIIIQUgAigCACEAA0AgAEEEaigCACIBBEAgAygCICAAKAIAIAEgAygCJCgCDBECAA0DCyADIAggCmoiAUEQaigCADYCHCADIAFBHGotAAA6ACwgAyABQRhqKAIANgIoIAFBDGooAgAhBkEAIQlBACEEAkACQAJAIAFBCGooAgBBAWsOAgACAQsgBkEDdCAFaiIMKAIEQRVHDQEgDCgCACgCACEGC0EBIQQLIAMgBjYCECADIAQ2AgwgAUEEaigCACEEAkACQAJAIAEoAgBBAWsOAgACAQsgBEEDdCAFaiIGKAIEQRVHDQEgBigCACgCACEEC0EBIQkLIAMgBDYCGCADIAk2AhQgBSABQRRqKAIAQQN0aiIBKAIAIANBDGogAUEEaigCABEBAA0CIABBCGohACALIAhBIGoiCEcNAAsLIAcgAigCBE8NASADKAIgIAIoAgAgB0EDdGoiACgC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FyAAIAFBEGoQHgsgA0EgaiQAC/gDAQJ/IAAgAWohAgJAAkAgACgCBCIDQQFxDQAgA0EDcUUNASAAKAIAIgMgAWohASAAIANrIgBBhJPAACgCAEYEQCACKAIEQQNxQQNHDQFB/JLAACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADwsgACADEBMLAkACQAJAIAIoAgQiA0ECcUUEQCACQYiTwAAoAgBGDQIgAkGEk8AAKAIARg0DIAIgA0F4cSICEBMgACABIAJqIgFBAXI2AgQgACABaiABNgIAIABBhJPAACgCAEcNAUH8ksAAIAE2AgAPCyACIANBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAsgAUGAAk8EQCAAIAEQFgwDCyABQXhxQeyQwABqIQICf0H0ksAAKAIAIgNBASABQQN2dCIBcUUEQEH0ksAAIAEgA3I2AgAgAgwBCyACKAIICyEBIAIgADYCCCABIAA2AgwgACACNgIMIAAgATYCCA8LQYiTwAAgADYCAEGAk8AAQYCTwAAoAgAgAWoiATYCACAAIAFBAXI2AgQgAEGEk8AAKAIARw0BQfySwABBADYCAEGEk8AAQQA2AgAPC0GEk8AAIAA2AgBB/JLAAEH8ksAAKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAAsLowMBAn8CQAJAAkACQCABQQdqIgNB+ABPDQAgAUEPaiICQfgATw0CIAAgAkECdGogACADQQJ0aigCADYCACABQQZqIgNB+ABPDQAgAUEOaiICQfgATw0CIAAgAkECdGogACADQQJ0aigCADYCACABQQVqIgNB+ABPDQAgAUENaiICQfgATw0CIAAgAkECdGogACADQQJ0aigCADYCACABQQRqIgNB+ABPDQAgAUEMaiICQfgATw0CIAAgAkECdGogACADQQJ0aigCADYCACABQQNqIgNB+ABPDQAgAUELaiICQfgATw0CIAAgAkECdGogACADQQJ0aigCADYCACABQQJqIgNB+ABPDQAgAUEKaiICQfgATw0CIAAgAkECdGogACADQQJ0aigCADYCACABQQFqIgNB+ABPDQAgAUEJaiICQfgATw0CIAAgAkECdGogACADQQJ0aigCADYCACABQfgASQ0BIAEhAwsgA0GwicAAECEACyABQQhqIgJB+ABJDQELIAJBwInAABAhAAsgACACQQJ0aiAAIAFBAnRqKAIANgIAC+cCAQV/AkBBzf97QRAgACAAQRBNGyIAayABTQ0AIABBECABQQtqQXhxIAFBC0kbIgRqQQxqEAIiAkUNACACQQhrIQECQCAAQQFrIgMgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAIgA2pBACAAa3FBCGsiAiAAQQAgAiABa0EQTRtqIgAgAWsiAmshAyAGQQNxBEAgACADIAAoAgRBAXFyQQJyNgIEIAAgA2oiAyADKAIEQQFyNgIEIAUgAiAFKAIAQQFxckECcjYCACABIAJqIgMgAygCBEEBcjYCBCABIAIQEAwBCyABKAIAIQEgACADNgIEIAAgASACajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIARBEGpNDQAgACAEIAFBAXFyQQJyNgIEIAAgBGoiASACIARrIgRBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASAEEBALIABBCGohAwsgAwv7AgEEfyAAKAIMIQICQAJAIAFBgAJPBEAgACgCGCEDAkACQCAAIAJGBEAgAEEUQRAgAEEUaiICKAIAIgQbaigCACIBDQFBACECDAILIAAoAggiASACNgIMIAIgATYCCAwBCyACIABBEGogBBshBANAIAQhBSABIgJBFGoiASACQRBqIAEoAgAiARshBCACQRRBECABG2ooAgAiAQ0ACyAFQQA2AgALIANFDQIgACAAKAIcQQJ0QdyPwABqIgEoAgBHBEAgA0EQQRQgAygCECAARhtqIAI2AgAgAkUNAwwCCyABIAI2AgAgAg0BQfiSwABB+JLAACgCAEF+IAAoAhx3cTYCAAwCCyAAKAIIIgAgAkcEQCAAIAI2AgwgAiAANgIIDwtB9JLAAEH0ksAAKAIAQX4gAUEDdndxNgIADwsgAiADNgIYIAAoAhAiAQRAIAIgATYCECABIAI2AhgLIABBFGooAgAiAEUNACACQRRqIAA2AgAgACACNgIYCwv0AgIDfwp+IwBBQGoiAiQAIAJBGGpCADcDACACQRBqQgA3AwAgAkEIakIANwMAIAJCADcDACACQSBqIgQgASACEAQgAjEAJyEHIAIxACYhCCACMQAlIQkgAjEAJCEKIAIxACMhCyACMQAhIQwgAjEA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akICNwIAIANBLGpBBTYCACADQQI2AgwgA0GQj8AANgIIIANBBTYCJCADIANBIGo2AhAgAyADQQRqNgIoIAMgAzYCICADQQhqIAIQKwALZwAjAEEwayIAJABBoI/AAC0AAARAIABBGGpCATcCACAAQQI2AhAgAEHAg8AANgIMIABBBTYCKCAAIAE2AiwgACAAQSRqNgIUIAAgAEEsajYCJCAAQQxqQeiDwAAQKwALIABBMGokAAtBAQF/IAIgACgCBCAAKAIIIgNrSwRAIAAgAyACEBsgACgCCCEDCyAAKAIAIANqIAEgAhBAGiAAIAIgA2o2AghBAAtNAQJ/QaGPwAAtAAAaIAEoAgQhAiABKAIAIQNBCEEEEDQiAUUEQEEEQQgQPwALIAEgAjYCBCABIAM2AgAgAEG0hMAANgIEIAAgATYCAAs3AAJAIAFpQQFHQYCAgIB4IAFrIABJcg0AIAAEQEGhj8AALQAAGiAAIAEQNCIBRQ0BCyABDwsACzkAAkACfyACQYCAxABHBEBBASAAIAIgASgCEBEBAA0BGgsgAw0BQQALDwsgACADIAQgASgCDBECAAutAgEDfyAAKAIAIQIgASgCHCIAQRBxRQRAIABBIHFFBEAgAiABEDsPC0EAIQAjAEGAAWsiAyQAIAIoAgAhAgNAIAAgA2pB/wBqQTBBNyACQQ9xIgRBCkkbIARqOgAAIABBAWshACACQRBJIAJBBHYhAkUNAAsgAEGAAWoiAkGAAUsEQCACECAACyABQZCMwABBAiAAIANqQYABakEAIABrEAkgA0GAAWokAA8LQQAhACMAQYABayIDJAAgAigCACECA0AgACADakH/AGpBMEHXACACQQ9xIgRBCkkbIARqOgAAIABBAWshACACQRBJIAJBBHYhAkUNAAsgAEGAAWoiAkGAAUsEQCACECAACyABQZCMwABBAiAAIANqQYABakEAIABrEAkgA0GAAWokAAs/AQF/IwBBIGsiACQAIABBFGpCADcCACAAQQE2AgwgAEGAisAANgIIIABB0InAADYCECAAQQhqQYiKwAAQKwAL6wIBAn8jAEEgayICJAAgAkEBOwEcIAIgATYCGCACIAA2AhQgAkGYisAANgIQIAJBmIrAADYCDCMAQRBrIgEkACACQQxqIgAoAggiAkUEQCMAQSBrIgAkACAAQQxq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");
|
|
38
|
+
|
|
39
|
+
// wasm-module:C:\Users\lzy\Documents\Sources\cloudpssnet\sdk\packages\05-crypto\wasm\pkg\wasm_bg.wasm
|
|
40
|
+
var imports = {};
|
|
41
|
+
async function loadWasm(module2, imports2) {
|
|
42
|
+
if (typeof module2 === "string") {
|
|
43
|
+
if (module2.startsWith("./")) {
|
|
44
|
+
module2 = new URL(module2, import.meta.url).href;
|
|
45
|
+
}
|
|
46
|
+
const moduleRequest = await fetch(module2);
|
|
47
|
+
if (typeof WebAssembly.instantiateStreaming === "function") {
|
|
48
|
+
try {
|
|
49
|
+
return await WebAssembly.instantiateStreaming(moduleRequest, imports2);
|
|
50
|
+
} catch (e) {
|
|
51
|
+
if (moduleRequest.headers.get("Content-Type") != "application/wasm") {
|
|
52
|
+
console.warn(e);
|
|
53
|
+
} else {
|
|
54
|
+
throw e;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
module2 = await moduleRequest.arrayBuffer();
|
|
59
|
+
}
|
|
60
|
+
return await WebAssembly.instantiate(module2, imports2);
|
|
61
|
+
}
|
|
62
|
+
var { instance, module } = await loadWasm(wasm_bg_default, imports);
|
|
63
|
+
var memory = instance.exports.memory;
|
|
64
|
+
var encrypt = instance.exports.encrypt;
|
|
65
|
+
var decrypt = instance.exports.decrypt;
|
|
66
|
+
var __wbindgen_add_to_stack_pointer = instance.exports.__wbindgen_add_to_stack_pointer;
|
|
67
|
+
var __wbindgen_export_0 = instance.exports.__wbindgen_export_0;
|
|
68
|
+
var __wbindgen_export_1 = instance.exports.__wbindgen_export_1;
|
|
69
|
+
|
|
70
|
+
// wasm/pkg/wasm_bg.js
|
|
71
|
+
var wasm;
|
|
72
|
+
function __wbg_set_wasm(val) {
|
|
73
|
+
wasm = val;
|
|
74
|
+
}
|
|
75
|
+
var cachedUint8Memory0 = null;
|
|
76
|
+
function getUint8Memory0() {
|
|
77
|
+
if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {
|
|
78
|
+
cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);
|
|
79
|
+
}
|
|
80
|
+
return cachedUint8Memory0;
|
|
81
|
+
}
|
|
82
|
+
var WASM_VECTOR_LEN = 0;
|
|
83
|
+
function passArray8ToWasm0(arg, malloc) {
|
|
84
|
+
const ptr = malloc(arg.length * 1, 1) >>> 0;
|
|
85
|
+
getUint8Memory0().set(arg, ptr / 1);
|
|
86
|
+
WASM_VECTOR_LEN = arg.length;
|
|
87
|
+
return ptr;
|
|
88
|
+
}
|
|
89
|
+
var cachedInt32Memory0 = null;
|
|
90
|
+
function getInt32Memory0() {
|
|
91
|
+
if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {
|
|
92
|
+
cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);
|
|
93
|
+
}
|
|
94
|
+
return cachedInt32Memory0;
|
|
95
|
+
}
|
|
96
|
+
function getArrayU8FromWasm0(ptr, len) {
|
|
97
|
+
ptr = ptr >>> 0;
|
|
98
|
+
return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
|
|
99
|
+
}
|
|
100
|
+
function encrypt2(passphrase, data, aad, nonce, pbkdf2_iterations, aes_key_size, aes_tag_size) {
|
|
101
|
+
try {
|
|
102
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
103
|
+
const ptr0 = passArray8ToWasm0(passphrase, wasm.__wbindgen_export_0);
|
|
104
|
+
const len0 = WASM_VECTOR_LEN;
|
|
105
|
+
const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_export_0);
|
|
106
|
+
const len1 = WASM_VECTOR_LEN;
|
|
107
|
+
const ptr2 = passArray8ToWasm0(aad, wasm.__wbindgen_export_0);
|
|
108
|
+
const len2 = WASM_VECTOR_LEN;
|
|
109
|
+
const ptr3 = passArray8ToWasm0(nonce, wasm.__wbindgen_export_0);
|
|
110
|
+
const len3 = WASM_VECTOR_LEN;
|
|
111
|
+
wasm.encrypt(retptr, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, pbkdf2_iterations, aes_key_size, aes_tag_size);
|
|
112
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
113
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
114
|
+
var v5 = getArrayU8FromWasm0(r0, r1).slice();
|
|
115
|
+
wasm.__wbindgen_export_1(r0, r1 * 1, 1);
|
|
116
|
+
return v5;
|
|
117
|
+
} finally {
|
|
118
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function decrypt2(passphrase, data, aad, nonce, pbkdf2_iterations, aes_key_size, aes_tag_size) {
|
|
122
|
+
try {
|
|
123
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
124
|
+
const ptr0 = passArray8ToWasm0(passphrase, wasm.__wbindgen_export_0);
|
|
125
|
+
const len0 = WASM_VECTOR_LEN;
|
|
126
|
+
const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_export_0);
|
|
127
|
+
const len1 = WASM_VECTOR_LEN;
|
|
128
|
+
const ptr2 = passArray8ToWasm0(aad, wasm.__wbindgen_export_0);
|
|
129
|
+
const len2 = WASM_VECTOR_LEN;
|
|
130
|
+
const ptr3 = passArray8ToWasm0(nonce, wasm.__wbindgen_export_0);
|
|
131
|
+
const len3 = WASM_VECTOR_LEN;
|
|
132
|
+
wasm.decrypt(retptr, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, pbkdf2_iterations, aes_key_size, aes_tag_size);
|
|
133
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
134
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
135
|
+
var v5 = getArrayU8FromWasm0(r0, r1).slice();
|
|
136
|
+
wasm.__wbindgen_export_1(r0, r1 * 1, 1);
|
|
137
|
+
return v5;
|
|
138
|
+
} finally {
|
|
139
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// wasm/pkg/wasm.js
|
|
144
|
+
__wbg_set_wasm(wasm_bg_exports);
|
|
145
|
+
export {
|
|
146
|
+
__wbg_set_wasm,
|
|
147
|
+
decrypt2 as decrypt,
|
|
148
|
+
encrypt2 as encrypt
|
|
149
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudpss/crypto",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.26",
|
|
4
4
|
"author": "CloudPSS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -13,22 +13,20 @@
|
|
|
13
13
|
"browser": "./dist/encryption/browser.js",
|
|
14
14
|
"node": "./dist/encryption/node.js",
|
|
15
15
|
"default": "./dist/encryption/browser.js"
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
"dependencies": {
|
|
19
|
-
"sjcl": "^1.0.8"
|
|
16
|
+
},
|
|
17
|
+
"#lib-wasm": "./lib/wasm.js"
|
|
20
18
|
},
|
|
19
|
+
"dependencies": {},
|
|
21
20
|
"devDependencies": {
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"@types/crypto-js": "^4.2.2",
|
|
25
|
-
"@types/sjcl": "^1.0.34"
|
|
21
|
+
"esbuild": "^0.20.2",
|
|
22
|
+
"esbuild-plugin-wasm": "^1.1.0"
|
|
26
23
|
},
|
|
27
24
|
"scripts": {
|
|
28
|
-
"start": "pnpm clean && tsc --watch",
|
|
29
|
-
"build": "pnpm clean && tsc",
|
|
25
|
+
"start": "pnpm clean && pnpm build:wasm && tsc --watch",
|
|
26
|
+
"build": "pnpm clean && pnpm build:wasm && tsc",
|
|
27
|
+
"build:wasm": "node ./wasm-build.js",
|
|
30
28
|
"test": "NODE_OPTIONS=\"${NODE_OPTIONS:-} --experimental-vm-modules\" jest",
|
|
31
29
|
"benchmark": "node ./benchmark",
|
|
32
|
-
"clean": "rimraf dist"
|
|
30
|
+
"clean": "rimraf dist lib"
|
|
33
31
|
}
|
|
34
32
|
}
|
|
@@ -4,7 +4,6 @@ import type { EncryptedData, PlainData } from './common.js';
|
|
|
4
4
|
const module = () => {
|
|
5
5
|
if (
|
|
6
6
|
typeof crypto == 'object' &&
|
|
7
|
-
typeof crypto.getRandomValues == 'function' &&
|
|
8
7
|
typeof crypto.subtle == 'object' &&
|
|
9
8
|
typeof crypto.subtle.importKey == 'function' &&
|
|
10
9
|
typeof crypto.subtle.deriveKey == 'function' &&
|
|
@@ -13,7 +12,7 @@ const module = () => {
|
|
|
13
12
|
) {
|
|
14
13
|
return import('./web.js');
|
|
15
14
|
} else {
|
|
16
|
-
return import('./
|
|
15
|
+
return import('./wasm.js');
|
|
17
16
|
}
|
|
18
17
|
};
|
|
19
18
|
|
package/src/encryption/common.ts
CHANGED
|
@@ -71,9 +71,13 @@ export function parseEncrypted(data: BinaryData): EncryptedData | undefined {
|
|
|
71
71
|
(buffer[MAGIC_NUMBER.length + NONCE_SIZE + 1] << 16) |
|
|
72
72
|
(buffer[MAGIC_NUMBER.length + NONCE_SIZE + 2] << 8) |
|
|
73
73
|
buffer[MAGIC_NUMBER.length + NONCE_SIZE + 3];
|
|
74
|
-
if (aadSize > AAD_MAX_SIZE || aadSize < 0)
|
|
74
|
+
if (aadSize > AAD_MAX_SIZE || aadSize < 0) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
75
77
|
const paddingAadSize = padding(aadSize, AAD_PADDING);
|
|
76
|
-
if (buffer.byteLength < paddingAadSize + MIN_ENCRYPTED_SIZE)
|
|
78
|
+
if (buffer.byteLength < paddingAadSize + MIN_ENCRYPTED_SIZE) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
77
81
|
const aad = aadSize
|
|
78
82
|
? buffer.subarray(
|
|
79
83
|
MAGIC_NUMBER.length + NONCE_SIZE + AAD_LEN_SIZE,
|
package/src/encryption/module.ts
CHANGED
|
@@ -41,7 +41,7 @@ interface Module {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/** 创建模块 */
|
|
44
|
-
export function createModule(impl: typeof import('#encryption')): Module {
|
|
44
|
+
export function createModule(impl: typeof import('#encryption') | typeof import('./wasm.js')): Module {
|
|
45
45
|
const encryptAad: Module['encryptAad'] = async (data, aad, passphrase) => {
|
|
46
46
|
assertPassphrase(passphrase);
|
|
47
47
|
const aadSize = aad?.byteLength ?? 0;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {
|
|
2
|
+
NONCE_SIZE,
|
|
3
|
+
AES_KEY_SIZE,
|
|
4
|
+
AES_TAG_SIZE,
|
|
5
|
+
type EncryptedData,
|
|
6
|
+
PBKDF2_ITERATIONS,
|
|
7
|
+
type PlainData,
|
|
8
|
+
} from './common.js';
|
|
9
|
+
import * as mod from '#lib-wasm';
|
|
10
|
+
|
|
11
|
+
const EMPTY = new Uint8Array(0);
|
|
12
|
+
const encoder = new TextEncoder();
|
|
13
|
+
|
|
14
|
+
/** crypto-js encrypt */
|
|
15
|
+
export function encrypt({ data, aad }: PlainData, passphrase: string): EncryptedData {
|
|
16
|
+
const nonce = crypto.getRandomValues(new Uint8Array(NONCE_SIZE));
|
|
17
|
+
const result = mod.encrypt(
|
|
18
|
+
encoder.encode(passphrase),
|
|
19
|
+
data,
|
|
20
|
+
aad ?? EMPTY,
|
|
21
|
+
nonce,
|
|
22
|
+
PBKDF2_ITERATIONS,
|
|
23
|
+
AES_KEY_SIZE,
|
|
24
|
+
AES_TAG_SIZE,
|
|
25
|
+
);
|
|
26
|
+
return {
|
|
27
|
+
nonce,
|
|
28
|
+
data: result,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** crypto-js decrypt */
|
|
33
|
+
export function decrypt({ data, aad, nonce }: EncryptedData, passphrase: string): PlainData {
|
|
34
|
+
const decrypted = mod.decrypt(
|
|
35
|
+
encoder.encode(passphrase),
|
|
36
|
+
data,
|
|
37
|
+
aad ?? EMPTY,
|
|
38
|
+
nonce,
|
|
39
|
+
PBKDF2_ITERATIONS,
|
|
40
|
+
AES_KEY_SIZE,
|
|
41
|
+
AES_TAG_SIZE,
|
|
42
|
+
);
|
|
43
|
+
return {
|
|
44
|
+
data: decrypted,
|
|
45
|
+
};
|
|
46
|
+
}
|