Une implémentation rapide du module crypto de Node.
Remarque : Cette version
1.xfait l'objet d'une refactorisation majeure, d'un portage versNitro Moduleset est incomplète par rapport à la version0.xLe statut, comme toujours, sera représenté dans Implementation-coverage.md.
Remarque : La version minimale prise en charge de React Native est
0.75. Si vous devez utiliser des versions antérieures, veuillez utiliser les versions0.xde cette bibliothèque.
Contrairement à tous les autres polyfills actuels basés sur JS, React-native-quick-crypto est écrit en C/C++ JSI et offre des performances bien supérieures, en particulier sur les appareils mobiles. QuickCrypto peut être utilisé en remplacement de vos applications Web3/Crypto pour accélérer les fonctions de cryptographie courantes.
| Version | Architecture RN | Modules |
|---|---|---|
1.x | nouveau -> | Modules Nitro -> |
0.x | vieux | Pont et JSI |
Par exemple, la création d'un portefeuille à l'aide d'ethers.js utilise des algorithmes complexes pour générer une paire clé privée/expression mnémonique :
const start = performance . now ( ) ;
const wallet = ethers . Wallet . createRandom ( ) ;
const end = performance . now ( ) ;
console . log ( `Creating a Wallet took ${ end - start } ms.` ) ;Sans réagir-native-quick-crypto ? :
Creating a Wallet took 16862 ms
Avec réagir-native-quick-crypto ⚡️ :
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 Facultatif : remplacez global.Buffer et global.crypto dans votre application le plus tôt possible, par exemple dans index.js.
import { install } from 'react-native-quick-crypto' ;
install ( ) ; crypto-browserify Si vous utilisez une bibliothèque qui dépend de crypto , au lieu de la polyfiller avec crypto-browserify (ou react-native-crypto ), vous pouvez utiliser react-native-quick-crypto pour une implémentation entièrement native. De cette façon, vous pouvez obtenir des opérations de chiffrement beaucoup plus rapides avec un seul changement sur une seule ligne !
Utilisez l'option de configuration resolveRequest dans votre metro.config.js
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 )
} Vous devez installer babel-plugin-module-resolver , c'est un plugin babel qui alias toutes les importations dans le code avec les valeurs que vous lui transmettez. Il trompe tout module qui tentera d'importer certaines dépendances avec les versions natives dont nous avons besoin pour React Native.
yarn add --dev babel-plugin-module-resolver Ensuite, dans votre babel.config.js , ajoutez le plugin pour échanger les dépendances crypto , stream et 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',
+ },
+ },
+ ],
...
],
}; Redémarrez ensuite votre bundler en utilisant yarn start --reset-cache .
Par exemple, pour hacher une chaîne avec SHA256, vous pouvez procéder comme suit :
import QuickCrypto from 'react-native-quick-crypto' ;
const hashed = QuickCrypto . createHash ( 'sha256' )
. update ( 'Damn, Margelo writes hella good software!' )
. digest ( 'hex' ) ; Comme la bibliothèque utilise JSI pour l'accès synchrone aux méthodes natives, le débogage à distance (par exemple avec Chrome) n'est plus possible. Au lieu de cela, vous devriez utiliser Flipper.
Tous les algorithmes cryptographiques ne sont pas encore pris en charge. Consultez le document de couverture de mise en œuvre pour plus de détails. Si vous avez besoin d'un algorithme spécifique, veuillez ouvrir un problème feature request et nous verrons ce que nous pouvons faire.
Rejoignez le Margelo Community Discord pour discuter de React-Native-Quick-Crypto ou d'autres bibliothèques Margelo.
React-native-quick-crypto a été construit chez Margelo, une agence de développement d'applications d'élite. Pour une assistance aux entreprises ou d'autres demandes commerciales, contactez-nous à [email protected] !
Consultez le guide de contribution pour savoir comment contribuer au référentiel et au workflow de développement.