]> git.ardis.lu - alu.bz/commitdiff
Use encodedMessage length in ERC-191 prefix
authorArdis Lu <ardisglu@gmail.com>
Fri, 6 Dec 2024 05:17:17 +0000 (21:17 -0800)
committerArdis Lu <ardisglu@gmail.com>
Fri, 6 Dec 2024 05:17:17 +0000 (21:17 -0800)
encodedMessage.length !== message.length when fullUrl is a contains grapheme cluster that are UTF-8 encoded in more than 1 byte (e.g., emojis).

functions/api.js

index 6ff41f8fad78ff9e2a2372ceb53e5ab4397d47ec..b2bd65ca6b1f73853dd6fa64a841f61a4a59f764 100644 (file)
@@ -72,7 +72,8 @@ export async function onRequestPost({ request, env }) {
       return new Response('The short URL is too long (maximum length is 80 characters).', { status: 400, headers: { 'Content-Type': 'text/plain; charset=UTF-8' } });
     }
     const message = `Sign this message to confirm you want to create https://alu.bz/${shortUrl} to redirect to ${fullUrl}.`; // Must match frontend exactly
-    const personalMessage = `\x19Ethereum Signed Message:\n${message.length}${message}`; // ERC-191
+    const encodedMessage = new TextEncoder().encode(message);
+    const personalMessage = `\x19Ethereum Signed Message:\n${encodedMessage.length}${message}`; // ERC-191
     const personalMessageHash = keccak256(new TextEncoder().encode(personalMessage));
     const signatureObj = Signature.fromCompact(signature.substring(2, 130)).addRecoveryBit(signature.slice(-2) === '1b' ? 0 : 1);
     const signingPublicKey = signatureObj.recoverPublicKey(personalMessageHash);
This page took 0.038359 seconds and 4 git commands to generate.