react-native-quick-crypto 0.4.0 → 0.4.3
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 +7 -1
- package/README.md +59 -5
- package/android/src/main/cpp/cpp-adapter.cpp +1 -1
- package/cpp/Cipher/MGLPublicCipher.h +1 -1
- package/cpp/MGLKeys.cpp +1 -1
- package/lib/commonjs/sig.js +3 -3
- package/lib/commonjs/sig.js.map +1 -1
- package/lib/module/sig.js +1 -1
- package/lib/module/sig.js.map +1 -1
- package/lib/typescript/sig.d.ts +1 -1
- package/package.json +2 -3
- package/react-native-quick-crypto.podspec +1 -1
- package/src/sig.ts +1 -1
package/LICENSE
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
**react-native-quick-crypto**
|
|
2
|
+
|
|
1
3
|
MIT License
|
|
2
4
|
|
|
3
|
-
Copyright (c) 2021
|
|
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
|
-
##
|
|
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
|
+ ],
|
|
@@ -84,16 +88,65 @@ module.exports = {
|
|
|
84
88
|
|
|
85
89
|
Now, all imports for `crypto` will be resolved as `react-native-quick-crypto` instead.
|
|
86
90
|
|
|
91
|
+
> 💡 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).
|
|
92
|
+
|
|
93
|
+
## Usage
|
|
94
|
+
|
|
95
|
+
For example, to hash a string with SHA256 you can do the following:
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
import Crypto from 'react-native-quick-crypto'
|
|
99
|
+
|
|
100
|
+
const hashed = Crypto.createHash('sha256')
|
|
101
|
+
.update('Damn, Margelo writes hella good software!')
|
|
102
|
+
.digest('hex')
|
|
103
|
+
```
|
|
104
|
+
|
|
87
105
|
---
|
|
88
106
|
|
|
89
107
|
## Sponsors
|
|
90
108
|
|
|
109
|
+
<!-- Onin -->
|
|
91
110
|
<div align="center">
|
|
111
|
+
<img height="50" src="./img/sponsors/onin.svg" align="center"><br/>
|
|
112
|
+
<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>
|
|
113
|
+
</div>
|
|
114
|
+
<br/>
|
|
115
|
+
<br/>
|
|
116
|
+
|
|
117
|
+
<!-- Steakwallet -->
|
|
118
|
+
<div align="center">
|
|
119
|
+
<img height="37" src="./img/sponsors/omni.png" align="center"><br/>
|
|
120
|
+
<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!
|
|
121
|
+
</div>
|
|
122
|
+
<br/>
|
|
123
|
+
<br/>
|
|
92
124
|
|
|
93
|
-
|
|
125
|
+
<!-- Litentry -->
|
|
126
|
+
<div align="center">
|
|
127
|
+
<img height="70" src="./img/sponsors/litentry.png" align="center"><br/>
|
|
94
128
|
<a href="https://litentry.com"><b>Litentry</b></a> - A decentralized identity aggregator, providing the structure and tools to empower you and your identity.
|
|
129
|
+
</div>
|
|
130
|
+
<br/>
|
|
131
|
+
<br/>
|
|
95
132
|
|
|
133
|
+
<!-- WalletConnect -->
|
|
134
|
+
<div align="center">
|
|
135
|
+
<img height="35" src="./img/sponsors/walletconnect.png" align="center"><br/>
|
|
136
|
+
<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.
|
|
137
|
+
</div>
|
|
138
|
+
<br/>
|
|
139
|
+
<br/>
|
|
140
|
+
|
|
141
|
+
<!-- WalletConnect -->
|
|
142
|
+
|
|
143
|
+
<!-- THORSwap -->
|
|
144
|
+
<div align="center">
|
|
145
|
+
<img height="40" src="./img/sponsors/thorswap.png" align="center"><br/>
|
|
146
|
+
<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
147
|
</div>
|
|
148
|
+
<br/>
|
|
149
|
+
<br/>
|
|
97
150
|
|
|
98
151
|
## Limitations
|
|
99
152
|
|
|
@@ -109,4 +162,5 @@ See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the
|
|
|
109
162
|
|
|
110
163
|
## License
|
|
111
164
|
|
|
112
|
-
MIT
|
|
165
|
+
- react-native-quick-crypto is licensed under MIT.
|
|
166
|
+
- react-native-quick-crypto is heavily inspired by NodeJS Crypto, which is licensed under [nodejs/LICENSE](https://github.com/nodejs/node/blob/main/LICENSE).
|
|
@@ -10,7 +10,7 @@ using namespace facebook;
|
|
|
10
10
|
class CryptoCppAdapter : public jni::HybridClass<CryptoCppAdapter> {
|
|
11
11
|
public:
|
|
12
12
|
static auto constexpr kJavaDescriptor =
|
|
13
|
-
"Lcom/
|
|
13
|
+
"Lcom/margelo/quickcrypto/QuickCryptoModule;";
|
|
14
14
|
|
|
15
15
|
static jni::local_ref<jni::HybridClass<CryptoCppAdapter>::jhybriddata>
|
|
16
16
|
initHybrid(jni::alias_ref<jhybridobject> jThis) {
|
package/cpp/MGLKeys.cpp
CHANGED
package/lib/commonjs/sig.js
CHANGED
|
@@ -8,7 +8,7 @@ exports.createVerify = createVerify;
|
|
|
8
8
|
|
|
9
9
|
var _NativeQuickCrypto = require("./NativeQuickCrypto/NativeQuickCrypto");
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var _streamBrowserify = _interopRequireDefault(require("stream-browserify"));
|
|
12
12
|
|
|
13
13
|
var _Utils = require("./Utils");
|
|
14
14
|
|
|
@@ -64,7 +64,7 @@ function getIntOption(name, options) {
|
|
|
64
64
|
return undefined;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
class Verify extends
|
|
67
|
+
class Verify extends _streamBrowserify.default.Writable {
|
|
68
68
|
constructor(algorithm, options) {
|
|
69
69
|
super(options);
|
|
70
70
|
|
|
@@ -109,7 +109,7 @@ class Verify extends _stream.default.Writable {
|
|
|
109
109
|
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
class Sign extends
|
|
112
|
+
class Sign extends _streamBrowserify.default.Writable {
|
|
113
113
|
constructor(algorithm, options) {
|
|
114
114
|
super(options);
|
|
115
115
|
|
package/lib/commonjs/sig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["sig.ts"],"names":["DSASigEnc","createInternalSign","NativeQuickCrypto","createSign","createInternalVerify","createVerify","getPadding","options","getIntOption","getSaltLength","getDSASignatureEncoding","dsaEncoding","kSigEncDER","kSigEncP1363","Error","name","value","undefined","Verify","Stream","Writable","constructor","algorithm","internal","init","_write","chunk","encoding","callback","update","data","verify","signature","format","type","passphrase","rsaPadding","pssSaltLength","dsaSigEnc","ret","Sign","sign","Buffer","from","toString"],"mappings":";;;;;;;;AAAA;;AAEA;;AASA;;AAKA;;;;;;AAZA;AACA;IACKA,S;;WAAAA,S;AAAAA,EAAAA,S,CAAAA,S;AAAAA,EAAAA,S,CAAAA,S;GAAAA,S,KAAAA,S;;AAYL,MAAMC,kBAAkB,GAAGC,qCAAkBC,UAA7C;AACA,MAAMC,oBAAoB,GAAGF,qCAAkBG,YAA/C;;AAEA,SAASC,UAAT,CAAoBC,OAApB,EAAkC;AAChC,SAAOC,YAAY,CAAC,SAAD,EAAYD,OAAZ,CAAnB;AACD;;AAED,SAASE,aAAT,CAAuBF,OAAvB,EAAqC;AACnC,SAAOC,YAAY,CAAC,YAAD,EAAeD,OAAf,CAAnB;AACD;;AAED,SAASG,uBAAT,CAAiCH,OAAjC,EAA+C;AAC7C,MAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,UAAM;AAAEI,MAAAA,WAAW,GAAG;AAAhB,QAA0BJ,OAAhC;AACA,QAAII,WAAW,KAAK,KAApB,EAA2B,OAAOX,SAAS,CAACY,UAAjB,CAA3B,KACK,IAAID,WAAW,KAAK,YAApB,EAAkC,OAAOX,SAAS,CAACa,YAAjB;AACvC,UAAM,IAAIC,KAAJ,CAAW,wBAAuBH,WAAY,uBAA9C,CAAN;AACD;;AAED,SAAOX,SAAS,CAACY,UAAjB;AACD;;AAED,SAASJ,YAAT,CAAsBO,IAAtB,EAAoCR,OAApC,EAAkD;AAChD,QAAMS,KAAK,GAAGT,OAAO,CAACQ,IAAD,CAArB;;AACA,MAAIC,KAAK,KAAKC,SAAd,EAAyB;AACvB,QAAID,KAAK,KAAKA,KAAK,IAAI,CAAvB,EAA0B;AACxB,aAAOA,KAAP;AACD;;AACD,UAAM,IAAIF,KAAJ,CAAW,WAAUC,IAAK,KAAIC,KAAM,wBAApC,CAAN;AACD;;AACD,SAAOC,SAAP;AACD;;AAED,MAAMC,MAAN,SAAqBC,
|
|
1
|
+
{"version":3,"sources":["sig.ts"],"names":["DSASigEnc","createInternalSign","NativeQuickCrypto","createSign","createInternalVerify","createVerify","getPadding","options","getIntOption","getSaltLength","getDSASignatureEncoding","dsaEncoding","kSigEncDER","kSigEncP1363","Error","name","value","undefined","Verify","Stream","Writable","constructor","algorithm","internal","init","_write","chunk","encoding","callback","update","data","verify","signature","format","type","passphrase","rsaPadding","pssSaltLength","dsaSigEnc","ret","Sign","sign","Buffer","from","toString"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport type { InternalSign, InternalVerify } from './NativeQuickCrypto/sig';\nimport Stream from 'stream-browserify';\n\n// TODO(osp) same as publicCipher on node this are defined on C++ and exposed to node\n// Do the same here\nenum DSASigEnc {\n kSigEncDER,\n kSigEncP1363,\n}\n\nimport {\n BinaryLike,\n binaryLikeToArrayBuffer,\n getDefaultEncoding,\n} from './Utils';\nimport { preparePrivateKey, preparePublicOrPrivateKey } from './keys';\n\nconst createInternalSign = NativeQuickCrypto.createSign;\nconst createInternalVerify = NativeQuickCrypto.createVerify;\n\nfunction getPadding(options: any) {\n return getIntOption('padding', options);\n}\n\nfunction getSaltLength(options: any) {\n return getIntOption('saltLength', options);\n}\n\nfunction getDSASignatureEncoding(options: any) {\n if (typeof options === 'object') {\n const { dsaEncoding = 'der' } = options;\n if (dsaEncoding === 'der') return DSASigEnc.kSigEncDER;\n else if (dsaEncoding === 'ieee-p1363') return DSASigEnc.kSigEncP1363;\n throw new Error(`options.dsaEncoding: ${dsaEncoding} not a valid encoding`);\n }\n\n return DSASigEnc.kSigEncDER;\n}\n\nfunction getIntOption(name: string, options: any) {\n const value = options[name];\n if (value !== undefined) {\n if (value === value >> 0) {\n return value;\n }\n throw new Error(`options.${name}: ${value} not a valid int value`);\n }\n return undefined;\n}\n\nclass Verify extends Stream.Writable {\n private internal: InternalVerify;\n constructor(algorithm: string, options: Stream.WritableOptions) {\n super(options);\n this.internal = createInternalVerify();\n this.internal.init(algorithm);\n }\n\n _write(chunk: BinaryLike, encoding: string, callback: () => void) {\n this.update(chunk, encoding);\n callback();\n }\n\n update(data: BinaryLike, encoding?: string) {\n encoding = encoding ?? getDefaultEncoding();\n data = binaryLikeToArrayBuffer(data, encoding);\n this.internal.update(data);\n return this;\n }\n\n verify(\n options: {\n key: string | Buffer;\n format?: string;\n type?: string;\n passphrase?: string;\n padding?: number;\n saltLength?: number;\n },\n signature: BinaryLike\n ): boolean {\n if (!options) {\n throw new Error('Crypto sign key required');\n }\n\n const { data, format, type, passphrase } =\n preparePublicOrPrivateKey(options);\n\n const rsaPadding = getPadding(options);\n const pssSaltLength = getSaltLength(options);\n\n // Options specific to (EC)DSA\n const dsaSigEnc = getDSASignatureEncoding(options);\n\n const ret = this.internal.verify(\n data,\n format,\n type,\n passphrase,\n binaryLikeToArrayBuffer(signature),\n rsaPadding,\n pssSaltLength,\n dsaSigEnc\n );\n\n return ret;\n }\n}\n\nclass Sign extends Stream.Writable {\n private internal: InternalSign;\n constructor(algorithm: string, options: Stream.WritableOptions) {\n super(options);\n this.internal = createInternalSign();\n this.internal.init(algorithm);\n }\n\n _write(chunk: BinaryLike, encoding: string, callback: () => void) {\n this.update(chunk, encoding);\n callback();\n }\n\n update(data: BinaryLike, encoding?: string) {\n encoding = encoding ?? getDefaultEncoding();\n data = binaryLikeToArrayBuffer(data, encoding);\n this.internal.update(data);\n return this;\n }\n\n sign(\n options: {\n key: string | Buffer;\n format?: string;\n type?: string;\n passphrase?: string;\n padding?: number;\n saltLength?: number;\n },\n encoding?: string\n ) {\n if (!options) {\n throw new Error('Crypto sign key required');\n }\n\n const { data, format, type, passphrase } = preparePrivateKey(options);\n\n const rsaPadding = getPadding(options);\n const pssSaltLength = getSaltLength(options);\n\n // Options specific to (EC)DSA\n const dsaSigEnc = getDSASignatureEncoding(options);\n\n const ret = this.internal.sign(\n data,\n format,\n type,\n passphrase,\n rsaPadding,\n pssSaltLength,\n dsaSigEnc\n );\n\n encoding = encoding || getDefaultEncoding();\n if (encoding && encoding !== 'buffer') {\n return Buffer.from(ret).toString(encoding as any);\n }\n\n return Buffer.from(ret);\n }\n}\n\nexport function createSign(algorithm: string, options?: any) {\n return new Sign(algorithm, options);\n}\n\nexport function createVerify(algorithm: string, options?: any) {\n return new Verify(algorithm, options);\n}\n"]}
|
package/lib/module/sig.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
2
|
|
|
3
3
|
import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
|
|
4
|
-
import Stream from 'stream'; // TODO(osp) same as publicCipher on node this are defined on C++ and exposed to node
|
|
4
|
+
import Stream from 'stream-browserify'; // TODO(osp) same as publicCipher on node this are defined on C++ and exposed to node
|
|
5
5
|
// Do the same here
|
|
6
6
|
|
|
7
7
|
var DSASigEnc;
|
package/lib/module/sig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["sig.ts"],"names":["NativeQuickCrypto","Stream","DSASigEnc","binaryLikeToArrayBuffer","getDefaultEncoding","preparePrivateKey","preparePublicOrPrivateKey","createInternalSign","createSign","createInternalVerify","createVerify","getPadding","options","getIntOption","getSaltLength","getDSASignatureEncoding","dsaEncoding","kSigEncDER","kSigEncP1363","Error","name","value","undefined","Verify","Writable","constructor","algorithm","internal","init","_write","chunk","encoding","callback","update","data","verify","signature","format","type","passphrase","rsaPadding","pssSaltLength","dsaSigEnc","ret","Sign","sign","Buffer","from","toString"],"mappings":";;AAAA,SAASA,iBAAT,QAAkC,uCAAlC;AAEA,OAAOC,MAAP,MAAmB,
|
|
1
|
+
{"version":3,"sources":["sig.ts"],"names":["NativeQuickCrypto","Stream","DSASigEnc","binaryLikeToArrayBuffer","getDefaultEncoding","preparePrivateKey","preparePublicOrPrivateKey","createInternalSign","createSign","createInternalVerify","createVerify","getPadding","options","getIntOption","getSaltLength","getDSASignatureEncoding","dsaEncoding","kSigEncDER","kSigEncP1363","Error","name","value","undefined","Verify","Writable","constructor","algorithm","internal","init","_write","chunk","encoding","callback","update","data","verify","signature","format","type","passphrase","rsaPadding","pssSaltLength","dsaSigEnc","ret","Sign","sign","Buffer","from","toString"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport type { InternalSign, InternalVerify } from './NativeQuickCrypto/sig';\nimport Stream from 'stream-browserify';\n\n// TODO(osp) same as publicCipher on node this are defined on C++ and exposed to node\n// Do the same here\nenum DSASigEnc {\n kSigEncDER,\n kSigEncP1363,\n}\n\nimport {\n BinaryLike,\n binaryLikeToArrayBuffer,\n getDefaultEncoding,\n} from './Utils';\nimport { preparePrivateKey, preparePublicOrPrivateKey } from './keys';\n\nconst createInternalSign = NativeQuickCrypto.createSign;\nconst createInternalVerify = NativeQuickCrypto.createVerify;\n\nfunction getPadding(options: any) {\n return getIntOption('padding', options);\n}\n\nfunction getSaltLength(options: any) {\n return getIntOption('saltLength', options);\n}\n\nfunction getDSASignatureEncoding(options: any) {\n if (typeof options === 'object') {\n const { dsaEncoding = 'der' } = options;\n if (dsaEncoding === 'der') return DSASigEnc.kSigEncDER;\n else if (dsaEncoding === 'ieee-p1363') return DSASigEnc.kSigEncP1363;\n throw new Error(`options.dsaEncoding: ${dsaEncoding} not a valid encoding`);\n }\n\n return DSASigEnc.kSigEncDER;\n}\n\nfunction getIntOption(name: string, options: any) {\n const value = options[name];\n if (value !== undefined) {\n if (value === value >> 0) {\n return value;\n }\n throw new Error(`options.${name}: ${value} not a valid int value`);\n }\n return undefined;\n}\n\nclass Verify extends Stream.Writable {\n private internal: InternalVerify;\n constructor(algorithm: string, options: Stream.WritableOptions) {\n super(options);\n this.internal = createInternalVerify();\n this.internal.init(algorithm);\n }\n\n _write(chunk: BinaryLike, encoding: string, callback: () => void) {\n this.update(chunk, encoding);\n callback();\n }\n\n update(data: BinaryLike, encoding?: string) {\n encoding = encoding ?? getDefaultEncoding();\n data = binaryLikeToArrayBuffer(data, encoding);\n this.internal.update(data);\n return this;\n }\n\n verify(\n options: {\n key: string | Buffer;\n format?: string;\n type?: string;\n passphrase?: string;\n padding?: number;\n saltLength?: number;\n },\n signature: BinaryLike\n ): boolean {\n if (!options) {\n throw new Error('Crypto sign key required');\n }\n\n const { data, format, type, passphrase } =\n preparePublicOrPrivateKey(options);\n\n const rsaPadding = getPadding(options);\n const pssSaltLength = getSaltLength(options);\n\n // Options specific to (EC)DSA\n const dsaSigEnc = getDSASignatureEncoding(options);\n\n const ret = this.internal.verify(\n data,\n format,\n type,\n passphrase,\n binaryLikeToArrayBuffer(signature),\n rsaPadding,\n pssSaltLength,\n dsaSigEnc\n );\n\n return ret;\n }\n}\n\nclass Sign extends Stream.Writable {\n private internal: InternalSign;\n constructor(algorithm: string, options: Stream.WritableOptions) {\n super(options);\n this.internal = createInternalSign();\n this.internal.init(algorithm);\n }\n\n _write(chunk: BinaryLike, encoding: string, callback: () => void) {\n this.update(chunk, encoding);\n callback();\n }\n\n update(data: BinaryLike, encoding?: string) {\n encoding = encoding ?? getDefaultEncoding();\n data = binaryLikeToArrayBuffer(data, encoding);\n this.internal.update(data);\n return this;\n }\n\n sign(\n options: {\n key: string | Buffer;\n format?: string;\n type?: string;\n passphrase?: string;\n padding?: number;\n saltLength?: number;\n },\n encoding?: string\n ) {\n if (!options) {\n throw new Error('Crypto sign key required');\n }\n\n const { data, format, type, passphrase } = preparePrivateKey(options);\n\n const rsaPadding = getPadding(options);\n const pssSaltLength = getSaltLength(options);\n\n // Options specific to (EC)DSA\n const dsaSigEnc = getDSASignatureEncoding(options);\n\n const ret = this.internal.sign(\n data,\n format,\n type,\n passphrase,\n rsaPadding,\n pssSaltLength,\n dsaSigEnc\n );\n\n encoding = encoding || getDefaultEncoding();\n if (encoding && encoding !== 'buffer') {\n return Buffer.from(ret).toString(encoding as any);\n }\n\n return Buffer.from(ret);\n }\n}\n\nexport function createSign(algorithm: string, options?: any) {\n return new Sign(algorithm, options);\n}\n\nexport function createVerify(algorithm: string, options?: any) {\n return new Verify(algorithm, options);\n}\n"]}
|
package/lib/typescript/sig.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-quick-crypto",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
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.
|
|
155
|
+
"project": "tsconfig.json"
|
|
156
156
|
}
|
|
157
157
|
]
|
|
158
158
|
]
|
|
@@ -162,7 +162,6 @@
|
|
|
162
162
|
"@types/node": "^17.0.31",
|
|
163
163
|
"events": "^3.3.0",
|
|
164
164
|
"react-native-quick-base64": "^2.0.2",
|
|
165
|
-
"stream": "^0.0.2",
|
|
166
165
|
"stream-browserify": "^3.0.0",
|
|
167
166
|
"string_decoder": "^1.3.0",
|
|
168
167
|
"crypto-browserify": "^3.12.0"
|
|
@@ -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"
|
|
40
|
+
s.dependency "OpenSSL-Universal"
|
|
41
41
|
s.dependency "React-Core"
|
|
42
42
|
s.dependency "React"
|
|
43
43
|
s.dependency "React-callinvoker"
|
package/src/sig.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
|
|
2
2
|
import type { InternalSign, InternalVerify } from './NativeQuickCrypto/sig';
|
|
3
|
-
import Stream from 'stream';
|
|
3
|
+
import Stream from 'stream-browserify';
|
|
4
4
|
|
|
5
5
|
// TODO(osp) same as publicCipher on node this are defined on C++ and exposed to node
|
|
6
6
|
// Do the same here
|