import { ProofStatus, SignatureProof } from "@notabene/javascript-sdk"; import { Secp256k1, Hex, PersonalMessage, Signature, Address } from "ox"; export function verifyEIP191( address: Hex.Hex, message: string, proof: Hex.Hex, ): boolean { try { const payload = PersonalMessage.getSignPayload(Hex.fromString(message)); const signature = Signature.fromHex(proof); const publicKey = Secp256k1.recoverPublicKey({ payload, signature }); const recovered = Address.checksum(Address.fromPublicKey(publicKey)); return recovered.toString() === Address.checksum(address); // eslint-disable-next-line @typescript-eslint/no-unused-vars } catch (error) { return false; } } export async function verifyPersonalSignEIP191( proof: SignatureProof, ): Promise { const [ns, , address] = proof.address.split(/:/); if (ns !== "eip155") return { ...proof, status: ProofStatus.FAILED }; const verified = verifyEIP191( address as Hex.Hex, proof.attestation, proof.proof as Hex.Hex, ); return { ...proof, status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED, }; }