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 install
expo 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] までご連絡ください。
リポジトリと開発ワークフローに貢献する方法については、貢献ガイドを参照してください。