Uma implementação rápida do módulo crypto
do Node.
Nota: Esta versão
1.x
está passando por uma grande refatoração, portando para New Architecture, Bridgeless eNitro Modules
e está incompleta em comparação com a versão0.x
O status, como sempre, será representado em implementação-coverage.md.
Nota: A versão mínima suportada do React Native é
0.75
. Se você precisar usar versões anteriores, use versões0.x
desta biblioteca.
Ao contrário de qualquer outro polyfills atual baseado em JS, react-native-quick-crypto é escrito em C/C++ JSI e oferece desempenho muito maior - especialmente em dispositivos móveis. QuickCrypto pode ser usado como um substituto imediato para seus aplicativos Web3/Crypto para acelerar funções comuns de criptografia.
Versão | Arquitetura RN | Módulos |
---|---|---|
1.x | novo -> | Módulos Nitro -> |
0.x | velho | Ponte e JSI |
Por exemplo, criar uma carteira usando ethers.js usa algoritmos complexos para gerar um par chave privada/frase mnemônica:
const start = performance . now ( ) ;
const wallet = ethers . Wallet . createRandom ( ) ;
const end = performance . now ( ) ;
console . log ( `Creating a Wallet took ${ end - start } ms.` ) ;
Sem react-native-quick-crypto?:
Creating a Wallet took 16862 ms
Com react-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
Opcional: substitua global.Buffer
e global.crypto
em seu aplicativo o mais cedo possível, por exemplo, em index.js.
import { install } from 'react-native-quick-crypto' ;
install ( ) ;
crypto-browserify
Se você estiver usando uma biblioteca que depende de crypto
, em vez de preenchê-la com crypto-browserify
(ou react-native-crypto
), você pode usar react-native-quick-crypto
para uma implementação totalmente nativa. Dessa forma, você pode obter operações criptográficas muito mais rápidas com apenas uma alteração de linha única!
Use a opção de configuração resolveRequest
em seu 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 )
}
Você precisa instalar babel-plugin-module-resolver
, é um plugin do babel que irá alias quaisquer importações no código com os valores que você passa para ele. Ele engana qualquer módulo que tente importar certas dependências com as versões nativas que necessitamos para React Native.
yarn add --dev babel-plugin-module-resolver
Então, em seu babel.config.js
, adicione o plugin para trocar as dependências crypto
, stream
e 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',
+ },
+ },
+ ],
...
],
};
Em seguida, reinicie seu empacotador usando yarn start --reset-cache
.
Por exemplo, para fazer hash de uma string com SHA256, você pode fazer o seguinte:
import QuickCrypto from 'react-native-quick-crypto' ;
const hashed = QuickCrypto . createHash ( 'sha256' )
. update ( 'Damn, Margelo writes hella good software!' )
. digest ( 'hex' ) ;
Como a biblioteca usa JSI para acesso síncrono a métodos nativos, a depuração remota (por exemplo, com o Chrome) não é mais possível. Em vez disso, você deve usar o Flipper.
Nem todos os algoritmos criptográficos são suportados ainda. Consulte o documento de cobertura de implementação para obter mais detalhes. Se você precisar de um algoritmo específico, abra um problema feature request
e veremos o que podemos fazer.
Junte-se ao Discord da comunidade Margelo para conversar sobre react-native-quick-crypto ou outras bibliotecas Margelo.
react-native-quick-crypto foi desenvolvido na Margelo, uma agência de desenvolvimento de aplicativos de elite. Para suporte empresarial ou outras dúvidas comerciais, entre em contato conosco pelo e-mail [email protected]!
Consulte o guia de contribuição para saber como contribuir com o repositório e o fluxo de trabalho de desenvolvimento.