money-tree 0.9.0 → 0.11.0

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.
@@ -1,5 +1,23 @@
1
1
  require 'spec_helper'
2
2
 
3
+ FIXED_KEY1 = <<-fixed_key
4
+ -----BEGIN EC PRIVATE KEY-----
5
+ MHQCAQEEIOvYaAN53KFhyLIElYFZCpm/Q2wq72Uu0kRcKeCDdlJVoAcGBSuBBAAK
6
+ oUQDQgAE4cdbt+NxMCBLg0cQYqo/UEwfzAONpz/n7ux+QrdKuH9NRulf9D4996x5
7
+ r7QBY+l5GJ+RgzLoXbFjPyPQtCV+/Q==
8
+ -----END EC PRIVATE KEY-----
9
+ fixed_key
10
+
11
+ FIXED_KEY2 = <<-fixed_key
12
+ -----BEGIN EC PRIVATE KEY-----
13
+ MHQCAQEEIP6nKLMEcH9R3hv695rCUl9OV+ueC9UX18F2PIH5wcFpoAcGBSuBBAAK
14
+ oUQDQgAErilvn3ms9cKHLNHHegiUU+NuW8c2f223vYInEV+s9ZNSGd28usAXZ6lN
15
+ O2zE534+k09fFe2skHtdoXbLJuZV8g==
16
+ -----END EC PRIVATE KEY-----
17
+ fixed_key
18
+
19
+ FIXED_SUM = "04F3C291542F410F61D61861D911F71ABD320A7B77ED571F92FEC533F61549BF218BAA47BD134847D89917F7483AFE20CCD9B1A4CBDFC443B389D1313B48E018F4"
20
+
3
21
  describe MoneyTree::OpenSSLExtensions do
4
22
  include MoneyTree::OpenSSLExtensions
5
23
 
@@ -8,8 +26,15 @@ describe MoneyTree::OpenSSLExtensions do
8
26
  let(:key2) { OpenSSL::PKey::EC.new("secp256k1").generate_key }
9
27
  let(:point_1) { key1.public_key }
10
28
  let(:point_2) { key2.public_key }
29
+
11
30
  let(:point_infinity) { key1.public_key.set_to_infinity! }
12
31
 
32
+ let(:fixed_key1) { OpenSSL::PKey::EC.new(FIXED_KEY1) }
33
+ let(:fixed_key2) { OpenSSL::PKey::EC.new(FIXED_KEY2) }
34
+ let(:fixed_point1) { fixed_key1.public_key }
35
+ let(:fixed_point2) { fixed_key2.public_key }
36
+ let(:fixed_sum_point) { OpenSSL::PKey::EC::Point.new(OpenSSL::PKey::EC::Group.new("secp256k1"), OpenSSL::BN.new(FIXED_SUM, 16)) }
37
+
13
38
  it "requires valid points" do
14
39
  expect { MoneyTree::OpenSSLExtensions.add(0, 0) }.to raise_error(ArgumentError)
15
40
  expect { MoneyTree::OpenSSLExtensions.add(nil, nil) }.to raise_error(ArgumentError)
@@ -17,7 +42,30 @@ describe MoneyTree::OpenSSLExtensions do
17
42
  expect { MoneyTree::OpenSSLExtensions.add(0, point_2) }.to raise_error(ArgumentError)
18
43
  expect { MoneyTree::OpenSSLExtensions.add(point_infinity, point_2) }.to raise_error(ArgumentError)
19
44
  expect { MoneyTree::OpenSSLExtensions.add(point_1, point_2) }.to_not raise_error
45
+ expect { MoneyTree::OpenSSLExtensions.validate_points(point_1) }.to_not raise_error
46
+ end
47
+
48
+ it "validates points correctly" do
49
+ expect { MoneyTree::OpenSSLExtensions.validate_points(point_1) }.to_not raise_error
50
+ expect { MoneyTree::OpenSSLExtensions.validate_points(point_2) }.to_not raise_error
51
+ expect { MoneyTree::OpenSSLExtensions.validate_points(point_infinity) }.to raise_error(ArgumentError)
52
+ end
53
+
54
+ it "should add points correctly" do
55
+ result = MoneyTree::OpenSSLExtensions.add(fixed_point1, fixed_point2)
56
+
57
+ expect(result).to eql(FIXED_SUM)
58
+
59
+ group = OpenSSL::PKey::EC::Group.new("secp256k1")
60
+ result_point = OpenSSL::PKey::EC::Point.new(group, OpenSSL::BN.new(result, 16))
61
+
62
+ expect(result_point).to eql(fixed_sum_point)
63
+ end
64
+
65
+ it 'should be able to create the same hex output for the point' do
66
+ hex_output = fixed_sum_point.to_bn.to_s(16)
67
+
68
+ expect(hex_output).to eq(FIXED_SUM)
20
69
  end
21
70
  end
22
-
23
71
  end
@@ -4,7 +4,7 @@ describe MoneyTree::PrivateKey do
4
4
  before do
5
5
  @key = MoneyTree::PrivateKey.new key: "5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b"
6
6
  end
7
-
7
+
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!
@@ -15,85 +15,95 @@ describe MoneyTree::PrivateKey do
15
15
  master = MoneyTree::Master.new seed_hex: "9cf6b6e8451c7d551cb402e2997566e5c7c258543eadb184f9f39322b2e6959b"
16
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
- expect(@key.to_hex).to eql('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
26
  expect(@key.to_wif.length).to eql(52)
27
27
  end
28
-
28
+
29
29
  it "starts with K or L" do
30
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
- expect(@key.to_wif).to eql('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
40
  expect(@key.to_wif(compressed: false).length).to eql(51)
41
41
  end
42
-
42
+
43
43
  it "starts with 5" do
44
44
  expect(@key.to_wif(compressed: false)[0]).to eql('5')
45
45
  end
46
-
46
+
47
47
  it "is valid" do
48
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
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
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
64
  expect(@key.to_base64.length).to eql(44)
65
65
  end
66
-
66
+
67
67
  it "is a valid base64" do
68
- expect(@key.to_base64).to eql('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
75
  expect(@key.to_hex).to eql("5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b")
76
76
  end
77
-
77
+
78
78
  it "returns the key from base64 encoding" do
79
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
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
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
95
  expect { @key = MoneyTree::PrivateKey.new(key: "Thisisnotakey") }.to raise_error(MoneyTree::Key::KeyFormatNotFound)
96
-
96
+ end
97
+
98
+ it "raises an error that can be caught using a standard exception block" do
99
+ exception_raised = false
100
+
101
+ begin
102
+ MoneyTree::PrivateKey.new(key: "Thisisnotakey")
103
+ rescue => ex
104
+ exception_raised = true
105
+ end
106
+ fail unless exception_raised
97
107
  end
98
108
  end
99
109
 
@@ -1,111 +1,111 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe MoneyTree::PublicKey do
4
-
4
+
5
5
  describe "with a private key" do
6
6
  before do
7
7
  @private_key = MoneyTree::PrivateKey.new key: "5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b"
8
8
  @key = MoneyTree::PublicKey.new @private_key
9
9
  end
10
-
10
+
11
11
  describe "to_hex(compressed: false)" do
12
12
  it "has 65 bytes" do
13
13
  expect(@key.uncompressed.to_hex.length).to eql(130)
14
14
  end
15
-
15
+
16
16
  it "is a valid hex" do
17
- expect(@key.uncompressed.to_hex).to eql('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
23
  expect(@key.to_hex.length).to eql(66)
24
24
  end
25
-
25
+
26
26
  it "is a valid compressed hex" do
27
- expect(@key.to_hex).to eql('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
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
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
- expect(@key.uncompressed.to_address).to eql('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
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
- expect(@key.to_address).to eql('13uVqa35BMo4mYq9LiZrXVzoz9EFZ6aoXe' )
53
+ expect(@key.to_address).to eql('13uVqa35BMo4mYq9LiZrXVzoz9EFZ6aoXe')
54
54
  end
55
55
  end
56
56
  end
57
-
57
+
58
58
  describe "without a private key" do
59
59
  before do
60
60
  @key = MoneyTree::PublicKey.new '042dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b11203096f1a1c5276a73f91b9465357004c2103cc42c63d6d330df589080d2e4'
61
61
  end
62
-
62
+
63
63
  describe "to_hex(compressed: false)" do
64
64
  it "has 65 bytes" do
65
65
  expect(@key.uncompressed.to_hex.length).to eql(130)
66
66
  end
67
-
67
+
68
68
  it "is a valid hex" do
69
- expect(@key.uncompressed.to_hex).to eql('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
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
- expect(@key.compressed.to_hex).to eql('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
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
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
- expect(@key.uncompressed.to_address).to eql('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
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
- expect(@key.compressed.to_address).to eql('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
@@ -115,7 +115,7 @@ describe MoneyTree::PublicKey do
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
121
  expect { @key = MoneyTree::PublicKey.new 'THISISNOTAVALIDKEY' }.to raise_error(MoneyTree::Key::KeyFormatNotFound)
@@ -125,7 +125,7 @@ describe MoneyTree::PublicKey do
125
125
  describe "recalcuating public key" do
126
126
  it "produces same results" do
127
127
  results = []
128
- 100.times do
128
+ 100.times do
129
129
  results << MoneyTree::PublicKey.new('042dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b11203096f1a1c5276a73f91b9465357004c2103cc42c63d6d330df589080d2e4').to_s
130
130
  end
131
131
  expect(results.uniq.length).to eql(1)
@@ -158,6 +158,18 @@ describe MoneyTree::PublicKey do
158
158
  end
159
159
  end
160
160
 
161
+ context "wobine's blackboard 101 series" do
162
+ # ref https://github.com/wobine/blackboard101/blob/e991ea0b98fd26059bf3806e5749b5e5f737e791/EllipticCurvesPart4-PrivateKeyToPublicKey.py
163
+ subject(:wobine) { MoneyTree::PrivateKey.new key: 'A0DC65FFCA799873CBEA0AC274015B9526505DAAAED385155425F7337704883E' }
164
+
165
+ it "always recovers wobine's public keys" do
166
+ expect(wobine.key).to eq 'a0dc65ffca799873cbea0ac274015b9526505daaaed385155425f7337704883e'
167
+ public_key = MoneyTree::PublicKey.new wobine
168
+ expect(public_key.key).to eq '020791dc70b75aa995213244ad3f4886d74d61ccd3ef658243fcad14c9ccee2b0a'
169
+ expect(public_key.uncompressed.to_hex).to eq '040791dc70b75aa995213244ad3f4886d74d61ccd3ef658243fcad14c9ccee2b0aa762fbc6ac0921b8f17025bb8458b92794ae87a133894d70d7995fc0b6b5ab90'
170
+ end
171
+ end
172
+
161
173
  context "testnet" do
162
174
  context 'with private key' do
163
175
  before do
@@ -10,20 +10,20 @@ describe MoneyTree::Support do
10
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
16
  expect(ripemd160("abc", ascii: true)).to eql("8eb208f7e05d987a9b044a8e98c6b087f15a0bfc")
17
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
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
29
  expect(hex_to_int("abcdef0123456789")).to eql(12379813738877118345)
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,2 @@
1
- require 'simplecov'
2
1
  require 'money-tree'
3
2
  require 'pry'
metadata CHANGED
@@ -1,150 +1,104 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: money-tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Winkelspecht
8
- autorequire:
8
+ - Afri Schoedon
9
+ autorequire:
9
10
  bindir: bin
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIDXDCCAkSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA6MQ8wDQYDVQQDDAZqdWxp
14
- YW4xEzARBgoJkiaJk/IsZAEZFgNnZW0xEjAQBgoJkiaJk/IsZAEZFgJjbzAeFw0x
15
- NTA0MDMwODAwMTdaFw0xNjA0MDIwODAwMTdaMDoxDzANBgNVBAMMBmp1bGlhbjET
16
- MBEGCgmSJomT8ixkARkWA2dlbTESMBAGCgmSJomT8ixkARkWAmNvMIIBIjANBgkq
17
- hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp0qCsOUQyTRA4f7WxoU2ctpUO5+eLZw8
18
- ILvHJy/0dC2nnIgib+FaFA8TRIGw6fjX2hQ43QJyO36zkjUhAwNu/+TBCfG+Grut
19
- 2dI9XmqU5Z6PvvXRj6Gu5IkDeIVDKILZv3bDugHJalre4BUKnwPYv5WpZ/e/c6+z
20
- E4fwe4ZQzqslSXZo0o/wFvs5dGuIoP93bazSeqddre0JKFFiEP/SNGP9e/lXEd2V
21
- rLFYAY409no9J+VQOHP0Nu9ShlCZp8M45abKd2ykuSDaT6jH9YcUHBr3/IEsA4+f
22
- DypeS1ySVvad+o8iTnfz1Hyohz4ORm3spf0BOtGI/Swbv3LObZJqkwIDAQABo20w
23
- azAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUERhBDW/kkq7tz2hN
24
- hPNHtounnkowGAYDVR0RBBEwD4ENanVsaWFuQGdlbS5jbzAYBgNVHRIEETAPgQ1q
25
- dWxpYW5AZ2VtLmNvMA0GCSqGSIb3DQEBBQUAA4IBAQAgnumhg8ST8JohYWcoDoQt
26
- 3BUG5rbfJ/qE0utOt6esi9d6Vz6YHpiT08woaj68OWl9U9N4vjox+ckkTRs93KBd
27
- y3thnK9cIEAzoEZs3BBguXYOoFLughGD7hEuLlRYbwZzyIdzx/XdLgsy5Di8Gqaa
28
- RKurfXP+dERQww34CUhmhOLO4/rYGqaD88so0MzCImgS+OX+G4ppqd38iQpaxCHL
29
- tdc4VS7IlSRxlZ3dBOgiigy9GXpJ+7F831AqjxL39EPwdr7RguTNz+pi//RKaT/U
30
- IlpVB+Xfk0vQdP7iYfjGxDzUf0FACMjsR95waJmadKW1Iy6STw2hwPhYIQz1Hu1A
31
- -----END CERTIFICATE-----
32
- date: 2015-05-19 00:00:00.000000000 Z
11
+ cert_chain: []
12
+ date: 2022-11-03 00:00:00.000000000 Z
33
13
  dependencies:
34
14
  - !ruby/object:Gem::Dependency
35
- name: ffi
15
+ name: openssl
36
16
  requirement: !ruby/object:Gem::Requirement
37
17
  requirements:
38
18
  - - ">="
39
19
  - !ruby/object:Gem::Version
40
- version: '0'
20
+ version: '2.2'
41
21
  type: :runtime
42
22
  prerelease: false
43
23
  version_requirements: !ruby/object:Gem::Requirement
44
24
  requirements:
45
25
  - - ">="
46
26
  - !ruby/object:Gem::Version
47
- version: '0'
27
+ version: '2.2'
48
28
  - !ruby/object:Gem::Dependency
49
29
  name: bundler
50
30
  requirement: !ruby/object:Gem::Requirement
51
31
  requirements:
52
32
  - - "~>"
53
33
  - !ruby/object:Gem::Version
54
- version: '1.3'
34
+ version: '2.2'
55
35
  type: :development
56
36
  prerelease: false
57
37
  version_requirements: !ruby/object:Gem::Requirement
58
38
  requirements:
59
39
  - - "~>"
60
40
  - !ruby/object:Gem::Version
61
- version: '1.3'
41
+ version: '2.2'
62
42
  - !ruby/object:Gem::Dependency
63
43
  name: rake
64
44
  requirement: !ruby/object:Gem::Requirement
65
45
  requirements:
66
- - - ">="
46
+ - - "~>"
67
47
  - !ruby/object:Gem::Version
68
- version: '0'
48
+ version: '13.0'
69
49
  type: :development
70
50
  prerelease: false
71
51
  version_requirements: !ruby/object:Gem::Requirement
72
52
  requirements:
73
- - - ">="
53
+ - - "~>"
74
54
  - !ruby/object:Gem::Version
75
- version: '0'
55
+ version: '13.0'
76
56
  - !ruby/object:Gem::Dependency
77
57
  name: rspec
78
58
  requirement: !ruby/object:Gem::Requirement
79
59
  requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- type: :development
84
- prerelease: false
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- - !ruby/object:Gem::Dependency
91
- name: simplecov
92
- requirement: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- type: :development
98
- prerelease: false
99
- version_requirements: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- - !ruby/object:Gem::Dependency
105
- name: coveralls
106
- requirement: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
60
+ - - "~>"
109
61
  - !ruby/object:Gem::Version
110
- version: '0'
62
+ version: '3.10'
111
63
  type: :development
112
64
  prerelease: false
113
65
  version_requirements: !ruby/object:Gem::Requirement
114
66
  requirements:
115
- - - ">="
67
+ - - "~>"
116
68
  - !ruby/object:Gem::Version
117
- version: '0'
69
+ version: '3.10'
118
70
  - !ruby/object:Gem::Dependency
119
71
  name: pry
120
72
  requirement: !ruby/object:Gem::Requirement
121
73
  requirements:
122
- - - ">="
74
+ - - "~>"
123
75
  - !ruby/object:Gem::Version
124
- version: '0'
76
+ version: '0.4'
125
77
  type: :development
126
78
  prerelease: false
127
79
  version_requirements: !ruby/object:Gem::Requirement
128
80
  requirements:
129
- - - ">="
81
+ - - "~>"
130
82
  - !ruby/object:Gem::Version
131
- version: '0'
83
+ version: '0.4'
132
84
  description: A Ruby Gem implementation of Bitcoin HD Wallets
133
85
  email:
134
86
  - winkelspecht@gmail.com
87
+ - gems@q9f.cc
135
88
  executables: []
136
89
  extensions: []
137
90
  extra_rdoc_files: []
138
91
  files:
92
+ - ".github/donation_btc_qr_code.gif"
93
+ - ".github/workflows/spec.yml"
139
94
  - ".gitignore"
140
95
  - ".rspec"
141
- - ".simplecov"
142
- - ".travis.yml"
143
96
  - Gemfile
144
97
  - LICENSE.txt
145
98
  - README.md
146
99
  - Rakefile
147
- - donation_btc_qr_code.gif
100
+ - certs/mattatgemco.pem
101
+ - checksum/money-tree-0.9.0.gem.sha512
148
102
  - lib/money-tree.rb
149
103
  - lib/money-tree/address.rb
150
104
  - lib/money-tree/key.rb
@@ -161,11 +115,11 @@ files:
161
115
  - spec/lib/money-tree/public_key_spec.rb
162
116
  - spec/lib/money-tree/support_spec.rb
163
117
  - spec/spec_helper.rb
164
- homepage: ''
118
+ homepage: https://github.com/gemhq/money-tree
165
119
  licenses:
166
120
  - MIT
167
121
  metadata: {}
168
- post_install_message:
122
+ post_install_message:
169
123
  rdoc_options: []
170
124
  require_paths:
171
125
  - lib
@@ -180,9 +134,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
134
  - !ruby/object:Gem::Version
181
135
  version: '0'
182
136
  requirements: []
183
- rubyforge_project:
184
- rubygems_version: 2.2.2
185
- signing_key:
137
+ rubygems_version: 3.3.23
138
+ signing_key:
186
139
  specification_version: 4
187
140
  summary: Bitcoin Hierarchical Deterministic Wallets in Ruby! (Bitcoin standard BIP0032)
188
141
  test_files:
checksums.yaml.gz.sig DELETED
Binary file
data/.simplecov DELETED
@@ -1,7 +0,0 @@
1
- require 'coveralls'
2
-
3
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
4
- SimpleCov::Formatter::HTMLFormatter,
5
- Coveralls::SimpleCov::Formatter
6
- ]
7
- SimpleCov.start
data/.travis.yml DELETED
@@ -1,3 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.0.0
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file