bitcoin-cigs 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bitcoin-cigs (0.0.6)
4
+ bitcoin-cigs (0.0.7)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -1,4 +1,4 @@
1
- %w(error crypto_helper base_58 curve_fp point public_key private_key signature ec_key).each do |f|
1
+ %w(error crypto_helper compact_int base_58 curve_fp point public_key private_key signature ec_key).each do |f|
2
2
  require File.join(File.dirname(__FILE__), 'bitcoin_cigs', f)
3
3
  end
4
4
 
@@ -115,7 +115,7 @@ module BitcoinCigs
115
115
  def sign_message!(wallet_key, message, options = {:network => :mainnet})
116
116
  private_key = convert_wallet_format_to_bytes!(wallet_key, options[:network])
117
117
 
118
- msg_hash = sha256(sha256(format_msg_to_sign(message)))
118
+ msg_hash = sha256(sha256(format_message_to_sign(message)))
119
119
 
120
120
  ec_key = ::BitcoinCigs::EcKey.new(str_to_num(private_key))
121
121
  private_key = ec_key.private_key
@@ -162,8 +162,8 @@ module BitcoinCigs
162
162
 
163
163
  private
164
164
 
165
- def format_msg_to_sign(message)
166
- return "\x18Bitcoin Signed Message:\n#{message.size.chr}#{message}"
165
+ def format_message_to_sign(message)
166
+ "\x18Bitcoin Signed Message:\n#{::BitcoinCigs::CompactInt.new(message.size).encode}#{message}"
167
167
  end
168
168
 
169
169
  def random_k
@@ -256,10 +256,6 @@ module BitcoinCigs
256
256
  sha256(sha256(d))
257
257
  end
258
258
 
259
- def format_message_to_sign(message)
260
- "\x18Bitcoin Signed Message:\n#{message.length.chr}#{message}"
261
- end
262
-
263
259
  def public_key_to_bc_address(public_key, network_version)
264
260
  h160 = hash_160(public_key)
265
261
 
@@ -0,0 +1,33 @@
1
+ module BitcoinCigs
2
+ class CompactInt
3
+
4
+ def initialize(value)
5
+ @value = value
6
+ end
7
+
8
+ def encode()
9
+ arr = if @value < 253
10
+ [@value]
11
+ elsif @value < (1 << 16)
12
+ [253, *number_to_bytes(@value, 2)]
13
+ elsif value < (1 << 32)
14
+ [254, *number_to_bytes(@value, 4)]
15
+ else
16
+ [255, *number_to_bytes(@value, 8)]
17
+ end
18
+
19
+ arr.pack('C*')
20
+ end
21
+
22
+ private
23
+
24
+ def number_to_bytes(number, size)
25
+ result = []
26
+ size.times do |n|
27
+ result << ((number >> (8 * n)) & 255)
28
+ end
29
+
30
+ result
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,3 @@
1
1
  module BitcoinCigs
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -23,12 +23,21 @@ describe BitcoinCigs do
23
23
  let(:message) { "this is a message" }
24
24
 
25
25
  describe "sign_message!" do
26
- subject { BitcoinCigs.sign_message!(wallet_key, message, :network => network) }
26
+ subject { BitcoinCigs.sign_message!(wallet_key, message, :network => network).tap {|m| puts m} }
27
27
 
28
28
  context "with valid data" do
29
29
  it "generates the correct signature" do
30
30
  expect(BitcoinCigs.verify_message(address, subject, message, :network => network)).to be_true
31
31
  end
32
+
33
+ context "with a message > 252 characters" do
34
+ let(:message) { "a" * 253 }
35
+
36
+ it "generates the correct signature" do
37
+ expect(BitcoinCigs.verify_message(address, subject, message, :network => network)).to be_true
38
+ end
39
+
40
+ end
32
41
  end
33
42
 
34
43
  context "invalid wallet key" do
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.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-02 00:00:00.000000000 Z
12
+ date: 2014-08-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70337710906420 !ruby/object:Gem::Requirement
16
+ requirement: &70234363200340 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.13.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70337710906420
24
+ version_requirements: *70234363200340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70337710905920 !ruby/object:Gem::Requirement
27
+ requirement: &70234363199100 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 10.0.4
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70337710905920
35
+ version_requirements: *70234363199100
36
36
  description: Create and Verify Bitcoin Signatures.
37
37
  email:
38
38
  - michaelgpearce@yahoo.com
@@ -52,6 +52,7 @@ files:
52
52
  - lib/bitcoin-cigs.rb
53
53
  - lib/bitcoin_cigs.rb
54
54
  - lib/bitcoin_cigs/base_58.rb
55
+ - lib/bitcoin_cigs/compact_int.rb
55
56
  - lib/bitcoin_cigs/crypto_helper.rb
56
57
  - lib/bitcoin_cigs/curve_fp.rb
57
58
  - lib/bitcoin_cigs/ec_key.rb