sidetree 0.1.0 → 0.1.1

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
  SHA256:
3
- metadata.gz: 55fc6b6c312458a0e0d627daeb1f1f5cd84e87a6f1b74c0a9a9d584848e31a8a
4
- data.tar.gz: 34a4aa6ee3457c84b0d1148108d19f5e7afea5f32d1210299ca530bdd00d6a59
3
+ metadata.gz: 5a4b7ce3f8ab94c646d21e2083664437b75877ee43264b172fdcadd8f8c9fffc
4
+ data.tar.gz: 3ed1dee9aaba4e13f3122d57f9b875c5279c2148a3cbf1e6818d2073e9d7759e
5
5
  SHA512:
6
- metadata.gz: 47cfc0743c8da5ccf12bae7fa2114474607a0f68814fccf0738390f87bc52855e96b2eaedc70b68328a8b7b0b7dbc892f6eba199a0ba87b842b369e71603d472
7
- data.tar.gz: 0032c7d6faedaf3873fdc1594f19eb3ceb431129cb5fd2dd436e322dfb9b5a155e5901c87c0530e9b42bb6d3ca01562e393c83bbc62f51ec61d4f4c4c37a8c25
6
+ metadata.gz: 4d87cd2fae36188a3e24d37f73f99637a6a55ef8d2e300261f46595811194d2cbccc2ea9b6da3ad77564f3312ce2ee51561814a9cf02c261031b35438b2df0d5
7
+ data.tar.gz: f9fbb814e7536a672f3f12b2c83fbf9af4f5072a0ee210e9935ce8b627972d659d28d36df9f7425e5b3c44edd7589a8fec7b68cb1b1d34c2af711c3eedd02316
@@ -7,7 +7,7 @@ jobs:
7
7
  strategy:
8
8
  fail-fast: true
9
9
  matrix:
10
- ruby: [2.6, 2.7, 3.0, 3.1]
10
+ ruby: [2.7, 3.0, 3.1]
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
13
  - uses: actions/checkout@v2
data/lib/sidetree/did.rb CHANGED
@@ -6,21 +6,21 @@ module Sidetree
6
6
 
7
7
  # @raise [Sidetree::Error]
8
8
  def initialize(did)
9
- if !did.start_with?('did:ion:') && !did.start_with?('did:sidetree:')
10
- raise Error, 'Expected DID method not given in DID.'
9
+ if !did.start_with?("did:ion:") && !did.start_with?("did:sidetree:")
10
+ raise Error, "Expected DID method not given in DID."
11
11
  end
12
- if did.count(':') > (Sidetree::Params.testnet? ? 4 : 3)
13
- raise Error, 'Unsupported DID format.'
12
+ if did.count(":") > (Sidetree::Params.testnet? ? 4 : 3)
13
+ raise Error, "Unsupported DID format."
14
14
  end
15
15
  if Sidetree::Params.testnet?
16
- _, @method, _, @suffix, @long_suffix = did.split(':')
16
+ _, @method, _, @suffix, @long_suffix = did.split(":")
17
17
  else
18
- _, @method, @suffix, @long_suffix = did.split(':')
18
+ _, @method, @suffix, @long_suffix = did.split(":")
19
19
  end
20
20
 
21
21
  if @long_suffix
22
22
  unless suffix == create_op.suffix.unique_suffix
23
- raise Error, 'DID document mismatches short-form DID.'
23
+ raise Error, "DID document mismatches short-form DID."
24
24
  end
25
25
  end
26
26
  end
@@ -39,18 +39,16 @@ module Sidetree
39
39
  method: Sidetree::Params::DEFAULT_METHOD
40
40
  )
41
41
  unless document.is_a?(Sidetree::Model::Document)
42
- raise Error, 'document must be Sidetree::Model::Document instance.'
42
+ raise Error, "document must be Sidetree::Model::Document instance."
43
43
  end
44
44
  unless update_key.is_a?(Sidetree::Key)
45
- raise Error, 'update_key must be Sidetree::Key instance.'
45
+ raise Error, "update_key must be Sidetree::Key instance."
46
46
  end
47
47
  unless recovery_key.is_a?(Sidetree::Key)
48
- raise Error, 'recovery_key must be Sidetree::Key instance.'
48
+ raise Error, "recovery_key must be Sidetree::Key instance."
49
49
  end
50
50
 
51
- patches = [
52
- { 'action': OP::PatchAction::REPLACE, 'document': document.to_h }
53
- ]
51
+ patches = [{ action: OP::PatchAction::REPLACE, document: document.to_h }]
54
52
  delta = Model::Delta.new(patches, update_key.to_commitment)
55
53
  suffix =
56
54
  Sidetree::Model::Suffix.new(delta.to_hash, recovery_key.to_commitment)
data/lib/sidetree/key.rb CHANGED
@@ -16,14 +16,14 @@ module Sidetree
16
16
  )
17
17
  if private_key
18
18
  unless Key.valid_private_key?(private_key)
19
- raise Error, 'private key is invalid range.'
19
+ raise Error, "private key is invalid range."
20
20
  end
21
21
 
22
22
  @private_key = private_key
23
23
  pub = ECDSA::Group::Secp256k1.generator.multiply_by_scalar(private_key)
24
24
  if public_key
25
25
  unless pub == public_key
26
- raise Error, 'Public and private keys do not match.'
26
+ raise Error, "Public and private keys do not match."
27
27
  end
28
28
  else
29
29
  public_key = pub
@@ -31,13 +31,13 @@ module Sidetree
31
31
  end
32
32
 
33
33
  unless public_key
34
- raise Error, 'Specify either the private key or the public key'
34
+ raise Error, "Specify either the private key or the public key"
35
35
  end
36
36
  unless public_key.is_a?(ECDSA::Point)
37
- raise Error, 'public key must be an ECDSA::Point instance.'
37
+ raise Error, "public key must be an ECDSA::Point instance."
38
38
  end
39
39
  unless ECDSA::Group::Secp256k1.valid_public_key?(public_key)
40
- raise Error, 'public key is invalid.'
40
+ raise Error, "public key is invalid."
41
41
  end
42
42
 
43
43
  @public_key = public_key
@@ -71,47 +71,47 @@ module Sidetree
71
71
  # @return [Sidetree::Key]
72
72
  # @raise [Sidetree::Error]
73
73
  def self.from_hash(data)
74
- key_data = data['publicKeyJwk'] ? data['publicKeyJwk'] : data
75
- key_type = key_data['kty']
76
- curve = key_data['crv']
77
- if key_type.nil? || key_type != 'EC'
74
+ key_data = data["publicKeyJwk"] ? data["publicKeyJwk"] : data
75
+ key_type = key_data["kty"]
76
+ curve = key_data["crv"]
77
+ if key_type.nil? || key_type != "EC"
78
78
  raise Error, "Unsupported key type '#{key_type}' specified."
79
79
  end
80
- if curve.nil? || curve != 'secp256k1'
80
+ if curve.nil? || curve != "secp256k1"
81
81
  raise Error, "Unsupported curve '#{curve}' specified."
82
82
  end
83
- raise Error, 'x property required.' unless key_data['x']
84
- raise Error, 'y property required.' unless key_data['y']
83
+ raise Error, "x property required." unless key_data["x"]
84
+ raise Error, "y property required." unless key_data["y"]
85
85
 
86
86
  # `x` and `y` need 43 Base64URL encoded bytes to contain 256 bits.
87
- unless key_data['x'].length == 43
87
+ unless key_data["x"].length == 43
88
88
  raise Error, "Secp256k1 JWK 'x' property must be 43 bytes."
89
89
  end
90
- unless key_data['y'].length == 43
90
+ unless key_data["y"].length == 43
91
91
  raise Error, "Secp256k1 JWK 'y' property must be 43 bytes."
92
92
  end
93
93
 
94
- x = Base64.urlsafe_decode64(key_data['x'])
95
- y = Base64.urlsafe_decode64(key_data['y'])
94
+ x = Base64.urlsafe_decode64(key_data["x"])
95
+ y = Base64.urlsafe_decode64(key_data["y"])
96
96
  point =
97
97
  ECDSA::Format::PointOctetString.decode(
98
- ['04'].pack('H*') + x + y,
98
+ ["04"].pack("H*") + x + y,
99
99
  ECDSA::Group::Secp256k1
100
100
  )
101
101
  private_key =
102
- if key_data['d']
103
- Base64.urlsafe_decode64(key_data['d']).unpack1('H*').to_i(16)
102
+ if key_data["d"]
103
+ Base64.urlsafe_decode64(key_data["d"]).unpack1("H*").to_i(16)
104
104
  else
105
105
  nil
106
106
  end
107
107
 
108
- purposes = data['purposes'] ? data['purposes'] : []
108
+ purposes = data["purposes"] ? data["purposes"] : []
109
109
  Key.new(
110
110
  public_key: point,
111
111
  private_key: private_key,
112
112
  purposes: purposes,
113
- id: data['id'],
114
- type: data['type']
113
+ id: data["id"],
114
+ type: data["type"]
115
115
  )
116
116
  end
117
117
 
@@ -127,8 +127,8 @@ module Sidetree
127
127
  def to_jwk
128
128
  jwk =
129
129
  JSON::JWK.new(
130
- kty: 'EC',
131
- crv: 'secp256k1',
130
+ kty: "EC",
131
+ crv: "secp256k1",
132
132
  x:
133
133
  Base64.urlsafe_encode64(
134
134
  ECDSA::Format::FieldElementOctetString.encode(
@@ -146,7 +146,7 @@ module Sidetree
146
146
  padding: false
147
147
  )
148
148
  )
149
- jwk['d'] = encoded_private_key if private_key
149
+ jwk["d"] = encoded_private_key if private_key
150
150
  jwk
151
151
  end
152
152
 
@@ -170,7 +170,7 @@ module Sidetree
170
170
  def encoded_private_key
171
171
  if private_key
172
172
  Base64.urlsafe_encode64(
173
- [private_key.to_s(16).rjust(32 * 2, '0')].pack('H*'),
173
+ [private_key.to_s(16).rjust(32 * 2, "0")].pack("H*"),
174
174
  padding: false
175
175
  )
176
176
  else
@@ -10,22 +10,22 @@ module Sidetree
10
10
  def initialize(public_keys: [], services: [])
11
11
  public_keys.each do |public_key|
12
12
  unless public_key.is_a?(Sidetree::Key)
13
- raise Error, 'public_keys should be array of Sidetree::Key objects.'
13
+ raise Error, "public_keys should be array of Sidetree::Key objects."
14
14
  end
15
15
  end
16
16
  id_set = public_keys.map(&:id)
17
17
  if (id_set.count - id_set.uniq.count) > 0
18
- raise Error 'Public key id has to be unique.'
18
+ raise Error "Public key id has to be unique."
19
19
  end
20
20
  services.each do |service|
21
21
  unless service.is_a?(Sidetree::Model::Service)
22
22
  raise Error,
23
- 'services should be array of Sidetree::Model::Service objects.'
23
+ "services should be array of Sidetree::Model::Service objects."
24
24
  end
25
25
  end
26
26
  id_set = services.map(&:id)
27
27
  if (id_set.count - id_set.uniq.count) > 0
28
- raise Error 'Service id has to be unique.'
28
+ raise Error "Service id has to be unique."
29
29
  end
30
30
 
31
31
  @public_keys = public_keys
@@ -10,13 +10,13 @@ module Sidetree
10
10
  # @raise [Sidetree::Error]
11
11
  def initialize(id, type, endpoint)
12
12
  Sidetree::Validator.validate_id!(id)
13
- raise Error, 'type should be String.' unless type.is_a?(String)
13
+ raise Error, "type should be String." unless type.is_a?(String)
14
14
  if type.length > MAX_TYPE_LENGTH
15
15
  raise Error,
16
16
  "Service endpoint type length #{type.length} exceeds max allowed length of #{MAX_TYPE_LENGTH}."
17
17
  end
18
18
  if endpoint.is_a?(Array)
19
- raise Error, 'Service endpoint value cannot be an array.'
19
+ raise Error, "Service endpoint value cannot be an array."
20
20
  end
21
21
 
22
22
  Sidetree::Validator.validate_uri!(endpoint) if endpoint.is_a?(String)
@@ -33,16 +33,16 @@ module Sidetree
33
33
  # @raise [Sidetree::Error]
34
34
  # @return [Sidetree::Model::Service]
35
35
  def self.from_hash(data)
36
- Service.new(data['id'], data['type'], data['serviceEndpoint'])
36
+ Service.new(data["id"], data["type"], data["serviceEndpoint"])
37
37
  end
38
38
 
39
39
  # Convert data to Hash object.
40
40
  # @return [Hash]
41
41
  def to_h
42
42
  hash = {}
43
- hash['id'] = id if id
44
- hash['type'] = type if type
45
- hash['serviceEndpoint'] = endpoint if endpoint
43
+ hash["id"] = id if id
44
+ hash["type"] = type if type
45
+ hash["serviceEndpoint"] = endpoint if endpoint
46
46
  hash
47
47
  end
48
48
  end
@@ -1,8 +1,8 @@
1
1
  module Sidetree
2
2
  module Model
3
- autoload :Suffix, 'sidetree/model/suffix'
4
- autoload :Delta, 'sidetree/model/delta'
5
- autoload :Document, 'sidetree/model/document'
6
- autoload :Service, 'sidetree/model/service'
3
+ autoload :Suffix, "sidetree/model/suffix"
4
+ autoload :Delta, "sidetree/model/delta"
5
+ autoload :Document, "sidetree/model/document"
6
+ autoload :Service, "sidetree/model/service"
7
7
  end
8
8
  end
@@ -11,6 +11,24 @@ module Sidetree
11
11
  @suffix = suffix
12
12
  end
13
13
 
14
+ # Generate create operation with new generate key.
15
+ # @param [String] method DID method defined in +Sidetree::Params::METHODS+.
16
+ # @return [Sidetree::OP::Create]
17
+ def self.generate(method: Sidetree::Params::METHODS[:ion])
18
+ recovery_key = Sidetree::Key.generate
19
+ update_key = Sidetree::Key.generate
20
+ signing_key = Sidetree::Key.generate(id: "signing-key")
21
+ document = Sidetree::Model::Document.new(public_keys: [signing_key])
22
+ did =
23
+ Sidetree::DID.create(
24
+ document,
25
+ update_key,
26
+ recovery_key,
27
+ method: method
28
+ )
29
+ did.create_op
30
+ end
31
+
14
32
  def type
15
33
  Sidetree::OP::Type::CREATE
16
34
  end
@@ -31,7 +49,7 @@ module Sidetree
31
49
  expected_base64 =
32
50
  Base64.urlsafe_encode64(json.to_json_c14n, padding: false)
33
51
  unless expected_base64 == base64_str
34
- raise Error, 'Initial state object and JCS string mismatch.'
52
+ raise Error, "Initial state object and JCS string mismatch."
35
53
  end
36
54
 
37
55
  Create.new(
@@ -39,7 +57,7 @@ module Sidetree
39
57
  Sidetree::Model::Delta.parse(json[:delta])
40
58
  )
41
59
  rescue JSON::ParserError
42
- raise Error, 'Long form initial state should be encoded jcs.'
60
+ raise Error, "Long form initial state should be encoded jcs."
43
61
  end
44
62
  end
45
63
 
@@ -0,0 +1,10 @@
1
+ module Sidetree
2
+ module OP
3
+ # Deactivate operation class TODO implementation
4
+ class Deactivate < Base
5
+ def type
6
+ Sidetree::OP::Type::DEACTIVATE
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Sidetree
2
+ module OP
3
+ # Recover operation class. TODO implementation
4
+ class Recover < Base
5
+ def type
6
+ Sidetree::OP::Type::RECOVER
7
+ end
8
+ end
9
+ end
10
+ end
data/lib/sidetree/op.rb CHANGED
@@ -1,28 +1,28 @@
1
1
  module Sidetree
2
2
  module OP
3
3
  module Type
4
- CREATE = 'create'
5
- UPDATE = 'update'
6
- RECOVER = 'recover'
7
- DEACTIVATE = 'deactivate'
4
+ CREATE = "create"
5
+ UPDATE = "update"
6
+ RECOVER = "recover"
7
+ DEACTIVATE = "deactivate"
8
8
  end
9
9
 
10
10
  # Sidetree patch actions. These are the valid values in the action property of a patch.
11
11
  module PatchAction
12
- REPLACE = 'replace'
13
- ADD_PUBLIC_KEYS = 'add-public-keys'
14
- REMOVE_PUBLIC_KEYS = 'remove-public-keys'
15
- ADD_SERVICES = 'add-services'
16
- REMOVE_SERVICES = 'remove-services'
12
+ REPLACE = "replace"
13
+ ADD_PUBLIC_KEYS = "add-public-keys"
14
+ REMOVE_PUBLIC_KEYS = "remove-public-keys"
15
+ ADD_SERVICES = "add-services"
16
+ REMOVE_SERVICES = "remove-services"
17
17
  end
18
18
 
19
19
  # DID Document public key purpose.
20
20
  module PublicKeyPurpose
21
- AUTHENTICATION = 'authentication'
22
- ASSERTION_METHOD = 'assertionMethod'
23
- CAPABILITY_INVOCATION = 'capabilityInvocation'
24
- CAPABILITY_DELEGATION = 'capabilityDelegation'
25
- KEY_AGREEMENT = 'keyAgreement'
21
+ AUTHENTICATION = "authentication"
22
+ ASSERTION_METHOD = "assertionMethod"
23
+ CAPABILITY_INVOCATION = "capabilityInvocation"
24
+ CAPABILITY_DELEGATION = "capabilityDelegation"
25
+ KEY_AGREEMENT = "keyAgreement"
26
26
 
27
27
  module_function
28
28
 
@@ -31,7 +31,9 @@ module Sidetree
31
31
  end
32
32
  end
33
33
 
34
- autoload :Base, 'sidetree/op/base'
35
- autoload :Create, 'sidetree/op/create'
34
+ autoload :Base, "sidetree/op/base"
35
+ autoload :Create, "sidetree/op/create"
36
+ autoload :Recover, "sidetree/op/recover"
37
+ autoload :Deactivate, "sidetree/op/deactivate"
36
38
  end
37
39
  end
@@ -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, 'Delta does not defined.' unless delta
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, 'Delta object cannot be an array.'
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, 'Patches object in delta must be an array.'
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], '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, 'Document object missing in patch object' unless document
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, 'Patch missing or unknown property.'
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, 'Patch public key ids not an array.'
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, 'Patch missing or unknown property.'
84
+ raise Error, "Patch missing or unknown property."
85
85
  end
86
86
  unless patch[:services].instance_of?(Array)
87
- raise Error, 'Patch services not an array.'
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, 'Patch service ids not an array.'
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, 'publicKeys must be an array.'
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, 'publicKeyJwk object cannot be an array.'
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, 'Public key id is duplicated.'
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, 'purposes must be an array.'
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, 'purpose is duplicated.'
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, 'services must be an array.'
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, 'Service has missing or unknown property.'
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, 'Service id has to be unique.'
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, 'Service type too long.' if service[:type].length > 30
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, 'ServiceEndpoint must be string or object.'
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, 'id does not string.' unless id.instance_of?(String)
200
- raise Error, 'id is too long.' if id.length > 50
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, 'id does not use base64url character set.'
201
+ raise Error, "id does not use base64url character set."
203
202
  end
204
203
  end
205
204
 
@@ -218,7 +217,7 @@ module Sidetree
218
217
 
219
218
  def validate_did_type!(type)
220
219
  return unless type
221
- raise Error, 'DID type must be a string.' unless type.instance_of?(String)
220
+ raise Error, "DID type must be a string." unless type.instance_of?(String)
222
221
  if type.length > 4
223
222
  raise Error,
224
223
  "DID type string '#{type}' cannot be longer than 4 characters."
@@ -231,19 +230,19 @@ module Sidetree
231
230
 
232
231
  def validate_suffix_data!(suffix)
233
232
  if suffix.instance_of?(Array)
234
- raise Error, 'Suffix data can not be an array.'
233
+ raise Error, "Suffix data can not be an array."
235
234
  end
236
235
  suffix.keys.each do |k|
237
236
  unless %w[deltaHash recoveryCommitment type].include?(k.to_s)
238
237
  raise Error, "Property '#{k}' is not allowed in publicKeys object."
239
238
  end
240
239
  end
241
- validate_encoded_multi_hash!(suffix[:deltaHash], 'delta hash')
240
+ validate_encoded_multi_hash!(suffix[:deltaHash], "delta hash")
242
241
  validate_encoded_multi_hash!(
243
242
  suffix[:recoveryCommitment],
244
- 'recovery commitment'
243
+ "recovery commitment"
245
244
  )
246
- validate_encoded_multi_hash!(suffix[:deltaHash], 'delta hash')
245
+ validate_encoded_multi_hash!(suffix[:deltaHash], "delta hash")
247
246
  validate_did_type!(suffix[:type])
248
247
  end
249
248
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sidetree
4
- VERSION = '0.1.0'
4
+ VERSION = "0.1.1"
5
5
  end
data/lib/sidetree.rb CHANGED
@@ -1,37 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
 
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'
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 :Key, 'sidetree/key'
17
- autoload :DID, 'sidetree/did'
18
- autoload :Model, 'sidetree/model'
19
- autoload :OP, 'sidetree/op'
20
- autoload :Validator, 'sidetree/validator'
16
+ autoload :Key, "sidetree/key"
17
+ autoload :DID, "sidetree/did"
18
+ autoload :Model, "sidetree/model"
19
+ autoload :OP, "sidetree/op"
20
+ autoload :Validator, "sidetree/validator"
21
21
 
22
22
  module Params
23
23
  # Algorithm for generating hashes of protocol-related values. 0x12 = sha2-256
24
24
  HASH_ALGORITHM = [0x12]
25
- HASH_ALGORITH_STRING = 'sha2-256'
25
+ HASH_ALGORITH_STRING = "sha2-256"
26
26
 
27
27
  # Maximum canonicalized operation delta buffer size.
28
28
  MAX_DELTA_SIZE = 1000
29
29
 
30
30
  # Default DID method
31
- DEFAULT_METHOD = 'sidetree'
31
+ DEFAULT_METHOD = "sidetree"
32
32
 
33
33
  # Supported did methods.
34
- METHODS = { default: DEFAULT_METHOD, ion: 'ion' }
34
+ METHODS = { default: DEFAULT_METHOD, ion: "ion" }
35
35
 
36
36
  @network = nil
37
37
 
@@ -48,8 +48,8 @@ module Sidetree
48
48
  end
49
49
 
50
50
  module Network
51
- MAINNET = 'mainnet'
52
- TESTNET = 'test'
51
+ MAINNET = "mainnet"
52
+ TESTNET = "test"
53
53
  end
54
54
  end
55
55
 
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.6.0'
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,9 @@ 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.1.2'
44
43
  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.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - azuchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-24 00:00:00.000000000 Z
11
+ date: 2022-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ecdsa
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.2.0
69
- - !ruby/object:Gem::Dependency
70
- name: thor
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rspec
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -98,21 +84,20 @@ dependencies:
98
84
  name: prettier
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - ">="
87
+ - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '0'
89
+ version: 3.1.2
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - ">="
94
+ - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '0'
96
+ version: 3.1.2
111
97
  description: Ruby implementation for Sidetree protocol.
112
98
  email:
113
99
  - azuchi@chaintope.com
114
- executables:
115
- - ion
100
+ executables: []
116
101
  extensions: []
117
102
  extra_rdoc_files: []
118
103
  files:
@@ -130,7 +115,6 @@ files:
130
115
  - Rakefile
131
116
  - bin/console
132
117
  - bin/setup
133
- - exe/ion
134
118
  - lib/sidetree.rb
135
119
  - lib/sidetree/did.rb
136
120
  - lib/sidetree/key.rb
@@ -142,6 +126,8 @@ files:
142
126
  - lib/sidetree/op.rb
143
127
  - lib/sidetree/op/base.rb
144
128
  - lib/sidetree/op/create.rb
129
+ - lib/sidetree/op/deactivate.rb
130
+ - lib/sidetree/op/recover.rb
145
131
  - lib/sidetree/validator.rb
146
132
  - lib/sidetree/version.rb
147
133
  - sidetree.gemspec
@@ -160,7 +146,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
160
146
  requirements:
161
147
  - - ">="
162
148
  - !ruby/object:Gem::Version
163
- version: 2.6.0
149
+ version: 2.7.0
164
150
  required_rubygems_version: !ruby/object:Gem::Requirement
165
151
  requirements:
166
152
  - - ">="
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)