Быстрая реализация crypto Node.
Примечание. Эта версия
1.xподвергается серьезному рефакторингу с переносом на модули новой архитектуры, безмостовые иNitro Modulesи является неполной по сравнению с версией0.xСтатус, как всегда, будет представлен в файлеimplementation-coverage.md.
Примечание. Минимальная поддерживаемая версия React Native —
0.75. Если вам нужно использовать более ранние версии, используйте версии этой библиотеки0.x
В отличие от любых других текущих полифилов на основе JS, response-native-quick-crypto написан на C/C++ JSI и обеспечивает гораздо большую производительность, особенно на мобильных устройствах. QuickCrypto можно использовать в качестве замены вашим приложениям Web3/Crypto для ускорения общих функций шифрования.
| Версия | РН Архитектура | Модули |
|---|---|---|
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.` ) ;Без реакции-native-quick-crypto?:
Creating a Wallet took 16862 ms
С помощью реакции-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 Необязательно: переопределите 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 для полностью нативной реализации. Таким образом, вы можете выполнить гораздо более быстрые криптографические операции, изменив всего одну строку!
Используйте параметр resolveRequest в вашем 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 )
} Вам необходимо установить 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) больше невозможна. Вместо этого вам следует использовать Flipper.
Пока поддерживаются не все криптографические алгоритмы. Более подробную информацию см. в документе о покрытии реализации. Если вам нужен конкретный алгоритм, откройте вопрос feature request , и мы посмотрим, что мы можем сделать.
Присоединяйтесь к Discord сообщества Margelo, чтобы поговорить о реакции-native-quick-crypto или других библиотеках Margelo.
React-native-quick-crypto был создан в Margelo, элитном агентстве по разработке приложений. По вопросам корпоративной поддержки или другим деловым вопросам обращайтесь к нам по адресу [email protected]!
См. руководство по участию, чтобы узнать, как внести свой вклад в репозиторий и рабочий процесс разработки.