zold 0.9.4 → 0.9.5
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 +4 -4
- data/fixtures/id_rsa-2 +51 -0
- data/fixtures/id_rsa-2.pub +1 -0
- data/lib/zold/signature.rb +22 -5
- data/lib/zold/version.rb +1 -1
- data/lib/zold/wallet.rb +4 -3
- data/test/test_wallet.rb +11 -0
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2c5ceb71c345cd90ff80e00029ac5a6d265c3bf3
|
|
4
|
+
data.tar.gz: 318ed11fd7706413ccb09eb014dcd0d776b832bc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 20d3b4781583bc883c2390336dd6411f661545a71e97e3cfe6c2fa29053db2b9ce0867503416f614394f301ee4bf19ff4064f0b96a74328e141561070eb7c708
|
|
7
|
+
data.tar.gz: 66ae4c87859accbedb9fafff33f25673df8bb265e6c3407b21cae730937254841ec4b7588db97aeb3da901fa3e08275962d4e313df9b2e80a46df74a3276f119
|
data/fixtures/id_rsa-2
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
+
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
|
|
51
|
+
-----END RSA PRIVATE KEY-----
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDL9fiGWwnik7/ALYlCeyrpLYEWImSkd4Mtd8S8G7/G4/SJS/fVLI4Zx86vvXvyOto0yydxsp5+tBuDNmPZReeMXF9aSHsxzJmutXu6zzqbRcSYldcmJXDPlX7LTc4nJuhHRc21Za3HpcnmikFZMkLFMZueneRV/mhUVRO4HqBKKSCMVE0oTCwBpBC72LLoEuf8F8lYbwKB7HIxdpRzoT+kkike7nm5D/+72Nbo3mG4gJLr1rifkLcAV46VTxL3FZ5hAv0c28EcSbWHooMiMga5jQ2oN1uSk6YtBG0YPaaXJbWdEQryaGqahnODhtP2tvICJ8dKn+ZM8/CZc6HtcSKSJxcL0/MhRk4E7KKJphxMMhSlfoRHKruSS4qIpBEiOFG00RgTc7DxfI8q6N2w6tJPU60mfuVCz1O5ojb+BdxDZqYV97Dcx2lKvoPwpCoWzQ/fkoLa60HNUHfwX3KUVd1+CSnM0JsTbz452A3D/gA/xaVdOa0YN2TMTWWm5PZXogTcxMvFkVOVnRLJhKd2mVt7x/KXU7kOHIRHq9PnkNRhaxze1EdzeA/h9IAEarGcSivA6KCJ6ggRAZw4vBwRi7Fugz+J6DDVgbtNekF7UTkLg2yXEq5S/OHRpNVDgiEBgvNFgCDROSmUoUE8N7INU1S7rkWN1ecKS/TtWxkmXXKKRw== yegor@be.Dlink
|
data/lib/zold/signature.rb
CHANGED
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
19
|
# SOFTWARE.
|
|
20
20
|
|
|
21
|
-
require 'digest'
|
|
22
21
|
require_relative 'key'
|
|
23
22
|
require_relative 'id'
|
|
24
23
|
require_relative 'amount'
|
|
24
|
+
require_relative 'txn'
|
|
25
25
|
|
|
26
26
|
# The signature of a transaction.
|
|
27
27
|
#
|
|
@@ -31,16 +31,33 @@ require_relative 'amount'
|
|
|
31
31
|
module Zold
|
|
32
32
|
# A signature
|
|
33
33
|
class Signature
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
# Sign the trasnsaction and return the signature.
|
|
35
|
+
# +pvt+:: Private RSA key
|
|
36
|
+
# +id+:: Paying wallet ID
|
|
37
|
+
# +txn+:: The transaction
|
|
38
|
+
def sign(pvt, id, txn)
|
|
39
|
+
raise 'pvt must be of type Key' unless pvt.is_a?(Key)
|
|
40
|
+
raise 'id must be of type Id' unless id.is_a?(Id)
|
|
41
|
+
raise 'txn must be of type Txn' unless txn.is_a?(Txn)
|
|
42
|
+
pvt.sign(body(id, txn))
|
|
36
43
|
end
|
|
37
44
|
|
|
38
|
-
|
|
39
|
-
|
|
45
|
+
# The transaction is valid? Returns true if it is.
|
|
46
|
+
# +pub+:: Public key of the wallet
|
|
47
|
+
# +id+:: Paying wallet ID
|
|
48
|
+
# +txn+: Transaction to validate
|
|
49
|
+
def valid?(pub, id, txn)
|
|
50
|
+
raise 'pub must be of type Key' unless pub.is_a?(Key)
|
|
51
|
+
raise 'id must be of type Id' unless id.is_a?(Id)
|
|
52
|
+
raise 'txn must be of type Txn' unless txn.is_a?(Txn)
|
|
53
|
+
pub.verify(txn.sign, body(id, txn))
|
|
40
54
|
end
|
|
41
55
|
|
|
42
56
|
private
|
|
43
57
|
|
|
58
|
+
# Create the body for transaction signature.
|
|
59
|
+
# +id+:: The paying wallet ID
|
|
60
|
+
# +t+:: Transaction, instance of Txn
|
|
44
61
|
def body(id, t)
|
|
45
62
|
[id, t.id, t.date.utc.iso8601, t.amount.to_i, t.prefix, t.bnf, t.details].join(' ')
|
|
46
63
|
end
|
data/lib/zold/version.rb
CHANGED
data/lib/zold/wallet.rb
CHANGED
|
@@ -98,17 +98,18 @@ module Zold
|
|
|
98
98
|
raise "The amount can't be negative: #{amount}" if amount.negative?
|
|
99
99
|
raise 'The pvt has to be of type Key' unless pvt.is_a?(Key)
|
|
100
100
|
prefix, target = invoice.split('@')
|
|
101
|
-
|
|
101
|
+
tid = max + 1
|
|
102
102
|
raise 'Too many transactions already, can\'t add more' if max > 0xffff
|
|
103
103
|
txn = Txn.new(
|
|
104
|
-
|
|
104
|
+
tid,
|
|
105
105
|
Time.now,
|
|
106
106
|
amount * -1,
|
|
107
107
|
prefix,
|
|
108
108
|
Id.new(target),
|
|
109
109
|
details
|
|
110
110
|
)
|
|
111
|
-
txn = txn.signed(pvt,
|
|
111
|
+
txn = txn.signed(pvt, id)
|
|
112
|
+
raise 'This is not the private right key for this wallet' unless Signature.new.valid?(key, id, txn)
|
|
112
113
|
add(txn)
|
|
113
114
|
txn
|
|
114
115
|
end
|
data/test/test_wallet.rb
CHANGED
|
@@ -48,6 +48,17 @@ class TestWallet < Minitest::Test
|
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
+
def test_validate_key_on_payment
|
|
52
|
+
FakeHome.new.run do |home|
|
|
53
|
+
wallet = home.create_wallet
|
|
54
|
+
amount = Zold::Amount.new(zld: 39.99)
|
|
55
|
+
key = Zold::Key.new(file: 'fixtures/id_rsa-2')
|
|
56
|
+
assert_raises RuntimeError do
|
|
57
|
+
wallet.sub(amount, "NOPREFIX@#{Zold::Id.new}", key)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
51
62
|
def test_adds_transaction_and_reads_back
|
|
52
63
|
FakeHome.new.run do |home|
|
|
53
64
|
wallet = home.create_wallet
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: zold
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yegor Bugayenko
|
|
@@ -267,6 +267,8 @@ files:
|
|
|
267
267
|
- features/step_definitions/steps.rb
|
|
268
268
|
- features/support/env.rb
|
|
269
269
|
- fixtures/id_rsa
|
|
270
|
+
- fixtures/id_rsa-2
|
|
271
|
+
- fixtures/id_rsa-2.pub
|
|
270
272
|
- fixtures/id_rsa.pub
|
|
271
273
|
- fixtures/keys/1.pub
|
|
272
274
|
- fixtures/keys/2
|