akeyless 3.3.4 → 3.3.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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -1
  3. data/docs/CertificateTemplateInfo.md +32 -0
  4. data/docs/CreateClassicKey.md +16 -0
  5. data/docs/CreateDFCKey.md +16 -0
  6. data/docs/CreateKey.md +16 -0
  7. data/docs/DSProducerDetails.md +8 -2
  8. data/docs/DeriveKey.md +40 -0
  9. data/docs/DeriveKeyOutput.md +20 -0
  10. data/docs/EventAction.md +26 -0
  11. data/docs/GatewayCreateProducerCertificateAutomation.md +6 -4
  12. data/docs/GatewayUpdateProducerCertificateAutomation.md +6 -4
  13. data/docs/ItemGeneralInfo.md +2 -0
  14. data/docs/TargetTypeDetailsInput.md +8 -2
  15. data/docs/V2Api.md +126 -0
  16. data/lib/akeyless/api/v2_api.rb +128 -0
  17. data/lib/akeyless/models/certificate_template_info.rb +282 -0
  18. data/lib/akeyless/models/create_classic_key.rb +81 -1
  19. data/lib/akeyless/models/create_dfc_key.rb +81 -1
  20. data/lib/akeyless/models/create_key.rb +81 -1
  21. data/lib/akeyless/models/derive_key.rb +362 -0
  22. data/lib/akeyless/models/derive_key_output.rb +228 -0
  23. data/lib/akeyless/models/ds_producer_details.rb +30 -1
  24. data/lib/akeyless/models/event_action.rb +272 -0
  25. data/lib/akeyless/models/gateway_create_producer_certificate_automation.rb +30 -18
  26. data/lib/akeyless/models/gateway_update_producer_certificate_automation.rb +30 -18
  27. data/lib/akeyless/models/item_general_info.rb +10 -1
  28. data/lib/akeyless/models/target_type_details_input.rb +30 -1
  29. data/lib/akeyless/version.rb +1 -1
  30. data/lib/akeyless.rb +4 -0
  31. data/spec/models/certificate_template_info_spec.rb +76 -0
  32. data/spec/models/derive_key_output_spec.rb +40 -0
  33. data/spec/models/derive_key_spec.rb +100 -0
  34. data/spec/models/event_action_spec.rb +58 -0
  35. metadata +18 -2
@@ -4371,6 +4371,70 @@ module Akeyless
4371
4371
  return data, status_code, headers
4372
4372
  end
4373
4373
 
4374
+ # @param body [DeriveKey]
4375
+ # @param [Hash] opts the optional parameters
4376
+ # @return [DeriveKeyOutput]
4377
+ def derive_key(body, opts = {})
4378
+ data, _status_code, _headers = derive_key_with_http_info(body, opts)
4379
+ data
4380
+ end
4381
+
4382
+ # @param body [DeriveKey]
4383
+ # @param [Hash] opts the optional parameters
4384
+ # @return [Array<(DeriveKeyOutput, Integer, Hash)>] DeriveKeyOutput data, response status code and response headers
4385
+ def derive_key_with_http_info(body, opts = {})
4386
+ if @api_client.config.debugging
4387
+ @api_client.config.logger.debug 'Calling API: V2Api.derive_key ...'
4388
+ end
4389
+ # verify the required parameter 'body' is set
4390
+ if @api_client.config.client_side_validation && body.nil?
4391
+ fail ArgumentError, "Missing the required parameter 'body' when calling V2Api.derive_key"
4392
+ end
4393
+ # resource path
4394
+ local_var_path = '/derive-key'
4395
+
4396
+ # query parameters
4397
+ query_params = opts[:query_params] || {}
4398
+
4399
+ # header parameters
4400
+ header_params = opts[:header_params] || {}
4401
+ # HTTP header 'Accept' (if needed)
4402
+ header_params['Accept'] = @api_client.select_header_accept(['application/json'])
4403
+ # HTTP header 'Content-Type'
4404
+ content_type = @api_client.select_header_content_type(['application/json'])
4405
+ if !content_type.nil?
4406
+ header_params['Content-Type'] = content_type
4407
+ end
4408
+
4409
+ # form parameters
4410
+ form_params = opts[:form_params] || {}
4411
+
4412
+ # http body (model)
4413
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(body)
4414
+
4415
+ # return_type
4416
+ return_type = opts[:debug_return_type] || 'DeriveKeyOutput'
4417
+
4418
+ # auth_names
4419
+ auth_names = opts[:debug_auth_names] || []
4420
+
4421
+ new_options = opts.merge(
4422
+ :operation => :"V2Api.derive_key",
4423
+ :header_params => header_params,
4424
+ :query_params => query_params,
4425
+ :form_params => form_params,
4426
+ :body => post_body,
4427
+ :auth_names => auth_names,
4428
+ :return_type => return_type
4429
+ )
4430
+
4431
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
4432
+ if @api_client.config.debugging
4433
+ @api_client.config.logger.debug "API called: V2Api#derive_key\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
4434
+ end
4435
+ return data, status_code, headers
4436
+ end
4437
+
4374
4438
  # @param body [DescribeAssoc]
4375
4439
  # @param [Hash] opts the optional parameters
4376
4440
  # @return [RoleAssociationDetails]
@@ -5192,6 +5256,70 @@ module Akeyless
5192
5256
  return data, status_code, headers
5193
5257
  end
5194
5258
 
5259
+ # @param body [EventAction]
5260
+ # @param [Hash] opts the optional parameters
5261
+ # @return [Object]
5262
+ def event_action(body, opts = {})
5263
+ data, _status_code, _headers = event_action_with_http_info(body, opts)
5264
+ data
5265
+ end
5266
+
5267
+ # @param body [EventAction]
5268
+ # @param [Hash] opts the optional parameters
5269
+ # @return [Array<(Object, Integer, Hash)>] Object data, response status code and response headers
5270
+ def event_action_with_http_info(body, opts = {})
5271
+ if @api_client.config.debugging
5272
+ @api_client.config.logger.debug 'Calling API: V2Api.event_action ...'
5273
+ end
5274
+ # verify the required parameter 'body' is set
5275
+ if @api_client.config.client_side_validation && body.nil?
5276
+ fail ArgumentError, "Missing the required parameter 'body' when calling V2Api.event_action"
5277
+ end
5278
+ # resource path
5279
+ local_var_path = '/event-action'
5280
+
5281
+ # query parameters
5282
+ query_params = opts[:query_params] || {}
5283
+
5284
+ # header parameters
5285
+ header_params = opts[:header_params] || {}
5286
+ # HTTP header 'Accept' (if needed)
5287
+ header_params['Accept'] = @api_client.select_header_accept(['application/json'])
5288
+ # HTTP header 'Content-Type'
5289
+ content_type = @api_client.select_header_content_type(['application/json'])
5290
+ if !content_type.nil?
5291
+ header_params['Content-Type'] = content_type
5292
+ end
5293
+
5294
+ # form parameters
5295
+ form_params = opts[:form_params] || {}
5296
+
5297
+ # http body (model)
5298
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(body)
5299
+
5300
+ # return_type
5301
+ return_type = opts[:debug_return_type] || 'Object'
5302
+
5303
+ # auth_names
5304
+ auth_names = opts[:debug_auth_names] || []
5305
+
5306
+ new_options = opts.merge(
5307
+ :operation => :"V2Api.event_action",
5308
+ :header_params => header_params,
5309
+ :query_params => query_params,
5310
+ :form_params => form_params,
5311
+ :body => post_body,
5312
+ :auth_names => auth_names,
5313
+ :return_type => return_type
5314
+ )
5315
+
5316
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
5317
+ if @api_client.config.debugging
5318
+ @api_client.config.logger.debug "API called: V2Api#event_action\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
5319
+ end
5320
+ return data, status_code, headers
5321
+ end
5322
+
5195
5323
  # @param body [ExportClassicKey]
5196
5324
  # @param [Hash] opts the optional parameters
5197
5325
  # @return [ExportClassicKeyOutput]
@@ -0,0 +1,282 @@
1
+ =begin
2
+ #Akeyless API
3
+
4
+ #The purpose of this application is to provide access to Akeyless API.
5
+
6
+ The version of the OpenAPI document: 2.0
7
+ Contact: support@akeyless.io
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 7.0.0-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Akeyless
17
+ class CertificateTemplateInfo
18
+ attr_accessor :common_name
19
+
20
+ attr_accessor :country
21
+
22
+ attr_accessor :digest_algo
23
+
24
+ attr_accessor :locality
25
+
26
+ attr_accessor :organization
27
+
28
+ attr_accessor :province
29
+
30
+ attr_accessor :self_signed_enabled
31
+
32
+ attr_accessor :ttl
33
+
34
+ # Attribute mapping from ruby-style variable name to JSON key.
35
+ def self.attribute_map
36
+ {
37
+ :'common_name' => :'common_name',
38
+ :'country' => :'country',
39
+ :'digest_algo' => :'digest_algo',
40
+ :'locality' => :'locality',
41
+ :'organization' => :'organization',
42
+ :'province' => :'province',
43
+ :'self_signed_enabled' => :'self_signed_enabled',
44
+ :'ttl' => :'ttl'
45
+ }
46
+ end
47
+
48
+ # Returns all the JSON keys this model knows about
49
+ def self.acceptable_attributes
50
+ attribute_map.values
51
+ end
52
+
53
+ # Attribute type mapping.
54
+ def self.openapi_types
55
+ {
56
+ :'common_name' => :'String',
57
+ :'country' => :'String',
58
+ :'digest_algo' => :'String',
59
+ :'locality' => :'String',
60
+ :'organization' => :'String',
61
+ :'province' => :'String',
62
+ :'self_signed_enabled' => :'Boolean',
63
+ :'ttl' => :'Integer'
64
+ }
65
+ end
66
+
67
+ # List of attributes with nullable: true
68
+ def self.openapi_nullable
69
+ Set.new([
70
+ ])
71
+ end
72
+
73
+ # Initializes the object
74
+ # @param [Hash] attributes Model attributes in the form of hash
75
+ def initialize(attributes = {})
76
+ if (!attributes.is_a?(Hash))
77
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Akeyless::CertificateTemplateInfo` initialize method"
78
+ end
79
+
80
+ # check to see if the attribute exists and convert string to symbol for hash key
81
+ attributes = attributes.each_with_object({}) { |(k, v), h|
82
+ if (!self.class.attribute_map.key?(k.to_sym))
83
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Akeyless::CertificateTemplateInfo`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
84
+ end
85
+ h[k.to_sym] = v
86
+ }
87
+
88
+ if attributes.key?(:'common_name')
89
+ self.common_name = attributes[:'common_name']
90
+ end
91
+
92
+ if attributes.key?(:'country')
93
+ self.country = attributes[:'country']
94
+ end
95
+
96
+ if attributes.key?(:'digest_algo')
97
+ self.digest_algo = attributes[:'digest_algo']
98
+ end
99
+
100
+ if attributes.key?(:'locality')
101
+ self.locality = attributes[:'locality']
102
+ end
103
+
104
+ if attributes.key?(:'organization')
105
+ self.organization = attributes[:'organization']
106
+ end
107
+
108
+ if attributes.key?(:'province')
109
+ self.province = attributes[:'province']
110
+ end
111
+
112
+ if attributes.key?(:'self_signed_enabled')
113
+ self.self_signed_enabled = attributes[:'self_signed_enabled']
114
+ end
115
+
116
+ if attributes.key?(:'ttl')
117
+ self.ttl = attributes[:'ttl']
118
+ end
119
+ end
120
+
121
+ # Show invalid properties with the reasons. Usually used together with valid?
122
+ # @return Array for valid properties with the reasons
123
+ def list_invalid_properties
124
+ invalid_properties = Array.new
125
+ invalid_properties
126
+ end
127
+
128
+ # Check to see if the all the properties in the model are valid
129
+ # @return true if the model is valid
130
+ def valid?
131
+ true
132
+ end
133
+
134
+ # Checks equality by comparing each attribute.
135
+ # @param [Object] Object to be compared
136
+ def ==(o)
137
+ return true if self.equal?(o)
138
+ self.class == o.class &&
139
+ common_name == o.common_name &&
140
+ country == o.country &&
141
+ digest_algo == o.digest_algo &&
142
+ locality == o.locality &&
143
+ organization == o.organization &&
144
+ province == o.province &&
145
+ self_signed_enabled == o.self_signed_enabled &&
146
+ ttl == o.ttl
147
+ end
148
+
149
+ # @see the `==` method
150
+ # @param [Object] Object to be compared
151
+ def eql?(o)
152
+ self == o
153
+ end
154
+
155
+ # Calculates hash code according to all attributes.
156
+ # @return [Integer] Hash code
157
+ def hash
158
+ [common_name, country, digest_algo, locality, organization, province, self_signed_enabled, ttl].hash
159
+ end
160
+
161
+ # Builds the object from hash
162
+ # @param [Hash] attributes Model attributes in the form of hash
163
+ # @return [Object] Returns the model itself
164
+ def self.build_from_hash(attributes)
165
+ new.build_from_hash(attributes)
166
+ end
167
+
168
+ # Builds the object from hash
169
+ # @param [Hash] attributes Model attributes in the form of hash
170
+ # @return [Object] Returns the model itself
171
+ def build_from_hash(attributes)
172
+ return nil unless attributes.is_a?(Hash)
173
+ attributes = attributes.transform_keys(&:to_sym)
174
+ self.class.openapi_types.each_pair do |key, type|
175
+ if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
176
+ self.send("#{key}=", nil)
177
+ elsif type =~ /\AArray<(.*)>/i
178
+ # check to ensure the input is an array given that the attribute
179
+ # is documented as an array but the input is not
180
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
181
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
182
+ end
183
+ elsif !attributes[self.class.attribute_map[key]].nil?
184
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
185
+ end
186
+ end
187
+
188
+ self
189
+ end
190
+
191
+ # Deserializes the data based on type
192
+ # @param string type Data type
193
+ # @param string value Value to be deserialized
194
+ # @return [Object] Deserialized data
195
+ def _deserialize(type, value)
196
+ case type.to_sym
197
+ when :Time
198
+ Time.parse(value)
199
+ when :Date
200
+ Date.parse(value)
201
+ when :String
202
+ value.to_s
203
+ when :Integer
204
+ value.to_i
205
+ when :Float
206
+ value.to_f
207
+ when :Boolean
208
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
209
+ true
210
+ else
211
+ false
212
+ end
213
+ when :Object
214
+ # generic object (usually a Hash), return directly
215
+ value
216
+ when /\AArray<(?<inner_type>.+)>\z/
217
+ inner_type = Regexp.last_match[:inner_type]
218
+ value.map { |v| _deserialize(inner_type, v) }
219
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
220
+ k_type = Regexp.last_match[:k_type]
221
+ v_type = Regexp.last_match[:v_type]
222
+ {}.tap do |hash|
223
+ value.each do |k, v|
224
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
225
+ end
226
+ end
227
+ else # model
228
+ # models (e.g. Pet) or oneOf
229
+ klass = Akeyless.const_get(type)
230
+ klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
231
+ end
232
+ end
233
+
234
+ # Returns the string representation of the object
235
+ # @return [String] String presentation of the object
236
+ def to_s
237
+ to_hash.to_s
238
+ end
239
+
240
+ # to_body is an alias to to_hash (backward compatibility)
241
+ # @return [Hash] Returns the object in the form of hash
242
+ def to_body
243
+ to_hash
244
+ end
245
+
246
+ # Returns the object in the form of hash
247
+ # @return [Hash] Returns the object in the form of hash
248
+ def to_hash
249
+ hash = {}
250
+ self.class.attribute_map.each_pair do |attr, param|
251
+ value = self.send(attr)
252
+ if value.nil?
253
+ is_nullable = self.class.openapi_nullable.include?(attr)
254
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
255
+ end
256
+
257
+ hash[param] = _to_hash(value)
258
+ end
259
+ hash
260
+ end
261
+
262
+ # Outputs non-array value in the form of hash
263
+ # For object, use to_hash. Otherwise, just return the value
264
+ # @param [Object] value Any valid value
265
+ # @return [Hash] Returns the value in the form of hash
266
+ def _to_hash(value)
267
+ if value.is_a?(Array)
268
+ value.compact.map { |v| _to_hash(v) }
269
+ elsif value.is_a?(Hash)
270
+ {}.tap do |hash|
271
+ value.each { |k, v| hash[k] = _to_hash(v) }
272
+ end
273
+ elsif value.respond_to? :to_hash
274
+ value.to_hash
275
+ else
276
+ value
277
+ end
278
+ end
279
+
280
+ end
281
+
282
+ end
@@ -22,12 +22,36 @@ module Akeyless
22
22
  # Certificate in a PEM format.
23
23
  attr_accessor :cert_file_data
24
24
 
25
+ # Common name for the generated certificate. Relevant only for generate-self-signed-certificate.
26
+ attr_accessor :certificate_common_name
27
+
28
+ # Country name for the generated certificate. Relevant only for generate-self-signed-certificate.
29
+ attr_accessor :certificate_country
30
+
31
+ # Digest algorithm to be used for the certificate key signing. Currently, we support only \"sha256\" so we hide this option for CLI.
32
+ attr_accessor :certificate_digest_algo
33
+
34
+ # Locality for the generated certificate. Relevant only for generate-self-signed-certificate.
35
+ attr_accessor :certificate_locality
36
+
37
+ # Organization name for the generated certificate. Relevant only for generate-self-signed-certificate.
38
+ attr_accessor :certificate_organization
39
+
40
+ # Province name for the generated certificate. Relevant only for generate-self-signed-certificate.
41
+ attr_accessor :certificate_province
42
+
43
+ # TTL in days for the generated certificate. Required only for generate-self-signed-certificate.
44
+ attr_accessor :certificate_ttl
45
+
25
46
  # Protection from accidental deletion of this item [true/false]
26
47
  attr_accessor :delete_protection
27
48
 
28
49
  # Description of the object
29
50
  attr_accessor :description
30
51
 
52
+ # Whether to generate a self signed certificate with the key. If set, --certificate-ttl must be provided.
53
+ attr_accessor :generate_self_signed_certificate
54
+
31
55
  # gpg alg: Relevant only if GPG key type selected; options: [RSA1024, RSA2048, RSA3072, RSA4096, Ed25519]
32
56
  attr_accessor :gpg_alg
33
57
 
@@ -60,8 +84,16 @@ module Akeyless
60
84
  {
61
85
  :'alg' => :'alg',
62
86
  :'cert_file_data' => :'cert-file-data',
87
+ :'certificate_common_name' => :'certificate-common-name',
88
+ :'certificate_country' => :'certificate-country',
89
+ :'certificate_digest_algo' => :'certificate-digest-algo',
90
+ :'certificate_locality' => :'certificate-locality',
91
+ :'certificate_organization' => :'certificate-organization',
92
+ :'certificate_province' => :'certificate-province',
93
+ :'certificate_ttl' => :'certificate-ttl',
63
94
  :'delete_protection' => :'delete_protection',
64
95
  :'description' => :'description',
96
+ :'generate_self_signed_certificate' => :'generate-self-signed-certificate',
65
97
  :'gpg_alg' => :'gpg-alg',
66
98
  :'json' => :'json',
67
99
  :'key_data' => :'key-data',
@@ -84,8 +116,16 @@ module Akeyless
84
116
  {
85
117
  :'alg' => :'String',
86
118
  :'cert_file_data' => :'String',
119
+ :'certificate_common_name' => :'String',
120
+ :'certificate_country' => :'String',
121
+ :'certificate_digest_algo' => :'String',
122
+ :'certificate_locality' => :'String',
123
+ :'certificate_organization' => :'String',
124
+ :'certificate_province' => :'String',
125
+ :'certificate_ttl' => :'Integer',
87
126
  :'delete_protection' => :'String',
88
127
  :'description' => :'String',
128
+ :'generate_self_signed_certificate' => :'Boolean',
89
129
  :'gpg_alg' => :'String',
90
130
  :'json' => :'Boolean',
91
131
  :'key_data' => :'String',
@@ -127,6 +167,34 @@ module Akeyless
127
167
  self.cert_file_data = attributes[:'cert_file_data']
128
168
  end
129
169
 
170
+ if attributes.key?(:'certificate_common_name')
171
+ self.certificate_common_name = attributes[:'certificate_common_name']
172
+ end
173
+
174
+ if attributes.key?(:'certificate_country')
175
+ self.certificate_country = attributes[:'certificate_country']
176
+ end
177
+
178
+ if attributes.key?(:'certificate_digest_algo')
179
+ self.certificate_digest_algo = attributes[:'certificate_digest_algo']
180
+ end
181
+
182
+ if attributes.key?(:'certificate_locality')
183
+ self.certificate_locality = attributes[:'certificate_locality']
184
+ end
185
+
186
+ if attributes.key?(:'certificate_organization')
187
+ self.certificate_organization = attributes[:'certificate_organization']
188
+ end
189
+
190
+ if attributes.key?(:'certificate_province')
191
+ self.certificate_province = attributes[:'certificate_province']
192
+ end
193
+
194
+ if attributes.key?(:'certificate_ttl')
195
+ self.certificate_ttl = attributes[:'certificate_ttl']
196
+ end
197
+
130
198
  if attributes.key?(:'delete_protection')
131
199
  self.delete_protection = attributes[:'delete_protection']
132
200
  end
@@ -135,6 +203,10 @@ module Akeyless
135
203
  self.description = attributes[:'description']
136
204
  end
137
205
 
206
+ if attributes.key?(:'generate_self_signed_certificate')
207
+ self.generate_self_signed_certificate = attributes[:'generate_self_signed_certificate']
208
+ end
209
+
138
210
  if attributes.key?(:'gpg_alg')
139
211
  self.gpg_alg = attributes[:'gpg_alg']
140
212
  end
@@ -206,8 +278,16 @@ module Akeyless
206
278
  self.class == o.class &&
207
279
  alg == o.alg &&
208
280
  cert_file_data == o.cert_file_data &&
281
+ certificate_common_name == o.certificate_common_name &&
282
+ certificate_country == o.certificate_country &&
283
+ certificate_digest_algo == o.certificate_digest_algo &&
284
+ certificate_locality == o.certificate_locality &&
285
+ certificate_organization == o.certificate_organization &&
286
+ certificate_province == o.certificate_province &&
287
+ certificate_ttl == o.certificate_ttl &&
209
288
  delete_protection == o.delete_protection &&
210
289
  description == o.description &&
290
+ generate_self_signed_certificate == o.generate_self_signed_certificate &&
211
291
  gpg_alg == o.gpg_alg &&
212
292
  json == o.json &&
213
293
  key_data == o.key_data &&
@@ -228,7 +308,7 @@ module Akeyless
228
308
  # Calculates hash code according to all attributes.
229
309
  # @return [Integer] Hash code
230
310
  def hash
231
- [alg, cert_file_data, delete_protection, description, gpg_alg, json, key_data, metadata, name, protection_key_name, tags, token, uid_token].hash
311
+ [alg, cert_file_data, certificate_common_name, certificate_country, certificate_digest_algo, certificate_locality, certificate_organization, certificate_province, certificate_ttl, delete_protection, description, generate_self_signed_certificate, gpg_alg, json, key_data, metadata, name, protection_key_name, tags, token, uid_token].hash
232
312
  end
233
313
 
234
314
  # Builds the object from hash