Node のcryptoモジュールの高速実装。
注: このバージョン
1.xは大規模なリファクタリングが行われ、新しいアーキテクチャ、ブリッジレス、およびNitro Modulesに移植されており、バージョン0.xと比較すると不完全です。ステータスは、いつものように、implementation-coverage.md で表されます。
注: React Native のサポートされる最小バージョンは
0.75です。以前のバージョンを使用する必要がある場合は、このライブラリの0.xバージョンを使用してください。
現在の他の JS ベースのポリフィルとは異なり、react-native-quick-crypto は C/C++ JSI で書かれており、特にモバイル デバイス上でより優れたパフォーマンスを提供します。 QuickCrypto は、Web3/Crypto アプリのドロップイン代替品として使用して、一般的な暗号化機能を高速化できます。
| バージョン | RN アーキテクチャ | モジュール |
|---|---|---|
1.x | 新しい -> | ニトロモジュール -> |
0.x | 古い | ブリッジとJSI |
たとえば、ethers.js を使用してウォレットを作成すると、複雑なアルゴリズムを使用して秘密キーとニーモニック フレーズのペアが生成されます。
const start = performance . now ( ) ;
const wallet = ethers . Wallet . createRandom ( ) ;
const end = performance . now ( ) ;
console . log ( `Creating a Wallet took ${ end - start } ms.` ) ;反応ネイティブクイック暗号なし?:
Creating a Wallet took 16862 ms
反応ネイティブクイック暗号化の場合⚡️:
Creating a Wallet took 289 ms
bun add react-native-quick-crypto react-native-nitro-modules
cd ios && pod installexpo install react-native-quick-crypto
expo prebuildオプション: アプリケーション内のglobal.Bufferとglobal.cryptoできるだけ早くオーバーライドします (たとえば、index.js)。
import { install } from 'react-native-quick-crypto' ;
install ( ) ; crypto-browserify置き換えるcryptoに依存するライブラリを使用している場合は、 crypto-browserify (またはreact-native-crypto ) でポリフィルする代わりに、完全にネイティブな実装としてreact-native-quick-crypto使用できます。こうすることで、たった 1 行の変更で暗号化操作が大幅に高速化されます。
metro.config.jsでresolveRequest構成オプションを使用する
config . resolver . resolveRequest = ( context , moduleName , platform ) => {
if ( moduleName === 'crypto' ) {
// when importing crypto, resolve to react-native-quick-crypto
return context . resolveRequest (
context ,
'react-native-quick-crypto' ,
platform ,
)
}
// otherwise chain to the standard Metro resolver.
return context . resolveRequest ( context , moduleName , platform )
}babel-plugin-module-resolverインストールする必要があります。これは、コード内のインポートに、渡した値をエイリアスする babel プラグインです。これは、React Native に必要なネイティブ バージョンで特定の依存関係をインポートしようとするモジュールを騙します。
yarn add --dev babel-plugin-module-resolver次に、 babel.config.jsにプラグインを追加して、 crypto 、 stream 、 buffer依存関係を交換します。
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
plugins: [
+ [
+ 'module-resolver',
+ {
+ alias: {
+ 'crypto': 'react-native-quick-crypto',
+ 'stream': 'readable-stream',
+ 'buffer': '@craftzdog/react-native-buffer',
+ },
+ },
+ ],
...
],
};次に、 yarn start --reset-cache使用してバンドラーを再起動します。
たとえば、文字列を SHA256 でハッシュするには、次のようにします。
import QuickCrypto from 'react-native-quick-crypto' ;
const hashed = QuickCrypto . createHash ( 'sha256' )
. update ( 'Damn, Margelo writes hella good software!' )
. digest ( 'hex' ) ; ライブラリは同期ネイティブ メソッド アクセスに JSI を使用するため、リモート デバッグ (Chrome など) はできなくなります。代わりに、フリッパーを使用する必要があります。
すべての暗号化アルゴリズムがまだサポートされているわけではありません。詳細については、実装範囲のドキュメントを参照してください。特定のアルゴリズムが必要な場合は、 feature request問題を開いてください。何ができるかを確認します。
Margelo コミュニティ Discord に参加して、react-native-quick-crypto または他の Margelo ライブラリについてチャットしてください。
React-native-quick-crypto は、エリート アプリ開発会社である Margelo で構築されました。エンタープライズ サポートやその他のビジネスに関するお問い合わせについては、[email protected] までご連絡ください。
リポジトリと開発ワークフローに貢献する方法については、貢献ガイドを参照してください。