fixed issue making the workers not working when the code was minified by webpack

This commit is contained in:
Juanra Dikal 2021-04-21 01:06:35 +02:00
parent 82eea182f0
commit 404f1bd53e
9 changed files with 519 additions and 1118 deletions

View File

@ -40,24 +40,6 @@ const sourcemapOutputOptions = {
} }
module.exports = [ module.exports = [
{ // ESM for browsers
input: input,
output: [
{
file: path.join(rootDir, pkgJson.exports['.'].default),
...sourcemapOutputOptions,
format: 'es'
}
],
plugins: [
replace({
IS_BROWSER: true,
preventAssignment: true
}),
typescriptPlugin(tsBundleOptions)
],
external
},
{ // Browser bundles { // Browser bundles
input: input, input: input,
output: [ output: [

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -35,9 +35,9 @@ Absolute value. abs(a)==a if a>=0. abs(a)==-a if a<0
#### Parameters: #### Parameters:
Name | Type | | Name | Type |
:------ | :------ | | :------ | :------ |
`a` | *number* \| *bigint* | | `a` | *number* \| *bigint* |
**Returns:** *number* \| *bigint* **Returns:** *number* \| *bigint*
@ -55,9 +55,9 @@ Returns the bitlength of a number
#### Parameters: #### Parameters:
Name | Type | | Name | Type |
:------ | :------ | | :------ | :------ |
`a` | *number* \| *bigint* | | `a` | *number* \| *bigint* |
**Returns:** *number* **Returns:** *number*
@ -79,10 +79,10 @@ This excepction is thrown if a or b are less than 0
#### Parameters: #### Parameters:
Name | Type | | Name | Type |
:------ | :------ | | :------ | :------ |
`a` | *number* \| *bigint* | | `a` | *number* \| *bigint* |
`b` | *number* \| *bigint* | | `b` | *number* \| *bigint* |
**Returns:** Egcd **Returns:** Egcd
@ -100,10 +100,10 @@ Greatest-common divisor of two integers based on the iterative binary algorithm.
#### Parameters: #### Parameters:
Name | Type | | Name | Type |
:------ | :------ | | :------ | :------ |
`a` | *number* \| *bigint* | | `a` | *number* \| *bigint* |
`b` | *number* \| *bigint* | | `b` | *number* \| *bigint* |
**Returns:** *bigint* **Returns:** *bigint*
@ -125,17 +125,17 @@ w MUST be >= 0
#### Parameters: #### Parameters:
Name | Type | Default value | Description | | Name | Type | Default value | Description |
:------ | :------ | :------ | :------ | | :------ | :------ | :------ | :------ |
`w` | *number* \| *bigint* | - | A positive integer to be tested for primality | | `w` | *number* \| *bigint* | - | A positive integer to be tested for primality |
`iterations` | *number* | 16 | The number of iterations for the primality test. The value shall be consistent with Table C.1, C.2 or C.3 | | `iterations` | *number* | 16 | The number of iterations for the primality test. The value shall be consistent with Table C.1, C.2 or C.3 |
`disableWorkers` | *boolean* | false | Disable the use of workers for the primality test | | `disableWorkers` | *boolean* | false | Disable the use of workers for the primality test |
**Returns:** *Promise*<boolean\> **Returns:** *Promise*<boolean\>
A promise that resolves to a boolean that is either true (a probably prime number) or false (definitely composite) A promise that resolves to a boolean that is either true (a probably prime number) or false (definitely composite)
Defined in: [src/ts/isProbablyPrime.ts:21](https://github.com/juanelas/bigint-crypto-utils/blob/9b2700b/src/ts/isProbablyPrime.ts#L21) Defined in: [src/ts/isProbablyPrime.ts:21](https://github.com/juanelas/bigint-crypto-utils/blob/82eea18/src/ts/isProbablyPrime.ts#L21)
___ ___
@ -147,10 +147,10 @@ The least common multiple computed as abs(a*b)/gcd(a,b)
#### Parameters: #### Parameters:
Name | Type | | Name | Type |
:------ | :------ | | :------ | :------ |
`a` | *number* \| *bigint* | | `a` | *number* \| *bigint* |
`b` | *number* \| *bigint* | | `b` | *number* \| *bigint* |
**Returns:** *bigint* **Returns:** *bigint*
@ -168,10 +168,10 @@ Maximum. max(a,b)==a if a>=b. max(a,b)==b if a<=b
#### Parameters: #### Parameters:
Name | Type | | Name | Type |
:------ | :------ | | :------ | :------ |
`a` | *number* \| *bigint* | | `a` | *number* \| *bigint* |
`b` | *number* \| *bigint* | | `b` | *number* \| *bigint* |
**Returns:** *number* \| *bigint* **Returns:** *number* \| *bigint*
@ -189,10 +189,10 @@ Minimum. min(a,b)==b if a>=b. min(a,b)==a if a<=b
#### Parameters: #### Parameters:
Name | Type | | Name | Type |
:------ | :------ | | :------ | :------ |
`a` | *number* \| *bigint* | | `a` | *number* \| *bigint* |
`b` | *number* \| *bigint* | | `b` | *number* \| *bigint* |
**Returns:** *number* \| *bigint* **Returns:** *number* \| *bigint*
@ -213,10 +213,10 @@ Excpeption thorwn when a does not have inverse modulo n
#### Parameters: #### Parameters:
Name | Type | Description | | Name | Type | Description |
:------ | :------ | :------ | | :------ | :------ | :------ |
`a` | *number* \| *bigint* | The number to find an inverse for | | `a` | *number* \| *bigint* | The number to find an inverse for |
`n` | *number* \| *bigint* | The modulo | | `n` | *number* \| *bigint* | The modulo |
**Returns:** *bigint* **Returns:** *bigint*
@ -237,11 +237,11 @@ Excpeption thrown when n is not > 0
#### Parameters: #### Parameters:
Name | Type | Description | | Name | Type | Description |
:------ | :------ | :------ | | :------ | :------ | :------ |
`b` | *number* \| *bigint* | base | | `b` | *number* \| *bigint* | base |
`e` | *number* \| *bigint* | exponent | | `e` | *number* \| *bigint* | exponent |
`n` | *number* \| *bigint* | modulo | | `n` | *number* \| *bigint* | modulo |
**Returns:** *bigint* **Returns:** *bigint*
@ -266,16 +266,16 @@ bitLength MUST be > 0
#### Parameters: #### Parameters:
Name | Type | Default value | Description | | Name | Type | Default value | Description |
:------ | :------ | :------ | :------ | | :------ | :------ | :------ | :------ |
`bitLength` | *number* | - | The required bit length for the generated prime | | `bitLength` | *number* | - | The required bit length for the generated prime |
`iterations` | *number* | 16 | The number of iterations for the Miller-Rabin Probabilistic Primality Test | | `iterations` | *number* | 16 | The number of iterations for the Miller-Rabin Probabilistic Primality Test |
**Returns:** *Promise*<bigint\> **Returns:** *Promise*<bigint\>
A promise that resolves to a bigint probable prime of bitLength bits. A promise that resolves to a bigint probable prime of bitLength bits.
Defined in: [src/ts/prime.ts:21](https://github.com/juanelas/bigint-crypto-utils/blob/9b2700b/src/ts/prime.ts#L21) Defined in: [src/ts/prime.ts:21](https://github.com/juanelas/bigint-crypto-utils/blob/82eea18/src/ts/prime.ts#L21)
___ ___
@ -291,16 +291,16 @@ bitLength MUST be > 0
#### Parameters: #### Parameters:
Name | Type | Default value | Description | | Name | Type | Default value | Description |
:------ | :------ | :------ | :------ | | :------ | :------ | :------ | :------ |
`bitLength` | *number* | - | The required bit length for the generated prime | | `bitLength` | *number* | - | The required bit length for the generated prime |
`iterations` | *number* | 16 | The number of iterations for the Miller-Rabin Probabilistic Primality Test | | `iterations` | *number* | 16 | The number of iterations for the Miller-Rabin Probabilistic Primality Test |
**Returns:** *bigint* **Returns:** *bigint*
A bigint probable prime of bitLength bits. A bigint probable prime of bitLength bits.
Defined in: [src/ts/prime.ts:100](https://github.com/juanelas/bigint-crypto-utils/blob/9b2700b/src/ts/prime.ts#L100) Defined in: [src/ts/prime.ts:100](https://github.com/juanelas/bigint-crypto-utils/blob/82eea18/src/ts/prime.ts#L100)
___ ___
@ -315,16 +315,16 @@ Arguments MUST be: max > 0 && min >=0 && max > min
#### Parameters: #### Parameters:
Name | Type | Description | | Name | Type | Description |
:------ | :------ | :------ | | :------ | :------ | :------ |
`max` | *bigint* | Returned value will be <= max | | `max` | *bigint* | Returned value will be <= max |
`min` | *bigint* | Returned value will be >= min | | `min` | *bigint* | Returned value will be >= min |
**Returns:** *bigint* **Returns:** *bigint*
A cryptographically secure random bigint between [min,max] A cryptographically secure random bigint between [min,max]
Defined in: [src/ts/randBetween.ts:15](https://github.com/juanelas/bigint-crypto-utils/blob/9b2700b/src/ts/randBetween.ts#L15) Defined in: [src/ts/randBetween.ts:15](https://github.com/juanelas/bigint-crypto-utils/blob/82eea18/src/ts/randBetween.ts#L15)
___ ___
@ -339,16 +339,16 @@ bitLength MUST be > 0
#### Parameters: #### Parameters:
Name | Type | Default value | Description | | Name | Type | Default value | Description |
:------ | :------ | :------ | :------ | | :------ | :------ | :------ | :------ |
`bitLength` | *number* | - | The desired number of random bits | | `bitLength` | *number* | - | The desired number of random bits |
`forceLength` | *boolean* | false | If we want to force the output to have a specific bit length. It basically forces the msb to be 1 | | `forceLength` | *boolean* | false | If we want to force the output to have a specific bit length. It basically forces the msb to be 1 |
**Returns:** *Promise*<Uint8Array \| Buffer\> **Returns:** *Promise*<Uint8Array \| Buffer\>
A Promise that resolves to a UInt8Array/Buffer (Browser/Node.js) filled with cryptographically secure random bits A Promise that resolves to a UInt8Array/Buffer (Browser/Node.js) filled with cryptographically secure random bits
Defined in: [src/ts/randBits.ts:14](https://github.com/juanelas/bigint-crypto-utils/blob/9b2700b/src/ts/randBits.ts#L14) Defined in: [src/ts/randBits.ts:14](https://github.com/juanelas/bigint-crypto-utils/blob/82eea18/src/ts/randBits.ts#L14)
___ ___
@ -363,16 +363,16 @@ bitLength MUST be > 0
#### Parameters: #### Parameters:
Name | Type | Default value | Description | | Name | Type | Default value | Description |
:------ | :------ | :------ | :------ | | :------ | :------ | :------ | :------ |
`bitLength` | *number* | - | The desired number of random bits | | `bitLength` | *number* | - | The desired number of random bits |
`forceLength` | *boolean* | false | If we want to force the output to have a specific bit length. It basically forces the msb to be 1 | | `forceLength` | *boolean* | false | If we want to force the output to have a specific bit length. It basically forces the msb to be 1 |
**Returns:** Uint8Array \| Buffer **Returns:** Uint8Array \| Buffer
A Uint8Array/Buffer (Browser/Node.js) filled with cryptographically secure random bits A Uint8Array/Buffer (Browser/Node.js) filled with cryptographically secure random bits
Defined in: [src/ts/randBits.ts:45](https://github.com/juanelas/bigint-crypto-utils/blob/9b2700b/src/ts/randBits.ts#L45) Defined in: [src/ts/randBits.ts:45](https://github.com/juanelas/bigint-crypto-utils/blob/82eea18/src/ts/randBits.ts#L45)
___ ___
@ -387,16 +387,16 @@ byteLength MUST be > 0
#### Parameters: #### Parameters:
Name | Type | Default value | Description | | Name | Type | Default value | Description |
:------ | :------ | :------ | :------ | | :------ | :------ | :------ | :------ |
`byteLength` | *number* | - | The desired number of random bytes | | `byteLength` | *number* | - | The desired number of random bytes |
`forceLength` | *boolean* | false | If we want to force the output to have a bit length of 8*byteLength. It basically forces the msb to be 1 | | `forceLength` | *boolean* | false | If we want to force the output to have a bit length of 8*byteLength. It basically forces the msb to be 1 |
**Returns:** *Promise*<Uint8Array \| Buffer\> **Returns:** *Promise*<Uint8Array \| Buffer\>
A promise that resolves to a UInt8Array/Buffer (Browser/Node.js) filled with cryptographically secure random bytes A promise that resolves to a UInt8Array/Buffer (Browser/Node.js) filled with cryptographically secure random bytes
Defined in: [src/ts/randBytes.ts:12](https://github.com/juanelas/bigint-crypto-utils/blob/9b2700b/src/ts/randBytes.ts#L12) Defined in: [src/ts/randBytes.ts:12](https://github.com/juanelas/bigint-crypto-utils/blob/82eea18/src/ts/randBytes.ts#L12)
___ ___
@ -411,16 +411,16 @@ byteLength MUST be > 0
#### Parameters: #### Parameters:
Name | Type | Default value | Description | | Name | Type | Default value | Description |
:------ | :------ | :------ | :------ | | :------ | :------ | :------ | :------ |
`byteLength` | *number* | - | The desired number of random bytes | | `byteLength` | *number* | - | The desired number of random bytes |
`forceLength` | *boolean* | false | If we want to force the output to have a bit length of 8*byteLength. It basically forces the msb to be 1 | | `forceLength` | *boolean* | false | If we want to force the output to have a bit length of 8*byteLength. It basically forces the msb to be 1 |
**Returns:** Uint8Array \| Buffer **Returns:** Uint8Array \| Buffer
A UInt8Array/Buffer (Browser/Node.js) filled with cryptographically secure random bytes A UInt8Array/Buffer (Browser/Node.js) filled with cryptographically secure random bytes
Defined in: [src/ts/randBytes.ts:46](https://github.com/juanelas/bigint-crypto-utils/blob/9b2700b/src/ts/randBytes.ts#L46) Defined in: [src/ts/randBytes.ts:46](https://github.com/juanelas/bigint-crypto-utils/blob/82eea18/src/ts/randBytes.ts#L46)
___ ___
@ -438,10 +438,10 @@ Excpeption thrown when n is not > 0
#### Parameters: #### Parameters:
Name | Type | Description | | Name | Type | Description |
:------ | :------ | :------ | | :------ | :------ | :------ |
`a` | *number* \| *bigint* | An integer | | `a` | *number* \| *bigint* | An integer |
`n` | *number* \| *bigint* | The modulo | | `n` | *number* \| *bigint* | The modulo |
**Returns:** *bigint* **Returns:** *bigint*

799
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,7 @@
}, },
"types": "./dist/esm/types/index.d.ts", "types": "./dist/esm/types/index.d.ts",
"main": "./dist/cjs/index.node.cjs", "main": "./dist/cjs/index.node.cjs",
"browser": "./dist/esm/index.browser.js", "browser": "./dist/bundles/bigint-crypto-utils.esm.js",
"module": "./dist/esm/index.node.js", "module": "./dist/esm/index.node.js",
"exports": { "exports": {
".": { ".": {
@ -34,9 +34,11 @@
"require": "./dist/cjs/index.node.cjs", "require": "./dist/cjs/index.node.cjs",
"import": "./dist/esm/index.node.js" "import": "./dist/esm/index.node.js"
}, },
"default": "./dist/esm/index.browser.js" "default": "./dist/bundles/bigint-crypto-utils.esm.js"
}, },
"./bundles/": "./dist/bundles/", "./esm-browser-bundle": "./dist/bundles/bigint-crypto-utils.esm.js",
"./iife-browser-bundle": "./dist/bundles/bigint-crypto-utils.iife.js",
"./umd-browser-bundle": "./dist/bundles/bigint-crypto-utils.umd.js",
"./types/": "./dist/esm/types/" "./types/": "./dist/esm/types/"
}, },
"directories": { "directories": {
@ -109,10 +111,10 @@
"typedoc-plugin-markdown": "^3.6.0", "typedoc-plugin-markdown": "^3.6.0",
"typescript": "^4.2.2" "typescript": "^4.2.2"
}, },
"dependencies": {
"bigint-mod-arith": "^3.0.0"
},
"peerDependencies": { "peerDependencies": {
"@types/node": ">10.4" "@types/node": ">10.4"
},
"dependencies": {
"bigint-mod-arith": "^3.0.0"
} }
} }

View File

@ -393,18 +393,18 @@ export function _isProbablyPrimeWorkerUrl (): string {
// Let's us first add all the required functions // Let's us first add all the required functions
let workerCode = `'use strict';const ${eGcd.name}=${eGcd.toString()};const ${modInv.name}=${modInv.toString()};const ${modPow.name}=${modPow.toString()};const ${toZn.name}=${toZn.toString()};const ${randBitsSync.name}=${randBitsSync.toString()};const ${randBytesSync.name}=${randBytesSync.toString()};const ${randBetween.name}=${randBetween.toString()};const ${isProbablyPrime.name}=${_isProbablyPrime.toString()};${bitLength.toString()};${fromBuffer.toString()};` let workerCode = `'use strict';const ${eGcd.name}=${eGcd.toString()};const ${modInv.name}=${modInv.toString()};const ${modPow.name}=${modPow.toString()};const ${toZn.name}=${toZn.toString()};const ${randBitsSync.name}=${randBitsSync.toString()};const ${randBytesSync.name}=${randBytesSync.toString()};const ${randBetween.name}=${randBetween.toString()};const ${isProbablyPrime.name}=${_isProbablyPrime.toString()};${bitLength.toString()};${fromBuffer.toString()};`
const onmessage = async function (event: {data: MainToWorkerMsg}): Promise<void> { // Let's start once we are called workerCode += `
onmessage = async function (event) { // Let's start once we are called
// event.data = {rnd: <bigint>, iterations: <number>} // event.data = {rnd: <bigint>, iterations: <number>}
const isPrime = await isProbablyPrime(event.data.rnd, event.data.iterations) const isPrime = await ${isProbablyPrime.name}(event.data.rnd, event.data.iterations);
const msg: WorkerToMainMsg = { const msg = {
isPrime: isPrime, isPrime: isPrime,
value: event.data.rnd, value: event.data.rnd,
id: event.data.id id: event.data.id
} };
postMessage(msg) postMessage(msg);
} }
`
workerCode += `onmessage = ${onmessage.toString()};`
return _workerUrl(workerCode) return _workerUrl(workerCode)
} }