Module: Bitcoin::Secp256k1::Native
- Extended by:
- Secp256k1
- Defined in:
- lib/bitcoin/secp256k1/native.rb
Overview
binding for secp256k1 (github.com/bitcoin-core/secp256k1/) tag: v0.4.0 this is not included by default, to enable set shared object path to ENV for linux, ENV = ‘/usr/local/lib/libsecp256k1.so’ or ‘/usr/lib64/libsecp256k1.so’ for mac,
Class Method Summary collapse
-
.generate_key(compressed: true) ⇒ Object
generate bitcoin key object.
-
.native? ⇒ Boolean
Whether this module is native c wrapper or not?.
-
.recover_compact(data, signature, compressed) ⇒ Bitcoin::Key
Recover public key from compact signature.
-
.sign_compact(data, privkey) ⇒ Array[signature, recovery id]
Sign data with compact format.
-
.sign_data(data, private_key, extra_entropy = nil, algo: :ecdsa) ⇒ String
Sign to data.
-
.verify_sig(data, signature, pubkey, algo: :ecdsa) ⇒ Boolean
Verify signature.
Class Method Details
.generate_key(compressed: true) ⇒ Object
generate bitcoin key object
26 27 28 29 |
# File 'lib/bitcoin/secp256k1/native.rb', line 26 def generate_key(compressed: true) privkey, pubkey = generate_key_pair(compressed: compressed) Bitcoin::Key.new(priv_key: privkey, pubkey: pubkey, compressed: compressed) end |
.native? ⇒ Boolean
Whether this module is native c wrapper or not?
21 22 23 |
# File 'lib/bitcoin/secp256k1/native.rb', line 21 def native? true end |
.recover_compact(data, signature, compressed) ⇒ Bitcoin::Key
Recover public key from compact signature.
45 46 47 48 |
# File 'lib/bitcoin/secp256k1/native.rb', line 45 def recover_compact(data, signature, compressed) pubkey = recover(data, signature, compressed) Bitcoin::Key.new(pubkey: pubkey, compressed: compressed) end |
.sign_compact(data, privkey) ⇒ Array[signature, recovery id]
Sign data with compact format.
35 36 37 38 |
# File 'lib/bitcoin/secp256k1/native.rb', line 35 def sign_compact(data, privkey) sig, rec_id = sign_recoverable(data, privkey) [ECDSA::Signature.new(sig[0...64].to_i(16), sig[64..-1].to_i(16)), rec_id] end |
.sign_data(data, private_key, extra_entropy = nil, algo: :ecdsa) ⇒ String
Sign to data.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/bitcoin/secp256k1/native.rb', line 57 def sign_data(data, private_key, extra_entropy = nil, algo: :ecdsa) case algo when :ecdsa begin sign_ecdsa(data, private_key, extra_entropy) rescue ArgumentError false end when :schnorr begin sign_schnorr(data, private_key, extra_entropy) rescue ArgumentError false end else raise ArgumentError, "unknown algo: #{algo}" end end |
.verify_sig(data, signature, pubkey, algo: :ecdsa) ⇒ Boolean
Verify signature.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/bitcoin/secp256k1/native.rb', line 83 def verify_sig(data, signature, pubkey, algo: :ecdsa) case algo when :ecdsa begin verify_ecdsa(data, signature, pubkey) rescue ArgumentError false end when :schnorr begin verify_schnorr(data, signature, pubkey) rescue ArgumentError false end else raise ArgumentError, "unknown algo: #{algo}" end end |