@secrecy/lib 1.86.1 → 1.86.2-fix-crypto.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/client/SecrecyCloudClient.js +4 -1
- package/dist/lib/client/data-link.js +5 -6
- package/dist/lib/client/helpers.js +3 -1
- package/dist/lib/client/upload.js +3 -5
- package/dist/lib/crypto/data.js +149 -91
- package/dist/lib/crypto/helpers.js +31 -1
- package/dist/lib/crypto/index.js +2 -2
- package/dist/lib/utils/popup-tools.js +19 -7
- package/dist/lib/worker/generated/md5.js +2 -0
- package/dist/lib/worker/generated/sodium.js +2 -0
- package/dist/lib/worker/md5.js +2 -2
- package/dist/lib/worker/sodium.js +21 -18
- package/dist/types/crypto/data.d.ts +21 -1
- package/dist/types/crypto/helpers.d.ts +11 -0
- package/dist/types/utils/popup-tools.d.ts +2 -1
- package/dist/types/worker/generated/md5.d.ts +1 -0
- package/dist/types/worker/generated/sodium.d.ts +1 -0
- package/dist/types/worker/sodium.d.ts +2 -2
- package/package.json +6 -4
- package/dist/lib/worker/workerCodes.js +0 -254
- package/dist/types/worker/workerCodes.d.ts +0 -2
package/dist/lib/worker/md5.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import SparkMD5 from 'spark-md5';
|
|
2
|
-
import { workerMd5Script } from './workerCodes.js';
|
|
3
2
|
function* chunks(arr, n) {
|
|
4
3
|
for (let i = 0; i < arr.length; i += n) {
|
|
5
4
|
yield arr.slice(i, i + n);
|
|
@@ -8,8 +7,9 @@ function* chunks(arr, n) {
|
|
|
8
7
|
const CHUNK_SIZE = 8192;
|
|
9
8
|
export const md5 = process.env.NODE_ENV !== 'test'
|
|
10
9
|
? async (data) => {
|
|
10
|
+
const { workerMd5Script } = await import('./generated/md5.js');
|
|
11
|
+
const worker = new Worker(URL.createObjectURL(new Blob([workerMd5Script], { type: 'text/javascript' })));
|
|
11
12
|
return await new Promise((resolve, reject) => {
|
|
12
|
-
const worker = new Worker(URL.createObjectURL(new Blob([workerMd5Script], { type: 'text/javascript' })));
|
|
13
13
|
worker.addEventListener('error', reject);
|
|
14
14
|
worker.addEventListener('messageerror', reject);
|
|
15
15
|
worker.addEventListener('message', ({ data }) => {
|
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
import { decryptSecretStream, encryptSecretStream, } from '../crypto/data.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// values.filter(v => {
|
|
8
|
-
// if (v instanceof ArrayBuffer) {
|
|
9
|
-
// return v.byteLength === 0;
|
|
10
|
-
// } else {
|
|
11
|
-
// return true;
|
|
12
|
-
// }
|
|
13
|
-
// })
|
|
14
|
-
// );
|
|
2
|
+
// Loaded lazily so the bundled libsodium only ships when a worker is needed.
|
|
3
|
+
const createSodiumWorker = async () => {
|
|
4
|
+
const { workerSodiumScript } = await import('./generated/sodium.js');
|
|
5
|
+
return new Worker(URL.createObjectURL(new Blob([workerSodiumScript], { type: 'text/javascript' })));
|
|
6
|
+
};
|
|
15
7
|
export const encrypt = process.env.NODE_ENV !== 'test'
|
|
16
8
|
? async (key, dataToEncrypt, progress, signal) => {
|
|
9
|
+
const worker = await createSodiumWorker();
|
|
17
10
|
return await new Promise((resolve, reject) => {
|
|
18
11
|
void progress?.({
|
|
19
12
|
current: 0,
|
|
20
13
|
percent: 0,
|
|
21
14
|
total: dataToEncrypt.byteLength,
|
|
22
15
|
});
|
|
23
|
-
const worker = new Worker(URL.createObjectURL(new Blob([workerSodiumScript], { type: 'text/javascript' })));
|
|
24
16
|
worker.addEventListener('error', reject);
|
|
25
17
|
worker.addEventListener('messageerror', reject);
|
|
26
18
|
worker.addEventListener('message', ({ data }) => {
|
|
@@ -46,6 +38,11 @@ export const encrypt = process.env.NODE_ENV !== 'test'
|
|
|
46
38
|
void progress?.(data.data);
|
|
47
39
|
break;
|
|
48
40
|
}
|
|
41
|
+
case 'error': {
|
|
42
|
+
worker.terminate();
|
|
43
|
+
reject(new Error(data.data));
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
49
46
|
case 'encrypt-result': {
|
|
50
47
|
worker.terminate();
|
|
51
48
|
resolve(data.data);
|
|
@@ -58,14 +55,14 @@ export const encrypt = process.env.NODE_ENV !== 'test'
|
|
|
58
55
|
return encryptSecretStream(key, dataToEncrypt, progress, signal);
|
|
59
56
|
};
|
|
60
57
|
export const decrypt = process.env.NODE_ENV !== 'test'
|
|
61
|
-
? async (key, dataToDecrypt, progress, signal) => {
|
|
58
|
+
? async (key, dataToDecrypt, progress, signal, options) => {
|
|
59
|
+
const worker = await createSodiumWorker();
|
|
62
60
|
return await new Promise((resolve, reject) => {
|
|
63
61
|
void progress?.({
|
|
64
62
|
current: 0,
|
|
65
63
|
percent: 0,
|
|
66
64
|
total: dataToDecrypt.byteLength,
|
|
67
65
|
});
|
|
68
|
-
const worker = new Worker(URL.createObjectURL(new Blob([workerSodiumScript], { type: 'text/javascript' })));
|
|
69
66
|
worker.addEventListener('error', reject);
|
|
70
67
|
worker.addEventListener('messageerror', reject);
|
|
71
68
|
worker.addEventListener('message', ({ data }) => {
|
|
@@ -75,6 +72,7 @@ export const decrypt = process.env.NODE_ENV !== 'test'
|
|
|
75
72
|
event: 'decrypt',
|
|
76
73
|
key,
|
|
77
74
|
data: dataToDecrypt,
|
|
75
|
+
options,
|
|
78
76
|
};
|
|
79
77
|
worker.postMessage(postData, {
|
|
80
78
|
transfer: [postData.data.buffer],
|
|
@@ -91,6 +89,11 @@ export const decrypt = process.env.NODE_ENV !== 'test'
|
|
|
91
89
|
void progress?.(data.data);
|
|
92
90
|
break;
|
|
93
91
|
}
|
|
92
|
+
case 'error': {
|
|
93
|
+
worker.terminate();
|
|
94
|
+
reject(new Error(data.data));
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
94
97
|
case 'decrypt-result': {
|
|
95
98
|
worker.terminate();
|
|
96
99
|
resolve(data.data);
|
|
@@ -99,6 +102,6 @@ export const decrypt = process.env.NODE_ENV !== 'test'
|
|
|
99
102
|
});
|
|
100
103
|
});
|
|
101
104
|
}
|
|
102
|
-
: async (key, dataToDecrypt, progress, signal) => {
|
|
103
|
-
return decryptSecretStream(key, dataToDecrypt, progress, signal);
|
|
105
|
+
: async (key, dataToDecrypt, progress, signal, options) => {
|
|
106
|
+
return decryptSecretStream(key, dataToDecrypt, progress, signal, options);
|
|
104
107
|
};
|
|
@@ -3,6 +3,16 @@ export interface EncryptedFile {
|
|
|
3
3
|
md5: string;
|
|
4
4
|
md5Encrypted: string;
|
|
5
5
|
}
|
|
6
|
+
export interface DecryptSecretStreamOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Accept a stream whose last chunk is not tagged `TAG_FINAL`.
|
|
9
|
+
* Streams produced before the final tag was always set (size multiple of
|
|
10
|
+
* CHUNK_SIZE) lack it, so a truncation at a chunk boundary is undetectable
|
|
11
|
+
* for them: only enable this when the caller verifies the decrypted content
|
|
12
|
+
* independently (e.g. against a known digest).
|
|
13
|
+
*/
|
|
14
|
+
allowMissingFinalTag?: boolean;
|
|
15
|
+
}
|
|
6
16
|
export declare function secretStreamKeygen(): Uint8Array;
|
|
7
17
|
export declare const CHUNK_SIZE = 8192;
|
|
8
18
|
export interface SecretStreamProgress {
|
|
@@ -10,5 +20,15 @@ export interface SecretStreamProgress {
|
|
|
10
20
|
total: number;
|
|
11
21
|
current: number;
|
|
12
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Encrypt `data` as a secretstream: the header followed by one authenticated
|
|
25
|
+
* chunk per CHUNK_SIZE bytes of plaintext. The last chunk (an empty one for
|
|
26
|
+
* empty data) is always tagged `TAG_FINAL` so that truncation is detected.
|
|
27
|
+
*/
|
|
13
28
|
export declare function encryptSecretStream(key: Uint8Array, data: Uint8Array<ArrayBuffer>, progress?: (progress: SecretStreamProgress) => Promise<void>, signal?: AbortSignal): Promise<EncryptedFile>;
|
|
14
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Decrypt a secretstream produced by `encryptSecretStream`. Throws if any
|
|
31
|
+
* chunk fails authentication, if data follows the `TAG_FINAL` chunk, or if the
|
|
32
|
+
* stream ends without it (truncation) unless `allowMissingFinalTag` is set.
|
|
33
|
+
*/
|
|
34
|
+
export declare function decryptSecretStream(key: Uint8Array, data: Uint8Array<ArrayBuffer>, progress?: (progress: SecretStreamProgress) => Promise<void>, signal?: AbortSignal, options?: DecryptSecretStreamOptions): Promise<Uint8Array<ArrayBuffer>>;
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
export declare function generatePassword(): string;
|
|
2
2
|
export declare function derivePassword(password: string, salt: Uint8Array<ArrayBufferLike>): string;
|
|
3
|
+
/**
|
|
4
|
+
* Wrap a data key under a password, with a random salt:
|
|
5
|
+
* `version (1 byte) || salt || nonce || secretbox(key)`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function encryptKeyWithPassword(key: Uint8Array, password: string): Uint8Array;
|
|
8
|
+
/**
|
|
9
|
+
* Unwrap a data key produced by `encryptKeyWithPassword`. Also reads the
|
|
10
|
+
* legacy format (`nonce || secretbox(key)`) whose salt was derived from the
|
|
11
|
+
* password and the plaintext md5, hence `legacyMd5`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function decryptKeyWithPassword(wrapped: Uint8Array, password: string, legacyMd5: string): Uint8Array;
|
|
3
14
|
export declare function encryptName(name: string, nameKey: string): Promise<string>;
|
|
4
15
|
export declare function generateAndEncryptNameAndKey(args: {
|
|
5
16
|
name: string;
|
|
@@ -46,7 +46,8 @@ export declare function popupWithPost(url: string, postData: Record<string, stri
|
|
|
46
46
|
* Return html that when executed, will trigger the popup to callback with a response
|
|
47
47
|
*
|
|
48
48
|
* @param {Object}
|
|
49
|
+
* @param {String} targetOrigin origin of the opener allowed to receive `data`
|
|
49
50
|
* @return {String}
|
|
50
51
|
*/
|
|
51
|
-
export declare function popupResponse<T>(id: string, data: T): string;
|
|
52
|
+
export declare function popupResponse<T>(id: string, data: T, targetOrigin: string): string;
|
|
52
53
|
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const workerMd5Script = "(()=>{var D=Object.create;var{getPrototypeOf:E,defineProperty:F,getOwnPropertyNames:G}=Object;var v=Object.prototype.hasOwnProperty;function H(o){return this[o]}var K,N,R=(o,u,s)=>{var _=o!=null&&typeof o===\"object\";if(_){var y=u?K??=new WeakMap:N??=new WeakMap,b=y.get(o);if(b)return b}s=o!=null?D(E(o)):{};let l=u||!o||!o.__esModule||!v.call(o,\"default\")?F(s,\"default\",{value:o,enumerable:!0}):s;if(o&&typeof o===\"object\"||typeof o===\"function\"){for(let g of G(o))if(!v.call(l,g))F(l,g,{get:H.bind(o,g),enumerable:!0})}if(_)y.set(o,l);return l};var Z=(o,u)=>()=>(u||o((u={exports:{}}).exports,u),u.exports);var S=Z(function(w,U){(function(o){if(typeof w===\"object\")U.exports=o();else if(typeof define===\"function\"&&define.amd)define(o);else{var u;try{u=window}catch(s){u=self}u.SparkMD5=o()}})(function(o){var u=function(i,f){return i+f&4294967295},s=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"];function _(i,f,r,t,n,e){return f=u(u(f,i),u(t,e)),u(f<<n|f>>>32-n,r)}function y(i,f){var r=i[0],t=i[1],n=i[2],e=i[3];r+=(t&n|~t&e)+f[0]-680876936|0,r=(r<<7|r>>>25)+t|0,e+=(r&t|~r&n)+f[1]-389564586|0,e=(e<<12|e>>>20)+r|0,n+=(e&r|~e&t)+f[2]+606105819|0,n=(n<<17|n>>>15)+e|0,t+=(n&e|~n&r)+f[3]-1044525330|0,t=(t<<22|t>>>10)+n|0,r+=(t&n|~t&e)+f[4]-176418897|0,r=(r<<7|r>>>25)+t|0,e+=(r&t|~r&n)+f[5]+1200080426|0,e=(e<<12|e>>>20)+r|0,n+=(e&r|~e&t)+f[6]-1473231341|0,n=(n<<17|n>>>15)+e|0,t+=(n&e|~n&r)+f[7]-45705983|0,t=(t<<22|t>>>10)+n|0,r+=(t&n|~t&e)+f[8]+1770035416|0,r=(r<<7|r>>>25)+t|0,e+=(r&t|~r&n)+f[9]-1958414417|0,e=(e<<12|e>>>20)+r|0,n+=(e&r|~e&t)+f[10]-42063|0,n=(n<<17|n>>>15)+e|0,t+=(n&e|~n&r)+f[11]-1990404162|0,t=(t<<22|t>>>10)+n|0,r+=(t&n|~t&e)+f[12]+1804603682|0,r=(r<<7|r>>>25)+t|0,e+=(r&t|~r&n)+f[13]-40341101|0,e=(e<<12|e>>>20)+r|0,n+=(e&r|~e&t)+f[14]-1502002290|0,n=(n<<17|n>>>15)+e|0,t+=(n&e|~n&r)+f[15]+1236535329|0,t=(t<<22|t>>>10)+n|0,r+=(t&e|n&~e)+f[1]-165796510|0,r=(r<<5|r>>>27)+t|0,e+=(r&n|t&~n)+f[6]-1069501632|0,e=(e<<9|e>>>23)+r|0,n+=(e&t|r&~t)+f[11]+643717713|0,n=(n<<14|n>>>18)+e|0,t+=(n&r|e&~r)+f[0]-373897302|0,t=(t<<20|t>>>12)+n|0,r+=(t&e|n&~e)+f[5]-701558691|0,r=(r<<5|r>>>27)+t|0,e+=(r&n|t&~n)+f[10]+38016083|0,e=(e<<9|e>>>23)+r|0,n+=(e&t|r&~t)+f[15]-660478335|0,n=(n<<14|n>>>18)+e|0,t+=(n&r|e&~r)+f[4]-405537848|0,t=(t<<20|t>>>12)+n|0,r+=(t&e|n&~e)+f[9]+568446438|0,r=(r<<5|r>>>27)+t|0,e+=(r&n|t&~n)+f[14]-1019803690|0,e=(e<<9|e>>>23)+r|0,n+=(e&t|r&~t)+f[3]-187363961|0,n=(n<<14|n>>>18)+e|0,t+=(n&r|e&~r)+f[8]+1163531501|0,t=(t<<20|t>>>12)+n|0,r+=(t&e|n&~e)+f[13]-1444681467|0,r=(r<<5|r>>>27)+t|0,e+=(r&n|t&~n)+f[2]-51403784|0,e=(e<<9|e>>>23)+r|0,n+=(e&t|r&~t)+f[7]+1735328473|0,n=(n<<14|n>>>18)+e|0,t+=(n&r|e&~r)+f[12]-1926607734|0,t=(t<<20|t>>>12)+n|0,r+=(t^n^e)+f[5]-378558|0,r=(r<<4|r>>>28)+t|0,e+=(r^t^n)+f[8]-2022574463|0,e=(e<<11|e>>>21)+r|0,n+=(e^r^t)+f[11]+1839030562|0,n=(n<<16|n>>>16)+e|0,t+=(n^e^r)+f[14]-35309556|0,t=(t<<23|t>>>9)+n|0,r+=(t^n^e)+f[1]-1530992060|0,r=(r<<4|r>>>28)+t|0,e+=(r^t^n)+f[4]+1272893353|0,e=(e<<11|e>>>21)+r|0,n+=(e^r^t)+f[7]-155497632|0,n=(n<<16|n>>>16)+e|0,t+=(n^e^r)+f[10]-1094730640|0,t=(t<<23|t>>>9)+n|0,r+=(t^n^e)+f[13]+681279174|0,r=(r<<4|r>>>28)+t|0,e+=(r^t^n)+f[0]-358537222|0,e=(e<<11|e>>>21)+r|0,n+=(e^r^t)+f[3]-722521979|0,n=(n<<16|n>>>16)+e|0,t+=(n^e^r)+f[6]+76029189|0,t=(t<<23|t>>>9)+n|0,r+=(t^n^e)+f[9]-640364487|0,r=(r<<4|r>>>28)+t|0,e+=(r^t^n)+f[12]-421815835|0,e=(e<<11|e>>>21)+r|0,n+=(e^r^t)+f[15]+530742520|0,n=(n<<16|n>>>16)+e|0,t+=(n^e^r)+f[2]-995338651|0,t=(t<<23|t>>>9)+n|0,r+=(n^(t|~e))+f[0]-198630844|0,r=(r<<6|r>>>26)+t|0,e+=(t^(r|~n))+f[7]+1126891415|0,e=(e<<10|e>>>22)+r|0,n+=(r^(e|~t))+f[14]-1416354905|0,n=(n<<15|n>>>17)+e|0,t+=(e^(n|~r))+f[5]-57434055|0,t=(t<<21|t>>>11)+n|0,r+=(n^(t|~e))+f[12]+1700485571|0,r=(r<<6|r>>>26)+t|0,e+=(t^(r|~n))+f[3]-1894986606|0,e=(e<<10|e>>>22)+r|0,n+=(r^(e|~t))+f[10]-1051523|0,n=(n<<15|n>>>17)+e|0,t+=(e^(n|~r))+f[1]-2054922799|0,t=(t<<21|t>>>11)+n|0,r+=(n^(t|~e))+f[8]+1873313359|0,r=(r<<6|r>>>26)+t|0,e+=(t^(r|~n))+f[15]-30611744|0,e=(e<<10|e>>>22)+r|0,n+=(r^(e|~t))+f[6]-1560198380|0,n=(n<<15|n>>>17)+e|0,t+=(e^(n|~r))+f[13]+1309151649|0,t=(t<<21|t>>>11)+n|0,r+=(n^(t|~e))+f[4]-145523070|0,r=(r<<6|r>>>26)+t|0,e+=(t^(r|~n))+f[11]-1120210379|0,e=(e<<10|e>>>22)+r|0,n+=(r^(e|~t))+f[2]+718787259|0,n=(n<<15|n>>>17)+e|0,t+=(e^(n|~r))+f[9]-343485551|0,t=(t<<21|t>>>11)+n|0,i[0]=r+i[0]|0,i[1]=t+i[1]|0,i[2]=n+i[2]|0,i[3]=e+i[3]|0}function b(i){var f=[],r;for(r=0;r<64;r+=4)f[r>>2]=i.charCodeAt(r)+(i.charCodeAt(r+1)<<8)+(i.charCodeAt(r+2)<<16)+(i.charCodeAt(r+3)<<24);return f}function l(i){var f=[],r;for(r=0;r<64;r+=4)f[r>>2]=i[r]+(i[r+1]<<8)+(i[r+2]<<16)+(i[r+3]<<24);return f}function g(i){var f=i.length,r=[1732584193,-271733879,-1732584194,271733878],t,n,e,a,c,p;for(t=64;t<=f;t+=64)y(r,b(i.substring(t-64,t)));i=i.substring(t-64),n=i.length,e=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t<n;t+=1)e[t>>2]|=i.charCodeAt(t)<<(t%4<<3);if(e[t>>2]|=128<<(t%4<<3),t>55){y(r,e);for(t=0;t<16;t+=1)e[t]=0}return a=f*8,a=a.toString(16).match(/(.*?)(.{0,8})$/),c=parseInt(a[2],16),p=parseInt(a[1],16)||0,e[14]=c,e[15]=p,y(r,e),r}function T(i){var f=i.length,r=[1732584193,-271733879,-1732584194,271733878],t,n,e,a,c,p;for(t=64;t<=f;t+=64)y(r,l(i.subarray(t-64,t)));i=t-64<f?i.subarray(t-64):new Uint8Array(0),n=i.length,e=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t<n;t+=1)e[t>>2]|=i[t]<<(t%4<<3);if(e[t>>2]|=128<<(t%4<<3),t>55){y(r,e);for(t=0;t<16;t+=1)e[t]=0}return a=f*8,a=a.toString(16).match(/(.*?)(.{0,8})$/),c=parseInt(a[2],16),p=parseInt(a[1],16)||0,e[14]=c,e[15]=p,y(r,e),r}function L(i){var f=\"\",r;for(r=0;r<4;r+=1)f+=s[i>>r*8+4&15]+s[i>>r*8&15];return f}function d(i){var f;for(f=0;f<i.length;f+=1)i[f]=L(i[f]);return i.join(\"\")}if(d(g(\"hello\"))!==\"5d41402abc4b2a76b9719d911017c592\")u=function(i,f){var r=(i&65535)+(f&65535),t=(i>>16)+(f>>16)+(r>>16);return t<<16|r&65535};if(typeof ArrayBuffer<\"u\"&&!ArrayBuffer.prototype.slice)(function(){function i(f,r){if(f=f|0||0,f<0)return Math.max(f+r,0);return Math.min(f,r)}ArrayBuffer.prototype.slice=function(f,r){var t=this.byteLength,n=i(f,t),e=t,a,c,p,B;if(r!==o)e=i(r,t);if(n>e)return new ArrayBuffer(0);return a=e-n,c=new ArrayBuffer(a),p=new Uint8Array(c),B=new Uint8Array(this,n,a),p.set(B),c}})();function m(i){if(/[\\u0080-\\uFFFF]/.test(i))i=unescape(encodeURIComponent(i));return i}function M(i,f){var r=i.length,t=new ArrayBuffer(r),n=new Uint8Array(t),e;for(e=0;e<r;e+=1)n[e]=i.charCodeAt(e);return f?n:t}function x(i){return String.fromCharCode.apply(null,new Uint8Array(i))}function j(i,f,r){var t=new Uint8Array(i.byteLength+f.byteLength);return t.set(new Uint8Array(i)),t.set(new Uint8Array(f),i.byteLength),r?t:t.buffer}function A(i){var f=[],r=i.length,t;for(t=0;t<r-1;t+=2)f.push(parseInt(i.substr(t,2),16));return String.fromCharCode.apply(String,f)}function h(){this.reset()}return h.prototype.append=function(i){return this.appendBinary(m(i)),this},h.prototype.appendBinary=function(i){this._buff+=i,this._length+=i.length;var f=this._buff.length,r;for(r=64;r<=f;r+=64)y(this._hash,b(this._buff.substring(r-64,r)));return this._buff=this._buff.substring(r-64),this},h.prototype.end=function(i){var f=this._buff,r=f.length,t,n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e;for(t=0;t<r;t+=1)n[t>>2]|=f.charCodeAt(t)<<(t%4<<3);if(this._finish(n,r),e=d(this._hash),i)e=A(e);return this.reset(),e},h.prototype.reset=function(){return this._buff=\"\",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},h.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},h.prototype.setState=function(i){return this._buff=i.buff,this._length=i.length,this._hash=i.hash,this},h.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},h.prototype._finish=function(i,f){var r=f,t,n,e;if(i[r>>2]|=128<<(r%4<<3),r>55){y(this._hash,i);for(r=0;r<16;r+=1)i[r]=0}t=this._length*8,t=t.toString(16).match(/(.*?)(.{0,8})$/),n=parseInt(t[2],16),e=parseInt(t[1],16)||0,i[14]=n,i[15]=e,y(this._hash,i)},h.hash=function(i,f){return h.hashBinary(m(i),f)},h.hashBinary=function(i,f){var r=g(i),t=d(r);return f?A(t):t},h.ArrayBuffer=function(){this.reset()},h.ArrayBuffer.prototype.append=function(i){var f=j(this._buff.buffer,i,!0),r=f.length,t;this._length+=i.byteLength;for(t=64;t<=r;t+=64)y(this._hash,l(f.subarray(t-64,t)));return this._buff=t-64<r?new Uint8Array(f.buffer.slice(t-64)):new Uint8Array(0),this},h.ArrayBuffer.prototype.end=function(i){var f=this._buff,r=f.length,t=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],n,e;for(n=0;n<r;n+=1)t[n>>2]|=f[n]<<(n%4<<3);if(this._finish(t,r),e=d(this._hash),i)e=A(e);return this.reset(),e},h.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},h.ArrayBuffer.prototype.getState=function(){var i=h.prototype.getState.call(this);return i.buff=x(i.buff),i},h.ArrayBuffer.prototype.setState=function(i){return i.buff=M(i.buff,!0),h.prototype.setState.call(this,i)},h.ArrayBuffer.prototype.destroy=h.prototype.destroy,h.ArrayBuffer.prototype._finish=h.prototype._finish,h.ArrayBuffer.hash=function(i,f){var r=T(new Uint8Array(i)),t=d(r);return f?A(t):t},h})});var I=R(S(),1);function*C(o,u){for(let s=0;s<o.length;s+=u)yield o.slice(s,s+u)}var q=8192;self.onmessage=({data:o})=>{if(o.event===\"md5\"){let u=new I.default.ArrayBuffer;for(let s of C(o.data,q))u.append(s.buffer);postMessage({event:\"md5-result\",data:u.end()})}};})();\n";
|