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