From bc4a56b2c02cdbd0138ac64c3ec5bdfd5d17ee89 Mon Sep 17 00:00:00 2001 From: Andrew Kozlik Date: Fri, 5 Nov 2021 18:00:35 +0100 Subject: [PATCH] feat(core): Support no_script_type option in SignMessage. --- core/.changelog.d/1586.added | 1 + core/src/apps/bitcoin/sign_message.py | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 core/.changelog.d/1586.added diff --git a/core/.changelog.d/1586.added b/core/.changelog.d/1586.added new file mode 100644 index 000000000..b740dbe15 --- /dev/null +++ b/core/.changelog.d/1586.added @@ -0,0 +1 @@ +Support no_script_type option in SignMessage. diff --git a/core/src/apps/bitcoin/sign_message.py b/core/src/apps/bitcoin/sign_message.py index 7dd2e0c5d..edd0ad128 100644 --- a/core/src/apps/bitcoin/sign_message.py +++ b/core/src/apps/bitcoin/sign_message.py @@ -36,12 +36,16 @@ async def sign_message( signature = secp256k1.sign(seckey, digest) if script_type == InputScriptType.SPENDADDRESS: - pass + script_type_info = 0 elif script_type == InputScriptType.SPENDP2SHWITNESS: - signature = bytes([signature[0] + 4]) + signature[1:] + script_type_info = 4 elif script_type == InputScriptType.SPENDWITNESS: - signature = bytes([signature[0] + 8]) + signature[1:] + script_type_info = 8 else: raise wire.ProcessError("Unsupported script type") + # Add script type information to the recovery byte. + if script_type_info != 0 and not msg.no_script_type: + signature = bytes([signature[0] + script_type_info]) + signature[1:] + return MessageSignature(address=address, signature=signature)