Быстрая реализация 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 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
для полностью нативной реализации. Таким образом, вы можете выполнить гораздо более быстрые криптографические операции, изменив всего одну строку!
Используйте параметр 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]!
См. руководство по участию, чтобы узнать, как внести свой вклад в репозиторий и рабочий процесс разработки.