money-tree 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/lib/money-tree.rb +11 -0
- data/lib/money-tree/address.rb +15 -0
- data/lib/money-tree/key.rb +200 -0
- data/lib/money-tree/networks.rb +15 -0
- data/lib/money-tree/node.rb +232 -0
- data/lib/money-tree/support.rb +109 -0
- data/lib/money-tree/version.rb +3 -0
- data/money-tree.gemspec +25 -0
- data/spec/lib/money-tree/address_spec.rb +52 -0
- data/spec/lib/money-tree/node_spec.rb +542 -0
- data/spec/lib/money-tree/private_key_spec.rb +65 -0
- data/spec/lib/money-tree/public_key_spec.rb +48 -0
- data/spec/lib/money-tree/support_spec.rb +26 -0
- metadata +123 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'money-tree'
|
2
|
+
|
3
|
+
describe MoneyTree::PrivateKey do
|
4
|
+
before do
|
5
|
+
@key = MoneyTree::PrivateKey.new key: "5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b"
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "to_hex" do
|
9
|
+
it "has 64 characters" do
|
10
|
+
@key.to_hex.length.should == 64
|
11
|
+
end
|
12
|
+
|
13
|
+
it "is a valid hex" do
|
14
|
+
@key.to_hex.should == '5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "to_wif" do
|
19
|
+
it "is a 52 character base58 key" do
|
20
|
+
@key.to_wif.length.should == 52
|
21
|
+
end
|
22
|
+
|
23
|
+
it "starts with K or L" do
|
24
|
+
@key.to_wif[0].should == 'K'
|
25
|
+
end
|
26
|
+
|
27
|
+
it "is a valid compressed wif" do
|
28
|
+
@key.to_wif.should == 'KzPkwAXJ4wtXHnbamTaJqoMrzwCUUJaqhUxnqYhnZvZH6KhgmDPK'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "to_wif(compressed: false)" do
|
33
|
+
it "is a 51 character base58 key" do
|
34
|
+
@key.to_wif(compressed: false).length.should == 51
|
35
|
+
end
|
36
|
+
|
37
|
+
it "starts with 5" do
|
38
|
+
@key.to_wif(compressed: false)[0].should == '5'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "is valid" do
|
42
|
+
@key.to_wif(compressed: false).should == '5JXz5ZyFk31oHVTQxqce7yitCmTAPxBqeGQ4b7H3Aj3L45wUhoa'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "from_wif(wif)" do
|
47
|
+
it "returns the key from a wif" do
|
48
|
+
@key.from_wif("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ").should == '0c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d'
|
49
|
+
end
|
50
|
+
|
51
|
+
it "raises an error on bad checksum" do
|
52
|
+
lambda { @key.from_wif("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTBADTJ") }.should raise_error(MoneyTree::Key::InvalidWIFFormat)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "to_base64" do
|
57
|
+
it "has 44 characters" do
|
58
|
+
@key.to_base64.length.should == 44
|
59
|
+
end
|
60
|
+
|
61
|
+
it "is a valid base64" do
|
62
|
+
@key.to_base64.should == 'Xq5Tdftfeg6mUFZjY776KDDvRBvcsZGYrfMY+u6G1ks='
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'money-tree'
|
2
|
+
|
3
|
+
describe MoneyTree::PublicKey do
|
4
|
+
before do
|
5
|
+
@private_key = MoneyTree::PrivateKey.new key: "5eae5375fb5f7a0ea650566363befa2830ef441bdcb19198adf318faee86d64b"
|
6
|
+
@key = MoneyTree::PublicKey.new @private_key
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "to_hex(compressed: false)" do
|
10
|
+
it "has 65 bytes" do
|
11
|
+
@key.to_hex(compressed: false).length.should == 130
|
12
|
+
end
|
13
|
+
|
14
|
+
it "is a valid hex" do
|
15
|
+
@key.to_hex(compressed: false).should == '042dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b11203096f1a1c5276a73f91b9465357004c2103cc42c63d6d330df589080d2e4'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "to_hex" do
|
20
|
+
it "has 33 bytes" do
|
21
|
+
@key.to_hex.length.should == 66
|
22
|
+
end
|
23
|
+
|
24
|
+
it "is a valid compressed hex" do
|
25
|
+
@key.to_hex.should == '022dfc2557a007c93092c2915f11e8aa70c4f399a6753e2e908330014091580e4b'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "to_address(compressed: false)" do
|
30
|
+
it "has 34 characters" do
|
31
|
+
@key.to_address(compressed: false).length.should == 34
|
32
|
+
end
|
33
|
+
|
34
|
+
it "is a valid bitcoin address" do
|
35
|
+
@key.to_address(compressed: false).should == '133bJA2xoVqBUsiR3uSkciMo5r15fLAaZg'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "to_compressed_address" do
|
40
|
+
it "has 34 characters" do
|
41
|
+
@key.to_address.length.should == 34
|
42
|
+
end
|
43
|
+
|
44
|
+
it "is a valid compressed bitcoin address" do
|
45
|
+
@key.to_address.should == '13uVqa35BMo4mYq9LiZrXVzoz9EFZ6aoXe'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'money-tree'
|
2
|
+
include MoneyTree::Support
|
3
|
+
|
4
|
+
describe MoneyTree::Support do
|
5
|
+
|
6
|
+
describe "sha256(str)" do
|
7
|
+
it "properly calculates sha256 hash" do
|
8
|
+
sha256("abc", ascii: true).should == "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
|
9
|
+
sha256("800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d").should == "8147786c4d15106333bf278d71dadaf1079ef2d2440a4dde37d747ded5403592"
|
10
|
+
sha256("8147786c4d15106333bf278d71dadaf1079ef2d2440a4dde37d747ded5403592").should == "507a5b8dfed0fc6fe8801743720cedec06aa5c6fca72b07c49964492fb98a714"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "ripemd160(str)" do
|
15
|
+
it "properly calculates ripemd160 hash" do
|
16
|
+
ripemd160("abc", ascii: true).should == "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc"
|
17
|
+
ripemd160("e8026715af68676e0287ec9aa774f8103e4bddd5505b209263a8ff97c6ea29cc").should == "166db6510884918f31a9d246404760db8154bf84"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "hmac_sha512_hex(key, message)" do
|
22
|
+
it "properly calculates hmac sha512" do
|
23
|
+
hmac_sha512_hex("Jefe", "what do ya want for nothing?").should == "164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: money-tree
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Micah Winkelspecht
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-09-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: A Ruby Gem implementation of Bitcoin HD Wallets
|
70
|
+
email:
|
71
|
+
- winkelspecht@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- Gemfile
|
78
|
+
- LICENSE.txt
|
79
|
+
- README.md
|
80
|
+
- Rakefile
|
81
|
+
- lib/money-tree.rb
|
82
|
+
- lib/money-tree/address.rb
|
83
|
+
- lib/money-tree/key.rb
|
84
|
+
- lib/money-tree/networks.rb
|
85
|
+
- lib/money-tree/node.rb
|
86
|
+
- lib/money-tree/support.rb
|
87
|
+
- lib/money-tree/version.rb
|
88
|
+
- money-tree.gemspec
|
89
|
+
- spec/lib/money-tree/address_spec.rb
|
90
|
+
- spec/lib/money-tree/node_spec.rb
|
91
|
+
- spec/lib/money-tree/private_key_spec.rb
|
92
|
+
- spec/lib/money-tree/public_key_spec.rb
|
93
|
+
- spec/lib/money-tree/support_spec.rb
|
94
|
+
homepage: ''
|
95
|
+
licenses:
|
96
|
+
- MIT
|
97
|
+
metadata: {}
|
98
|
+
post_install_message:
|
99
|
+
rdoc_options: []
|
100
|
+
require_paths:
|
101
|
+
- lib
|
102
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - '>='
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
requirements: []
|
113
|
+
rubyforge_project:
|
114
|
+
rubygems_version: 2.0.6
|
115
|
+
signing_key:
|
116
|
+
specification_version: 4
|
117
|
+
summary: Bitcoin Hierarchical Deterministic Wallets in Ruby! (Bitcoin standard BIP0032)
|
118
|
+
test_files:
|
119
|
+
- spec/lib/money-tree/address_spec.rb
|
120
|
+
- spec/lib/money-tree/node_spec.rb
|
121
|
+
- spec/lib/money-tree/private_key_spec.rb
|
122
|
+
- spec/lib/money-tree/public_key_spec.rb
|
123
|
+
- spec/lib/money-tree/support_spec.rb
|