Une implémentation rapide du module crypto
de Node.
Remarque : Cette version
1.x
fait l'objet d'une refactorisation majeure, d'un portage versNitro Modules
et est incomplète par rapport à la version0.x
Le 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.x
de 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 install
expo 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.