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 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