// @ts-nocheck import {bytes_to_base64 as bytesToBase64, Sha512} from 'asmcrypto.js' import bcrypt from 'bcryptjs' import utils from '../utils/utils' import { crypto } from '../constants/decryptWallet' const stringtoUTF8Array = (message)=> { if (typeof message === 'string') { var s = unescape(encodeURIComponent(message)) // UTF-8 message = new Uint8Array(s.length) for (var i = 0; i < s.length; i++) { message[i] = s.charCodeAt(i) & 0xff } } return message } const stringToUTF8Array=(message)=> { if (typeof message !== 'string') return message; // Assuming you still want to pass through non-string inputs unchanged const encoder = new TextEncoder(); // TextEncoder defaults to UTF-8 return encoder.encode(message); } const computekdf = async (req)=> { const { salt, key, nonce, staticSalt, staticBcryptSalt } = req const combinedBytes = utils.appendBuffer(new Uint8Array([]), stringToUTF8Array(`${staticSalt}${key}${nonce}`)) const sha512Hash = new Sha512().process(combinedBytes).finish().result const sha512HashBase64 = bytesToBase64(sha512Hash) const result = bcrypt.hashSync(sha512HashBase64.substring(0, 72), staticBcryptSalt) return { key, nonce, result } } export const doInitWorkers = (numberOfWorkers) => { const workers = [] try { for (let i = 0; i < numberOfWorkers; i++) { workers.push({}) } } catch (e) { } return workers } export const kdf = async (seed, salt, threads) => { const workers = threads const salt2 = new Uint8Array(salt) salt = new Uint8Array(salt) const seedParts = await Promise.all(workers.map((worker, index) => { const nonce = index return computekdf({ key: seed, salt, nonce, staticSalt: crypto.staticSalt, staticBcryptSalt: crypto.staticBcryptSalt }).then(data => { let jsonData try { jsonData = JSON.parse(data) data = jsonData } catch (e) { // ... } // if (seed !== data.key) throw new Error(kst3 + seed + ' !== ' + data.key) // if (nonce !== data.nonce) throw new Error(kst4) return data.result }) })) const result = new Sha512().process(stringtoUTF8Array(crypto.staticSalt + seedParts.reduce((a, c) => a + c))).finish().result return result }