money-tree 0.8.8 → 0.8.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe MoneyTree::OpenSSLExtensions do
4
+ include MoneyTree::OpenSSLExtensions
5
+
6
+ context "with inputs" do
7
+ let(:key1) { OpenSSL::PKey::EC.new("secp256k1").generate_key }
8
+ let(:key2) { OpenSSL::PKey::EC.new("secp256k1").generate_key }
9
+ let(:point_1) { key1.public_key }
10
+ let(:point_2) { key2.public_key }
11
+ let(:point_infinity) { key1.public_key.set_to_infinity! }
12
+
13
+ it "requires valid points" do
14
+ expect { MoneyTree::OpenSSLExtensions.add(0, 0) }.to raise_error(ArgumentError)
15
+ expect { MoneyTree::OpenSSLExtensions.add(nil, nil) }.to raise_error(ArgumentError)
16
+ expect { MoneyTree::OpenSSLExtensions.add(point_1, 0) }.to raise_error(ArgumentError)
17
+ expect { MoneyTree::OpenSSLExtensions.add(0, point_2) }.to raise_error(ArgumentError)
18
+ expect { MoneyTree::OpenSSLExtensions.add(point_infinity, point_2) }.to raise_error(ArgumentError)
19
+ expect { MoneyTree::OpenSSLExtensions.add(point_1, point_2) }.to_not raise_error
20
+ end
21
+ end
22
+
23
+ end
@@ -8,91 +8,91 @@ describe MoneyTree::PrivateKey do
8
8
  describe "to_hex" do
9
9
  it "has 64 characters" do
10
10
  # must always be 64 characters - leading zeroes need to be preserved!
11
- @key.to_hex.length.should == 64
11
+ expect(@key.to_hex.length).to eql(64)
12
12
  end
13
13
 
14
14
  it "preserves leading zeros" do
15
15
  master = MoneyTree::Master.new seed_hex: "9cf6b6e8451c7d551cb402e2997566e5c7c258543eadb184f9f39322b2e6959b"
16
- master.node_for_path("m/427").private_key.to_hex.length.should == 64
16
+ expect(master.node_for_path("m/427").private_key.to_hex.length).to eql(64)
17
17
  end
18
18
 
19
19
  it "is a valid hex" do
20
- @key.to_hex.should == '5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b'
20
+ expect(@key.to_hex).to eql('5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b' )
21
21
  end
22
22
  end
23
23
 
24
24
  describe "to_wif" do
25
25
  it "is a 52 character base58 key" do
26
- @key.to_wif.length.should == 52
26
+ expect(@key.to_wif.length).to eql(52)
27
27
  end
28
28
 
29
29
  it "starts with K or L" do
30
- %w(K L).should include(@key.to_wif[0])
30
+ expect(%w(K L)).to include(@key.to_wif[0])
31
31
  end
32
32
 
33
33
  it "is a valid compressed wif" do
34
- @key.to_wif.should == 'KzPkwAXJ4wtXHnbamTaJqoMrzwCUUJaqhUxnqYhnZvZH6KhgmDPK'
34
+ expect(@key.to_wif).to eql('KzPkwAXJ4wtXHnbamTaJqoMrzwCUUJaqhUxnqYhnZvZH6KhgmDPK' )
35
35
  end
36
36
  end
37
37
 
38
38
  describe "to_wif(compressed: false)" do
39
39
  it "is a 51 character base58 key" do
40
- @key.to_wif(compressed: false).length.should == 51
40
+ expect(@key.to_wif(compressed: false).length).to eql(51)
41
41
  end
42
42
 
43
43
  it "starts with 5" do
44
- @key.to_wif(compressed: false)[0].should == '5'
44
+ expect(@key.to_wif(compressed: false)[0]).to eql('5')
45
45
  end
46
46
 
47
47
  it "is valid" do
48
- @key.to_wif(compressed: false).should == '5JXz5ZyFk31oHVTQxqce7yitCmTAPxBqeGQ4b7H3Aj3L45wUhoa'
48
+ expect(@key.to_wif(compressed: false)).to eql('5JXz5ZyFk31oHVTQxqce7yitCmTAPxBqeGQ4b7H3Aj3L45wUhoa' )
49
49
  end
50
50
  end
51
51
 
52
52
  describe "from_wif(wif)" do
53
53
  it "returns the key from a wif" do
54
- @key.from_wif("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ").should == '0c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d'
54
+ expect(@key.from_wif("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ")).to eql('0c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d')
55
55
  end
56
56
 
57
57
  it "raises an error on bad checksum" do
58
- lambda { @key.from_wif("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTBADTJ") }.should raise_error(MoneyTree::Key::InvalidWIFFormat)
58
+ expect { @key.from_wif("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTBADTJ") }.to raise_error(MoneyTree::Key::InvalidWIFFormat)
59
59
  end
60
60
  end
61
61
 
62
62
  describe "to_base64" do
63
63
  it "has 44 characters" do
64
- @key.to_base64.length.should == 44
64
+ expect(@key.to_base64.length).to eql(44)
65
65
  end
66
66
 
67
67
  it "is a valid base64" do
68
- @key.to_base64.should == 'Xq5Tdftfeg6mUFZjY776KDDvRBvcsZGYrfMY+u6G1ks='
68
+ expect(@key.to_base64).to eql('Xq5Tdftfeg6mUFZjY776KDDvRBvcsZGYrfMY+u6G1ks=' )
69
69
  end
70
70
  end
71
71
 
72
72
  describe "from_base64(base64_key)" do
73
73
  it "parses base64 key" do
74
74
  @key = MoneyTree::PrivateKey.new(key: "Xq5Tdftfeg6mUFZjY776KDDvRBvcsZGYrfMY+u6G1ks=")
75
- @key.to_hex.should == "5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b"
75
+ expect(@key.to_hex).to eql("5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b")
76
76
  end
77
77
 
78
78
  it "returns the key from base64 encoding" do
79
- @key.from_base64("Xq5Tdftfeg6mUFZjY776KDDvRBvcsZGYrfMY+u6G1ks=").should == '5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b'
79
+ expect(@key.from_base64("Xq5Tdftfeg6mUFZjY776KDDvRBvcsZGYrfMY+u6G1ks=")).to eql('5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b')
80
80
  end
81
81
 
82
82
  it "raises an error on bad encoding" do
83
- lambda { @key.from_base64("Xq5Tdftfeg6mUFZjY776KD&%#BbadBADrfMY+u6G1ks=") }.should raise_error(MoneyTree::Key::InvalidBase64Format)
83
+ expect { @key.from_base64("Xq5Tdftfeg6mUFZjY776KD&%#BbadBADrfMY+u6G1ks=") }.to raise_error(MoneyTree::Key::InvalidBase64Format)
84
84
  end
85
85
  end
86
86
 
87
87
  describe "valid?(eckey)" do
88
88
  it "checks for a valid key" do
89
- @key.valid?.should be_truthy
89
+ expect(@key.valid?).to be_truthy
90
90
  end
91
91
  end
92
92
 
93
93
  describe "parse_raw_key" do
94
94
  it "returns error if key is not Bignum, hex, base64, or wif formatted" do
95
- lambda { @key = MoneyTree::PrivateKey.new(key: "Thisisnotakey") }.should raise_error(MoneyTree::Key::KeyFormatNotFound)
95
+ expect { @key = MoneyTree::PrivateKey.new(key: "Thisisnotakey") }.to raise_error(MoneyTree::Key::KeyFormatNotFound)
96
96
 
97
97
  end
98
98
  end
@@ -104,7 +104,7 @@ describe MoneyTree::PrivateKey do
104
104
 
105
105
  describe "to_wif" do
106
106
  it "returns same wif" do
107
- @key.to_wif.should == 'cRhes8SBnsF6WizphaRKQKZZfDniDa9Bxcw31yKeEC1KDExhxFgD'
107
+ expect(@key.to_wif).to eql('cRhes8SBnsF6WizphaRKQKZZfDniDa9Bxcw31yKeEC1KDExhxFgD')
108
108
  end
109
109
  end
110
110
  end
@@ -10,47 +10,47 @@ describe MoneyTree::PublicKey do
10
10
 
11
11
  describe "to_hex(compressed: false)" do
12
12
  it "has 65 bytes" do
13
- @key.uncompressed.to_hex.length.should == 130
13
+ expect(@key.uncompressed.to_hex.length).to eql(130)
14
14
  end
15
15
 
16
16
  it "is a valid hex" do
17
- @key.uncompressed.to_hex.should == '042dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b11203096f1a1c5276a73f91b9465357004c2103cc42c63d6d330df589080d2e4'
17
+ expect(@key.uncompressed.to_hex).to eql('042dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b11203096f1a1c5276a73f91b9465357004c2103cc42c63d6d330df589080d2e4' )
18
18
  end
19
19
  end
20
20
 
21
21
  describe "to_hex" do
22
22
  it "has 33 bytes" do
23
- @key.to_hex.length.should == 66
23
+ expect(@key.to_hex.length).to eql(66)
24
24
  end
25
25
 
26
26
  it "is a valid compressed hex" do
27
- @key.to_hex.should == '022dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b'
27
+ expect(@key.to_hex).to eql('022dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b' )
28
28
  end
29
29
  end
30
30
 
31
31
  describe "to_fingerprint" do
32
32
  it "returns a valid fingerprint" do
33
- @key.to_fingerprint.should == "1fddf42e"
33
+ expect(@key.to_fingerprint).to eql("1fddf42e")
34
34
  end
35
35
  end
36
36
 
37
37
  describe "to_address(compressed: false)" do
38
38
  it "has 34 characters" do
39
- @key.uncompressed.to_address.length.should == 34
39
+ expect(@key.uncompressed.to_address.length).to eql(34)
40
40
  end
41
41
 
42
42
  it "is a valid bitcoin address" do
43
- @key.uncompressed.to_address.should == '133bJA2xoVqBUsiR3uSkciMo5r15fLAaZg'
43
+ expect(@key.uncompressed.to_address).to eql('133bJA2xoVqBUsiR3uSkciMo5r15fLAaZg' )
44
44
  end
45
45
  end
46
46
 
47
47
  describe "to_compressed_address" do
48
48
  it "has 34 characters" do
49
- @key.to_address.length.should == 34
49
+ expect(@key.to_address.length).to eql(34)
50
50
  end
51
51
 
52
52
  it "is a valid compressed bitcoin address" do
53
- @key.to_address.should == '13uVqa35BMo4mYq9LiZrXVzoz9EFZ6aoXe'
53
+ expect(@key.to_address).to eql('13uVqa35BMo4mYq9LiZrXVzoz9EFZ6aoXe' )
54
54
  end
55
55
  end
56
56
  end
@@ -62,63 +62,63 @@ describe MoneyTree::PublicKey do
62
62
 
63
63
  describe "to_hex(compressed: false)" do
64
64
  it "has 65 bytes" do
65
- @key.uncompressed.to_hex.length.should == 130
65
+ expect(@key.uncompressed.to_hex.length).to eql(130)
66
66
  end
67
67
 
68
68
  it "is a valid hex" do
69
- @key.uncompressed.to_hex.should == '042dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b11203096f1a1c5276a73f91b9465357004c2103cc42c63d6d330df589080d2e4'
69
+ expect(@key.uncompressed.to_hex).to eql('042dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b11203096f1a1c5276a73f91b9465357004c2103cc42c63d6d330df589080d2e4' )
70
70
  end
71
71
  end
72
72
 
73
73
  describe "to_hex" do
74
74
  it "has 33 bytes" do
75
- @key.compressed.to_hex.length.should == 66
75
+ expect(@key.compressed.to_hex.length).to eql(66)
76
76
  end
77
77
 
78
78
  it "is a valid compressed hex" do
79
- @key.compressed.to_hex.should == '022dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b'
79
+ expect(@key.compressed.to_hex).to eql('022dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b' )
80
80
  end
81
81
  end
82
82
 
83
83
  describe "to_fingerprint" do
84
84
  it "returns a valid fingerprint" do
85
- @key.compressed.to_fingerprint.should == "1fddf42e"
85
+ expect(@key.compressed.to_fingerprint).to eql("1fddf42e")
86
86
  end
87
87
  end
88
88
 
89
89
  describe "to_address(compressed: false)" do
90
90
  it "has 34 characters" do
91
- @key.uncompressed.to_address.length.should == 34
91
+ expect(@key.uncompressed.to_address.length).to eql(34)
92
92
  end
93
93
 
94
94
  it "is a valid bitcoin address" do
95
- @key.uncompressed.to_address.should == '133bJA2xoVqBUsiR3uSkciMo5r15fLAaZg'
95
+ expect(@key.uncompressed.to_address).to eql('133bJA2xoVqBUsiR3uSkciMo5r15fLAaZg' )
96
96
  end
97
97
  end
98
98
 
99
99
  describe "to_compressed_address" do
100
100
  it "has 34 characters" do
101
- @key.compressed.to_address.length.should == 34
101
+ expect(@key.compressed.to_address.length).to eql(34)
102
102
  end
103
103
 
104
104
  it "is a valid compressed bitcoin address" do
105
- @key.compressed.to_address.should == '13uVqa35BMo4mYq9LiZrXVzoz9EFZ6aoXe'
105
+ expect(@key.compressed.to_address).to eql('13uVqa35BMo4mYq9LiZrXVzoz9EFZ6aoXe' )
106
106
  end
107
107
  end
108
108
 
109
109
  describe "#compression" do
110
110
  it "returns current compression setting" do
111
111
  @key.compression = :uncompressed
112
- @key.compression.should == :uncompressed
112
+ expect(@key.compression).to eql(:uncompressed)
113
113
  @key.compression = :compressed
114
- @key.compression.should == :compressed
114
+ expect(@key.compression).to eql(:compressed)
115
115
  end
116
116
  end
117
117
  end
118
118
 
119
119
  describe "with a bad key" do
120
120
  it "raises KeyFormatNotFound" do
121
- lambda { @key = MoneyTree::PublicKey.new 'THISISNOTAVALIDKEY' }.should raise_error(MoneyTree::Key::KeyFormatNotFound)
121
+ expect { @key = MoneyTree::PublicKey.new 'THISISNOTAVALIDKEY' }.to raise_error(MoneyTree::Key::KeyFormatNotFound)
122
122
  end
123
123
  end
124
124
 
@@ -128,7 +128,7 @@ describe MoneyTree::PublicKey do
128
128
  100.times do
129
129
  results << MoneyTree::PublicKey.new('042dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b11203096f1a1c5276a73f91b9465357004c2103cc42c63d6d330df589080d2e4').to_s
130
130
  end
131
- results.uniq.length.should == 1
131
+ expect(results.uniq.length).to eql(1)
132
132
  end
133
133
  end
134
134
 
@@ -141,7 +141,7 @@ describe MoneyTree::PublicKey do
141
141
  before_str = @key.to_s
142
142
  @key.uncompressed
143
143
  after_str = @key.to_s
144
- before_str.should == after_str
144
+ expect(before_str).to eql(after_str)
145
145
  end
146
146
  end
147
147
 
@@ -154,7 +154,7 @@ describe MoneyTree::PublicKey do
154
154
  before_str = @key.to_s
155
155
  @key.compressed
156
156
  after_str = @key.to_s
157
- before_str.should == after_str
157
+ expect(before_str).to eql(after_str)
158
158
  end
159
159
  end
160
160
 
@@ -166,7 +166,11 @@ describe MoneyTree::PublicKey do
166
166
  end
167
167
 
168
168
  it "should have an address starting with m or n" do
169
- %w(m n).should include(@key.to_s[0])
169
+ expect(%w(m n)).to include(@key.to_s[0])
170
+ end
171
+
172
+ it "should have an uncompressed address starting with m or n" do
173
+ expect(%w(m n)).to include(@key.uncompressed.to_s[0])
170
174
  end
171
175
  end
172
176
 
@@ -176,7 +180,7 @@ describe MoneyTree::PublicKey do
176
180
  end
177
181
 
178
182
  it "should have an address starting with m or n" do
179
- %w(m n).should include(@key.to_s[0])
183
+ expect(%w(m n)).to include(@key.to_s[0])
180
184
  end
181
185
  end
182
186
  end
@@ -5,28 +5,28 @@ describe MoneyTree::Support do
5
5
 
6
6
  describe "sha256(str)" do
7
7
  it "properly calculates sha256 hash" do
8
- sha256("abc", ascii: true).should == "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
9
- sha256("800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d").should == "8147786c4d15106333bf278d71dadaf1079ef2d2440a4dde37d747ded5403592"
10
- sha256("8147786c4d15106333bf278d71dadaf1079ef2d2440a4dde37d747ded5403592").should == "507a5b8dfed0fc6fe8801743720cedec06aa5c6fca72b07c49964492fb98a714"
8
+ expect(sha256("abc", ascii: true)).to eql("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad")
9
+ expect(sha256("800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d")).to eql("8147786c4d15106333bf278d71dadaf1079ef2d2440a4dde37d747ded5403592")
10
+ expect(sha256("8147786c4d15106333bf278d71dadaf1079ef2d2440a4dde37d747ded5403592")).to eql("507a5b8dfed0fc6fe8801743720cedec06aa5c6fca72b07c49964492fb98a714")
11
11
  end
12
12
  end
13
13
 
14
14
  describe "ripemd160(str)" do
15
15
  it "properly calculates ripemd160 hash" do
16
- ripemd160("abc", ascii: true).should == "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc"
17
- ripemd160("e8026715af68676e0287ec9aa774f8103e4bddd5505b209263a8ff97c6ea29cc").should == "166db6510884918f31a9d246404760db8154bf84"
16
+ expect(ripemd160("abc", ascii: true)).to eql("8eb208f7e05d987a9b044a8e98c6b087f15a0bfc")
17
+ expect(ripemd160("e8026715af68676e0287ec9aa774f8103e4bddd5505b209263a8ff97c6ea29cc")).to eql("166db6510884918f31a9d246404760db8154bf84")
18
18
  end
19
19
  end
20
20
 
21
21
  describe "hmac_sha512_hex(key, message)" do
22
22
  it "properly calculates hmac sha512" do
23
- hmac_sha512_hex("Jefe", "what do ya want for nothing?").should == "164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737"
23
+ expect(hmac_sha512_hex("Jefe", "what do ya want for nothing?")).to eql("164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737")
24
24
  end
25
25
  end
26
26
 
27
27
  describe "hex_to_int" do
28
28
  it "converts hex to integer" do
29
- hex_to_int("abcdef0123456789").should == 12379813738877118345
29
+ expect(hex_to_int("abcdef0123456789")).to eql(12379813738877118345)
30
30
  end
31
31
  end
32
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: money-tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.8
4
+ version: 0.8.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Winkelspecht
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-04 00:00:00.000000000 Z
11
+ date: 2015-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -135,6 +135,7 @@ files:
135
135
  - money-tree.gemspec
136
136
  - spec/lib/money-tree/address_spec.rb
137
137
  - spec/lib/money-tree/node_spec.rb
138
+ - spec/lib/money-tree/openssl_extensions_spec.rb
138
139
  - spec/lib/money-tree/private_key_spec.rb
139
140
  - spec/lib/money-tree/public_key_spec.rb
140
141
  - spec/lib/money-tree/support_spec.rb
@@ -166,6 +167,7 @@ summary: Bitcoin Hierarchical Deterministic Wallets in Ruby! (Bitcoin standard B
166
167
  test_files:
167
168
  - spec/lib/money-tree/address_spec.rb
168
169
  - spec/lib/money-tree/node_spec.rb
170
+ - spec/lib/money-tree/openssl_extensions_spec.rb
169
171
  - spec/lib/money-tree/private_key_spec.rb
170
172
  - spec/lib/money-tree/public_key_spec.rb
171
173
  - spec/lib/money-tree/support_spec.rb