@cloudpss/crypto 0.5.24 → 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.
Files changed (43) hide show
  1. package/benchmark.js +44 -0
  2. package/dist/encryption/browser.d.ts +3 -3
  3. package/dist/encryption/browser.js +1 -2
  4. package/dist/encryption/browser.js.map +1 -1
  5. package/dist/encryption/common.d.ts +45 -16
  6. package/dist/encryption/common.js +59 -9
  7. package/dist/encryption/common.js.map +1 -1
  8. package/dist/encryption/index.d.ts +4 -21
  9. package/dist/encryption/index.js +11 -63
  10. package/dist/encryption/index.js.map +1 -1
  11. package/dist/encryption/module.d.ts +22 -0
  12. package/dist/encryption/module.js +62 -0
  13. package/dist/encryption/module.js.map +1 -0
  14. package/dist/encryption/node.d.ts +3 -3
  15. package/dist/encryption/node.js +19 -15
  16. package/dist/encryption/node.js.map +1 -1
  17. package/dist/encryption/wasm.d.ts +5 -0
  18. package/dist/encryption/wasm.js +21 -0
  19. package/dist/encryption/wasm.js.map +1 -0
  20. package/dist/encryption/web.d.ts +3 -3
  21. package/dist/encryption/web.js +17 -15
  22. package/dist/encryption/web.js.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/lib/wasm.d.ts +26 -0
  27. package/lib/wasm.js +149 -0
  28. package/package.json +11 -10
  29. package/src/encryption/browser.ts +4 -5
  30. package/src/encryption/common.ts +83 -16
  31. package/src/encryption/index.ts +12 -71
  32. package/src/encryption/module.ts +94 -0
  33. package/src/encryption/node.ts +24 -15
  34. package/src/encryption/wasm.ts +46 -0
  35. package/src/encryption/web.ts +24 -15
  36. package/src/index.ts +1 -1
  37. package/tests/encryption.js +151 -55
  38. package/tsconfig.json +2 -1
  39. package/wasm-build.js +30 -0
  40. package/dist/encryption/pure-js.d.ts +0 -5
  41. package/dist/encryption/pure-js.js +0 -54
  42. package/dist/encryption/pure-js.js.map +0 -1
  43. package/src/encryption/pure-js.ts +0 -62
package/dist/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { isEncrypted, encrypt, decrypt } from './encryption/index.js';
1
+ export { isEncrypted, encrypt, decrypt, encryptAad, extractAad } from './encryption/index.js';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { isEncrypted, encrypt, decrypt } from './encryption/index.js';
1
+ export { isEncrypted, encrypt, decrypt, encryptAad, extractAad } from './encryption/index.js';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,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+IAItAA4hPyACLQAPIUAgAi0AESFBIAItABIhQiACLQATIUMgAi0AFCFEIAItABUhRSACLQAWIUYgAi0AFyFHIAItABkhSCACLQAaIUkgAi0AGyFKIAItABwhSyACLQAdIUwgAi0AHiFNIAQgIWoiA0EfaiACLQAfIAFBH2otAABzOgAAIANBHmogMCBNczoAACADQR1qIC8gTHM6AAAgA0EcaiAuIEtzOgAAIANBG2ogLSBKczoAACADQRpqICwgSXM6AAAgA0EZaiArIEhzOgAAIANBGGogKiAxczoAACADQRdqICkgR3M6AAAgA0EWaiAoIEZzOgAAIANBFWogJyBFczoAACADQRRqICYgRHM6AAAgA0ETaiAlIENzOgAAIANBEmogJCBCczoAACADQRFqICMgQXM6AAAgA0EQaiAGICJzOgAAIANBD2ogICBAczoAACADQQ5qIB8gP3M6AAAgA0ENaiAeID5zOgAAIANBDGogHSA9czoAACADQQtqIBwgPHM6AAAgA0EKaiAbIDtzOgAAIANBCWogGiA6czoAACADQQhqIAcgGXM6AAAgA0EHaiAYIDlzOgAAIANBBmogFyA4czoAACADQQVqIBYgN3M6AAAgA0EEaiAVIDZzOgAAIANBA2ogFCA1czoAACADQQJqIBMgNHM6AAAgA0EBaiASIDNzOgAAIAMgESAyczoAACAEQSBqIQQgCCEBIAtBAWsiCw0ACwsEQCAAQRRqIgEgASgCACIBQQFqNgIAIABBEGooAgAhCCAAQQxqKAIAIQMgACkCBCFOIAJBGGpCADcDACACQgA3AxAgAiADNgIIIAIgTjcDACACIAEgCGoiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AgwgAkEgaiAKIAIQBCACLQAgIQggAi0AISEDIAItACIhBCACLQAjIQogAi0AJCELIAItACUhDCACLQAmIQ0gAi0AJyEOIAItACghDyACLQApIRAgAi0AKiEGIAItACshByACLQAsIREgAi0ALSESIAItAC4hEyAJIAVB/v///wBxQQR0IgFqIgAtAAAhBSAALQABIQkgAC0AAiEUIAAtAAMhFSAALQAEIRYgAC0ABSEXIAAtAAYhGCAALQAHIRkgAC0ACCEaIAAtAAkhGyAALQAKIRwgAC0ACyEdIAAtAAwhHiAALQANIR8gAC0ADiEgIAEgIWoiASAALQAPIAItAC9zOgAPIAEgEyAgczoADiABIBIgH3M6AA0gASARIB5zOgAMIAEgByAdczoACyABIAYgHHM6AAogASAQIBtzOgAJIAEgDyAaczoACCABIA4gGXM6AAcgASANIBhzOgAGIAEgDCAXczoABSABIAsgFnM6AAQgASAKIBVzOgADIAEgBCAUczoAAiABIAMgCXM6AAEgASAFIAhzOgAACyACQUBrJAAL1wYBCH8CQAJAIAEgAEEDakF8cSICIABrIghJDQAgASAIayIGQQRJDQAgBkEDcSEHQQAhAQJAIAAgAkYiCQ0AAkAgAiAAQX9zakEDSQRADAELA0AgASAAIARqIgMsAABBv39KaiADQQFqLAAAQb9/SmogA0ECaiwAAEG/f0pqIANBA2osAABBv39KaiEBIARBBGoiBA0ACwsgCQ0AIAAgAmshAyAAIARqIQIDQCABIAIsAABBv39KaiEBIAJBAWohAiADQQFqIgMNAAsLIAAgCGohBAJAIAdFDQAgBCAGQXxxaiIALAAAQb9/SiEFIAdBAUYNACAFIAAsAAFBv39KaiEFIAdBAkYNACAFIAAsAAJBv39KaiEFCyAGQQJ2IQYgASAFaiEDA0AgBCEAIAZFDQJBwAEgBiAGQcABTxsiBUEDcSEHIAVBAnQhBEEAIQIgBUEETwRAIAAgBEHwB3FqIQggACEBA0AgAiABKAIAIgJBf3NBB3YgAkEGdnJBgYKECHFqIAFBBGooAgAiAkF/c0EHdiACQQZ2ckGBgoQIcWogAUEIaigCACICQX9zQQd2IAJBBnZyQYGChAhxaiABQQxqKAIAIgJBf3NBB3YgAkEGdnJBgYKECHFqIQIgAUEQaiIBIAhHDQALCyAGIAVrIQYgACAEaiEEIAJBCHZB/4H8B3EgAkH/gfwHcWpBgYAEbEEQdiADaiEDIAdFDQALAn8gACAFQfwBcUECdGoiACgCACIBQX9zQQd2IAFBBnZyQYGChAhxIgEgB0EBRg0AGiABIAAoAgQiAUF/c0EHdiABQQZ2ckGBgoQIcWoiASAHQQJGDQAaIAAoAggiAEF/c0EHdiAAQQZ2ckGBgoQIcSABagsiAUEIdkH/gRxxIAFB/4H8B3FqQYGABGxBEHYgA2oPCyABRQRAQQAPCyABQQNxIQQCQCABQQRJBEBBACECDAELIAFBfHEhBUEAIQIDQCADIAAgAmoiASwAAEG/f0pqIAFBAWosAABBv39KaiABQQJqLAAAQb9/SmogAUEDaiwAAEG/f0pqIQMgBSACQQRqIgJHDQALCyAERQ0AIAAgAmohAQNAIAMgASwAAEG/f0pqIQMgAUEBaiEBIARBAWsiBA0ACwsgAwuYBwEDfwJAAkAgAUEQayIEQfgATw0AAkAgAUH4AE8NACAAIAFBAnRqIgMgACAEQQJ0aigCACADKAIAIAJ4QYOGjBhxcyIDQQR0QfDhw4d/cSADQQJ0Qfz582dxcyADQQZ0QcCBg4Z8cXMgA3M2AgAgAUEBaiIDQRBrIgRB+ABPDQFB+AAgAWsiBUEAIAVB+ABNGyIFQQFGBEAgAyEBDAELIAAgA0ECdGoiAyAAIARBAnRqKAIAIAMoAgAgAnhBg4aMGHFzIgNBBHRB8OHDh39xIANBAnRB/PnzZ3FzIANBBnRBwIGDhnxxcyADczYCACABQQJqIgNBEGsiBEH4AE8NASAFQQJGBEAgAyEBDAELIAAgA0ECdGoiAyAAIARBAnRqKAIAIAMoAgAgAnhBg4aMGHFzIgNBBHRB8OHDh39xIANBAnRB/PnzZ3FzIANBBnRBwIGDhnxxcyADczYCACABQQNqIgNBEGsiBEH4AE8NASAFQQNGBEAgAyEBDAELIAAgA0ECdGoiAyAAIARBAnRqKAIAIAMoAgAgAnhBg4aMGHFzIgNBBHRB8OHDh39xIANBAnRB/PnzZ3FzIANBBnRBwIGDhnxxcyADczYCACABQQRqIgNBEGsiBEH4AE8NASAFQQRGBEAgAyEBDAELIAAgA0ECdGoiAyAAIARBAnRqKAIAIAMoAgAgAnhBg4aMGHFzIgNBBHRB8OHDh39xIANBAnRB/PnzZ3FzIANBBnRBwIGDhnxxcyADczYCACABQQVqIgNBEGsiBEH4AE8NASAFQQVGBEAgAyEBDAELIAAgA0ECdGoiAyAAIARBAnRqKAIAIAMoAgAgAnhBg4aMGHFzIgNBBHRB8OHDh39xIANBAnRB/PnzZ3FzIANBBnRBwIGDhnxxcyADczYCACABQQZqIgNBEGsiBEH4AE8NASAFQQZGBEAgAyEBDAELIAAgA0ECdGoiAyAAIARBAnRqKAIAIAMoAgAgAnhBg4aMGHFzIgNBBHRB8OHDh39xIANBAnRB/PnzZ3FzIANBBnRBwIGDhnxxcyADczYCACABQQdqIgFBEGsiBEH4AE8NASAFQQdHDQILIAFBoIfAABAhAAsgBEGQh8AAECEACyAAIAFBAnRqIgEgACAEQQJ0aigCACABKAIAIAJ4QYOGjBhxcyIAQQR0QfDhw4d/cSAAQQJ0Qfz582dxcyAAQQZ0QcCBg4Z8cXMgAHM2AgALpgQBG38gACAAKAIcIgEgACgCBCIIcyIOIAAoAhAiAyAAKAIIIgxzIhBzIhEgACgCDHMiAiAAKAIYIgVzIgkgASADcyIScyIKIAUgACgCFHMiBnMiDyAIIAYgACgCACIFcyIHcyIXIAdxcyAOIA9xIg1zIA5zIAogEnEiBCAGIAIgDHMiCHMiBiAKcyITIBBxcyICcyILIAIgCCARcSIUIAkgBSAIcyIYIBcgASAMcyIMcyIVcXNzcyIWcSICIAYgDHEgBHMiBCAUIAMgB3MiFCAFcSAMcyAGc3NzIglzIAQgDyAFIApzIhkgASAHcyIacXMgDXMgAXNzIgMgC3NxIg0gAnMgA3EiBCACIANzIgFzIAEgCSAWcyICcSAJcyIBcSACcyICIAQgC3MiCyADIA1zIgNzIglzIg0gASADcyIEcyIWIBBxIAQgEnEiEHMiEiAJIBVxcyIVIAsgEXFzIhEgDyABIAJzIhtxIg8gAiAHcXMiByATIBZxcyITIAQgCnFzIgpzNgIcIAAgDiAbcSIOIAggC3EiCCADIAVxcyILIAYgDXFzcyATcyIGIAEgGnFzIgQgDCANcSAQcyAKc3M2AhQgACAJIBhxIAhzIAdzIBFzIgU2AhAgACAVIAMgFHFzIARzNgIIIAAgCyABIBlxcyAPcyIBIBIgAiAXcXNzIgcgBnM2AgQgACAHIA5zNgIAIAAgBSAKczYCGCAAIAEgBXM2AgwLtAUBCH9BK0GAgMQAIAAoAhwiCEEBcSIGGyEMIAQgBmohBgJAIAhBBHFFBEBBACEBDAELAkAgAkEQTwRAIAEgAhAGIQUMAQsgAkUEQAwBCyACQQNxIQkCQCACQQRJBEAMAQsgAkF8cSEKA0AgBSABIAdqIgssAABBv39KaiALQQFqLAAAQb9/SmogC0ECaiwAAEG/f0pqIAtBA2osAABBv39KaiEFIAogB0EEaiIHRw0ACwsgCUUNACABIAdqIQcDQCAFIAcsAABBv39KaiEFIAdBAWohByAJQQFrIgkNAAsLIAUgBmohBgsCQAJAIAAoAgBFBEBBASEFIAAoAhQiBiAAKAIYIgAgDCABIAIQKA0BDAILIAYgACgCBCIHTwRAQQEhBSAAKAIUIgYgACgCGCIAIAwgASACECgNAQwCCyAIQQhxBEAgACgCECEIIABBMDYCECAALQAgIQpBASEFIABBAToAICAAKAIUIgkgACgCGCILIAwgASACECgNASAHIAZrQQFqIQUCQANAIAVBAWsiBUUNASAJQTAgCygCEBEBAEUNAAtBAQ8LQQEhBSAJIAMgBCALKAIMEQIADQEgACAKOgAgIAAgCDYCEEEAIQUMAQsgByAGayEGAkACQAJAIAAtACAiBUEBaw4DAAEAAgsgBiEFQQAhBgwBCyAGQQF2IQUgBkEBakEBdiEGCyAFQQFqIQUgAEEYaigCACEIIAAoAhAhCiAAKAIUIQACQANAIAVBAWsiBUUNASAAIAogCCgCEBEBAEUNAAtBAQ8LQQEhBSAAIAggDCABIAIQKA0AIAAgAyAEIAgoAgwRAgANAEEAIQUDQCAFIAZGBEBBAA8LIAVBAWohBSAAIAogCCgCEBEBAEUNAAsgBUEBayAGSQ8LIAUPCyAGIAMgBCAAKAIMEQIAC6QDAQ1/IAAgAigADCIEIAEoAAwiA0EBdnNB1arVqgVxIgVBAXQgA3MiAyACKAAIIgcgASgACCIGQQF2c0HVqtWqBXEiCEEBdCAGcyIGQQJ2c0Gz5syZA3EiCUECdCAGcyIGIAIoAAQiCiABKAAEIgtBAXZzQdWq1aoFcSIMQQF0IAtzIgsgAigAACICIAEoAAAiAUEBdnNB1arVqgVxIg1BAXQgAXMiAUECdnNBs+bMmQNxIg5BAnQgAXMiAUEEdnNBj568+ABxIg9BBHQgAXM2AgAgACAEIAVzIgEgByAIcyIEQQJ2c0Gz5syZA3EiBUECdCAEcyIEIAogDHMiByACIA1zIgJBAnZzQbPmzJkDcSIIQQJ0IAJzIgJBBHZzQY+evPgAcSIKQQR0IAJzNgIEIAAgAyAJcyICIAsgDnMiA0EEdnNBj568+ABxIglBBHQgA3M2AgggACABIAVzIgEgByAIcyIDQQR2c0GPnrz4AHEiBUEEdCADczYCDCAAIAYgD3M2AhAgACAEIApzNgIUIAAgAiAJczYCGCAAIAEgBXM2AhwL/AUBBX8gAEEIayIBIABBBGsoAgAiA0F4cSIAaiECAkACQAJAAkAgA0EBcQ0AIANBA3FFDQEgASgCACIDIABqIQAgASADayIBQYSTwAAoAgBGBEAgAigCBEEDcUEDRw0BQfySwAAgADYCACACIAIoAgRBfnE2AgQgASAAQQFyNgIEIAIgADYCAA8LIAEgAxATCwJAAkAgAigCBCIDQQJxRQRAIAJBiJPAACgCAEYNAiACQYSTwAAoAgBGDQUgAiADQXhxIgIQEyABIAAgAmoiAEEBcjYCBCAAIAFqIAA2AgAgAUGEk8AAKAIARw0BQfySwAAgADYCAA8LIAIgA0F+cTYCBCABIABBAXI2AgQgACABaiAANgIACyAAQYACSQ0CIAEgABAWQQAhAUGck8AAQZyTwAAoAgBBAWsiADYCACAADQFB5JDAACgCACIABEADQCABQQFqIQEgACgCCCIADQALC0Gck8AAQf8fIAEgAUH/H00bNgIADwtBiJPAACABNgIAQYCTwABBgJPAACgCACAAaiIANgIAIAEgAEEBcjYCBEGEk8AAKAIAIAFGBEBB/JLAAEEANgIAQYSTwABBADYCAAsgAEGUk8AAKAIAIgNNDQBBiJPAACgCACICRQ0AQQAhAQJAQYCTwAAoAgAiBEEpSQ0AQdyQwAAhAANAIAIgACgCACIFTwRAIAUgACgCBGogAksNAgsgACgCCCIADQALC0HkkMAAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQZyTwABB/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.24",
3
+ "version": "0.5.26",
4
4
  "author": "CloudPSS",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -13,19 +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
- "crypto-js": "^4.2.0",
20
- "hash-wasm": "^4.11.0"
16
+ },
17
+ "#lib-wasm": "./lib/wasm.js"
21
18
  },
19
+ "dependencies": {},
22
20
  "devDependencies": {
23
- "@types/crypto-js": "^4.2.2"
21
+ "esbuild": "^0.20.2",
22
+ "esbuild-plugin-wasm": "^1.1.0"
24
23
  },
25
24
  "scripts": {
26
- "start": "pnpm clean && tsc --watch",
27
- "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",
28
28
  "test": "NODE_OPTIONS=\"${NODE_OPTIONS:-} --experimental-vm-modules\" jest",
29
- "clean": "rimraf dist"
29
+ "benchmark": "node ./benchmark",
30
+ "clean": "rimraf dist lib"
30
31
  }
31
32
  }
@@ -1,10 +1,9 @@
1
- import type { EncryptionResult } from './common.js';
1
+ import type { EncryptedData, PlainData } from './common.js';
2
2
 
3
3
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
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,18 +12,18 @@ const module = () => {
13
12
  ) {
14
13
  return import('./web.js');
15
14
  } else {
16
- return import('./pure-js.js');
15
+ return import('./wasm.js');
17
16
  }
18
17
  };
19
18
 
20
19
  /** browser encrypt */
21
- export async function encrypt(data: Uint8Array, passphrase: string): Promise<EncryptionResult> {
20
+ export async function encrypt(data: PlainData, passphrase: string): Promise<EncryptedData> {
22
21
  const { encrypt } = await module();
23
22
  return await encrypt(data, passphrase);
24
23
  }
25
24
 
26
25
  /** browser decrypt */
27
- export async function decrypt(data: EncryptionResult, passphrase: string): Promise<Uint8Array> {
26
+ export async function decrypt(data: EncryptedData, passphrase: string): Promise<PlainData> {
28
27
  const { decrypt } = await module();
29
28
  return await decrypt(data, passphrase);
30
29
  }
@@ -1,22 +1,89 @@
1
- /**
2
- * PBKDF2 迭代次数
3
- */
1
+ import { toUint8Array } from '../utils.js';
2
+
3
+ /** PBKDF2 迭代次数 */
4
4
  export const PBKDF2_ITERATIONS = 100_000;
5
- /**
6
- * PBKDF2 盐值长度(byte)
7
- */
8
- export const PBKDF2_SALT_SIZE = 128 / 8;
9
- /** IV 长度(byte) */
10
- export const AES_IV_SIZE = 128 / 8;
5
+ /** NONCE 长度(byte) */
6
+ export const NONCE_SIZE = 96 / 8;
7
+ /** AAD 最大长度(byte) */
8
+ export const AAD_MAX_SIZE = 1024 * 1024 * 1024; // 1GiB
9
+ /** AAD 长度字段长度(byte) */
10
+ export const AAD_LEN_SIZE = 4;
11
+
12
+ // 与 AES 一致对齐
13
+ /** AAD padding */
14
+ export const AAD_PADDING = 128 / 8;
11
15
  /** KEY 长度(byte) */
12
16
  export const AES_KEY_SIZE = 256 / 8;
17
+ /** Auth tag 长度(byte) */
18
+ export const AES_TAG_SIZE = 128 / 8;
19
+
20
+ /** 加密输入/解密结果 */
21
+ export interface PlainData {
22
+ /** 附加数据 */
23
+ aad?: Uint8Array;
24
+ /** 明文数据 */
25
+ data: Uint8Array;
26
+ }
13
27
 
14
- /** 加密结果 */
15
- export interface EncryptionResult {
16
- /** 盐值 */
17
- salt: Uint8Array;
18
- /** 初始向量 */
19
- iv: Uint8Array;
20
- /** 加密后的数据 */
28
+ /** 解密输入/加密结果 */
29
+ export interface EncryptedData {
30
+ /** NONCE */
31
+ nonce: Uint8Array;
32
+ /** 附加数据 */
33
+ aad?: Uint8Array;
34
+ /** 加密后的数据和 tag */
21
35
  data: Uint8Array;
22
36
  }
37
+
38
+ /**
39
+ * CloudPSS 数据加密
40
+ * - 密钥生成算法:PBKDF2-HMAC-SHA256,盐长度 96,迭代 100,000 次
41
+ * - 加密算法:AES-256-GCM,使用与密钥生成算法的盐作为 NONCE,TAG 长度 128
42
+ * - 附加数据:最大长度 0x7fff_ffff
43
+ *
44
+ * - 文件格式:
45
+ * - Magic Number: 0e 02 49 29 3f 07 7b 0a
46
+ * - Nonce: 96 bits
47
+ * - Length of AAD: 4 bytes
48
+ * - AAD (if exists)
49
+ * - Encrypted Data
50
+ * - Auth Tag: 128 bits
51
+ */
52
+
53
+ /** CloudPSS 数据加密 */
54
+ export const MAGIC_NUMBER = Uint8Array.from([0x0e, 0x02, 0x49, 0x29, 0x3f, 0x07, 0x7b, 0x0a]);
55
+
56
+ const MIN_ENCRYPTED_SIZE = MAGIC_NUMBER.length + NONCE_SIZE + AAD_LEN_SIZE + AES_TAG_SIZE;
57
+
58
+ /** 计算对齐后的长度 */
59
+ export function padding(size: number, padding: number): number {
60
+ return (size + padding - 1) & ~(padding - 1);
61
+ }
62
+
63
+ /** 解析 CloudPSS 加密数据 */
64
+ export function parseEncrypted(data: BinaryData): EncryptedData | undefined {
65
+ const buffer = toUint8Array(data);
66
+ if (buffer.byteLength < MIN_ENCRYPTED_SIZE) return undefined;
67
+ if (!MAGIC_NUMBER.every((v, i) => buffer[i] === v)) return undefined;
68
+ const nonce = buffer.subarray(MAGIC_NUMBER.length, MAGIC_NUMBER.length + NONCE_SIZE);
69
+ const aadSize =
70
+ (buffer[MAGIC_NUMBER.length + NONCE_SIZE] << 24) |
71
+ (buffer[MAGIC_NUMBER.length + NONCE_SIZE + 1] << 16) |
72
+ (buffer[MAGIC_NUMBER.length + NONCE_SIZE + 2] << 8) |
73
+ buffer[MAGIC_NUMBER.length + NONCE_SIZE + 3];
74
+ if (aadSize > AAD_MAX_SIZE || aadSize < 0) {
75
+ return undefined;
76
+ }
77
+ const paddingAadSize = padding(aadSize, AAD_PADDING);
78
+ if (buffer.byteLength < paddingAadSize + MIN_ENCRYPTED_SIZE) {
79
+ return undefined;
80
+ }
81
+ const aad = aadSize
82
+ ? buffer.subarray(
83
+ MAGIC_NUMBER.length + NONCE_SIZE + AAD_LEN_SIZE,
84
+ MAGIC_NUMBER.length + NONCE_SIZE + AAD_LEN_SIZE + aadSize,
85
+ )
86
+ : undefined;
87
+ const encrypted = buffer.subarray(MAGIC_NUMBER.length + NONCE_SIZE + AAD_LEN_SIZE + paddingAadSize);
88
+ return { nonce, aad, data: encrypted };
89
+ }
@@ -1,84 +1,25 @@
1
1
  import * as impl from '#encryption';
2
- import { toUint8Array } from '../utils.js';
3
- import { AES_IV_SIZE, PBKDF2_SALT_SIZE } from './common.js';
2
+ import { parseEncrypted } from './common.js';
3
+ import { createModule } from './module.js';
4
4
 
5
- /**
6
- * CloudPSS 数据加密
7
- * - 密钥生成算法:PBKDF2-HMAC-SHA256,盐长度 128,迭代 100,000 次
8
- * - 加密算法:AES-256-CBC
9
- *
10
- * - 文件格式:
11
- * - Magic Number: 0e 02 49 29 3f 07 7b 0a
12
- * - Salt: 128 bits
13
- * - IV: 128 bits
14
- * - Encrypted Data
15
- */
16
-
17
- /** CloudPSS 数据加密 */
18
- export const MAGIC_NUMBER = Uint8Array.from([0x0e, 0x02, 0x49, 0x29, 0x3f, 0x07, 0x7b, 0x0a]);
19
-
20
- /** 检查是否为 CloudPSS 加密数据 */
21
- function isEncryptedImpl(data: Uint8Array): boolean {
22
- return (
23
- data.length > MAGIC_NUMBER.length + PBKDF2_SALT_SIZE + AES_IV_SIZE &&
24
- MAGIC_NUMBER.every((v, i) => data[i] === v)
25
- );
26
- }
5
+ export { MAGIC_NUMBER } from './common.js';
27
6
 
28
7
  /** 检查是否为 CloudPSS 加密数据 */
29
8
  export function isEncrypted(data: BinaryData): boolean {
30
- const buffer = toUint8Array(data);
31
- return isEncryptedImpl(buffer);
32
- }
33
-
34
- /** 检查密码 */
35
- function assertPassphrase(passphrase: string): void {
36
- if (typeof passphrase !== 'string') {
37
- throw new TypeError('Invalid passphrase, must be a string');
38
- }
39
- if (passphrase.length === 0) {
40
- throw new TypeError('Invalid passphrase, must not be empty');
41
- }
42
- }
43
-
44
- /**
45
- * 加密数据
46
- * @throws {TypeError} 如果密码无效
47
- */
48
- export async function encrypt(data: BinaryData, passphrase: string): Promise<Uint8Array> {
49
- assertPassphrase(passphrase);
50
- const buffer = toUint8Array(data);
51
- const encrypted = await impl.encrypt(buffer, passphrase);
52
- const result = new Uint8Array(MAGIC_NUMBER.length + PBKDF2_SALT_SIZE + AES_IV_SIZE + encrypted.data.length);
53
- result.set(MAGIC_NUMBER);
54
- result.set(encrypted.salt, MAGIC_NUMBER.length);
55
- result.set(encrypted.iv, MAGIC_NUMBER.length + PBKDF2_SALT_SIZE);
56
- result.set(encrypted.data, MAGIC_NUMBER.length + PBKDF2_SALT_SIZE + AES_IV_SIZE);
57
- return result;
9
+ return parseEncrypted(data) != null;
58
10
  }
59
11
 
60
12
  /**
61
- * 解密数据
13
+ * 从加密数据中提取附加数据
62
14
  * @throws {TypeError} 如果数据不是有效的加密数据
63
- * @throws {TypeError} 如果密码无效
64
15
  */
65
- export async function decrypt(data: BinaryData, passphrase: string): Promise<Uint8Array> {
66
- assertPassphrase(passphrase);
67
- const buffer = toUint8Array(data);
68
- if (!isEncryptedImpl(buffer)) {
16
+ export function extractAad(data: BinaryData): Uint8Array | undefined {
17
+ const encrypted = parseEncrypted(data);
18
+ if (encrypted == null) {
69
19
  throw new TypeError('Invalid encrypted data');
70
20
  }
71
- const encrypted = {
72
- salt: buffer.subarray(MAGIC_NUMBER.length, MAGIC_NUMBER.length + PBKDF2_SALT_SIZE),
73
- iv: buffer.subarray(
74
- MAGIC_NUMBER.length + PBKDF2_SALT_SIZE,
75
- MAGIC_NUMBER.length + PBKDF2_SALT_SIZE + AES_IV_SIZE,
76
- ),
77
- data: buffer.subarray(MAGIC_NUMBER.length + PBKDF2_SALT_SIZE + AES_IV_SIZE),
78
- };
79
- try {
80
- return await impl.decrypt(encrypted, passphrase);
81
- } catch (ex) {
82
- throw new Error('Wrong passphrase', { cause: ex });
83
- }
21
+ return encrypted.aad;
84
22
  }
23
+
24
+ // eslint-disable-next-line @typescript-eslint/unbound-method
25
+ export const { encrypt, decrypt, encryptAad } = createModule(impl);