65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
import 'react-native-get-random-values';
|
|
|
|
import 'react-native-gesture-handler';
|
|
|
|
import '@azure/core-asynciterator-polyfill';
|
|
//neeed for encription + spark
|
|
import 'react-native-quick-base64';
|
|
|
|
// needed for branta ops
|
|
import 'react-native-url-polyfill/auto';
|
|
|
|
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
import QuickCrypto, {
|
|
pbkdf2Sync,
|
|
createHash,
|
|
subtle,
|
|
} from 'react-native-quick-crypto';
|
|
global.Buffer = Buffer;
|
|
|
|
// Polyfill Web Crypto API for packages that rely on crypto.subtle (e.g. @branta-ops/branta)
|
|
// react-native-get-random-values (imported above) already provides crypto.getRandomValues
|
|
// need for @branta-ops/branta
|
|
global.crypto = QuickCrypto;
|
|
global.crypto.subtle = subtle;
|
|
global.crypto.randomUUID =
|
|
global.crypto.randomUUID ||
|
|
function () {
|
|
const bytes = new Uint8Array(16);
|
|
global.crypto.getRandomValues(bytes);
|
|
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0'));
|
|
return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex
|
|
.slice(6, 8)
|
|
.join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10).join('')}`;
|
|
};
|
|
|
|
// import 'text-encoding-polyfill';
|
|
import 'text-encoding'; // needed for spark
|
|
|
|
//Fixing js blocking from ethers package
|
|
import { ethers } from 'ethers';
|
|
|
|
// --- Register native SHA512 implementation ---
|
|
ethers.sha512.register(data => {
|
|
return Uint8Array.from(createHash('sha512').update(data).digest());
|
|
});
|
|
|
|
// --- Register native PBKDF2 implementation ---
|
|
ethers.pbkdf2.register((password, salt, iterations, keyLen, algo) => {
|
|
const derivedKey = pbkdf2Sync(
|
|
Buffer.from(password),
|
|
Buffer.from(salt),
|
|
iterations,
|
|
keyLen,
|
|
algo.toLowerCase(),
|
|
);
|
|
return Uint8Array.from(derivedKey);
|
|
});
|
|
|
|
// Process polyfill
|
|
global.process = global.process || {};
|
|
global.process.env = global.process.env || {};
|
|
global.process.browser = true;
|