import RIPEMD160 from '../deps/ripemd160.js' import BROKEN_RIPEMD160 from '../deps/broken-ripemd160.js' import { Sha256 } from 'asmcrypto.js' import utils from '../deps/utils.js' import Base58 from '../deps/Base58.js' import { Buffer } from 'buffer' import { ADDRESS_VERSION } from '../constants.js' const repeatSHA256 = (passphrase, hashes) => { let hash = passphrase for (let i = 0; i < hashes; i++) { hash = new Sha256().process(hash).finish().result } return hash } const publicKeyToAddress = (publicKey, qora = false) => { const publicKeySha256 = new Sha256().process(publicKey).finish().result const _publicKeyHash = qora ? new BROKEN_RIPEMD160().digest(publicKeySha256) : new RIPEMD160().update(Buffer.from(publicKeySha256)).digest('hex') const publicKeyHash = qora ? _publicKeyHash : _publicKeyHash let address = new Uint8Array() address = utils.appendBuffer(address, [ADDRESS_VERSION]) address = utils.appendBuffer(address, publicKeyHash) const checkSum = repeatSHA256(address, 2) address = utils.appendBuffer(address, checkSum.subarray(0, 4)) address = Base58.encode(address) return address } export default publicKeyToAddress