import { describe, it, expect } from "vitest"; import { verifyPersonalSignEIP191 } from "../eth"; import { type SignatureProof, CAIP10, ProofStatus, ProofTypes, } from "@notabene/javascript-sdk"; import { Hex, Address, PersonalMessage, Secp256k1, Signature } from "ox"; const privateKey = Secp256k1.randomPrivateKey(); const address = Address.checksum( Address.fromPublicKey(Secp256k1.getPublicKey({ privateKey })), ); function personalSign(): SignatureProof { const attestation = "I agree"; const payload = PersonalMessage.getSignPayload(Hex.fromString(attestation)); const proof = Signature.toHex(Secp256k1.sign({ payload, privateKey })); return { type: ProofTypes.EIP191, address: `eip155:1:${address}`, did: `did:pkh:eip155:1:${address}`, attestation, proof, status: ProofStatus.PENDING, wallet_provider: "MetaMask", }; } describe("verifyPersonalSignEIP191", () => { it("returns verified proof when valid message and address", async () => { const proof = personalSign(); const result = await verifyPersonalSignEIP191(proof); expect(result.status).toBe(ProofStatus.VERIFIED); }); it("returns verified proof even when address is not the correct case", async () => { const proof = personalSign(); const result = await verifyPersonalSignEIP191({ ...proof, address: proof.address.toLowerCase() as CAIP10, }); expect(result.status).toBe(ProofStatus.VERIFIED); }); it("returns failed proof when invalid message or address", async () => { const proof = { ...personalSign(), attestation: "evil text" }; const result = await verifyPersonalSignEIP191(proof); expect(result.status).toBe(ProofStatus.FAILED); }); it("returns failed proof for non-EIP155 address", async () => { const proof: SignatureProof = { type: ProofTypes.EIP191, did: `did:pkh:bip122:000000000019d6689c085ae165831e93:128Lkh3S7CkDTBZ8W7BbpsN3YYizJMp8p6`, wallet_provider: "metamask", address: "bip122:000000000019d6689c085ae165831e93:128Lkh3S7CkDTBZ8W7BbpsN3YYizJMp8p6", attestation: "test message", proof: "0xabcd", status: ProofStatus.PENDING, }; const result = await verifyPersonalSignEIP191(proof); expect(result.status).toBe(ProofStatus.FAILED); }); });