bitcoin-cigs 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/bin/bitcoin-cigs +52 -0
- data/bitcoin-cigs.gemspec +2 -1
- data/lib/bitcoin_cigs.rb +4 -3
- data/lib/bitcoin_cigs/version.rb +1 -1
- data/spec/bitcoin_cigs_spec.rb +3 -5
- metadata +5 -3
data/Gemfile.lock
CHANGED
data/bin/bitcoin-cigs
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'bitcoin-cigs'
|
5
|
+
|
6
|
+
@options = {}
|
7
|
+
|
8
|
+
opt_parser = OptionParser.new do |opt|
|
9
|
+
opt.banner = "Usage: bitcoin-cigs command [arguments ...] [options ...]"
|
10
|
+
opt.separator ""
|
11
|
+
opt.separator "Commands"
|
12
|
+
opt.separator " verify bitcoin-address signature [message-file]"
|
13
|
+
opt.separator " sign private-key [message-file]"
|
14
|
+
opt.separator ""
|
15
|
+
opt.separator "Options"
|
16
|
+
opt.on("-m", "--message MESSAGE", "Message can also be read from STDIN") do |message|
|
17
|
+
@options[:message] = message
|
18
|
+
end
|
19
|
+
opt.on("-S", "--no-strip", "Do not strip leading and trailing whitespace from message (stripped by default)") do
|
20
|
+
@options[:no_strip] = true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
opt_parser.parse!
|
25
|
+
|
26
|
+
def message
|
27
|
+
message = @options[:message] || ARGF.read
|
28
|
+
message.strip! unless @options[:no_strip]
|
29
|
+
|
30
|
+
message
|
31
|
+
end
|
32
|
+
|
33
|
+
begin
|
34
|
+
case ARGV.shift
|
35
|
+
when "verify"
|
36
|
+
address = ARGV.shift or raise ArgumentError
|
37
|
+
signature = ARGV.shift or raise ArgumentError
|
38
|
+
::BitcoinCigs.verify_message!(address, signature, message)
|
39
|
+
when "sign"
|
40
|
+
private_key = ARGV.shift or raise ArgumentError
|
41
|
+
puts ::BitcoinCigs.sign_message!(private_key, message)
|
42
|
+
else
|
43
|
+
raise ArgumentError
|
44
|
+
end
|
45
|
+
exit 0
|
46
|
+
rescue ::BitcoinCigs::Error => e
|
47
|
+
puts "Error: #{e}"
|
48
|
+
exit 2
|
49
|
+
rescue ArgumentError
|
50
|
+
puts opt_parser
|
51
|
+
exit 1
|
52
|
+
end
|
data/bitcoin-cigs.gemspec
CHANGED
@@ -15,8 +15,9 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.rubyforge_project = "bitcoin-cigs"
|
16
16
|
|
17
17
|
s.files = `git ls-files`.split("\n")
|
18
|
-
s.test_files
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.require_paths = ["lib"]
|
20
|
+
s.executables = ['bitcoin-cigs']
|
20
21
|
|
21
22
|
s.add_development_dependency 'rspec', '~> 2.13.0'
|
22
23
|
s.add_development_dependency 'rake', '~> 10.0.4'
|
data/lib/bitcoin_cigs.rb
CHANGED
@@ -45,13 +45,14 @@ module BitcoinCigs
|
|
45
45
|
order = g.order
|
46
46
|
|
47
47
|
sig = decode64(signature)
|
48
|
-
raise ::BitcoinCigs::Error.new("Bad signature") if sig.size != 65
|
48
|
+
raise ::BitcoinCigs::Error.new("Bad signature length") if sig.size != 65
|
49
|
+
raise ::BitcoinCigs::Error.new("Bad characters in signature") if signature != encode64(sig)
|
49
50
|
|
50
51
|
hb = sig[0].ord
|
51
52
|
r, s = [sig[1...33], sig[33...65]].collect { |s| str_to_num(s) }
|
52
53
|
|
53
54
|
|
54
|
-
raise ::BitcoinCigs::Error.new("Bad first byte") if hb < 27 || hb >= 35
|
55
|
+
raise ::BitcoinCigs::Error.new("Bad signature first byte") if hb < 27 || hb >= 35
|
55
56
|
|
56
57
|
compressed = false
|
57
58
|
if hb >= 31
|
@@ -79,7 +80,7 @@ module BitcoinCigs
|
|
79
80
|
|
80
81
|
public_key = ::BitcoinCigs::PublicKey.new(g, q, compressed)
|
81
82
|
addr = public_key_to_bc_address(public_key.ser(), network_version)
|
82
|
-
raise ::BitcoinCigs::Error.new("
|
83
|
+
raise ::BitcoinCigs::Error.new("Incorrect address or message for signature.") if address != addr
|
83
84
|
|
84
85
|
nil
|
85
86
|
end
|
data/lib/bitcoin_cigs/version.rb
CHANGED
data/spec/bitcoin_cigs_spec.rb
CHANGED
@@ -103,8 +103,7 @@ describe BitcoinCigs do
|
|
103
103
|
let(:address) { "invalid" }
|
104
104
|
|
105
105
|
it "raises ::BitcoinCigs::Error" do
|
106
|
-
|
107
|
-
expect { subject }.to raise_error(::BitcoinCigs::Error, "Bad address. Signing: #{original_address}, Received: #{address}")
|
106
|
+
expect { subject }.to raise_error(::BitcoinCigs::Error, "Incorrect address or message for signature.")
|
108
107
|
end
|
109
108
|
end
|
110
109
|
|
@@ -112,7 +111,7 @@ describe BitcoinCigs do
|
|
112
111
|
let(:signature) { "invalid" }
|
113
112
|
|
114
113
|
it "raises ::BitcoinCigs::Error" do
|
115
|
-
expect { subject }.to raise_error(::BitcoinCigs::Error, "Bad signature")
|
114
|
+
expect { subject }.to raise_error(::BitcoinCigs::Error, "Bad signature length")
|
116
115
|
end
|
117
116
|
end
|
118
117
|
|
@@ -120,8 +119,7 @@ describe BitcoinCigs do
|
|
120
119
|
let(:message) { "invalid" }
|
121
120
|
|
122
121
|
it "raises ::BitcoinCigs::Error" do
|
123
|
-
|
124
|
-
expect { subject }.to raise_error(::BitcoinCigs::Error, "Bad address. Signing: 1Es3JV8zYTMtbg7rPMizYZYPc8rcvsJ21m, Received: #{address}")
|
122
|
+
expect { subject }.to raise_error(::BitcoinCigs::Error, "Incorrect address or message for signature.")
|
125
123
|
end
|
126
124
|
end
|
127
125
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bitcoin-cigs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -46,7 +46,8 @@ dependencies:
|
|
46
46
|
description: Create and Verify Bitcoin Signatures.
|
47
47
|
email:
|
48
48
|
- michaelgpearce@yahoo.com
|
49
|
-
executables:
|
49
|
+
executables:
|
50
|
+
- bitcoin-cigs
|
50
51
|
extensions: []
|
51
52
|
extra_rdoc_files: []
|
52
53
|
files:
|
@@ -56,6 +57,7 @@ files:
|
|
56
57
|
- LICENSE.txt
|
57
58
|
- README.md
|
58
59
|
- Rakefile
|
60
|
+
- bin/bitcoin-cigs
|
59
61
|
- bitcoin-cigs.gemspec
|
60
62
|
- lib/bitcoin-cigs.rb
|
61
63
|
- lib/bitcoin_cigs.rb
|