@cloudpss/crypto 0.5.25 → 0.5.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/benchmark.js +2 -2
  2. package/dist/encryption/browser.js +1 -2
  3. package/dist/encryption/browser.js.map +1 -1
  4. package/dist/encryption/common.d.ts +2 -2
  5. package/dist/encryption/common.js +6 -4
  6. package/dist/encryption/common.js.map +1 -1
  7. package/dist/encryption/index.js +4 -1
  8. package/dist/encryption/index.js.map +1 -1
  9. package/dist/encryption/module.d.ts +1 -1
  10. package/dist/encryption/module.js +2 -2
  11. package/dist/encryption/module.js.map +1 -1
  12. package/dist/encryption/node.js +4 -3
  13. package/dist/encryption/node.js.map +1 -1
  14. package/dist/encryption/{pure-js.d.ts → wasm.d.ts} +2 -2
  15. package/dist/encryption/wasm.js +22 -0
  16. package/dist/encryption/wasm.js.map +1 -0
  17. package/dist/encryption/web.js +5 -1
  18. package/dist/encryption/web.js.map +1 -1
  19. package/dist/utils.d.ts +2 -0
  20. package/dist/utils.js +2 -0
  21. package/dist/utils.js.map +1 -1
  22. package/lib/wasm.d.ts +26 -0
  23. package/lib/wasm.js +149 -0
  24. package/package.json +10 -12
  25. package/src/encryption/browser.ts +1 -2
  26. package/src/encryption/common.ts +10 -6
  27. package/src/encryption/index.ts +3 -1
  28. package/src/encryption/module.ts +4 -4
  29. package/src/encryption/node.ts +4 -3
  30. package/src/encryption/wasm.ts +47 -0
  31. package/src/encryption/web.ts +5 -1
  32. package/src/utils.ts +3 -0
  33. package/tests/encryption.js +53 -32
  34. package/tsconfig.json +2 -1
  35. package/wasm-build.js +30 -0
  36. package/dist/encryption/js/aes.d.ts +0 -20
  37. package/dist/encryption/js/aes.js +0 -151
  38. package/dist/encryption/js/aes.js.map +0 -1
  39. package/dist/encryption/js/gcm.d.ts +0 -26
  40. package/dist/encryption/js/gcm.js +0 -226
  41. package/dist/encryption/js/gcm.js.map +0 -1
  42. package/dist/encryption/pure-js.js +0 -82
  43. package/dist/encryption/pure-js.js.map +0 -1
  44. package/src/encryption/js/aes.ts +0 -191
  45. package/src/encryption/js/gcm.ts +0 -258
  46. 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 js from './dist/encryption/pure-js.js';
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('js', createModule(js)),
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('./pure-js.js');
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,eAAe,IAAI,UAAU;QAC3C,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,cAAc,CAAC,CAAC;IAClC,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"}
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"}
@@ -15,7 +15,7 @@ export declare const AES_TAG_SIZE: number;
15
15
  /** 加密输入/解密结果 */
16
16
  export interface PlainData {
17
17
  /** 附加数据 */
18
- aad?: Uint8Array;
18
+ aad: Uint8Array;
19
19
  /** 明文数据 */
20
20
  data: Uint8Array;
21
21
  }
@@ -24,7 +24,7 @@ export interface EncryptedData {
24
24
  /** NONCE */
25
25
  nonce: Uint8Array;
26
26
  /** 附加数据 */
27
- aad?: Uint8Array;
27
+ aad: Uint8Array;
28
28
  /** 加密后的数据和 tag */
29
29
  data: Uint8Array;
30
30
  }
@@ -1,4 +1,4 @@
1
- import { toUint8Array } from '../utils.js';
1
+ import { EMPTY_BUFFER, toUint8Array } from '../utils.js';
2
2
  /** PBKDF2 迭代次数 */
3
3
  export const PBKDF2_ITERATIONS = 100_000;
4
4
  /** NONCE 长度(byte) */
@@ -47,14 +47,16 @@ 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
- : undefined;
59
+ : EMPTY_BUFFER;
58
60
  const encrypted = buffer.subarray(MAGIC_NUMBER.length + NONCE_SIZE + AAD_LEN_SIZE + paddingAadSize);
59
61
  return { nonce, aad, data: encrypted };
60
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/encryption/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/encryption/common.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,10 @@ export function extractAad(data) {
15
15
  if (encrypted == null) {
16
16
  throw new TypeError('Invalid encrypted data');
17
17
  }
18
- return encrypted.aad;
18
+ const { aad } = encrypted;
19
+ if (!aad.byteLength)
20
+ return undefined;
21
+ return aad;
19
22
  }
20
23
  // eslint-disable-next-line @typescript-eslint/unbound-method
21
24
  export const { encrypt, decrypt, encryptAad } = createModule(impl);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/encryption/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,0BAA0B;AAC1B,MAAM,UAAU,WAAW,CAAC,IAAgB;IACxC,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAgB;IACvC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC;AACzB,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/encryption/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,0BAA0B;AAC1B,MAAM,UAAU,WAAW,CAAC,IAAgB;IACxC,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAgB;IACvC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,GAAG,CAAC;AACf,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC"}
@@ -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,4 +1,4 @@
1
- import { toUint8Array } from '../utils.js';
1
+ import { EMPTY_BUFFER, toUint8Array } from '../utils.js';
2
2
  import { AAD_LEN_SIZE, AAD_MAX_SIZE, AAD_PADDING, MAGIC_NUMBER, NONCE_SIZE, padding, parseEncrypted, } from './common.js';
3
3
  /** 检查密码 */
4
4
  function assertPassphrase(passphrase) {
@@ -19,7 +19,7 @@ export function createModule(impl) {
19
19
  }
20
20
  const paddedAddSize = padding(aadSize, AAD_PADDING);
21
21
  const plain = {
22
- aad: aadSize ? toUint8Array(aad) : undefined,
22
+ aad: aadSize ? toUint8Array(aad) : EMPTY_BUFFER,
23
23
  data: toUint8Array(data),
24
24
  };
25
25
  const encrypted = await impl.encrypt(plain, passphrase);
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/encryption/module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/encryption/module.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,12 @@ export async function encrypt({ data, aad }, passphrase) {
11
11
  const nonce = randomBytes(NONCE_SIZE);
12
12
  const key = await aesKdf(passphrase, nonce);
13
13
  const cipher = createCipheriv('aes-256-gcm', key, nonce, { authTagLength: AES_TAG_SIZE });
14
- if (aad)
14
+ if (aad.byteLength)
15
15
  cipher.setAAD(aad);
16
16
  const encrypted = Buffer.concat([cipher.update(data), cipher.final(), cipher.getAuthTag()]);
17
17
  return {
18
18
  nonce: toUint8Array(nonce),
19
+ aad,
19
20
  data: toUint8Array(encrypted),
20
21
  };
21
22
  }
@@ -24,9 +25,9 @@ export async function decrypt({ nonce, aad, data }, passphrase) {
24
25
  const key = await aesKdf(passphrase, nonce);
25
26
  const decipher = createDecipheriv('aes-256-gcm', key, nonce, { authTagLength: AES_TAG_SIZE });
26
27
  decipher.setAuthTag(data.subarray(data.length - AES_TAG_SIZE));
27
- if (aad)
28
+ if (aad.byteLength)
28
29
  decipher.setAAD(aad);
29
30
  const decrypted = Buffer.concat([decipher.update(data.subarray(0, data.length - AES_TAG_SIZE)), decipher.final()]);
30
- return { data: toUint8Array(decrypted) };
31
+ return { data: toUint8Array(decrypted), aad };
31
32
  }
32
33
  //# sourceMappingURL=node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/encryption/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EACH,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,YAAY,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAClC,MAAM,MAAM,GAAG,CAAC,UAAkB,EAAE,IAAgB,EAAmB,EAAE;IACrE,OAAO,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF,qBAAqB;AACrB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAa,EAAE,UAAkB;IACtE,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1F,IAAI,GAAG;QAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC5F,OAAO;QACH,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;QAC1B,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC;KAChC,CAAC;AACN,CAAC;AAED,qBAAqB;AACrB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAiB,EAAE,UAAkB;IACjF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9F,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAC/D,IAAI,GAAG;QAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnH,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/encryption/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EACH,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,YAAY,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAClC,MAAM,MAAM,GAAG,CAAC,UAAkB,EAAE,IAAgB,EAAmB,EAAE;IACrE,OAAO,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF,qBAAqB;AACrB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAa,EAAE,UAAkB;IACtE,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1F,IAAI,GAAG,CAAC,UAAU;QAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC5F,OAAO;QACH,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;QAC1B,GAAG;QACH,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC;KAChC,CAAC;AACN,CAAC;AAED,qBAAqB;AACrB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAiB,EAAE,UAAkB;IACjF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9F,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAC/D,IAAI,GAAG,CAAC,UAAU;QAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnH,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;AAClD,CAAC"}
@@ -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): Promise<EncryptedData>;
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): Promise<PlainData>;
5
+ export declare function decrypt({ data, aad, nonce }: EncryptedData, passphrase: string): PlainData;
@@ -0,0 +1,22 @@
1
+ import { NONCE_SIZE, AES_KEY_SIZE, AES_TAG_SIZE, PBKDF2_ITERATIONS, } from './common.js';
2
+ import * as mod from '#lib-wasm';
3
+ const encoder = new TextEncoder();
4
+ /** crypto-js encrypt */
5
+ export function encrypt({ data, aad }, passphrase) {
6
+ const nonce = crypto.getRandomValues(new Uint8Array(NONCE_SIZE));
7
+ const result = mod.encrypt(encoder.encode(passphrase), data, aad, nonce, PBKDF2_ITERATIONS, AES_KEY_SIZE, AES_TAG_SIZE);
8
+ return {
9
+ nonce,
10
+ aad,
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, nonce, PBKDF2_ITERATIONS, AES_KEY_SIZE, AES_TAG_SIZE);
17
+ return {
18
+ aad,
19
+ data: decrypted,
20
+ };
21
+ }
22
+ //# 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,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,EACH,KAAK,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,CACf,CAAC;IACF,OAAO;QACH,KAAK;QACL,GAAG;QACH,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,EACH,KAAK,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,CACf,CAAC;IACF,OAAO;QACH,GAAG;QACH,IAAI,EAAE,SAAS;KAClB,CAAC;AACN,CAAC"}
@@ -26,6 +26,7 @@ export async function encrypt({ data, aad }, passphrase) {
26
26
  }, key, data);
27
27
  return {
28
28
  nonce,
29
+ aad,
29
30
  data: new Uint8Array(encrypted),
30
31
  };
31
32
  }
@@ -38,6 +39,9 @@ export async function decrypt({ data, nonce, aad }, passphrase) {
38
39
  tagLength: AES_TAG_SIZE * 8,
39
40
  additionalData: aad,
40
41
  }, key, data);
41
- return { data: new Uint8Array(decrypted) };
42
+ return {
43
+ aad,
44
+ data: new Uint8Array(decrypted),
45
+ };
42
46
  }
43
47
  //# sourceMappingURL=web.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/encryption/web.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,YAAY,EACZ,YAAY,EAGZ,iBAAiB,GACpB,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,wBAAwB;AACxB,KAAK,UAAU,SAAS,CAAC,UAAkB,EAAE,IAAgB;IACzD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9G,MAAM,YAAY,GAAiB;QAC/B,IAAI,EAAE,QAAQ;QACd,IAAI;QACJ,UAAU,EAAE,iBAAiB;QAC7B,IAAI,EAAE,SAAS;KAClB,CAAC;IACF,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE;QAC3G,SAAS;QACT,SAAS;KACZ,CAAC,CAAC;AACP,CAAC;AAED,wBAAwB;AACxB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAa,EAAE,UAAkB;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CACzC;QACI,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK;QACT,SAAS,EAAE,YAAY,GAAG,CAAC;QAC3B,cAAc,EAAE,GAAG;KACtB,EACD,GAAG,EACH,IAAI,CACP,CAAC;IACF,OAAO;QACH,KAAK;QACL,IAAI,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC;KAClC,CAAC;AACN,CAAC;AAED,wBAAwB;AACxB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAiB,EAAE,UAAkB;IACjF,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CACzC;QACI,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK;QACT,SAAS,EAAE,YAAY,GAAG,CAAC;QAC3B,cAAc,EAAE,GAAG;KACtB,EACD,GAAG,EACH,IAAI,CACP,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/encryption/web.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,YAAY,EACZ,YAAY,EAGZ,iBAAiB,GACpB,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,wBAAwB;AACxB,KAAK,UAAU,SAAS,CAAC,UAAkB,EAAE,IAAgB;IACzD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9G,MAAM,YAAY,GAAiB;QAC/B,IAAI,EAAE,QAAQ;QACd,IAAI;QACJ,UAAU,EAAE,iBAAiB;QAC7B,IAAI,EAAE,SAAS;KAClB,CAAC;IACF,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE;QAC3G,SAAS;QACT,SAAS;KACZ,CAAC,CAAC;AACP,CAAC;AAED,wBAAwB;AACxB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAa,EAAE,UAAkB;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CACzC;QACI,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK;QACT,SAAS,EAAE,YAAY,GAAG,CAAC;QAC3B,cAAc,EAAE,GAAG;KACtB,EACD,GAAG,EACH,IAAI,CACP,CAAC;IACF,OAAO;QACH,KAAK;QACL,GAAG;QACH,IAAI,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC;KAClC,CAAC;AACN,CAAC;AAED,wBAAwB;AACxB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAiB,EAAE,UAAkB;IACjF,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CACzC;QACI,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK;QACT,SAAS,EAAE,YAAY,GAAG,CAAC;QAC3B,cAAc,EAAE,GAAG;KACtB,EACD,GAAG,EACH,IAAI,CACP,CAAC;IACF,OAAO;QACH,GAAG;QACH,IAAI,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC;KAClC,CAAC;AACN,CAAC"}
package/dist/utils.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  /** 支持的数据转为 Uint8Array */
2
2
  export declare function toUint8Array(data: BinaryData): Uint8Array;
3
+ /** 长度为 0 的 Uint8Array */
4
+ export declare const EMPTY_BUFFER: Uint8Array;
package/dist/utils.js CHANGED
@@ -8,4 +8,6 @@ export function toUint8Array(data) {
8
8
  }
9
9
  return new Uint8Array(data, 0, data.byteLength);
10
10
  }
11
+ /** 长度为 0 的 Uint8Array */
12
+ export const EMPTY_BUFFER = new Uint8Array(0);
11
13
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,MAAM,UAAU,YAAY,CAAC,IAAgB;IACzC,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,OAAO,IAAI,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC;QAChF,MAAM,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,MAAM,UAAU,YAAY,CAAC,IAAgB;IACzC,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,OAAO,IAAI,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC;QAChF,MAAM,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACpD,CAAC;AAED,yBAAyB;AACzB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,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
+ };