sidetree 0.1.0 → 0.1.3
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/.github/workflows/main.yml +1 -1
- data/lib/sidetree/cas/fetch_result.rb +20 -0
- data/lib/sidetree/cas/ipfs.rb +101 -0
- data/lib/sidetree/cas.rb +6 -0
- data/lib/sidetree/did.rb +12 -14
- data/lib/sidetree/key.rb +53 -35
- data/lib/sidetree/model/cas_file_base.rb +40 -0
- data/lib/sidetree/model/chunk.rb +21 -0
- data/lib/sidetree/model/chunk_file.rb +72 -0
- data/lib/sidetree/model/core_index_file.rb +197 -0
- data/lib/sidetree/model/core_proof_file.rb +102 -0
- data/lib/sidetree/model/delta.rb +10 -1
- data/lib/sidetree/model/document.rb +10 -4
- data/lib/sidetree/model/provisional_index_file.rb +129 -0
- data/lib/sidetree/model/provisional_proof_file.rb +80 -0
- data/lib/sidetree/model/service.rb +6 -6
- data/lib/sidetree/model/suffix.rb +2 -2
- data/lib/sidetree/model.rb +11 -4
- data/lib/sidetree/op/create.rb +56 -5
- data/lib/sidetree/op/deactivate.rb +82 -0
- data/lib/sidetree/op/recover.rb +19 -0
- data/lib/sidetree/op/updatable.rb +98 -0
- data/lib/sidetree/op/update.rb +19 -0
- data/lib/sidetree/op.rb +20 -16
- data/lib/sidetree/util/anchored_data_serializer.rb +41 -0
- data/lib/sidetree/util/compressor.rb +38 -0
- data/lib/sidetree/util/jwk.rb +47 -0
- data/lib/sidetree/util/jws.rb +52 -0
- data/lib/sidetree/util.rb +8 -0
- data/lib/sidetree/validator.rb +51 -29
- data/lib/sidetree/version.rb +1 -1
- data/lib/sidetree.rb +36 -19
- data/sidetree.gemspec +3 -3
- metadata +37 -20
- data/exe/ion +0 -34
data/lib/sidetree/validator.rb
CHANGED
@@ -5,7 +5,7 @@ module Sidetree
|
|
5
5
|
# @param [Hash] delta delta object.
|
6
6
|
# @return [Sidetree::Error]
|
7
7
|
def validate_delta!(delta)
|
8
|
-
raise Error,
|
8
|
+
raise Error, "Delta does not defined." unless delta
|
9
9
|
delta_size = delta.to_json_c14n.bytesize
|
10
10
|
if delta_size > Sidetree::Params::MAX_DELTA_SIZE
|
11
11
|
raise Error,
|
@@ -13,7 +13,7 @@ module Sidetree
|
|
13
13
|
end
|
14
14
|
|
15
15
|
if delta.instance_of?(Array)
|
16
|
-
raise Error,
|
16
|
+
raise Error, "Delta object cannot be an array."
|
17
17
|
end
|
18
18
|
delta.keys.each do |k|
|
19
19
|
unless %w[patches updateCommitment].include?(k.to_s)
|
@@ -22,11 +22,11 @@ module Sidetree
|
|
22
22
|
end
|
23
23
|
|
24
24
|
unless delta[:patches].instance_of?(Array)
|
25
|
-
raise Error,
|
25
|
+
raise Error, "Patches object in delta must be an array."
|
26
26
|
end
|
27
27
|
delta[:patches].each { |p| validate_patch!(p) }
|
28
28
|
|
29
|
-
validate_encoded_multi_hash!(delta[:updateCommitment],
|
29
|
+
validate_encoded_multi_hash!(delta[:updateCommitment], "updateCommitment")
|
30
30
|
end
|
31
31
|
|
32
32
|
# @param [Hash] patch patch object.
|
@@ -49,7 +49,7 @@ module Sidetree
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def validate_document!(document)
|
52
|
-
raise Error,
|
52
|
+
raise Error, "Document object missing in patch object" unless document
|
53
53
|
document.keys.each do |k|
|
54
54
|
unless %w[publicKeys services].include?(k.to_s)
|
55
55
|
raise Error, "Property '#{k}' is not allowed in document object."
|
@@ -61,7 +61,7 @@ module Sidetree
|
|
61
61
|
|
62
62
|
def validate_add_public_keys_patch!(patch)
|
63
63
|
unless patch.keys.length == 2
|
64
|
-
raise Error,
|
64
|
+
raise Error, "Patch missing or unknown property."
|
65
65
|
end
|
66
66
|
validate_public_keys!(patch[:publicKeys])
|
67
67
|
end
|
@@ -73,7 +73,7 @@ module Sidetree
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
unless patch[:ids].instance_of?(Array)
|
76
|
-
raise Error,
|
76
|
+
raise Error, "Patch public key ids not an array."
|
77
77
|
end
|
78
78
|
|
79
79
|
patch[:ids].each { |id| validate_id!(id) }
|
@@ -81,10 +81,10 @@ module Sidetree
|
|
81
81
|
|
82
82
|
def validate_add_services_patch!(patch)
|
83
83
|
unless patch.keys.length == 2
|
84
|
-
raise Error,
|
84
|
+
raise Error, "Patch missing or unknown property."
|
85
85
|
end
|
86
86
|
unless patch[:services].instance_of?(Array)
|
87
|
-
raise Error,
|
87
|
+
raise Error, "Patch services not an array."
|
88
88
|
end
|
89
89
|
validate_services!(patch[:services])
|
90
90
|
end
|
@@ -96,7 +96,7 @@ module Sidetree
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
unless patch[:ids].instance_of?(Array)
|
99
|
-
raise Error,
|
99
|
+
raise Error, "Patch service ids not an array."
|
100
100
|
end
|
101
101
|
|
102
102
|
patch[:ids].each { |id| validate_id!(id) }
|
@@ -104,7 +104,7 @@ module Sidetree
|
|
104
104
|
|
105
105
|
def validate_public_keys!(public_keys)
|
106
106
|
unless public_keys.instance_of?(Array)
|
107
|
-
raise Error,
|
107
|
+
raise Error, "publicKeys must be an array."
|
108
108
|
end
|
109
109
|
pubkey_ids = []
|
110
110
|
public_keys.each do |public_key|
|
@@ -114,7 +114,7 @@ module Sidetree
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
if public_key[:publicKeyJwk].instance_of?(Array)
|
117
|
-
raise Error,
|
117
|
+
raise Error, "publicKeyJwk object cannot be an array."
|
118
118
|
end
|
119
119
|
if public_key[:type] && !public_key[:type].is_a?(String)
|
120
120
|
raise Error, "Public key type #{public_key[:type]} is incorrect."
|
@@ -123,16 +123,16 @@ module Sidetree
|
|
123
123
|
validate_id!(public_key[:id])
|
124
124
|
|
125
125
|
if pubkey_ids.include?(public_key[:id])
|
126
|
-
raise Error,
|
126
|
+
raise Error, "Public key id is duplicated."
|
127
127
|
end
|
128
128
|
pubkey_ids << public_key[:id]
|
129
129
|
|
130
130
|
if public_key[:purposes]
|
131
131
|
unless public_key[:purposes].instance_of?(Array)
|
132
|
-
raise Error,
|
132
|
+
raise Error, "purposes must be an array."
|
133
133
|
end
|
134
134
|
unless public_key[:purposes].count == public_key[:purposes].uniq.count
|
135
|
-
raise Error,
|
135
|
+
raise Error, "purpose is duplicated."
|
136
136
|
end
|
137
137
|
public_key[:purposes].each do |purpose|
|
138
138
|
unless OP::PublicKeyPurpose.values.include?(purpose)
|
@@ -145,34 +145,33 @@ module Sidetree
|
|
145
145
|
|
146
146
|
def validate_services!(services)
|
147
147
|
unless services.instance_of?(Array)
|
148
|
-
raise Error,
|
148
|
+
raise Error, "services must be an array."
|
149
149
|
end
|
150
150
|
|
151
151
|
service_ids = []
|
152
152
|
services.each do |service|
|
153
153
|
unless service.keys.length == 3
|
154
|
-
raise Error,
|
154
|
+
raise Error, "Service has missing or unknown property."
|
155
155
|
end
|
156
156
|
|
157
157
|
validate_id!(service[:id])
|
158
158
|
|
159
159
|
if service_ids.include?(service[:id])
|
160
|
-
raise Error,
|
160
|
+
raise Error, "Service id has to be unique."
|
161
161
|
end
|
162
162
|
service_ids << service[:id]
|
163
163
|
|
164
164
|
unless service[:type].is_a?(String)
|
165
165
|
raise Error, "Service type #{service[:type]} is incorrect."
|
166
166
|
end
|
167
|
-
raise Error,
|
167
|
+
raise Error, "Service type too long." if service[:type].length > 30
|
168
168
|
|
169
169
|
endpoint = service[:serviceEndpoint]
|
170
170
|
if endpoint.instance_of?(String)
|
171
171
|
validate_uri!(endpoint)
|
172
172
|
elsif endpoint.instance_of?(Hash)
|
173
|
-
|
174
173
|
else
|
175
|
-
raise Error,
|
174
|
+
raise Error, "ServiceEndpoint must be string or object."
|
176
175
|
end
|
177
176
|
end
|
178
177
|
end
|
@@ -196,10 +195,10 @@ module Sidetree
|
|
196
195
|
end
|
197
196
|
|
198
197
|
def validate_id!(id)
|
199
|
-
raise Error,
|
200
|
-
raise Error,
|
198
|
+
raise Error, "id does not string." unless id.instance_of?(String)
|
199
|
+
raise Error, "id is too long." if id.length > 50
|
201
200
|
unless valid_base64_encoding?(id)
|
202
|
-
raise Error,
|
201
|
+
raise Error, "id does not use base64url character set."
|
203
202
|
end
|
204
203
|
end
|
205
204
|
|
@@ -216,9 +215,21 @@ module Sidetree
|
|
216
215
|
end
|
217
216
|
end
|
218
217
|
|
218
|
+
# Verify that the Multihash of +content+ matches that of +multihash+.
|
219
|
+
# @param [String] content content to be hashed
|
220
|
+
# @param [String] multihash Hash value to be checked
|
221
|
+
# @param [String] target Name of the target object to include in the error message
|
222
|
+
# @raise [Sidetree::Error]
|
223
|
+
def validate_canonicalize_object_hash!(content, multihash, target)
|
224
|
+
unless Sidetree.to_hash(content) == multihash
|
225
|
+
raise Sidetree::Error,
|
226
|
+
"Canonicalized #{target} object hash does not match expected hash '#{multihash}'"
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
219
230
|
def validate_did_type!(type)
|
220
231
|
return unless type
|
221
|
-
raise Error,
|
232
|
+
raise Error, "DID type must be a string." unless type.instance_of?(String)
|
222
233
|
if type.length > 4
|
223
234
|
raise Error,
|
224
235
|
"DID type string '#{type}' cannot be longer than 4 characters."
|
@@ -231,20 +242,31 @@ module Sidetree
|
|
231
242
|
|
232
243
|
def validate_suffix_data!(suffix)
|
233
244
|
if suffix.instance_of?(Array)
|
234
|
-
raise Error,
|
245
|
+
raise Error, "Suffix data can not be an array."
|
235
246
|
end
|
236
247
|
suffix.keys.each do |k|
|
237
248
|
unless %w[deltaHash recoveryCommitment type].include?(k.to_s)
|
238
249
|
raise Error, "Property '#{k}' is not allowed in publicKeys object."
|
239
250
|
end
|
240
251
|
end
|
241
|
-
validate_encoded_multi_hash!(suffix[:deltaHash],
|
252
|
+
validate_encoded_multi_hash!(suffix[:deltaHash], "delta hash")
|
242
253
|
validate_encoded_multi_hash!(
|
243
254
|
suffix[:recoveryCommitment],
|
244
|
-
|
255
|
+
"recovery commitment"
|
245
256
|
)
|
246
|
-
validate_encoded_multi_hash!(suffix[:deltaHash],
|
257
|
+
validate_encoded_multi_hash!(suffix[:deltaHash], "delta hash")
|
247
258
|
validate_did_type!(suffix[:type])
|
248
259
|
end
|
260
|
+
|
261
|
+
def validate_cas_file_uri!(uri, target)
|
262
|
+
unless uri.is_a?(String)
|
263
|
+
raise Sidetree::Error,
|
264
|
+
"Input #{target} CAS file URI '#{uri}' needs to be of string type"
|
265
|
+
end
|
266
|
+
if uri.bytesize > Sidetree::Params::MAX_CAS_URI_LENGTH
|
267
|
+
raise Sidetree::Error,
|
268
|
+
"Input #{target} CAS file URI byte size cannot exceed #{Sidetree::Params::MAX_CAS_URI_LENGTH}"
|
269
|
+
end
|
270
|
+
end
|
249
271
|
end
|
250
272
|
end
|
data/lib/sidetree/version.rb
CHANGED
data/lib/sidetree.rb
CHANGED
@@ -1,37 +1,54 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
3
|
+
require_relative "sidetree/version"
|
4
|
+
require "ecdsa"
|
5
|
+
require "json/jwt"
|
6
|
+
require "base64"
|
7
|
+
require "json"
|
8
|
+
require "json/canonicalization"
|
9
|
+
require "uri"
|
10
|
+
require "multihashes"
|
11
11
|
|
12
12
|
module Sidetree
|
13
13
|
class Error < StandardError
|
14
14
|
end
|
15
15
|
|
16
|
-
autoload :
|
17
|
-
autoload :
|
18
|
-
autoload :
|
19
|
-
autoload :
|
20
|
-
autoload :
|
16
|
+
autoload :Util, "sidetree/util"
|
17
|
+
autoload :Key, "sidetree/key"
|
18
|
+
autoload :DID, "sidetree/did"
|
19
|
+
autoload :Model, "sidetree/model"
|
20
|
+
autoload :OP, "sidetree/op"
|
21
|
+
autoload :Validator, "sidetree/validator"
|
22
|
+
autoload :CAS, "sidetree/cas"
|
21
23
|
|
22
24
|
module Params
|
23
25
|
# Algorithm for generating hashes of protocol-related values. 0x12 = sha2-256
|
24
26
|
HASH_ALGORITHM = [0x12]
|
25
|
-
HASH_ALGORITH_STRING =
|
27
|
+
HASH_ALGORITH_STRING = "sha2-256"
|
26
28
|
|
27
29
|
# Maximum canonicalized operation delta buffer size.
|
28
30
|
MAX_DELTA_SIZE = 1000
|
29
|
-
|
31
|
+
# Maximum compressed chunk file size. 10MB.
|
32
|
+
MAX_CHUNK_FILE_SIZE = 10_000_000
|
33
|
+
# Maximum compressed Provisional Index File size. 1 MB (zipped)
|
34
|
+
MAX_PROVISIONAL_INDEX_FILE_SIZE = 1_000_000
|
35
|
+
# Maximum compressed Proof File size. 2.5 MB (zipped)
|
36
|
+
MAX_PROOF_FILE_SIZE = 2_500_000
|
37
|
+
# Maximum compressed Core Index File size. 1 MB (zipped)
|
38
|
+
MAX_CORE_INDEX_FILE_SIZE = 1_000_000
|
39
|
+
# Maximum writer lock ID size
|
40
|
+
MAX_WRITER_LOCK_ID_SIZE = 200
|
41
|
+
# Maximum length of CAS URIs. 100 bytes
|
42
|
+
MAX_CAS_URI_LENGTH = 100
|
43
|
+
# Maximum number of operations per batch. 10000 ops.
|
44
|
+
MAX_OPERATION_COUNT = 10_000
|
45
|
+
# Default public key type
|
46
|
+
DEFAULT_PUBKEY_TYPE = "EcdsaSecp256k1VerificationKey2019"
|
30
47
|
# Default DID method
|
31
|
-
DEFAULT_METHOD =
|
48
|
+
DEFAULT_METHOD = "sidetree"
|
32
49
|
|
33
50
|
# Supported did methods.
|
34
|
-
METHODS = { default: DEFAULT_METHOD, ion:
|
51
|
+
METHODS = { default: DEFAULT_METHOD, ion: "ion" }
|
35
52
|
|
36
53
|
@network = nil
|
37
54
|
|
@@ -48,8 +65,8 @@ module Sidetree
|
|
48
65
|
end
|
49
66
|
|
50
67
|
module Network
|
51
|
-
MAINNET =
|
52
|
-
TESTNET =
|
68
|
+
MAINNET = "mainnet"
|
69
|
+
TESTNET = "test"
|
53
70
|
end
|
54
71
|
end
|
55
72
|
|
data/sidetree.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = 'Ruby implementation for Sidetree protocol.'
|
13
13
|
spec.homepage = 'https://github.com/azuchi/sidetreerb'
|
14
14
|
spec.license = 'MIT'
|
15
|
-
spec.required_ruby_version = '>= 2.
|
15
|
+
spec.required_ruby_version = '>= 2.7.0'
|
16
16
|
|
17
17
|
spec.metadata['homepage_uri'] = spec.homepage
|
18
18
|
spec.metadata['source_code_uri'] = spec.homepage
|
@@ -35,10 +35,10 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.add_dependency 'json-jwt', '~> 1.13.0'
|
36
36
|
spec.add_dependency 'json-canonicalization', '~> 0.3.0'
|
37
37
|
spec.add_dependency 'multihashes', '~> 0.2.0'
|
38
|
-
spec.add_runtime_dependency 'thor'
|
39
38
|
|
40
39
|
# For more information and examples about making a new gem, checkout our
|
41
40
|
# guide at: https://bundler.io/guides/creating_gem.html
|
42
41
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
43
|
-
spec.add_development_dependency 'prettier'
|
42
|
+
spec.add_development_dependency 'prettier', '~> 3.2.0'
|
43
|
+
spec.add_development_dependency 'webmock', '~> 3.14.0'
|
44
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidetree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- azuchi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ecdsa
|
@@ -67,52 +67,51 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.2.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :
|
75
|
+
version: '3.0'
|
76
|
+
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
82
|
+
version: '3.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: prettier
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 3.2.0
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 3.2.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: webmock
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 3.14.0
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 3.14.0
|
111
111
|
description: Ruby implementation for Sidetree protocol.
|
112
112
|
email:
|
113
113
|
- azuchi@chaintope.com
|
114
|
-
executables:
|
115
|
-
- ion
|
114
|
+
executables: []
|
116
115
|
extensions: []
|
117
116
|
extra_rdoc_files: []
|
118
117
|
files:
|
@@ -130,18 +129,36 @@ files:
|
|
130
129
|
- Rakefile
|
131
130
|
- bin/console
|
132
131
|
- bin/setup
|
133
|
-
- exe/ion
|
134
132
|
- lib/sidetree.rb
|
133
|
+
- lib/sidetree/cas.rb
|
134
|
+
- lib/sidetree/cas/fetch_result.rb
|
135
|
+
- lib/sidetree/cas/ipfs.rb
|
135
136
|
- lib/sidetree/did.rb
|
136
137
|
- lib/sidetree/key.rb
|
137
138
|
- lib/sidetree/model.rb
|
139
|
+
- lib/sidetree/model/cas_file_base.rb
|
140
|
+
- lib/sidetree/model/chunk.rb
|
141
|
+
- lib/sidetree/model/chunk_file.rb
|
142
|
+
- lib/sidetree/model/core_index_file.rb
|
143
|
+
- lib/sidetree/model/core_proof_file.rb
|
138
144
|
- lib/sidetree/model/delta.rb
|
139
145
|
- lib/sidetree/model/document.rb
|
146
|
+
- lib/sidetree/model/provisional_index_file.rb
|
147
|
+
- lib/sidetree/model/provisional_proof_file.rb
|
140
148
|
- lib/sidetree/model/service.rb
|
141
149
|
- lib/sidetree/model/suffix.rb
|
142
150
|
- lib/sidetree/op.rb
|
143
151
|
- lib/sidetree/op/base.rb
|
144
152
|
- lib/sidetree/op/create.rb
|
153
|
+
- lib/sidetree/op/deactivate.rb
|
154
|
+
- lib/sidetree/op/recover.rb
|
155
|
+
- lib/sidetree/op/updatable.rb
|
156
|
+
- lib/sidetree/op/update.rb
|
157
|
+
- lib/sidetree/util.rb
|
158
|
+
- lib/sidetree/util/anchored_data_serializer.rb
|
159
|
+
- lib/sidetree/util/compressor.rb
|
160
|
+
- lib/sidetree/util/jwk.rb
|
161
|
+
- lib/sidetree/util/jws.rb
|
145
162
|
- lib/sidetree/validator.rb
|
146
163
|
- lib/sidetree/version.rb
|
147
164
|
- sidetree.gemspec
|
@@ -160,7 +177,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
177
|
requirements:
|
161
178
|
- - ">="
|
162
179
|
- !ruby/object:Gem::Version
|
163
|
-
version: 2.
|
180
|
+
version: 2.7.0
|
164
181
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
182
|
requirements:
|
166
183
|
- - ">="
|
data/exe/ion
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'thor'
|
3
|
-
require 'sidetree'
|
4
|
-
|
5
|
-
class ION < Thor
|
6
|
-
class << self
|
7
|
-
def exit_on_failure?
|
8
|
-
true
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
desc 'create', 'Create ION DID.'
|
13
|
-
def create
|
14
|
-
recovery_key = Sidetree::Key.generate
|
15
|
-
update_key = Sidetree::Key.generate
|
16
|
-
signing_key = Sidetree::Key.generate(id: 'signing-key')
|
17
|
-
document = Sidetree::Model::Document.new(public_keys: [signing_key])
|
18
|
-
did = Sidetree::DID.create(document, update_key, recovery_key, method: Sidetree::Params::METHODS[:ion])
|
19
|
-
|
20
|
-
puts "DID: #{did.short_form}"
|
21
|
-
puts
|
22
|
-
puts "Recovery key: #{recovery_key.encoded_private_key}"
|
23
|
-
puts "Update key: #{update_key.encoded_private_key}"
|
24
|
-
puts "Signing key: #{signing_key.encoded_private_key}"
|
25
|
-
puts
|
26
|
-
|
27
|
-
puts "Long-Form DID: #{did.to_s}"
|
28
|
-
op = did.create_op
|
29
|
-
puts "DID suffix data: #{op.suffix.to_h.to_json}"
|
30
|
-
puts "Document delta: #{op.delta.to_h.to_json}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
ION.start(ARGV)
|