react-native-quick-crypto 0.4.2 → 0.4.5

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/LICENSE CHANGED
@@ -1,6 +1,8 @@
1
+ **react-native-quick-crypto**
2
+
1
3
  MIT License
2
4
 
3
- Copyright (c) 2021 Marc Rousavy
5
+ Copyright (c) 2021 Margelo GmbH
4
6
 
5
7
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
8
  of this software and associated documentation files (the "Software"), to deal
@@ -19,3 +21,7 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
21
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
22
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
23
  SOFTWARE.
24
+
25
+ **NodeJS Crypto**
26
+
27
+ See https://github.com/nodejs/node/blob/main/LICENSE
package/README.md CHANGED
@@ -47,6 +47,7 @@ Creating a Wallet took 289 ms
47
47
 
48
48
  ```sh
49
49
  yarn add react-native-quick-crypto
50
+ yarn add react-native-quick-base64
50
51
  cd ios && pod install
51
52
  ```
52
53
 
@@ -56,16 +57,17 @@ cd ios && pod install
56
57
 
57
58
  ```sh
58
59
  expo install react-native-quick-crypto
60
+ expo install react-native-quick-base64
59
61
  expo prebuild
60
62
  ```
61
63
 
62
- ## Usage
64
+ ## Replace `crypto-browserify`
65
+
66
+ If you are using a library that depends on `crypto`, instead of polyfilling it with `crypto-browserify` (or `react-native-crypto`) you can use `react-native-quick-crypto` for a fully native implementation. This way you can get much faster crypto operations with just a single-line change!
63
67
 
64
68
  In your `babel.config.js`, add a module resolver to replace `crypto` with `react-native-quick-crypto`:
65
69
 
66
70
  ```diff
67
- +const path = require('path');
68
-
69
71
  module.exports = {
70
72
  presets: ['module:metro-react-native-babel-preset'],
71
73
  plugins: [
@@ -74,6 +76,8 @@ module.exports = {
74
76
  + {
75
77
  + alias: {
76
78
  + 'crypto': 'react-native-quick-crypto',
79
+ + 'stream': 'stream-browserify',
80
+ + 'buffer': '@craftzdog/react-native-buffer',
77
81
  + },
78
82
  + },
79
83
  + ],
@@ -82,18 +86,69 @@ module.exports = {
82
86
  };
83
87
  ```
84
88
 
89
+ Then restart your bundler using `yarn start --reset-cache`.
90
+
85
91
  Now, all imports for `crypto` will be resolved as `react-native-quick-crypto` instead.
86
92
 
93
+ > 💡 Since react-native-quick-crypto depends on `stream` and `buffer`, we can resolve those to `stream-browserify` and @craftzdog's `react-native-buffer` (which is faster than `buffer` because it uses JSI for base64 encoding and decoding).
94
+
95
+ ## Usage
96
+
97
+ For example, to hash a string with SHA256 you can do the following:
98
+
99
+ ```ts
100
+ import Crypto from 'react-native-quick-crypto'
101
+
102
+ const hashed = Crypto.createHash('sha256')
103
+ .update('Damn, Margelo writes hella good software!')
104
+ .digest('hex')
105
+ ```
106
+
87
107
  ---
88
108
 
89
109
  ## Sponsors
90
110
 
111
+ <!-- Onin -->
91
112
  <div align="center">
113
+ <img height="50" src="./img/sponsors/onin.svg" align="center"><br/>
114
+ <a href="https://onin.co"><b>Onin</b></a> - This library is supported by Onin. Plan events without leaving the chat: <a href="https://onin.co">onin.co</a>
115
+ </div>
116
+ <br/>
117
+ <br/>
118
+
119
+ <!-- Steakwallet -->
120
+ <div align="center">
121
+ <img height="37" src="./img/sponsors/omni.png" align="center"><br/>
122
+ <a href="https://steakwallet.fi"><b>Omni</b></a> - Web3 for all. Access all of Web3 in one easy to use wallet. Omni supports more blockchains so you get more tokens, more yields, more NFTs, and more fun!
123
+ </div>
124
+ <br/>
125
+ <br/>
92
126
 
93
- <img width="350" src="./img/sponsors/litentry.png" align="center"><br/>
127
+ <!-- Litentry -->
128
+ <div align="center">
129
+ <img height="70" src="./img/sponsors/litentry.png" align="center"><br/>
94
130
  <a href="https://litentry.com"><b>Litentry</b></a> - A decentralized identity aggregator, providing the structure and tools to empower you and your identity.
131
+ </div>
132
+ <br/>
133
+ <br/>
95
134
 
135
+ <!-- WalletConnect -->
136
+ <div align="center">
137
+ <img height="35" src="./img/sponsors/walletconnect.png" align="center"><br/>
138
+ <a href="https://walletconnect.com"><b>WalletConnect</b></a> - The communications protocol for web3, WalletConnect brings the ecosystem together by enabling wallets and apps to securely connect and interact.
139
+ </div>
140
+ <br/>
141
+ <br/>
142
+
143
+ <!-- WalletConnect -->
144
+
145
+ <!-- THORSwap -->
146
+ <div align="center">
147
+ <img height="40" src="./img/sponsors/thorswap.png" align="center"><br/>
148
+ <a href="https://thorswap.finance"><b>THORSwap</b></a> - THORSwap is a cross-chain DEX aggregator that enables users to swap native assets across chains, provide liquidity to earn yield, and more. THORSwap is fully permissionless and non-custodial. No account signup, your wallet, your keys, your coins.
96
149
  </div>
150
+ <br/>
151
+ <br/>
97
152
 
98
153
  ## Limitations
99
154
 
@@ -109,4 +164,5 @@ See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the
109
164
 
110
165
  ## License
111
166
 
112
- MIT
167
+ - react-native-quick-crypto is licensed under MIT.
168
+ - react-native-quick-crypto is heavily inspired by NodeJS Crypto, which is licensed under [nodejs/LICENSE](https://github.com/nodejs/node/blob/main/LICENSE).
@@ -177,7 +177,17 @@ dependencies {
177
177
  extractJNI("com.facebook.fbjni:fbjni:+")
178
178
 
179
179
  if (!sourceBuild) {
180
- def rnAAR = fileTree("${defaultDir.toString()}").matching({ it.include "**/**/*.aar" }).singleFile
180
+ def buildType = "debug"
181
+ tasks.all({ task ->
182
+ if (task.name == "buildCMakeRelease") {
183
+ buildType = "release"
184
+ }
185
+ })
186
+ def rnAarMatcher = "**/react-native/**/*${buildType}.aar"
187
+ if (REACT_NATIVE_VERSION < 69) {
188
+ rnAarMatcher = "**/**/*.aar"
189
+ }
190
+ def rnAAR = fileTree("${defaultDir.toString()}").matching({ it.include rnAarMatcher }).singleFile
181
191
  extractJNI(files(rnAAR))
182
192
  }
183
193
  }
@@ -208,7 +218,12 @@ task createNativeDepsDirectories {
208
218
  }
209
219
 
210
220
  task downloadBoost(dependsOn: createNativeDepsDirectories, type: Download) {
211
- src("https://github.com/react-native-community/boost-for-react-native/releases/download/v${BOOST_VERSION.replace("_", ".")}-0/boost_${BOOST_VERSION}.tar.gz")
221
+ def transformedVersion = BOOST_VERSION.replace("_", ".")
222
+ def srcUrl = "https://boostorg.jfrog.io/artifactory/main/release/${transformedVersion}/source/boost_${BOOST_VERSION}.tar.gz"
223
+ if (REACT_NATIVE_VERSION < 69) {
224
+ srcUrl = "https://github.com/react-native-community/boost-for-react-native/releases/download/v${transformedVersion}-0/boost_${BOOST_VERSION}.tar.gz"
225
+ }
226
+ src(srcUrl)
212
227
  onlyIfNewer(true)
213
228
  overwrite(false)
214
229
  dest(boost_file)
@@ -1,6 +1,6 @@
1
1
  //
2
2
  // MGLPublicCipher.h
3
- // react-native-fast-crypto
3
+ // react-native-quick-crypto
4
4
  //
5
5
  // Created by Oscar on 17.06.22.
6
6
  //
package/cpp/MGLKeys.cpp CHANGED
@@ -1,6 +1,6 @@
1
1
  //
2
2
  // MGLCipherKeys.cpp
3
- // react-native-fast-crypto
3
+ // react-native-quick-crypto
4
4
  //
5
5
  // Created by Oscar on 20.06.22.
6
6
  //
@@ -1 +1 @@
1
- {"version":3,"sources":["Utils.ts"],"names":["defaultEncoding","setDefaultEncoding","encoding","getDefaultEncoding","kEmptyObject","Object","freeze","create","isBuffer","buf","Buffer","constructor","name","toArrayBuffer","buffer","slice","byteOffset","byteLength","ab","ArrayBuffer","length","view","Uint8Array","i","binaryLikeToArrayBuffer","input","from","ab2str","toString","validateString","str","isString","Error","validateFunction","f","isStringOrBuffer","val","isView","validateObject","value","options","useDefaultOptions","allowArray","allowFunction","nullable","Array","isArray","validateInt32","min","max","Number","isInteger","validateUint32","positive"],"mappings":"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","sourcesContent":["import { Buffer } from '@craftzdog/react-native-buffer';\n\nexport type BinaryLike = string | ArrayBuffer | Buffer;\n\nexport type BinaryToTextEncoding = 'base64' | 'base64url' | 'hex' | 'binary';\nexport type CharacterEncoding = 'utf8' | 'utf-8' | 'utf16le' | 'latin1';\nexport type LegacyCharacterEncoding = 'ascii' | 'binary' | 'ucs2' | 'ucs-2';\nexport type Encoding =\n | BinaryToTextEncoding\n | CharacterEncoding\n | LegacyCharacterEncoding;\n\n// TODO(osp) should buffer be part of the Encoding type?\nexport type CipherEncoding = Encoding | 'buffer';\n\n// Mimics node behavior for default global encoding\nlet defaultEncoding: CipherEncoding = 'buffer';\n\nexport function setDefaultEncoding(encoding: CipherEncoding) {\n defaultEncoding = encoding;\n}\n\nexport function getDefaultEncoding(): CipherEncoding {\n return defaultEncoding;\n}\n\nexport const kEmptyObject = Object.freeze(Object.create(null));\n\n// Should be used by Cipher (or any other module that requires valid encodings)\n// function slowCases(enc: string) {\n// switch (enc.length) {\n// case 4:\n// if (enc === 'UTF8') return 'utf8';\n// if (enc === 'ucs2' || enc === 'UCS2') return 'utf16le';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'utf8') return 'utf8';\n// if (enc === 'ucs2') return 'utf16le';\n// break;\n// case 3:\n// if (enc === 'hex' || enc === 'HEX' || `${enc}`.toLowerCase() === 'hex')\n// return 'hex';\n// break;\n// case 5:\n// if (enc === 'ascii') return 'ascii';\n// if (enc === 'ucs-2') return 'utf16le';\n// if (enc === 'UTF-8') return 'utf8';\n// if (enc === 'ASCII') return 'ascii';\n// if (enc === 'UCS-2') return 'utf16le';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'utf-8') return 'utf8';\n// if (enc === 'ascii') return 'ascii';\n// if (enc === 'ucs-2') return 'utf16le';\n// break;\n// case 6:\n// if (enc === 'base64') return 'base64';\n// if (enc === 'latin1' || enc === 'binary') return 'latin1';\n// if (enc === 'BASE64') return 'base64';\n// if (enc === 'LATIN1' || enc === 'BINARY') return 'latin1';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'base64') return 'base64';\n// if (enc === 'latin1' || enc === 'binary') return 'latin1';\n// break;\n// case 7:\n// if (\n// enc === 'utf16le' ||\n// enc === 'UTF16LE' ||\n// `${enc}`.toLowerCase() === 'utf16le'\n// )\n// return 'utf16le';\n// break;\n// case 8:\n// if (\n// enc === 'utf-16le' ||\n// enc === 'UTF-16LE' ||\n// `${enc}`.toLowerCase() === 'utf-16le'\n// )\n// return 'utf16le';\n// break;\n// case 9:\n// if (\n// enc === 'base64url' ||\n// enc === 'BASE64URL' ||\n// `${enc}`.toLowerCase() === 'base64url'\n// )\n// return 'base64url';\n// break;\n// default:\n// if (enc === '') return 'utf8';\n// }\n// }\n\n// // Return undefined if there is no match.\n// // Move the \"slow cases\" to a separate function to make sure this function gets\n// // inlined properly. That prioritizes the common case.\n// export function normalizeEncoding(enc?: string) {\n// if (enc == null || enc === 'utf8' || enc === 'utf-8') return 'utf8';\n// return slowCases(enc);\n// }\n\nexport function isBuffer(buf: any): buf is Buffer {\n return buf instanceof Buffer || buf?.constructor?.name === 'Buffer';\n}\n\nexport function toArrayBuffer(buf: Buffer): ArrayBuffer {\n if (buf?.buffer?.slice) {\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n }\n const ab = new ArrayBuffer(buf.length);\n const view = new Uint8Array(ab);\n for (let i = 0; i < buf.length; ++i) {\n view[i] = buf[i];\n }\n return ab;\n}\n\nexport function binaryLikeToArrayBuffer(\n input: BinaryLike,\n encoding: string = 'utf-8'\n): ArrayBuffer {\n if (typeof input === 'string') {\n const buffer = Buffer.from(input, encoding);\n\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n );\n }\n\n if (isBuffer(input)) {\n return toArrayBuffer(input);\n }\n\n // TODO add further binary types to BinaryLike, UInt8Array and so for have this array as property\n if ((input as any).buffer) {\n return (input as any).buffer;\n }\n\n if (!(input instanceof ArrayBuffer)) {\n try {\n const buffer = Buffer.from(input);\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n );\n } catch {\n throw 'error';\n }\n }\n return input;\n}\n\nexport function ab2str(buf: ArrayBuffer, encoding: string = 'hex') {\n return Buffer.from(buf).toString(encoding);\n}\n\nexport function validateString(str: any, name?: string): str is string {\n const isString = typeof str === 'string';\n if (isString) {\n throw new Error(`${name} is not a string`);\n }\n return isString;\n}\n\nexport function validateFunction(f: any): f is Function {\n return f != null && typeof f === 'function';\n}\n\nexport function isStringOrBuffer(val: any): val is string | ArrayBuffer {\n return typeof val === 'string' || ArrayBuffer.isView(val);\n}\n\nexport function validateObject<T>(\n value: any,\n name: string,\n options?: {\n allowArray: boolean;\n allowFunction: boolean;\n nullable: boolean;\n } | null\n): value is T {\n const useDefaultOptions = options == null;\n const allowArray = useDefaultOptions ? false : options.allowArray;\n const allowFunction = useDefaultOptions ? false : options.allowFunction;\n const nullable = useDefaultOptions ? false : options.nullable;\n if (\n (!nullable && value === null) ||\n (!allowArray && Array.isArray(value)) ||\n (typeof value !== 'object' &&\n (!allowFunction || typeof value !== 'function'))\n ) {\n throw new Error(`${name} is not a valid object $${value}`);\n }\n return true;\n}\n\nexport function validateInt32(\n value: any,\n name: string,\n min = -2147483648,\n max = 2147483647\n) {\n // The defaults for min and max correspond to the limits of 32-bit integers.\n if (typeof value !== 'number') {\n throw new Error(`Invalid argument - ${name} is not a number: ${value}`);\n }\n if (!Number.isInteger(value)) {\n throw new Error(\n `Argument out of range - ${name} out of integer range: ${value}`\n );\n }\n if (value < min || value > max) {\n throw new Error(\n `Invalid argument - ${name} out of range >= ${min} && <= ${max}: ${value}`\n );\n }\n}\n\nexport function validateUint32(\n value: number,\n name: string,\n positive?: boolean\n) {\n if (typeof value !== 'number') {\n // throw new ERR_INVALID_ARG_TYPE(name, 'number', value);\n throw new Error(`Invalid argument - ${name} is not a number: ${value}`);\n }\n if (!Number.isInteger(value)) {\n // throw new ERR_OUT_OF_RANGE(name, 'an integer', value);\n throw new Error(\n `Argument out of range - ${name} out of integer range: ${value}`\n );\n }\n const min = positive ? 1 : 0;\n // 2 ** 32 === 4294967296\n const max = 4_294_967_295;\n if (value < min || value > max) {\n // throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value);\n throw new Error(\n `Invalid argument - ${name} out of range >= ${min} && <= ${max}: ${value}`\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["Utils.ts"],"names":["defaultEncoding","setDefaultEncoding","encoding","getDefaultEncoding","kEmptyObject","Object","freeze","create","isBuffer","buf","Buffer","constructor","name","toArrayBuffer","buffer","slice","byteOffset","byteLength","ab","ArrayBuffer","length","view","Uint8Array","i","binaryLikeToArrayBuffer","input","from","ab2str","toString","validateString","str","isString","Error","validateFunction","f","isStringOrBuffer","val","isView","validateObject","value","options","useDefaultOptions","allowArray","allowFunction","nullable","Array","isArray","validateInt32","min","max","Number","isInteger","validateUint32","positive"],"mappings":"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","sourcesContent":["import { Buffer } from '@craftzdog/react-native-buffer';\n\nexport type BinaryLike = string | ArrayBuffer | Buffer;\n\nexport type BinaryToTextEncoding = 'base64' | 'base64url' | 'hex' | 'binary';\nexport type CharacterEncoding = 'utf8' | 'utf-8' | 'utf16le' | 'latin1';\nexport type LegacyCharacterEncoding = 'ascii' | 'binary' | 'ucs2' | 'ucs-2';\nexport type Encoding =\n | BinaryToTextEncoding\n | CharacterEncoding\n | LegacyCharacterEncoding;\n\n// TODO(osp) should buffer be part of the Encoding type?\nexport type CipherEncoding = Encoding | 'buffer';\n\n// Mimics node behavior for default global encoding\nlet defaultEncoding: CipherEncoding = 'buffer';\n\nexport function setDefaultEncoding(encoding: CipherEncoding) {\n defaultEncoding = encoding;\n}\n\nexport function getDefaultEncoding(): CipherEncoding {\n return defaultEncoding;\n}\n\nexport const kEmptyObject = Object.freeze(Object.create(null));\n\n// Should be used by Cipher (or any other module that requires valid encodings)\n// function slowCases(enc: string) {\n// switch (enc.length) {\n// case 4:\n// if (enc === 'UTF8') return 'utf8';\n// if (enc === 'ucs2' || enc === 'UCS2') return 'utf16le';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'utf8') return 'utf8';\n// if (enc === 'ucs2') return 'utf16le';\n// break;\n// case 3:\n// if (enc === 'hex' || enc === 'HEX' || `${enc}`.toLowerCase() === 'hex')\n// return 'hex';\n// break;\n// case 5:\n// if (enc === 'ascii') return 'ascii';\n// if (enc === 'ucs-2') return 'utf16le';\n// if (enc === 'UTF-8') return 'utf8';\n// if (enc === 'ASCII') return 'ascii';\n// if (enc === 'UCS-2') return 'utf16le';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'utf-8') return 'utf8';\n// if (enc === 'ascii') return 'ascii';\n// if (enc === 'ucs-2') return 'utf16le';\n// break;\n// case 6:\n// if (enc === 'base64') return 'base64';\n// if (enc === 'latin1' || enc === 'binary') return 'latin1';\n// if (enc === 'BASE64') return 'base64';\n// if (enc === 'LATIN1' || enc === 'BINARY') return 'latin1';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'base64') return 'base64';\n// if (enc === 'latin1' || enc === 'binary') return 'latin1';\n// break;\n// case 7:\n// if (\n// enc === 'utf16le' ||\n// enc === 'UTF16LE' ||\n// `${enc}`.toLowerCase() === 'utf16le'\n// )\n// return 'utf16le';\n// break;\n// case 8:\n// if (\n// enc === 'utf-16le' ||\n// enc === 'UTF-16LE' ||\n// `${enc}`.toLowerCase() === 'utf-16le'\n// )\n// return 'utf16le';\n// break;\n// case 9:\n// if (\n// enc === 'base64url' ||\n// enc === 'BASE64URL' ||\n// `${enc}`.toLowerCase() === 'base64url'\n// )\n// return 'base64url';\n// break;\n// default:\n// if (enc === '') return 'utf8';\n// }\n// }\n\n// // Return undefined if there is no match.\n// // Move the \"slow cases\" to a separate function to make sure this function gets\n// // inlined properly. That prioritizes the common case.\n// export function normalizeEncoding(enc?: string) {\n// if (enc == null || enc === 'utf8' || enc === 'utf-8') return 'utf8';\n// return slowCases(enc);\n// }\n\nexport function isBuffer(buf: any): buf is Buffer {\n return buf instanceof Buffer || buf?.constructor?.name === 'Buffer';\n}\n\nexport function toArrayBuffer(buf: Buffer): ArrayBuffer {\n if (buf?.buffer?.slice) {\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n }\n const ab = new ArrayBuffer(buf.length);\n const view = new Uint8Array(ab);\n for (let i = 0; i < buf.length; ++i) {\n view[i] = buf[i];\n }\n return ab;\n}\n\nexport function binaryLikeToArrayBuffer(\n input: BinaryLike,\n encoding: string = 'utf-8'\n): ArrayBuffer {\n if (typeof input === 'string') {\n const buffer = Buffer.from(input, encoding);\n\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n );\n }\n\n if (isBuffer(input)) {\n return toArrayBuffer(input);\n }\n\n // TODO add further binary types to BinaryLike, UInt8Array and so for have this array as property\n if ((input as any).buffer) {\n return (input as any).buffer;\n }\n\n if (!(input instanceof ArrayBuffer)) {\n try {\n const buffer = Buffer.from(input);\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n );\n } catch {\n throw 'error';\n }\n }\n return input;\n}\n\nexport function ab2str(buf: ArrayBuffer, encoding: string = 'hex') {\n return Buffer.from(buf).toString(encoding);\n}\n\nexport function validateString(str: any, name?: string): str is string {\n const isString = typeof str === 'string';\n if (isString) {\n throw new Error(`${name} is not a string`);\n }\n return isString;\n}\n\nexport function validateFunction(f: any): f is Function {\n return f != null && typeof f === 'function';\n}\n\nexport function isStringOrBuffer(val: any): val is string | ArrayBuffer {\n return typeof val === 'string' || ArrayBuffer.isView(val);\n}\n\nexport function validateObject<T>(\n value: any,\n name: string,\n options?: {\n allowArray: boolean;\n allowFunction: boolean;\n nullable: boolean;\n } | null\n): value is T {\n const useDefaultOptions = options == null;\n const allowArray = useDefaultOptions ? false : options.allowArray;\n const allowFunction = useDefaultOptions ? false : options.allowFunction;\n const nullable = useDefaultOptions ? false : options.nullable;\n if (\n (!nullable && value === null) ||\n (!allowArray && Array.isArray(value)) ||\n (typeof value !== 'object' &&\n (!allowFunction || typeof value !== 'function'))\n ) {\n throw new Error(`${name} is not a valid object $${value}`);\n }\n return true;\n}\n\nexport function validateInt32(\n value: any,\n name: string,\n min = -2147483648,\n max = 2147483647\n) {\n // The defaults for min and max correspond to the limits of 32-bit integers.\n if (typeof value !== 'number') {\n throw new Error(`Invalid argument - ${name} is not a number: ${value}`);\n }\n if (!Number.isInteger(value)) {\n throw new Error(\n `Argument out of range - ${name} out of integer range: ${value}`\n );\n }\n if (value < min || value > max) {\n throw new Error(\n `Invalid argument - ${name} out of range >= ${min} && <= ${max}: ${value}`\n );\n }\n}\n\nexport function validateUint32(\n value: number,\n name: string,\n positive?: boolean\n) {\n if (typeof value !== 'number') {\n // throw new ERR_INVALID_ARG_TYPE(name, 'number', value);\n throw new Error(`Invalid argument - ${name} is not a number: ${value}`);\n }\n if (!Number.isInteger(value)) {\n // throw new ERR_OUT_OF_RANGE(name, 'an integer', value);\n throw new Error(\n `Argument out of range - ${name} out of integer range: ${value}`\n );\n }\n const min = positive ? 1 : 0;\n // 2 ** 32 === 4294967296\n const max = 4294967295;\n if (value < min || value > max) {\n // throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value);\n throw new Error(\n `Invalid argument - ${name} out of range >= ${min} && <= ${max}: ${value}`\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["random.ts"],"names":["random","NativeQuickCrypto","randomFill","buffer","Error","callback","offset","size","byteLength","then","e","randomFillSync","randomBytes","buf","Buffer","undefined","error","rng","pseudoRandomBytes","prng","RAND_MAX","randomCache","randomCacheOffset","length","asyncCacheFillInProgress","asyncCachePendingTasks","randomInt","arg1","arg2","max","min","minNotSpecified","isSync","Number","isSafeInteger","range","randLimit","x","readUIntBE","n","process","nextTick","push","asyncRefillRandomIntCache","err","tasks","errorReceiver","shift","splice","forEach","task","getRandomValues","data"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport { Buffer } from '@craftzdog/react-native-buffer';\nimport { isBuffer } from '../src/Utils';\n\nconst random = NativeQuickCrypto.random;\n\ntype TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array;\ntype ArrayBufferView = TypedArray | DataView | ArrayBufferLike | Buffer;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n size: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill(buffer: any, ...rest: any[]): void {\n if (typeof rest[rest.length - 1] !== 'function') {\n throw new Error('No callback provided to randomDill');\n }\n\n const callback = rest[rest.length - 1] as any as (\n err: Error | null,\n buf?: ArrayBuffer\n ) => void;\n\n let offset: number = 0;\n let size: number = buffer.byteLength;\n\n if (typeof rest[2] === 'function') {\n offset = rest[0];\n size = rest[1];\n }\n\n if (typeof rest[1] === 'function') {\n offset = rest[0];\n }\n\n random\n .randomFill(isBuffer(buffer) ? buffer.buffer : buffer, offset, size)\n .then(\n () => {\n callback(null, buffer);\n },\n (e: Error) => {\n callback(e);\n }\n );\n}\n\nexport function randomFillSync<T extends ArrayBufferView>(\n buffer: T,\n offset?: number,\n size?: number\n): T;\n\nexport function randomFillSync(buffer: any, offset: number = 0, size?: number) {\n random.randomFillSync(\n buffer.buffer ? buffer.buffer : buffer,\n offset,\n size ?? buffer.byteLength\n );\n return buffer;\n}\n\nexport function randomBytes(size: number): ArrayBuffer;\n\nexport function randomBytes(\n size: number,\n callback: (err: Error | null, buf?: ArrayBuffer) => void\n): void;\n\nexport function randomBytes(\n size: number,\n callback?: (err: Error | null, buf?: ArrayBuffer) => void\n): void | ArrayBuffer {\n const buf = new Buffer(size);\n\n if (callback === undefined) {\n randomFillSync(buf.buffer, 0, size);\n return buf;\n }\n\n randomFill(buf.buffer, 0, size, (error: Error | null) => {\n if (error) {\n callback(error);\n }\n callback(null, buf);\n });\n}\n\nexport const rng = randomBytes;\nexport const pseudoRandomBytes = randomBytes;\nexport const prng = randomBytes;\n\ntype RandomIntCallback = (err: Error | null, value: number) => void;\ntype Task = {\n min: number;\n max: number;\n callback: RandomIntCallback;\n};\n\n// The rest of the file is taken from https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js\n\n// Largest integer we can read from a buffer.\n// e.g.: Buffer.from(\"ff\".repeat(6), \"hex\").readUIntBE(0, 6);\nconst RAND_MAX = 0xffff_ffff_ffff;\n\n// Cache random data to use in randomInt. The cache size must be evenly\n// divisible by 6 because each attempt to obtain a random int uses 6 bytes.\nconst randomCache = new Buffer(6 * 1024);\nlet randomCacheOffset = randomCache.length;\nlet asyncCacheFillInProgress = false;\nconst asyncCachePendingTasks: Task[] = [];\n\n// Generates an integer in [min, max) range where min is inclusive and max is\n// exclusive.\n\nexport function randomInt(max: number, callback: RandomIntCallback): void;\nexport function randomInt(max: number): number;\nexport function randomInt(\n min: number,\n max: number,\n callback: RandomIntCallback\n): void;\nexport function randomInt(min: number, max: number): number;\nexport function randomInt(\n arg1: number,\n arg2?: number | RandomIntCallback,\n callback?: RandomIntCallback\n): void | number {\n // Detect optional min syntax\n // randomInt(max)\n // randomInt(max, callback)\n let max: number;\n let min: number;\n const minNotSpecified =\n typeof arg2 === 'undefined' || typeof arg2 === 'function';\n\n if (minNotSpecified) {\n callback = arg2 as any as undefined | RandomIntCallback;\n max = arg1;\n min = 0;\n } else {\n min = arg1;\n max = arg2 as any as number;\n }\n\n const isSync = typeof callback === 'undefined';\n if (!Number.isSafeInteger(min)) {\n // todo throw new ERR_INVALID_ARG_TYPE('min', 'a safe integer', min);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (!Number.isSafeInteger(max)) {\n // todo throw new ERR_INVALID_ARG_TYPE('max', 'a safe integer', max);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (max <= min) {\n /* todo throw new ERR_OUT_OF_RANGE(\n 'max',\n `greater than the value of \"min\" (${min})`,\n max\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // First we generate a random int between [0..range)\n const range = max - min;\n\n if (!(range <= RAND_MAX)) {\n /* todo throw new ERR_OUT_OF_RANGE(\n `max${minNotSpecified ? '' : ' - min'}`,\n `<= ${RAND_MAX}`,\n range\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // For (x % range) to produce an unbiased value greater than or equal to 0 and\n // less than range, x must be drawn randomly from the set of integers greater\n // than or equal to 0 and less than randLimit.\n const randLimit = RAND_MAX - (RAND_MAX % range);\n\n // If we don't have a callback, or if there is still data in the cache, we can\n // do this synchronously, which is super fast.\n while (isSync || randomCacheOffset < randomCache.length) {\n if (randomCacheOffset === randomCache.length) {\n // This might block the thread for a bit, but we are in sync mode.\n randomFillSync(randomCache);\n randomCacheOffset = 0;\n }\n\n const x = randomCache.readUIntBE(randomCacheOffset, 6);\n randomCacheOffset += 6;\n\n if (x < randLimit) {\n const n = (x % range) + min;\n if (isSync) return n;\n process.nextTick(callback as Function, undefined, n);\n return;\n }\n }\n\n // At this point, we are in async mode with no data in the cache. We cannot\n // simply refill the cache, because another async call to randomInt might\n // already be doing that. Instead, queue this call for when the cache has\n // been refilled.\n if (callback !== undefined) {\n // it is (typescript doesn't know it)\n asyncCachePendingTasks.push({ min, max, callback });\n asyncRefillRandomIntCache();\n }\n}\n\nfunction asyncRefillRandomIntCache() {\n if (asyncCacheFillInProgress) return;\n\n asyncCacheFillInProgress = true;\n randomFill(randomCache, (err) => {\n asyncCacheFillInProgress = false;\n\n const tasks = asyncCachePendingTasks;\n const errorReceiver = err && tasks.shift();\n if (!err) randomCacheOffset = 0;\n\n // Restart all pending tasks. If an error occurred, we only notify a single\n // callback (errorReceiver) about it. This way, every async call to\n // randomInt has a chance of being successful, and it avoids complex\n // exception handling here.\n tasks.splice(0).forEach((task) => {\n randomInt(task.min, task.max, task.callback);\n });\n\n // This is the only call that might throw, and is therefore done at the end.\n if (errorReceiver) errorReceiver.callback(err, 0);\n });\n}\n\n// Really just the Web Crypto API alternative\n// to require('crypto').randomFillSync() with an\n// additional limitation that the input buffer is\n// not allowed to exceed 65536 bytes, and can only\n// be an integer-type TypedArray.\ntype DataType =\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array;\nexport function getRandomValues(data: DataType) {\n if (data.byteLength > 65536) {\n throw new Error('The requested length exceeds 65,536 bytes');\n }\n randomFillSync(data, 0);\n return data;\n}\n"]}
1
+ {"version":3,"sources":["random.ts"],"names":["random","NativeQuickCrypto","randomFill","buffer","Error","callback","offset","size","byteLength","then","e","randomFillSync","randomBytes","buf","Buffer","undefined","error","rng","pseudoRandomBytes","prng","RAND_MAX","randomCache","randomCacheOffset","length","asyncCacheFillInProgress","asyncCachePendingTasks","randomInt","arg1","arg2","max","min","minNotSpecified","isSync","Number","isSafeInteger","range","randLimit","x","readUIntBE","n","process","nextTick","push","asyncRefillRandomIntCache","err","tasks","errorReceiver","shift","splice","forEach","task","getRandomValues","data"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport { Buffer } from '@craftzdog/react-native-buffer';\nimport { isBuffer } from '../src/Utils';\n\nconst random = NativeQuickCrypto.random;\n\ntype TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array;\ntype ArrayBufferView = TypedArray | DataView | ArrayBufferLike | Buffer;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n size: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill(buffer: any, ...rest: any[]): void {\n if (typeof rest[rest.length - 1] !== 'function') {\n throw new Error('No callback provided to randomDill');\n }\n\n const callback = rest[rest.length - 1] as any as (\n err: Error | null,\n buf?: ArrayBuffer\n ) => void;\n\n let offset: number = 0;\n let size: number = buffer.byteLength;\n\n if (typeof rest[2] === 'function') {\n offset = rest[0];\n size = rest[1];\n }\n\n if (typeof rest[1] === 'function') {\n offset = rest[0];\n }\n\n random\n .randomFill(isBuffer(buffer) ? buffer.buffer : buffer, offset, size)\n .then(\n () => {\n callback(null, buffer);\n },\n (e: Error) => {\n callback(e);\n }\n );\n}\n\nexport function randomFillSync<T extends ArrayBufferView>(\n buffer: T,\n offset?: number,\n size?: number\n): T;\n\nexport function randomFillSync(buffer: any, offset: number = 0, size?: number) {\n random.randomFillSync(\n buffer.buffer ? buffer.buffer : buffer,\n offset,\n size ?? buffer.byteLength\n );\n return buffer;\n}\n\nexport function randomBytes(size: number): ArrayBuffer;\n\nexport function randomBytes(\n size: number,\n callback: (err: Error | null, buf?: ArrayBuffer) => void\n): void;\n\nexport function randomBytes(\n size: number,\n callback?: (err: Error | null, buf?: ArrayBuffer) => void\n): void | ArrayBuffer {\n const buf = new Buffer(size);\n\n if (callback === undefined) {\n randomFillSync(buf.buffer, 0, size);\n return buf;\n }\n\n randomFill(buf.buffer, 0, size, (error: Error | null) => {\n if (error) {\n callback(error);\n }\n callback(null, buf);\n });\n}\n\nexport const rng = randomBytes;\nexport const pseudoRandomBytes = randomBytes;\nexport const prng = randomBytes;\n\ntype RandomIntCallback = (err: Error | null, value: number) => void;\ntype Task = {\n min: number;\n max: number;\n callback: RandomIntCallback;\n};\n\n// The rest of the file is taken from https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js\n\n// Largest integer we can read from a buffer.\n// e.g.: Buffer.from(\"ff\".repeat(6), \"hex\").readUIntBE(0, 6);\nconst RAND_MAX = 0xffffffffffff;\n\n// Cache random data to use in randomInt. The cache size must be evenly\n// divisible by 6 because each attempt to obtain a random int uses 6 bytes.\nconst randomCache = new Buffer(6 * 1024);\nlet randomCacheOffset = randomCache.length;\nlet asyncCacheFillInProgress = false;\nconst asyncCachePendingTasks: Task[] = [];\n\n// Generates an integer in [min, max) range where min is inclusive and max is\n// exclusive.\n\nexport function randomInt(max: number, callback: RandomIntCallback): void;\nexport function randomInt(max: number): number;\nexport function randomInt(\n min: number,\n max: number,\n callback: RandomIntCallback\n): void;\nexport function randomInt(min: number, max: number): number;\nexport function randomInt(\n arg1: number,\n arg2?: number | RandomIntCallback,\n callback?: RandomIntCallback\n): void | number {\n // Detect optional min syntax\n // randomInt(max)\n // randomInt(max, callback)\n let max: number;\n let min: number;\n const minNotSpecified =\n typeof arg2 === 'undefined' || typeof arg2 === 'function';\n\n if (minNotSpecified) {\n callback = arg2 as any as undefined | RandomIntCallback;\n max = arg1;\n min = 0;\n } else {\n min = arg1;\n max = arg2 as any as number;\n }\n\n const isSync = typeof callback === 'undefined';\n if (!Number.isSafeInteger(min)) {\n // todo throw new ERR_INVALID_ARG_TYPE('min', 'a safe integer', min);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (!Number.isSafeInteger(max)) {\n // todo throw new ERR_INVALID_ARG_TYPE('max', 'a safe integer', max);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (max <= min) {\n /* todo throw new ERR_OUT_OF_RANGE(\n 'max',\n `greater than the value of \"min\" (${min})`,\n max\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // First we generate a random int between [0..range)\n const range = max - min;\n\n if (!(range <= RAND_MAX)) {\n /* todo throw new ERR_OUT_OF_RANGE(\n `max${minNotSpecified ? '' : ' - min'}`,\n `<= ${RAND_MAX}`,\n range\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // For (x % range) to produce an unbiased value greater than or equal to 0 and\n // less than range, x must be drawn randomly from the set of integers greater\n // than or equal to 0 and less than randLimit.\n const randLimit = RAND_MAX - (RAND_MAX % range);\n\n // If we don't have a callback, or if there is still data in the cache, we can\n // do this synchronously, which is super fast.\n while (isSync || randomCacheOffset < randomCache.length) {\n if (randomCacheOffset === randomCache.length) {\n // This might block the thread for a bit, but we are in sync mode.\n randomFillSync(randomCache);\n randomCacheOffset = 0;\n }\n\n const x = randomCache.readUIntBE(randomCacheOffset, 6);\n randomCacheOffset += 6;\n\n if (x < randLimit) {\n const n = (x % range) + min;\n if (isSync) return n;\n process.nextTick(callback as Function, undefined, n);\n return;\n }\n }\n\n // At this point, we are in async mode with no data in the cache. We cannot\n // simply refill the cache, because another async call to randomInt might\n // already be doing that. Instead, queue this call for when the cache has\n // been refilled.\n if (callback !== undefined) {\n // it is (typescript doesn't know it)\n asyncCachePendingTasks.push({ min, max, callback });\n asyncRefillRandomIntCache();\n }\n}\n\nfunction asyncRefillRandomIntCache() {\n if (asyncCacheFillInProgress) return;\n\n asyncCacheFillInProgress = true;\n randomFill(randomCache, (err) => {\n asyncCacheFillInProgress = false;\n\n const tasks = asyncCachePendingTasks;\n const errorReceiver = err && tasks.shift();\n if (!err) randomCacheOffset = 0;\n\n // Restart all pending tasks. If an error occurred, we only notify a single\n // callback (errorReceiver) about it. This way, every async call to\n // randomInt has a chance of being successful, and it avoids complex\n // exception handling here.\n tasks.splice(0).forEach((task) => {\n randomInt(task.min, task.max, task.callback);\n });\n\n // This is the only call that might throw, and is therefore done at the end.\n if (errorReceiver) errorReceiver.callback(err, 0);\n });\n}\n\n// Really just the Web Crypto API alternative\n// to require('crypto').randomFillSync() with an\n// additional limitation that the input buffer is\n// not allowed to exceed 65536 bytes, and can only\n// be an integer-type TypedArray.\ntype DataType =\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array;\nexport function getRandomValues(data: DataType) {\n if (data.byteLength > 65536) {\n throw new Error('The requested length exceeds 65,536 bytes');\n }\n randomFillSync(data, 0);\n return data;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["Utils.ts"],"names":["Buffer","defaultEncoding","setDefaultEncoding","encoding","getDefaultEncoding","kEmptyObject","Object","freeze","create","isBuffer","buf","constructor","name","toArrayBuffer","buffer","slice","byteOffset","byteLength","ab","ArrayBuffer","length","view","Uint8Array","i","binaryLikeToArrayBuffer","input","from","ab2str","toString","validateString","str","isString","Error","validateFunction","f","isStringOrBuffer","val","isView","validateObject","value","options","useDefaultOptions","allowArray","allowFunction","nullable","Array","isArray","validateInt32","min","max","Number","isInteger","validateUint32","positive"],"mappings":"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","sourcesContent":["import { Buffer } from '@craftzdog/react-native-buffer';\n\nexport type BinaryLike = string | ArrayBuffer | Buffer;\n\nexport type BinaryToTextEncoding = 'base64' | 'base64url' | 'hex' | 'binary';\nexport type CharacterEncoding = 'utf8' | 'utf-8' | 'utf16le' | 'latin1';\nexport type LegacyCharacterEncoding = 'ascii' | 'binary' | 'ucs2' | 'ucs-2';\nexport type Encoding =\n | BinaryToTextEncoding\n | CharacterEncoding\n | LegacyCharacterEncoding;\n\n// TODO(osp) should buffer be part of the Encoding type?\nexport type CipherEncoding = Encoding | 'buffer';\n\n// Mimics node behavior for default global encoding\nlet defaultEncoding: CipherEncoding = 'buffer';\n\nexport function setDefaultEncoding(encoding: CipherEncoding) {\n defaultEncoding = encoding;\n}\n\nexport function getDefaultEncoding(): CipherEncoding {\n return defaultEncoding;\n}\n\nexport const kEmptyObject = Object.freeze(Object.create(null));\n\n// Should be used by Cipher (or any other module that requires valid encodings)\n// function slowCases(enc: string) {\n// switch (enc.length) {\n// case 4:\n// if (enc === 'UTF8') return 'utf8';\n// if (enc === 'ucs2' || enc === 'UCS2') return 'utf16le';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'utf8') return 'utf8';\n// if (enc === 'ucs2') return 'utf16le';\n// break;\n// case 3:\n// if (enc === 'hex' || enc === 'HEX' || `${enc}`.toLowerCase() === 'hex')\n// return 'hex';\n// break;\n// case 5:\n// if (enc === 'ascii') return 'ascii';\n// if (enc === 'ucs-2') return 'utf16le';\n// if (enc === 'UTF-8') return 'utf8';\n// if (enc === 'ASCII') return 'ascii';\n// if (enc === 'UCS-2') return 'utf16le';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'utf-8') return 'utf8';\n// if (enc === 'ascii') return 'ascii';\n// if (enc === 'ucs-2') return 'utf16le';\n// break;\n// case 6:\n// if (enc === 'base64') return 'base64';\n// if (enc === 'latin1' || enc === 'binary') return 'latin1';\n// if (enc === 'BASE64') return 'base64';\n// if (enc === 'LATIN1' || enc === 'BINARY') return 'latin1';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'base64') return 'base64';\n// if (enc === 'latin1' || enc === 'binary') return 'latin1';\n// break;\n// case 7:\n// if (\n// enc === 'utf16le' ||\n// enc === 'UTF16LE' ||\n// `${enc}`.toLowerCase() === 'utf16le'\n// )\n// return 'utf16le';\n// break;\n// case 8:\n// if (\n// enc === 'utf-16le' ||\n// enc === 'UTF-16LE' ||\n// `${enc}`.toLowerCase() === 'utf-16le'\n// )\n// return 'utf16le';\n// break;\n// case 9:\n// if (\n// enc === 'base64url' ||\n// enc === 'BASE64URL' ||\n// `${enc}`.toLowerCase() === 'base64url'\n// )\n// return 'base64url';\n// break;\n// default:\n// if (enc === '') return 'utf8';\n// }\n// }\n\n// // Return undefined if there is no match.\n// // Move the \"slow cases\" to a separate function to make sure this function gets\n// // inlined properly. That prioritizes the common case.\n// export function normalizeEncoding(enc?: string) {\n// if (enc == null || enc === 'utf8' || enc === 'utf-8') return 'utf8';\n// return slowCases(enc);\n// }\n\nexport function isBuffer(buf: any): buf is Buffer {\n return buf instanceof Buffer || buf?.constructor?.name === 'Buffer';\n}\n\nexport function toArrayBuffer(buf: Buffer): ArrayBuffer {\n if (buf?.buffer?.slice) {\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n }\n const ab = new ArrayBuffer(buf.length);\n const view = new Uint8Array(ab);\n for (let i = 0; i < buf.length; ++i) {\n view[i] = buf[i];\n }\n return ab;\n}\n\nexport function binaryLikeToArrayBuffer(\n input: BinaryLike,\n encoding: string = 'utf-8'\n): ArrayBuffer {\n if (typeof input === 'string') {\n const buffer = Buffer.from(input, encoding);\n\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n );\n }\n\n if (isBuffer(input)) {\n return toArrayBuffer(input);\n }\n\n // TODO add further binary types to BinaryLike, UInt8Array and so for have this array as property\n if ((input as any).buffer) {\n return (input as any).buffer;\n }\n\n if (!(input instanceof ArrayBuffer)) {\n try {\n const buffer = Buffer.from(input);\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n );\n } catch {\n throw 'error';\n }\n }\n return input;\n}\n\nexport function ab2str(buf: ArrayBuffer, encoding: string = 'hex') {\n return Buffer.from(buf).toString(encoding);\n}\n\nexport function validateString(str: any, name?: string): str is string {\n const isString = typeof str === 'string';\n if (isString) {\n throw new Error(`${name} is not a string`);\n }\n return isString;\n}\n\nexport function validateFunction(f: any): f is Function {\n return f != null && typeof f === 'function';\n}\n\nexport function isStringOrBuffer(val: any): val is string | ArrayBuffer {\n return typeof val === 'string' || ArrayBuffer.isView(val);\n}\n\nexport function validateObject<T>(\n value: any,\n name: string,\n options?: {\n allowArray: boolean;\n allowFunction: boolean;\n nullable: boolean;\n } | null\n): value is T {\n const useDefaultOptions = options == null;\n const allowArray = useDefaultOptions ? false : options.allowArray;\n const allowFunction = useDefaultOptions ? false : options.allowFunction;\n const nullable = useDefaultOptions ? false : options.nullable;\n if (\n (!nullable && value === null) ||\n (!allowArray && Array.isArray(value)) ||\n (typeof value !== 'object' &&\n (!allowFunction || typeof value !== 'function'))\n ) {\n throw new Error(`${name} is not a valid object $${value}`);\n }\n return true;\n}\n\nexport function validateInt32(\n value: any,\n name: string,\n min = -2147483648,\n max = 2147483647\n) {\n // The defaults for min and max correspond to the limits of 32-bit integers.\n if (typeof value !== 'number') {\n throw new Error(`Invalid argument - ${name} is not a number: ${value}`);\n }\n if (!Number.isInteger(value)) {\n throw new Error(\n `Argument out of range - ${name} out of integer range: ${value}`\n );\n }\n if (value < min || value > max) {\n throw new Error(\n `Invalid argument - ${name} out of range >= ${min} && <= ${max}: ${value}`\n );\n }\n}\n\nexport function validateUint32(\n value: number,\n name: string,\n positive?: boolean\n) {\n if (typeof value !== 'number') {\n // throw new ERR_INVALID_ARG_TYPE(name, 'number', value);\n throw new Error(`Invalid argument - ${name} is not a number: ${value}`);\n }\n if (!Number.isInteger(value)) {\n // throw new ERR_OUT_OF_RANGE(name, 'an integer', value);\n throw new Error(\n `Argument out of range - ${name} out of integer range: ${value}`\n );\n }\n const min = positive ? 1 : 0;\n // 2 ** 32 === 4294967296\n const max = 4_294_967_295;\n if (value < min || value > max) {\n // throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value);\n throw new Error(\n `Invalid argument - ${name} out of range >= ${min} && <= ${max}: ${value}`\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["Utils.ts"],"names":["Buffer","defaultEncoding","setDefaultEncoding","encoding","getDefaultEncoding","kEmptyObject","Object","freeze","create","isBuffer","buf","constructor","name","toArrayBuffer","buffer","slice","byteOffset","byteLength","ab","ArrayBuffer","length","view","Uint8Array","i","binaryLikeToArrayBuffer","input","from","ab2str","toString","validateString","str","isString","Error","validateFunction","f","isStringOrBuffer","val","isView","validateObject","value","options","useDefaultOptions","allowArray","allowFunction","nullable","Array","isArray","validateInt32","min","max","Number","isInteger","validateUint32","positive"],"mappings":"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","sourcesContent":["import { Buffer } from '@craftzdog/react-native-buffer';\n\nexport type BinaryLike = string | ArrayBuffer | Buffer;\n\nexport type BinaryToTextEncoding = 'base64' | 'base64url' | 'hex' | 'binary';\nexport type CharacterEncoding = 'utf8' | 'utf-8' | 'utf16le' | 'latin1';\nexport type LegacyCharacterEncoding = 'ascii' | 'binary' | 'ucs2' | 'ucs-2';\nexport type Encoding =\n | BinaryToTextEncoding\n | CharacterEncoding\n | LegacyCharacterEncoding;\n\n// TODO(osp) should buffer be part of the Encoding type?\nexport type CipherEncoding = Encoding | 'buffer';\n\n// Mimics node behavior for default global encoding\nlet defaultEncoding: CipherEncoding = 'buffer';\n\nexport function setDefaultEncoding(encoding: CipherEncoding) {\n defaultEncoding = encoding;\n}\n\nexport function getDefaultEncoding(): CipherEncoding {\n return defaultEncoding;\n}\n\nexport const kEmptyObject = Object.freeze(Object.create(null));\n\n// Should be used by Cipher (or any other module that requires valid encodings)\n// function slowCases(enc: string) {\n// switch (enc.length) {\n// case 4:\n// if (enc === 'UTF8') return 'utf8';\n// if (enc === 'ucs2' || enc === 'UCS2') return 'utf16le';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'utf8') return 'utf8';\n// if (enc === 'ucs2') return 'utf16le';\n// break;\n// case 3:\n// if (enc === 'hex' || enc === 'HEX' || `${enc}`.toLowerCase() === 'hex')\n// return 'hex';\n// break;\n// case 5:\n// if (enc === 'ascii') return 'ascii';\n// if (enc === 'ucs-2') return 'utf16le';\n// if (enc === 'UTF-8') return 'utf8';\n// if (enc === 'ASCII') return 'ascii';\n// if (enc === 'UCS-2') return 'utf16le';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'utf-8') return 'utf8';\n// if (enc === 'ascii') return 'ascii';\n// if (enc === 'ucs-2') return 'utf16le';\n// break;\n// case 6:\n// if (enc === 'base64') return 'base64';\n// if (enc === 'latin1' || enc === 'binary') return 'latin1';\n// if (enc === 'BASE64') return 'base64';\n// if (enc === 'LATIN1' || enc === 'BINARY') return 'latin1';\n// enc = `${enc}`.toLowerCase();\n// if (enc === 'base64') return 'base64';\n// if (enc === 'latin1' || enc === 'binary') return 'latin1';\n// break;\n// case 7:\n// if (\n// enc === 'utf16le' ||\n// enc === 'UTF16LE' ||\n// `${enc}`.toLowerCase() === 'utf16le'\n// )\n// return 'utf16le';\n// break;\n// case 8:\n// if (\n// enc === 'utf-16le' ||\n// enc === 'UTF-16LE' ||\n// `${enc}`.toLowerCase() === 'utf-16le'\n// )\n// return 'utf16le';\n// break;\n// case 9:\n// if (\n// enc === 'base64url' ||\n// enc === 'BASE64URL' ||\n// `${enc}`.toLowerCase() === 'base64url'\n// )\n// return 'base64url';\n// break;\n// default:\n// if (enc === '') return 'utf8';\n// }\n// }\n\n// // Return undefined if there is no match.\n// // Move the \"slow cases\" to a separate function to make sure this function gets\n// // inlined properly. That prioritizes the common case.\n// export function normalizeEncoding(enc?: string) {\n// if (enc == null || enc === 'utf8' || enc === 'utf-8') return 'utf8';\n// return slowCases(enc);\n// }\n\nexport function isBuffer(buf: any): buf is Buffer {\n return buf instanceof Buffer || buf?.constructor?.name === 'Buffer';\n}\n\nexport function toArrayBuffer(buf: Buffer): ArrayBuffer {\n if (buf?.buffer?.slice) {\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n }\n const ab = new ArrayBuffer(buf.length);\n const view = new Uint8Array(ab);\n for (let i = 0; i < buf.length; ++i) {\n view[i] = buf[i];\n }\n return ab;\n}\n\nexport function binaryLikeToArrayBuffer(\n input: BinaryLike,\n encoding: string = 'utf-8'\n): ArrayBuffer {\n if (typeof input === 'string') {\n const buffer = Buffer.from(input, encoding);\n\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n );\n }\n\n if (isBuffer(input)) {\n return toArrayBuffer(input);\n }\n\n // TODO add further binary types to BinaryLike, UInt8Array and so for have this array as property\n if ((input as any).buffer) {\n return (input as any).buffer;\n }\n\n if (!(input instanceof ArrayBuffer)) {\n try {\n const buffer = Buffer.from(input);\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength\n );\n } catch {\n throw 'error';\n }\n }\n return input;\n}\n\nexport function ab2str(buf: ArrayBuffer, encoding: string = 'hex') {\n return Buffer.from(buf).toString(encoding);\n}\n\nexport function validateString(str: any, name?: string): str is string {\n const isString = typeof str === 'string';\n if (isString) {\n throw new Error(`${name} is not a string`);\n }\n return isString;\n}\n\nexport function validateFunction(f: any): f is Function {\n return f != null && typeof f === 'function';\n}\n\nexport function isStringOrBuffer(val: any): val is string | ArrayBuffer {\n return typeof val === 'string' || ArrayBuffer.isView(val);\n}\n\nexport function validateObject<T>(\n value: any,\n name: string,\n options?: {\n allowArray: boolean;\n allowFunction: boolean;\n nullable: boolean;\n } | null\n): value is T {\n const useDefaultOptions = options == null;\n const allowArray = useDefaultOptions ? false : options.allowArray;\n const allowFunction = useDefaultOptions ? false : options.allowFunction;\n const nullable = useDefaultOptions ? false : options.nullable;\n if (\n (!nullable && value === null) ||\n (!allowArray && Array.isArray(value)) ||\n (typeof value !== 'object' &&\n (!allowFunction || typeof value !== 'function'))\n ) {\n throw new Error(`${name} is not a valid object $${value}`);\n }\n return true;\n}\n\nexport function validateInt32(\n value: any,\n name: string,\n min = -2147483648,\n max = 2147483647\n) {\n // The defaults for min and max correspond to the limits of 32-bit integers.\n if (typeof value !== 'number') {\n throw new Error(`Invalid argument - ${name} is not a number: ${value}`);\n }\n if (!Number.isInteger(value)) {\n throw new Error(\n `Argument out of range - ${name} out of integer range: ${value}`\n );\n }\n if (value < min || value > max) {\n throw new Error(\n `Invalid argument - ${name} out of range >= ${min} && <= ${max}: ${value}`\n );\n }\n}\n\nexport function validateUint32(\n value: number,\n name: string,\n positive?: boolean\n) {\n if (typeof value !== 'number') {\n // throw new ERR_INVALID_ARG_TYPE(name, 'number', value);\n throw new Error(`Invalid argument - ${name} is not a number: ${value}`);\n }\n if (!Number.isInteger(value)) {\n // throw new ERR_OUT_OF_RANGE(name, 'an integer', value);\n throw new Error(\n `Argument out of range - ${name} out of integer range: ${value}`\n );\n }\n const min = positive ? 1 : 0;\n // 2 ** 32 === 4294967296\n const max = 4294967295;\n if (value < min || value > max) {\n // throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value);\n throw new Error(\n `Invalid argument - ${name} out of range >= ${min} && <= ${max}: ${value}`\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["random.ts"],"names":["NativeQuickCrypto","Buffer","isBuffer","random","randomFill","buffer","Error","callback","offset","size","byteLength","then","e","randomFillSync","randomBytes","buf","undefined","error","rng","pseudoRandomBytes","prng","RAND_MAX","randomCache","randomCacheOffset","length","asyncCacheFillInProgress","asyncCachePendingTasks","randomInt","arg1","arg2","max","min","minNotSpecified","isSync","Number","isSafeInteger","range","randLimit","x","readUIntBE","n","process","nextTick","push","asyncRefillRandomIntCache","err","tasks","errorReceiver","shift","splice","forEach","task","getRandomValues","data"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport { Buffer } from '@craftzdog/react-native-buffer';\nimport { isBuffer } from '../src/Utils';\n\nconst random = NativeQuickCrypto.random;\n\ntype TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array;\ntype ArrayBufferView = TypedArray | DataView | ArrayBufferLike | Buffer;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n size: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill(buffer: any, ...rest: any[]): void {\n if (typeof rest[rest.length - 1] !== 'function') {\n throw new Error('No callback provided to randomDill');\n }\n\n const callback = rest[rest.length - 1] as any as (\n err: Error | null,\n buf?: ArrayBuffer\n ) => void;\n\n let offset: number = 0;\n let size: number = buffer.byteLength;\n\n if (typeof rest[2] === 'function') {\n offset = rest[0];\n size = rest[1];\n }\n\n if (typeof rest[1] === 'function') {\n offset = rest[0];\n }\n\n random\n .randomFill(isBuffer(buffer) ? buffer.buffer : buffer, offset, size)\n .then(\n () => {\n callback(null, buffer);\n },\n (e: Error) => {\n callback(e);\n }\n );\n}\n\nexport function randomFillSync<T extends ArrayBufferView>(\n buffer: T,\n offset?: number,\n size?: number\n): T;\n\nexport function randomFillSync(buffer: any, offset: number = 0, size?: number) {\n random.randomFillSync(\n buffer.buffer ? buffer.buffer : buffer,\n offset,\n size ?? buffer.byteLength\n );\n return buffer;\n}\n\nexport function randomBytes(size: number): ArrayBuffer;\n\nexport function randomBytes(\n size: number,\n callback: (err: Error | null, buf?: ArrayBuffer) => void\n): void;\n\nexport function randomBytes(\n size: number,\n callback?: (err: Error | null, buf?: ArrayBuffer) => void\n): void | ArrayBuffer {\n const buf = new Buffer(size);\n\n if (callback === undefined) {\n randomFillSync(buf.buffer, 0, size);\n return buf;\n }\n\n randomFill(buf.buffer, 0, size, (error: Error | null) => {\n if (error) {\n callback(error);\n }\n callback(null, buf);\n });\n}\n\nexport const rng = randomBytes;\nexport const pseudoRandomBytes = randomBytes;\nexport const prng = randomBytes;\n\ntype RandomIntCallback = (err: Error | null, value: number) => void;\ntype Task = {\n min: number;\n max: number;\n callback: RandomIntCallback;\n};\n\n// The rest of the file is taken from https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js\n\n// Largest integer we can read from a buffer.\n// e.g.: Buffer.from(\"ff\".repeat(6), \"hex\").readUIntBE(0, 6);\nconst RAND_MAX = 0xffff_ffff_ffff;\n\n// Cache random data to use in randomInt. The cache size must be evenly\n// divisible by 6 because each attempt to obtain a random int uses 6 bytes.\nconst randomCache = new Buffer(6 * 1024);\nlet randomCacheOffset = randomCache.length;\nlet asyncCacheFillInProgress = false;\nconst asyncCachePendingTasks: Task[] = [];\n\n// Generates an integer in [min, max) range where min is inclusive and max is\n// exclusive.\n\nexport function randomInt(max: number, callback: RandomIntCallback): void;\nexport function randomInt(max: number): number;\nexport function randomInt(\n min: number,\n max: number,\n callback: RandomIntCallback\n): void;\nexport function randomInt(min: number, max: number): number;\nexport function randomInt(\n arg1: number,\n arg2?: number | RandomIntCallback,\n callback?: RandomIntCallback\n): void | number {\n // Detect optional min syntax\n // randomInt(max)\n // randomInt(max, callback)\n let max: number;\n let min: number;\n const minNotSpecified =\n typeof arg2 === 'undefined' || typeof arg2 === 'function';\n\n if (minNotSpecified) {\n callback = arg2 as any as undefined | RandomIntCallback;\n max = arg1;\n min = 0;\n } else {\n min = arg1;\n max = arg2 as any as number;\n }\n\n const isSync = typeof callback === 'undefined';\n if (!Number.isSafeInteger(min)) {\n // todo throw new ERR_INVALID_ARG_TYPE('min', 'a safe integer', min);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (!Number.isSafeInteger(max)) {\n // todo throw new ERR_INVALID_ARG_TYPE('max', 'a safe integer', max);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (max <= min) {\n /* todo throw new ERR_OUT_OF_RANGE(\n 'max',\n `greater than the value of \"min\" (${min})`,\n max\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // First we generate a random int between [0..range)\n const range = max - min;\n\n if (!(range <= RAND_MAX)) {\n /* todo throw new ERR_OUT_OF_RANGE(\n `max${minNotSpecified ? '' : ' - min'}`,\n `<= ${RAND_MAX}`,\n range\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // For (x % range) to produce an unbiased value greater than or equal to 0 and\n // less than range, x must be drawn randomly from the set of integers greater\n // than or equal to 0 and less than randLimit.\n const randLimit = RAND_MAX - (RAND_MAX % range);\n\n // If we don't have a callback, or if there is still data in the cache, we can\n // do this synchronously, which is super fast.\n while (isSync || randomCacheOffset < randomCache.length) {\n if (randomCacheOffset === randomCache.length) {\n // This might block the thread for a bit, but we are in sync mode.\n randomFillSync(randomCache);\n randomCacheOffset = 0;\n }\n\n const x = randomCache.readUIntBE(randomCacheOffset, 6);\n randomCacheOffset += 6;\n\n if (x < randLimit) {\n const n = (x % range) + min;\n if (isSync) return n;\n process.nextTick(callback as Function, undefined, n);\n return;\n }\n }\n\n // At this point, we are in async mode with no data in the cache. We cannot\n // simply refill the cache, because another async call to randomInt might\n // already be doing that. Instead, queue this call for when the cache has\n // been refilled.\n if (callback !== undefined) {\n // it is (typescript doesn't know it)\n asyncCachePendingTasks.push({ min, max, callback });\n asyncRefillRandomIntCache();\n }\n}\n\nfunction asyncRefillRandomIntCache() {\n if (asyncCacheFillInProgress) return;\n\n asyncCacheFillInProgress = true;\n randomFill(randomCache, (err) => {\n asyncCacheFillInProgress = false;\n\n const tasks = asyncCachePendingTasks;\n const errorReceiver = err && tasks.shift();\n if (!err) randomCacheOffset = 0;\n\n // Restart all pending tasks. If an error occurred, we only notify a single\n // callback (errorReceiver) about it. This way, every async call to\n // randomInt has a chance of being successful, and it avoids complex\n // exception handling here.\n tasks.splice(0).forEach((task) => {\n randomInt(task.min, task.max, task.callback);\n });\n\n // This is the only call that might throw, and is therefore done at the end.\n if (errorReceiver) errorReceiver.callback(err, 0);\n });\n}\n\n// Really just the Web Crypto API alternative\n// to require('crypto').randomFillSync() with an\n// additional limitation that the input buffer is\n// not allowed to exceed 65536 bytes, and can only\n// be an integer-type TypedArray.\ntype DataType =\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array;\nexport function getRandomValues(data: DataType) {\n if (data.byteLength > 65536) {\n throw new Error('The requested length exceeds 65,536 bytes');\n }\n randomFillSync(data, 0);\n return data;\n}\n"]}
1
+ {"version":3,"sources":["random.ts"],"names":["NativeQuickCrypto","Buffer","isBuffer","random","randomFill","buffer","Error","callback","offset","size","byteLength","then","e","randomFillSync","randomBytes","buf","undefined","error","rng","pseudoRandomBytes","prng","RAND_MAX","randomCache","randomCacheOffset","length","asyncCacheFillInProgress","asyncCachePendingTasks","randomInt","arg1","arg2","max","min","minNotSpecified","isSync","Number","isSafeInteger","range","randLimit","x","readUIntBE","n","process","nextTick","push","asyncRefillRandomIntCache","err","tasks","errorReceiver","shift","splice","forEach","task","getRandomValues","data"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport { Buffer } from '@craftzdog/react-native-buffer';\nimport { isBuffer } from '../src/Utils';\n\nconst random = NativeQuickCrypto.random;\n\ntype TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array;\ntype ArrayBufferView = TypedArray | DataView | ArrayBufferLike | Buffer;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n size: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill(buffer: any, ...rest: any[]): void {\n if (typeof rest[rest.length - 1] !== 'function') {\n throw new Error('No callback provided to randomDill');\n }\n\n const callback = rest[rest.length - 1] as any as (\n err: Error | null,\n buf?: ArrayBuffer\n ) => void;\n\n let offset: number = 0;\n let size: number = buffer.byteLength;\n\n if (typeof rest[2] === 'function') {\n offset = rest[0];\n size = rest[1];\n }\n\n if (typeof rest[1] === 'function') {\n offset = rest[0];\n }\n\n random\n .randomFill(isBuffer(buffer) ? buffer.buffer : buffer, offset, size)\n .then(\n () => {\n callback(null, buffer);\n },\n (e: Error) => {\n callback(e);\n }\n );\n}\n\nexport function randomFillSync<T extends ArrayBufferView>(\n buffer: T,\n offset?: number,\n size?: number\n): T;\n\nexport function randomFillSync(buffer: any, offset: number = 0, size?: number) {\n random.randomFillSync(\n buffer.buffer ? buffer.buffer : buffer,\n offset,\n size ?? buffer.byteLength\n );\n return buffer;\n}\n\nexport function randomBytes(size: number): ArrayBuffer;\n\nexport function randomBytes(\n size: number,\n callback: (err: Error | null, buf?: ArrayBuffer) => void\n): void;\n\nexport function randomBytes(\n size: number,\n callback?: (err: Error | null, buf?: ArrayBuffer) => void\n): void | ArrayBuffer {\n const buf = new Buffer(size);\n\n if (callback === undefined) {\n randomFillSync(buf.buffer, 0, size);\n return buf;\n }\n\n randomFill(buf.buffer, 0, size, (error: Error | null) => {\n if (error) {\n callback(error);\n }\n callback(null, buf);\n });\n}\n\nexport const rng = randomBytes;\nexport const pseudoRandomBytes = randomBytes;\nexport const prng = randomBytes;\n\ntype RandomIntCallback = (err: Error | null, value: number) => void;\ntype Task = {\n min: number;\n max: number;\n callback: RandomIntCallback;\n};\n\n// The rest of the file is taken from https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js\n\n// Largest integer we can read from a buffer.\n// e.g.: Buffer.from(\"ff\".repeat(6), \"hex\").readUIntBE(0, 6);\nconst RAND_MAX = 0xffffffffffff;\n\n// Cache random data to use in randomInt. The cache size must be evenly\n// divisible by 6 because each attempt to obtain a random int uses 6 bytes.\nconst randomCache = new Buffer(6 * 1024);\nlet randomCacheOffset = randomCache.length;\nlet asyncCacheFillInProgress = false;\nconst asyncCachePendingTasks: Task[] = [];\n\n// Generates an integer in [min, max) range where min is inclusive and max is\n// exclusive.\n\nexport function randomInt(max: number, callback: RandomIntCallback): void;\nexport function randomInt(max: number): number;\nexport function randomInt(\n min: number,\n max: number,\n callback: RandomIntCallback\n): void;\nexport function randomInt(min: number, max: number): number;\nexport function randomInt(\n arg1: number,\n arg2?: number | RandomIntCallback,\n callback?: RandomIntCallback\n): void | number {\n // Detect optional min syntax\n // randomInt(max)\n // randomInt(max, callback)\n let max: number;\n let min: number;\n const minNotSpecified =\n typeof arg2 === 'undefined' || typeof arg2 === 'function';\n\n if (minNotSpecified) {\n callback = arg2 as any as undefined | RandomIntCallback;\n max = arg1;\n min = 0;\n } else {\n min = arg1;\n max = arg2 as any as number;\n }\n\n const isSync = typeof callback === 'undefined';\n if (!Number.isSafeInteger(min)) {\n // todo throw new ERR_INVALID_ARG_TYPE('min', 'a safe integer', min);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (!Number.isSafeInteger(max)) {\n // todo throw new ERR_INVALID_ARG_TYPE('max', 'a safe integer', max);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (max <= min) {\n /* todo throw new ERR_OUT_OF_RANGE(\n 'max',\n `greater than the value of \"min\" (${min})`,\n max\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // First we generate a random int between [0..range)\n const range = max - min;\n\n if (!(range <= RAND_MAX)) {\n /* todo throw new ERR_OUT_OF_RANGE(\n `max${minNotSpecified ? '' : ' - min'}`,\n `<= ${RAND_MAX}`,\n range\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // For (x % range) to produce an unbiased value greater than or equal to 0 and\n // less than range, x must be drawn randomly from the set of integers greater\n // than or equal to 0 and less than randLimit.\n const randLimit = RAND_MAX - (RAND_MAX % range);\n\n // If we don't have a callback, or if there is still data in the cache, we can\n // do this synchronously, which is super fast.\n while (isSync || randomCacheOffset < randomCache.length) {\n if (randomCacheOffset === randomCache.length) {\n // This might block the thread for a bit, but we are in sync mode.\n randomFillSync(randomCache);\n randomCacheOffset = 0;\n }\n\n const x = randomCache.readUIntBE(randomCacheOffset, 6);\n randomCacheOffset += 6;\n\n if (x < randLimit) {\n const n = (x % range) + min;\n if (isSync) return n;\n process.nextTick(callback as Function, undefined, n);\n return;\n }\n }\n\n // At this point, we are in async mode with no data in the cache. We cannot\n // simply refill the cache, because another async call to randomInt might\n // already be doing that. Instead, queue this call for when the cache has\n // been refilled.\n if (callback !== undefined) {\n // it is (typescript doesn't know it)\n asyncCachePendingTasks.push({ min, max, callback });\n asyncRefillRandomIntCache();\n }\n}\n\nfunction asyncRefillRandomIntCache() {\n if (asyncCacheFillInProgress) return;\n\n asyncCacheFillInProgress = true;\n randomFill(randomCache, (err) => {\n asyncCacheFillInProgress = false;\n\n const tasks = asyncCachePendingTasks;\n const errorReceiver = err && tasks.shift();\n if (!err) randomCacheOffset = 0;\n\n // Restart all pending tasks. If an error occurred, we only notify a single\n // callback (errorReceiver) about it. This way, every async call to\n // randomInt has a chance of being successful, and it avoids complex\n // exception handling here.\n tasks.splice(0).forEach((task) => {\n randomInt(task.min, task.max, task.callback);\n });\n\n // This is the only call that might throw, and is therefore done at the end.\n if (errorReceiver) errorReceiver.callback(err, 0);\n });\n}\n\n// Really just the Web Crypto API alternative\n// to require('crypto').randomFillSync() with an\n// additional limitation that the input buffer is\n// not allowed to exceed 65536 bytes, and can only\n// be an integer-type TypedArray.\ntype DataType =\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array;\nexport function getRandomValues(data: DataType) {\n if (data.byteLength > 65536) {\n throw new Error('The requested length exceeds 65,536 bytes');\n }\n randomFillSync(data, 0);\n return data;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-quick-crypto",
3
- "version": "0.4.2",
3
+ "version": "0.4.5",
4
4
  "description": "A fast implementation of Node's `crypto` module written in C/C++ JSI",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -152,7 +152,7 @@
152
152
  [
153
153
  "typescript",
154
154
  {
155
- "project": "tsconfig.build.json"
155
+ "project": "tsconfig.json"
156
156
  }
157
157
  ]
158
158
  ]
@@ -37,7 +37,7 @@ Pod::Spec.new do |s|
37
37
  "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/boost-for-react-native\" \"$(PODS_ROOT)/glog\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/hermes-engine\""
38
38
  }
39
39
 
40
- s.dependency "OpenSSL-Universal", "~> 1.1.1300"
40
+ s.dependency "OpenSSL-Universal"
41
41
  s.dependency "React-Core"
42
42
  s.dependency "React"
43
43
  s.dependency "React-callinvoker"
package/src/Utils.ts CHANGED
@@ -232,7 +232,7 @@ export function validateUint32(
232
232
  }
233
233
  const min = positive ? 1 : 0;
234
234
  // 2 ** 32 === 4294967296
235
- const max = 4_294_967_295;
235
+ const max = 4294967295;
236
236
  if (value < min || value > max) {
237
237
  // throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value);
238
238
  throw new Error(
package/src/random.ts CHANGED
@@ -124,7 +124,7 @@ type Task = {
124
124
 
125
125
  // Largest integer we can read from a buffer.
126
126
  // e.g.: Buffer.from("ff".repeat(6), "hex").readUIntBE(0, 6);
127
- const RAND_MAX = 0xffff_ffff_ffff;
127
+ const RAND_MAX = 0xffffffffffff;
128
128
 
129
129
  // Cache random data to use in randomInt. The cache size must be evenly
130
130
  // divisible by 6 because each attempt to obtain a random int uses 6 bytes.