zold 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f0b9d4b798dc11ecf4b3b470b46f7ef8036f5468
4
- data.tar.gz: 7870c6ccbc732c981849fd5efb49c517dfb3cc18
3
+ metadata.gz: 2c5ceb71c345cd90ff80e00029ac5a6d265c3bf3
4
+ data.tar.gz: 318ed11fd7706413ccb09eb014dcd0d776b832bc
5
5
  SHA512:
6
- metadata.gz: 1812d627031af500210ebdfb18094ca91a90031e7dc587555d9c519fd823ed5eba7e7d58695f0fdc74dc4a7bef612f4b0ea569532a60f20916e149cb34822a70
7
- data.tar.gz: f5425fa8b4b6d36c4b903c047c8093edde27bd6f71ee59616adef18fe9533c2133401c24d865ea7b52d6f5159e9c9f3b7ccc213256d4fad32dc00127b7094372
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
@@ -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
- def sign(pvt, id, t)
35
- pvt.sign(body(id, t))
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
- def valid?(pub, id, t)
39
- pub.verify(t.sign, body(id, t))
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
@@ -23,5 +23,5 @@
23
23
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
24
24
  # License:: MIT
25
25
  module Zold
26
- VERSION = '0.9.4'.freeze
26
+ VERSION = '0.9.5'.freeze
27
27
  end
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
- id = max + 1
101
+ tid = max + 1
102
102
  raise 'Too many transactions already, can\'t add more' if max > 0xffff
103
103
  txn = Txn.new(
104
- id,
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, self)
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
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