30 lines
841 B
TypeScript
30 lines
841 B
TypeScript
import {NativeModules} from 'react-native'
|
|
const {AppSecureRandomModule} = NativeModules
|
|
import {toByteArray} from 'base64-js'
|
|
// @ts-ignore we dont have types for this -prf
|
|
import crypto from 'msrcrypto'
|
|
import '@zxing/text-encoding' // TextEncoder / TextDecoder
|
|
|
|
async function generateSecureRandom(bytes: number) {
|
|
return toByteArray(
|
|
await AppSecureRandomModule.generateSecureRandomAsBase64(bytes),
|
|
)
|
|
}
|
|
|
|
export const whenWebCrypto = new Promise(async (resolve, reject) => {
|
|
try {
|
|
const bytes = await generateSecureRandom(48)
|
|
crypto.initPrng(Array.from(bytes))
|
|
|
|
// @ts-ignore global.window exists -prf
|
|
if (!global.window.crypto) {
|
|
// @ts-ignore global.window exists -prf
|
|
global.window.crypto = crypto
|
|
}
|
|
resolve(true)
|
|
} catch (e: any) {
|
|
reject(e)
|
|
}
|
|
})
|
|
|
|
export const webcrypto = crypto
|