From 1e7cb8970fbafd3818bd6ae69e9a8ff14580e246 Mon Sep 17 00:00:00 2001 From: scgbckbone Date: Thu, 6 Feb 2025 09:00:30 +0100 Subject: [PATCH] msg sign: Sparrow QR compat (cherry picked from commit a2bdfc9a58917bf4345c4b39865406c1cae82998) --- releases/Next-ChangeLog.md | 1 + shared/auth.py | 13 +++++++++++++ shared/decoders.py | 4 ++++ 3 files changed, 18 insertions(+) diff --git a/releases/Next-ChangeLog.md b/releases/Next-ChangeLog.md index c33fb9e8..facf4fbd 100644 --- a/releases/Next-ChangeLog.md +++ b/releases/Next-ChangeLog.md @@ -52,6 +52,7 @@ This lists the new changes that have not yet been published in a normal release. - New Feature: Verify Signed RFC messages via BBQr - New Feature: Sign message from QR scan (format has to be JSON) +- Enhancement: Sign/Verify Address in Sparrow via QR - Enhancement: Sign scanned Simple Text by pressing (0). Next screens query information about key to use. - Bugfix: Properly re-draw status bar after Restore Master on COLDCARD without master seed. diff --git a/shared/auth.py b/shared/auth.py index 1a5e8063..bbea3421 100644 --- a/shared/auth.py +++ b/shared/auth.py @@ -305,6 +305,19 @@ def parse_msg_sign_request(data): subpath = "" addr_fmt = "p2pkh" is_json = False + + # sparrow compat + if "signmessage" in data: + try: + mark, subpath, *msg_line = data.split(" ", 2) + assert mark == "signmessage" + # subpath will be verified & cleaned later + assert msg_line[0][:6] == "ascii:" + text = msg_line[0][6:] + return text, subpath, addr_fmt, is_json + except: pass + # === + try: data_dict = ujson.loads(data.strip()) text = data_dict.get("msg", None) diff --git a/shared/decoders.py b/shared/decoders.py index 0002331b..13f8b212 100644 --- a/shared/decoders.py +++ b/shared/decoders.py @@ -169,6 +169,10 @@ def decode_qr_result(got, expect_secret=False, expect_text=False, expect_bbqr=Fa return "smsg", (got,) except: pass + # Sparrow compat + if "signmessage" in got: + return "smsg", (got,) + # try to recognize various bitcoin-related text strings... return decode_short_text(got)