Module: Bitcoin::MessageSign
- Defined in:
- lib/bitcoin/message_sign.rb
Defined Under Namespace
Classes: Error
Class Method Summary collapse
-
.message_hash(message, prefix: Bitcoin.chain_params.message_magic) ⇒ Object
Hashes a message for signing and verification.
-
.sign_message(key, message, prefix: Bitcoin.chain_params.message_magic) ⇒ String
Sign a message.
-
.verify_message(address, signature, message, prefix: Bitcoin.chain_params.message_magic) ⇒ Boolean
Verify a signed message.
Class Method Details
.message_hash(message, prefix: Bitcoin.chain_params.message_magic) ⇒ Object
Hashes a message for signing and verification.
35 36 37 |
# File 'lib/bitcoin/message_sign.rb', line 35 def (, prefix: Bitcoin.chain_params.) Bitcoin.double_sha256(Bitcoin.pack_var_string(prefix) << Bitcoin.pack_var_string()) end |
.sign_message(key, message, prefix: Bitcoin.chain_params.message_magic) ⇒ String
Sign a message.
13 14 15 16 17 |
# File 'lib/bitcoin/message_sign.rb', line 13 def (key, , prefix: Bitcoin.chain_params.) digest = (, prefix: prefix) compact_sig = key.sign_compact(digest) Base64.strict_encode64(compact_sig) end |
.verify_message(address, signature, message, prefix: Bitcoin.chain_params.message_magic) ⇒ Boolean
Verify a signed message.
24 25 26 27 28 29 30 31 32 |
# File 'lib/bitcoin/message_sign.rb', line 24 def (address, signature, , prefix: Bitcoin.chain_params.) validate_address!(address) sig = Base64.decode64(signature) raise ArgumentError, 'Invalid signature length' unless sig.bytesize == Bitcoin::Key::COMPACT_SIGNATURE_SIZE digest = (, prefix: prefix) pubkey = Bitcoin::Key.recover_compact(digest, sig) return false unless pubkey pubkey.to_p2pkh == address end |