Skip to content

Commit 29a0550

Browse files
committed
Add CLI argument parsing to sign-message.py example.
1 parent 2e4d51a commit 29a0550

File tree

1 file changed

+43
-12
lines changed

1 file changed

+43
-12
lines changed

examples/sign-message.py

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,50 @@
1616
from bitcoin.wallet import CBitcoinSecret, P2PKHBitcoinAddress
1717
from bitcoin.signmessage import BitcoinMessage, VerifyMessage, SignMessage
1818

19-
key = CBitcoinSecret("L4vB5fomsK8L95wQ7GFzvErYGht49JsCPJyJMHpB4xGM6xgi2jvG")
20-
address = P2PKHBitcoinAddress.from_pubkey(key.pub) # "1F26pNMrywyZJdr22jErtKcjF8R3Ttt55G"
21-
message = "Hey I just met you, and this is crazy, but I'll verify my address, maybe ..."
19+
def sign_message(key, msg):
20+
secret = CBitcoinSecret(key)
21+
message = BitcoinMessage(msg)
22+
return SignMessage(secret, message)
2223

23-
message = BitcoinMessage(message)
24+
def print_default(signature, key=None, msg=None):
25+
print(signature.decode('ascii'))
2426

25-
signature = SignMessage(key, message)
27+
def print_verbose(signature, key, msg):
28+
secret = CBitcoinSecret(key)
29+
address = P2PKHBitcoinAddress.from_pubkey(secret.pub)
30+
message = BitcoinMessage(msg)
31+
print('Address: %s' % address)
32+
print('Message: %s' % msg)
33+
print('Signature: %s' % signature)
34+
print('Verified: %s' % VerifyMessage(address, message, signature))
35+
print('\nTo verify using bitcoin core:')
36+
print('\n`bitcoin-cli verifymessage %s \'%s\' \'%s\'`\n' % (address, signature.decode('ascii'), msg))
2637

27-
print(key, address)
28-
print("Address: %s" % address)
29-
print("Message: %s" % message)
30-
print("\nSignature: %s" % signature)
31-
print("\nVerified: %s" % VerifyMessage(address, message, signature))
38+
def parser():
39+
import argparse
40+
parser = argparse.ArgumentParser(
41+
description='Sign a message with a private key.',
42+
epilog='Security warning: arguments may be visible to other users on the same host.')
43+
parser.add_argument(
44+
'-v', '--verbose', dest='print_result',
45+
action='store_const', const=print_verbose, default=print_default,
46+
help='verbose output')
47+
parser.add_argument(
48+
'-k', '--key',
49+
required=True,
50+
help='private key in base58 encoding')
51+
parser.add_argument(
52+
'-m', '--msg',
53+
required=True,
54+
help='message to sign')
55+
return parser
3256

33-
print("\nTo verify using bitcoin core;")
34-
print("`bitcoin-cli verifymessage %s \"%s\" \"%s\"`" % (address, signature.decode('ascii'), message))
57+
if __name__ == '__main__':
58+
args = parser().parse_args()
59+
try:
60+
signature = sign_message(args.key, args.msg)
61+
except Exception as error:
62+
print('%s: %s' % (error.__class__.__name__, str(error)))
63+
exit(1)
64+
else:
65+
args.print_result(signature, args.key, args.msg)

0 commit comments

Comments
 (0)