vchain_client 1.0.18 → 1.0.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vchain_client/signatures.rb +15 -2
- data/lib/vchain_client.rb +14 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10de221cf0aacee3a81893294d59c0130a9a15a2
|
4
|
+
data.tar.gz: 70d5234b7a43295a03cd48ef89d43613fd6710f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24db1ae389d4221c1ba41ca9fa591d8c4f4b343b210e092ac5defe17c00da6e71bf045fc63ee8a505611b2182fcef42a6364ae3bf213cf78e87f9af6726263c0
|
7
|
+
data.tar.gz: a4c9c63f6dca6323f45a80738d72145cc693b9fc9467f0516246de5d5349e9961dbf3cc9a490160f2df52cec45c0aa38408575ff0a798c08dfb1984ebf32af87
|
@@ -215,7 +215,7 @@ module VChainClient
|
|
215
215
|
end
|
216
216
|
end
|
217
217
|
|
218
|
-
def signDataPoint(point_type, data, doc_hash, weight, timestamp)
|
218
|
+
def signDataPoint(point_type, data, doc_hash, credentials_hash, weight, timestamp)
|
219
219
|
|
220
220
|
OpenSSL::PKey::EC.send(:alias_method, :private?, :private_key?)
|
221
221
|
|
@@ -226,6 +226,7 @@ module VChainClient
|
|
226
226
|
@log.debug("[Signatures.signDataPoint] input:")
|
227
227
|
@log.debug("-> this_client_id: #{this_client_id}")
|
228
228
|
@log.debug("-> doc_hash: #{doc_hash}")
|
229
|
+
@log.debug("-> credentials_hash: #{credentials_hash}")
|
229
230
|
@log.debug("-> weight: "+ weight.to_s)
|
230
231
|
@log.debug("-> timestamp: "+ timestamp.to_s)
|
231
232
|
@log.debug("-> point_type: #{point_type}")
|
@@ -246,6 +247,7 @@ module VChainClient
|
|
246
247
|
@log.error("#{e.class}, #{e.message}")
|
247
248
|
@log.error("-> this_client_id: #{this_client_id}")
|
248
249
|
@log.error("-> doc_hash: #{doc_hash}")
|
250
|
+
@log.error("-> credentials_hash: #{credentials_hash}")
|
249
251
|
@log.error("-> weight: "+ weight.to_s)
|
250
252
|
@log.error("-> timestamp: "+ timestamp.to_s)
|
251
253
|
@log.error("-> point_type: #{point_type}")
|
@@ -263,6 +265,7 @@ module VChainClient
|
|
263
265
|
@log.error("[Signatures.signDataPoint] failed to load private key")
|
264
266
|
@log.error("-> this_client_id: #{this_client_id}")
|
265
267
|
@log.error("-> doc_hash: #{doc_hash}")
|
268
|
+
@log.error("-> credentials_hash: #{credentials_hash}")
|
266
269
|
@log.error("-> weight: "+ weight.to_s)
|
267
270
|
@log.error("-> timestamp: "+ timestamp.to_s)
|
268
271
|
@log.error("-> point_type: #{point_type}")
|
@@ -298,10 +301,12 @@ module VChainClient
|
|
298
301
|
what_to_sign = field_hash
|
299
302
|
what_to_sign += value_hash
|
300
303
|
what_to_sign += Digest::SHA512.hexdigest(doc_hash)
|
304
|
+
what_to_sign += Digest::SHA512.hexdigest(credentials_hash)
|
301
305
|
what_to_sign += point_type
|
302
306
|
what_to_sign += weight.to_s
|
303
307
|
what_to_sign += timestamp.to_s
|
304
308
|
what_to_sign += this_client_id
|
309
|
+
what_to_sign += VChainClient::Client::DATA_POINT_VERSION
|
305
310
|
|
306
311
|
if @log.debug?
|
307
312
|
@log.debug("[Signatures.signDataPoint] field_hash: #{field_hash}")
|
@@ -320,6 +325,7 @@ module VChainClient
|
|
320
325
|
@log.error("#{e.class}, #{e.message}")
|
321
326
|
@log.error("-> this_client_id: #{this_client_id}")
|
322
327
|
@log.error("-> doc_hash: #{doc_hash}")
|
328
|
+
@log.error("-> credentials_hash: #{credentials_hash}")
|
323
329
|
@log.error("-> weight: "+ weight.to_s)
|
324
330
|
@log.error("-> timestamp: "+ timestamp.to_s)
|
325
331
|
@log.error("-> point_type: #{point_type}")
|
@@ -337,6 +343,7 @@ module VChainClient
|
|
337
343
|
@log.error("[Signatures.signDataPoint] failed init EC key")
|
338
344
|
@log.error("-> this_client_id: #{this_client_id}")
|
339
345
|
@log.error("-> doc_hash: #{doc_hash}")
|
346
|
+
@log.error("-> credentials_hash: #{credentials_hash}")
|
340
347
|
@log.error("-> weight: "+ weight.to_s)
|
341
348
|
@log.error("-> timestamp: "+ timestamp.to_s)
|
342
349
|
@log.error("-> point_type: #{point_type}")
|
@@ -367,6 +374,7 @@ module VChainClient
|
|
367
374
|
@log.error("#{e.class}, #{e.message}")
|
368
375
|
@log.error("-> this_client_id: #{this_client_id}")
|
369
376
|
@log.error("-> doc_hash: #{doc_hash}")
|
377
|
+
@log.error("-> credentials_hash: #{credentials_hash}")
|
370
378
|
@log.error("-> weight: "+ weight.to_s)
|
371
379
|
@log.error("-> timestamp: "+ timestamp.to_s)
|
372
380
|
@log.error("-> point_type: #{point_type}")
|
@@ -385,6 +393,7 @@ module VChainClient
|
|
385
393
|
@log.error("[Signatures.signDataPoint] failed to sign")
|
386
394
|
@log.error("-> this_client_id: #{this_client_id}")
|
387
395
|
@log.error("-> doc_hash: #{doc_hash}")
|
396
|
+
@log.error("-> credentials_hash: #{credentials_hash}")
|
388
397
|
@log.error("-> weight: "+ weight.to_s)
|
389
398
|
@log.error("-> timestamp: "+ timestamp.to_s)
|
390
399
|
@log.error("-> point_type: #{point_type}")
|
@@ -461,13 +470,14 @@ module VChainClient
|
|
461
470
|
end
|
462
471
|
end
|
463
472
|
|
464
|
-
def checkVerificationSignature(field_hash, data_hash, doc_hash, verification_type, weight, timestamp, blockstack_client_id, pubkey, signature)
|
473
|
+
def checkVerificationSignature(field_hash, data_hash, doc_hash, credentials_hash, verification_type, weight, timestamp, blockstack_client_id, pubkey, signature, version)
|
465
474
|
|
466
475
|
if @log.debug?
|
467
476
|
@log.debug("[Signatures.checkVerificationSignature] input:")
|
468
477
|
@log.debug("-> field_hash: #{field_hash}")
|
469
478
|
@log.debug("-> data_hash: #{data_hash}")
|
470
479
|
@log.debug("-> doc_hash: #{doc_hash}")
|
480
|
+
@log.debug("-> credentials_hash: #{credentials_hash}")
|
471
481
|
@log.debug("-> type: #{verification_type}")
|
472
482
|
@log.debug("-> weight: "+ weight.to_s)
|
473
483
|
@log.debug("-> timestamp: "+ timestamp.to_s)
|
@@ -479,10 +489,12 @@ module VChainClient
|
|
479
489
|
what_to_check = field_hash
|
480
490
|
what_to_check += data_hash
|
481
491
|
what_to_check += doc_hash
|
492
|
+
what_to_check += credentials_hash
|
482
493
|
what_to_check += verification_type
|
483
494
|
what_to_check += weight.to_s
|
484
495
|
what_to_check += timestamp.to_s
|
485
496
|
what_to_check += blockstack_client_id
|
497
|
+
what_to_check += version
|
486
498
|
|
487
499
|
begin
|
488
500
|
|
@@ -495,6 +507,7 @@ module VChainClient
|
|
495
507
|
@log.error("-> field_hash: #{field_hash}")
|
496
508
|
@log.error("-> data_hash: #{data_hash}")
|
497
509
|
@log.error("-> doc_hash: #{doc_hash}")
|
510
|
+
@log.error("-> credentials_hash: #{credentials_hash}")
|
498
511
|
@log.error("-> verification_type: #{verification_type}")
|
499
512
|
@log.error("-> timestamp: "+ timestamp.to_s)
|
500
513
|
@log.error("-> weight: "+ weight.to_s)
|
data/lib/vchain_client.rb
CHANGED
@@ -22,6 +22,8 @@ module VChainClient
|
|
22
22
|
FIELD_TYPE_TRAVEL_DOCUMENT_HASHED = "fbb6889f44061c2a91e17a411cf168f9457981257a5e0a31fb706cd5cd1e64c263780a42a1fd858ee69429869ab2e2c53b9d94c4a26946f2b0c12f8ce2812d6b"
|
23
23
|
FIELD_TYPE_TEST_DOCUMENT_HASHED = "e061cf61078d74025ab1d136e0a78785097b8ef721107e940cac1ca836ed5fa6af907344b761447274ce0558d95d4126e94e11f04eb70c3885afcc96f9cfe985"
|
24
24
|
|
25
|
+
DATA_POINT_VERSION = "1"
|
26
|
+
|
25
27
|
@config = nil
|
26
28
|
@log = nil
|
27
29
|
|
@@ -210,6 +212,8 @@ module VChainClient
|
|
210
212
|
|
211
213
|
doc_hash = self.get_doc_hash(document)
|
212
214
|
|
215
|
+
credentials_hash = self.get_credentials_hash(document)
|
216
|
+
|
213
217
|
if weight > 1
|
214
218
|
|
215
219
|
weight = 1
|
@@ -235,11 +239,11 @@ module VChainClient
|
|
235
239
|
|
236
240
|
begin
|
237
241
|
|
238
|
-
point_signatures = signaturesHelper.signDataPoint(point_type, document, doc_hash, weight, timestamp)
|
242
|
+
point_signatures = signaturesHelper.signDataPoint(point_type, document, doc_hash, credentials_hash, weight, timestamp)
|
239
243
|
|
240
244
|
rescue => e
|
241
245
|
if @log.error?
|
242
|
-
@log.error("[verify] Signatures.
|
246
|
+
@log.error("[verify] Signatures.signDataPoint raised exception")
|
243
247
|
@log.error("#{e.class}, #{e.message}")
|
244
248
|
@log.error("-> point_type: "+ point_type)
|
245
249
|
@log.error("-> weight: "+ weight.to_s)
|
@@ -255,7 +259,7 @@ module VChainClient
|
|
255
259
|
|
256
260
|
if point_signatures == nil
|
257
261
|
if @log.error?
|
258
|
-
@log.error("[verify] failed to Signatures.
|
262
|
+
@log.error("[verify] failed to Signatures.signDataPoint")
|
259
263
|
@log.error("-> point_type: "+ point_type)
|
260
264
|
@log.error("-> weight: "+ weight.to_s)
|
261
265
|
@log.error("-> timestamp: "+ timestamp.to_s)
|
@@ -816,7 +820,7 @@ module VChainClient
|
|
816
820
|
end
|
817
821
|
|
818
822
|
# 1d. check data_point_hash
|
819
|
-
checksum_to_hash = data_point["field_hash"] + data_point["data_hash"] + data_point["doc_hash"] + data_point["type"] + data_point["issuer_sig"] + data_point["issuer_id"] + data_point["validator_sig"] + data_point["validator_id"] + data_point["weight"] + data_point["timestamp"]
|
823
|
+
checksum_to_hash = data_point["field_hash"] + data_point["data_hash"] + data_point["doc_hash"] + data_point["credentials_hash"] + data_point["type"] + data_point["issuer_sig"] + data_point["issuer_id"] + data_point["validator_sig"] + data_point["validator_id"] + data_point["weight"] + data_point["timestamp"] + data_point["version"]
|
820
824
|
checksum = Digest::SHA512.hexdigest(checksum_to_hash)
|
821
825
|
if checksum != data_point["data_point_hash"]
|
822
826
|
if @log.error?
|
@@ -1144,12 +1148,13 @@ module VChainClient
|
|
1144
1148
|
|
1145
1149
|
begin
|
1146
1150
|
|
1147
|
-
if !signaturesHelper.checkVerificationSignature(data_point["field_hash"], data_point["data_hash"], data_point["doc_hash"], data_point["type"], data_point["weight"], data_point["timestamp"], data_point["issuer_id"], verificator_pubkey, Base64.decode64(data_point["issuer_sig"]))
|
1151
|
+
if !signaturesHelper.checkVerificationSignature(data_point["field_hash"], data_point["data_hash"], data_point["doc_hash"], data_point["credentials_hash"], data_point["type"], data_point["weight"], data_point["timestamp"], data_point["issuer_id"], verificator_pubkey, Base64.decode64(data_point["issuer_sig"]), data_point["version"])
|
1148
1152
|
if @log.error?
|
1149
1153
|
@log.error("[check] not a valid verification - failed to check verificator signature")
|
1150
1154
|
@log.error("--> field_hash: "+ data_point["field_hash"])
|
1151
1155
|
@log.error("--> data_hash: "+ data_point["data_hash"])
|
1152
1156
|
@log.error("--> doc_hash: "+ data_point["doc_hash"])
|
1157
|
+
@log.error("--> credentials_hash: "+ data_point["credentials_hash"])
|
1153
1158
|
@log.error("--> type: "+ data_point["type"])
|
1154
1159
|
@log.error("--> weight: "+ data_point["weight"].to_s)
|
1155
1160
|
@log.error("--> timestamp: "+ data_point["timestamp"].to_s)
|
@@ -1168,6 +1173,7 @@ module VChainClient
|
|
1168
1173
|
@log.error("--> field_hash: "+ data_point["field_hash"])
|
1169
1174
|
@log.error("--> data_hash: "+ data_point["data_hash"])
|
1170
1175
|
@log.error("--> doc_hash: "+ data_point["doc_hash"])
|
1176
|
+
@log.error("--> credentials_hash: "+ data_point["credentials_hash"])
|
1171
1177
|
@log.error("--> type: "+ data_point["type"])
|
1172
1178
|
@log.error("--> weight: "+ data_point["weight"].to_s)
|
1173
1179
|
@log.error("--> timestamp: "+ data_point["timestamp"].to_s)
|
@@ -1212,12 +1218,13 @@ module VChainClient
|
|
1212
1218
|
|
1213
1219
|
begin
|
1214
1220
|
|
1215
|
-
if !signaturesHelper.checkVerificationSignature(data_point["field_hash"], data_point["data_hash"], data_point["doc_hash"], data_point["type"], data_point["weight"], data_point["timestamp"], data_point["validator_id"], validator_pubkey, Base64.decode64(data_point["validator_sig"]))
|
1221
|
+
if !signaturesHelper.checkVerificationSignature(data_point["field_hash"], data_point["data_hash"], data_point["doc_hash"], data_point["credentials_hash"], data_point["type"], data_point["weight"], data_point["timestamp"], data_point["validator_id"], validator_pubkey, Base64.decode64(data_point["validator_sig"]), data_point["version"])
|
1216
1222
|
if @log.error?
|
1217
1223
|
@log.error("[check] not a valid verification - failed to check validator signature")
|
1218
1224
|
@log.error("--> field_hash: "+ data_point["field_hash"])
|
1219
1225
|
@log.error("--> data_hash: "+ data_point["data_hash"])
|
1220
1226
|
@log.error("--> doc_hash: "+ data_point["doc_hash"])
|
1227
|
+
@log.error("--> credentials_hash: "+ data_point["credentials_hash"])
|
1221
1228
|
@log.error("--> type: "+ data_point["type"])
|
1222
1229
|
@log.error("--> weight: "+ data_point["weight"].to_s)
|
1223
1230
|
@log.error("--> timestamp: "+ data_point["timestamp"].to_s)
|
@@ -1236,6 +1243,7 @@ module VChainClient
|
|
1236
1243
|
@log.error("--> field_hash: "+ data_point["field_hash"])
|
1237
1244
|
@log.error("--> data_hash: "+ data_point["data_hash"])
|
1238
1245
|
@log.error("--> doc_hash: "+ data_point["doc_hash"])
|
1246
|
+
@log.error("--> credentials_hash: "+ data_point["credentials_hash"])
|
1239
1247
|
@log.error("--> type: "+ data_point["type"])
|
1240
1248
|
@log.error("--> weight: "+ data_point["weight"].to_s)
|
1241
1249
|
@log.error("--> timestamp: "+ data_point["timestamp"].to_s)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vchain_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleksandr Gorelik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: log4r
|