pki_express 1.3.0 → 1.3.2
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/.gitattributes +2 -2
- data/.github/workflows/test.yml +22 -0
- data/.gitignore +27 -27
- data/.rspec +1 -0
- data/CHANGELOG.md +19 -12
- data/Gemfile +9 -4
- data/README.md +24 -24
- data/Rakefile +7 -1
- data/lib/pki_express/auth_complete_result.rb +21 -21
- data/lib/pki_express/auth_start_result.rb +76 -76
- data/lib/pki_express/authentication.rb +284 -284
- data/lib/pki_express/base_signer.rb +54 -54
- data/lib/pki_express/cades_signature.rb +89 -89
- data/lib/pki_express/cades_signature_starter.rb +242 -242
- data/lib/pki_express/check_service_result.rb +15 -15
- data/lib/pki_express/command_error.rb +13 -13
- data/lib/pki_express/commands.rb +24 -24
- data/lib/pki_express/digest_algorithm.rb +118 -118
- data/lib/pki_express/digest_algorithm_and_value.rb +30 -30
- data/lib/pki_express/discovery_service_result.rb +25 -25
- data/lib/pki_express/enum.rb +9 -9
- data/lib/pki_express/error_codes.rb +46 -46
- data/lib/pki_express/installation_not_found_error.rb +8 -8
- data/lib/pki_express/name.rb +47 -47
- data/lib/pki_express/oids.rb +30 -30
- data/lib/pki_express/pades_certification_level.rb +7 -7
- data/lib/pki_express/pades_horizontal_align.rb +9 -9
- data/lib/pki_express/pades_measurement_units.rb +8 -8
- data/lib/pki_express/pades_page_optimization.rb +50 -50
- data/lib/pki_express/pades_page_orientation.rb +9 -9
- data/lib/pki_express/pades_paper_size.rb +21 -21
- data/lib/pki_express/pades_signature.rb +16 -16
- data/lib/pki_express/pades_signature_explorer.rb +30 -30
- data/lib/pki_express/pades_signature_starter.rb +251 -251
- data/lib/pki_express/pades_signer.rb +274 -274
- data/lib/pki_express/pades_signer_info.rb +9 -9
- data/lib/pki_express/pades_size.rb +17 -17
- data/lib/pki_express/pades_text_horizontal_align.rb +8 -8
- data/lib/pki_express/pades_vertical_align.rb +9 -9
- data/lib/pki_express/pades_visual_auto_positioning.rb +21 -21
- data/lib/pki_express/pades_visual_image.rb +51 -51
- data/lib/pki_express/pades_visual_manual_positioning.rb +16 -16
- data/lib/pki_express/pades_visual_positioning.rb +27 -27
- data/lib/pki_express/pades_visual_rectangle.rb +74 -74
- data/lib/pki_express/pades_visual_representation.rb +22 -22
- data/lib/pki_express/pades_visual_text.rb +35 -35
- data/lib/pki_express/pk_algorithms.rb +157 -157
- data/lib/pki_express/pk_certificate.rb +61 -61
- data/lib/pki_express/pki_brazil_certificate_fields.rb +57 -57
- data/lib/pki_express/pki_brazil_certificate_types.rb +19 -19
- data/lib/pki_express/pki_express_config.rb +39 -26
- data/lib/pki_express/pki_express_operator.rb +240 -234
- data/lib/pki_express/pki_italy_certificate_fields.rb +15 -15
- data/lib/pki_express/pki_italy_certificate_types.rb +11 -11
- data/lib/pki_express/signature_algorithm_and_value.rb +34 -34
- data/lib/pki_express/signature_explorer.rb +74 -74
- data/lib/pki_express/signature_finisher.rb +314 -314
- data/lib/pki_express/signature_policy_identifier.rb +20 -20
- data/lib/pki_express/signature_start_result.rb +12 -12
- data/lib/pki_express/signature_starter.rb +116 -116
- data/lib/pki_express/signer.rb +151 -151
- data/lib/pki_express/standard_signature_policies.rb +58 -58
- data/lib/pki_express/timestamp_authority.rb +50 -50
- data/lib/pki_express/trust_service_auth_parameters.rb +20 -20
- data/lib/pki_express/trust_service_info.rb +37 -37
- data/lib/pki_express/trust_service_manager.rb +258 -258
- data/lib/pki_express/trust_service_session_result.rb +29 -29
- data/lib/pki_express/trust_service_session_types.rb +7 -7
- data/lib/pki_express/tsa_authentication_type.rb +14 -14
- data/lib/pki_express/validation_error.rb +8 -8
- data/lib/pki_express/validation_item.rb +43 -43
- data/lib/pki_express/validation_item_types.rb +103 -103
- data/lib/pki_express/validation_results.rb +120 -120
- data/lib/pki_express/version.rb +3 -3
- data/lib/pki_express/version_manager.rb +20 -20
- data/lib/pki_express.rb +69 -69
- data/pki_express.gemspec +26 -26
- data/spec/pki_express/pki_express_config_spec.rb +73 -0
- data/spec/pki_express/pki_express_operator_spec.rb +31 -0
- data/spec/spec_helper.rb +13 -0
- metadata +17 -9
@@ -1,234 +1,240 @@
|
|
1
|
-
require 'shellwords'
|
2
|
-
require '
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@
|
15
|
-
@
|
16
|
-
|
17
|
-
@
|
18
|
-
@
|
19
|
-
@
|
20
|
-
@
|
21
|
-
@
|
22
|
-
@
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
@
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
# Add PKI Express
|
73
|
-
cmd_args
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
# Add
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
if
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
#
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
if status === ErrorCodes::
|
152
|
-
raise
|
153
|
-
end
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
#
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
home = File.join(ENV['
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
end
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
end
|
233
|
-
|
234
|
-
|
1
|
+
require 'shellwords'
|
2
|
+
require 'securerandom'
|
3
|
+
require 'open3'
|
4
|
+
require 'tmpdir'
|
5
|
+
require 'tempfile'
|
6
|
+
|
7
|
+
module PkiExpress
|
8
|
+
|
9
|
+
class PkiExpressOperator
|
10
|
+
attr_accessor :offline, :trust_lacuna_test_root, :signature_policy,
|
11
|
+
:timestamp_authority, :culture, :time_zone
|
12
|
+
|
13
|
+
def initialize(config = PkiExpressConfig.new)
|
14
|
+
@temp_files = []
|
15
|
+
@file_references = {}
|
16
|
+
|
17
|
+
@config = config
|
18
|
+
@version_manager = VersionManager.new
|
19
|
+
@trusted_roots = []
|
20
|
+
@offline = false
|
21
|
+
@trust_lacuna_test_root = false
|
22
|
+
@signature_policy = nil
|
23
|
+
@timestamp_authority = nil
|
24
|
+
@culture = nil
|
25
|
+
@time_zone = nil
|
26
|
+
|
27
|
+
@id = SecureRandom.uuid
|
28
|
+
ObjectSpace.define_finalizer(@id, proc {
|
29
|
+
self.class.finalize(@temp_files)
|
30
|
+
})
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.finalize(temp_files)
|
34
|
+
temp_files.each do |file|
|
35
|
+
File.delete(file) if File.exist?(file)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_file_reference(key, reference_path)
|
40
|
+
|
41
|
+
if reference_path.nil?
|
42
|
+
raise ArgumentError.new('The provided reference path is not valid')
|
43
|
+
end
|
44
|
+
|
45
|
+
unless File.exists?(reference_path)
|
46
|
+
raise ArgumentError.new('The provided reference file was not found')
|
47
|
+
end
|
48
|
+
|
49
|
+
@file_references[key] = reference_path
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_trusted_root(root_path)
|
53
|
+
|
54
|
+
if root_path.nil?
|
55
|
+
raise ArgumentError.new('The provided trusted root path is not valid')
|
56
|
+
end
|
57
|
+
|
58
|
+
unless File.exists?(root_path)
|
59
|
+
raise ArgumentError.new("The provided trusted root path doesn't exist: #{root_path}")
|
60
|
+
end
|
61
|
+
|
62
|
+
@trusted_roots.append(root_path)
|
63
|
+
end
|
64
|
+
|
65
|
+
protected
|
66
|
+
def invoke_plain(command, args = [])
|
67
|
+
invoke(command, args, true)
|
68
|
+
end
|
69
|
+
|
70
|
+
def invoke(command, args = [], plain_output = false)
|
71
|
+
|
72
|
+
# Add PKI Express invocation arguments.
|
73
|
+
cmd_args = []
|
74
|
+
get_pki_express_invocation.each do |arg|
|
75
|
+
cmd_args.append(arg)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Add PKI Express command.
|
79
|
+
cmd_args.append(command)
|
80
|
+
|
81
|
+
# Add PKI Express arguments.
|
82
|
+
cmd_args.concat args
|
83
|
+
|
84
|
+
# Add file references if added.
|
85
|
+
unless @file_references.nil?
|
86
|
+
@file_references.each do |key, value|
|
87
|
+
cmd_args.append('--file-reference')
|
88
|
+
cmd_args.append("#{key}=#{value}")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Add trusted roots if added.
|
93
|
+
unless @trusted_roots.nil?
|
94
|
+
@trusted_roots.each do |trusted_root|
|
95
|
+
cmd_args.append('--trust-root')
|
96
|
+
cmd_args.append(trusted_root)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Add trust Lacuna test root if set.
|
101
|
+
if @trust_lacuna_test_root
|
102
|
+
cmd_args.append('--trust-test')
|
103
|
+
end
|
104
|
+
|
105
|
+
# Add offline option if provided.
|
106
|
+
if @offline
|
107
|
+
cmd_args.append('--offline')
|
108
|
+
# This option can only be used on versions greater than 1.2 of the
|
109
|
+
# PKI Express.
|
110
|
+
@version_manager.require_version('1.2')
|
111
|
+
end
|
112
|
+
|
113
|
+
# Add base64 output option
|
114
|
+
unless plain_output
|
115
|
+
cmd_args.append('--base64')
|
116
|
+
end
|
117
|
+
|
118
|
+
unless @culture.nil?
|
119
|
+
cmd_args.append('--culture')
|
120
|
+
cmd_args.append(@culture)
|
121
|
+
# This option can only be used on versions
|
122
|
+
# greater than 1.10 of the PKI Express.
|
123
|
+
@version_manager.require_version('1.10')
|
124
|
+
end
|
125
|
+
|
126
|
+
unless @time_zone.nil?
|
127
|
+
cmd_args.append('--timezone')
|
128
|
+
cmd_args.append(@time_zone)
|
129
|
+
# This option can only be used on versions
|
130
|
+
# greater than 1.10 of the PKI Express.
|
131
|
+
@version_manager.require_version('1.10')
|
132
|
+
end
|
133
|
+
|
134
|
+
# Verify the necessity of using the --min-version flag.
|
135
|
+
if @version_manager.require_min_version_flag?
|
136
|
+
cmd_args.append('--min-version')
|
137
|
+
cmd_args.append(@version_manager.min_version.to_s)
|
138
|
+
end
|
139
|
+
|
140
|
+
# Escape command args
|
141
|
+
escaped = []
|
142
|
+
cmd_args.each do |arg|
|
143
|
+
escaped.append("\"#{arg}\"")
|
144
|
+
# escaped.append(Shellwords.escape(arg))
|
145
|
+
end
|
146
|
+
|
147
|
+
# Perform the "dotnet" command.
|
148
|
+
stdout, _stderr, status = Open3.capture3(escaped.join(' '))
|
149
|
+
|
150
|
+
if status != 0
|
151
|
+
if status === ErrorCodes::BAD_SYNTAX and @version_manager.min_version > '1.0'
|
152
|
+
raise CommandError.new(status, "#{stdout} >>>>> TIP: This operation requires PKI Express #{@version_manager.min_version}, please check your PKI Express version.")
|
153
|
+
end
|
154
|
+
if status === ErrorCodes::VALIDATION_FAILED
|
155
|
+
raise ValidationError.new(stdout)
|
156
|
+
end
|
157
|
+
if status === ErrorCodes::COMMAND_NOT_FOUND
|
158
|
+
raise InstallationNotFoundError.new("Could not find PKI Express's installation.")
|
159
|
+
end
|
160
|
+
|
161
|
+
raise CommandError.new(status, stdout)
|
162
|
+
end
|
163
|
+
|
164
|
+
# Return stdout if the command executed with success.
|
165
|
+
stdout
|
166
|
+
end
|
167
|
+
|
168
|
+
def get_pki_express_invocation
|
169
|
+
|
170
|
+
# Identify OS.
|
171
|
+
if (/linux/ =~ RUBY_PLATFORM) != nil
|
172
|
+
system = :linux
|
173
|
+
elsif (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
|
174
|
+
system = :win
|
175
|
+
else
|
176
|
+
raise Error.new("Unsupported OS: #{RUBY_PLATFORM}")
|
177
|
+
end
|
178
|
+
|
179
|
+
# Verify if hte PKI Express home is set on configuration
|
180
|
+
home = @config.pki_express_home
|
181
|
+
if not home.nil?
|
182
|
+
|
183
|
+
if system == :linux
|
184
|
+
unless File.exists?(File.expand_path('pkie.dll', home))
|
185
|
+
raise InstallationNotFoundError.new("The file pkie.dll could not be found on directory #{home}")
|
186
|
+
end
|
187
|
+
elsif not File.exists?(File.expand_path('pkie.exe', home))
|
188
|
+
raise InstallationNotFoundError.new("The file pkie.exe could not be found on directory #{home}")
|
189
|
+
end
|
190
|
+
|
191
|
+
elsif system == :win
|
192
|
+
|
193
|
+
if File.exists?(File.join(ENV['ProgramW6432'], 'Lacuna Software', 'PKI Express', 'pkie.exe'))
|
194
|
+
home = File.join(ENV['ProgramW6432'], 'Lacuna Software', 'PKI Express')
|
195
|
+
elsif File.exists?(File.join(ENV['ProgramFiles(x86)'], 'Lacuna Software', 'PKI Express', 'pkie.exe'))
|
196
|
+
home = File.join(ENV['ProgramFiles(x86)'], 'Lacuna Software', 'PKI Express')
|
197
|
+
elsif File.exists?(File.join(ENV['LOCALAPPDATA'], 'Lacuna Software', 'PKI Express', 'pkie.exe'))
|
198
|
+
home = File.join(ENV['LOCALAPPDATA'], 'Lacuna Software', 'PKI Express')
|
199
|
+
elsif File.exists?(File.join(ENV['LOCALAPPDATA'], 'Lacuna Software (x86)', 'PKI Express', 'pkie.exe'))
|
200
|
+
home = File.join(ENV['LOCALAPPDATA'], 'Lacuna Software (x86)', 'PKI Express')
|
201
|
+
end
|
202
|
+
|
203
|
+
if home.nil?
|
204
|
+
raise InstallationNotFoundError.new('Could not determine the
|
205
|
+
installation folder of PKI Express. If you installed PKI Express on
|
206
|
+
a custom folder, make sure your chosen folder are specified on the
|
207
|
+
PkiExpressConfig object.')
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
if system == :linux
|
212
|
+
unless home.nil?
|
213
|
+
return ['dotnet', File.expand_path('pkie.dll', home)]
|
214
|
+
end
|
215
|
+
|
216
|
+
return ['pkie']
|
217
|
+
end
|
218
|
+
[File.expand_path('pkie.exe', home)]
|
219
|
+
end
|
220
|
+
|
221
|
+
def parse_output(data_base64)
|
222
|
+
json_buff = Base64.decode64(data_base64)
|
223
|
+
JSON.parse(json_buff, symbolize_names: true)
|
224
|
+
end
|
225
|
+
|
226
|
+
def create_temp_file
|
227
|
+
file = Tempfile.new('pkie', @config.temp_folder)
|
228
|
+
temp_path = file.path
|
229
|
+
file.close
|
230
|
+
@temp_files.append(temp_path)
|
231
|
+
temp_path
|
232
|
+
end
|
233
|
+
|
234
|
+
def get_transfer_filename
|
235
|
+
# Generate 16 random bytes. Return a string containing the hex decimals of
|
236
|
+
# this array.
|
237
|
+
SecureRandom.hex(16)
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
@@ -1,16 +1,16 @@
|
|
1
|
-
class PkiItalyCertificateFields
|
2
|
-
|
3
|
-
attr_accessor :certificate_type, :codice_fiscale, :id_carta
|
4
|
-
|
5
|
-
def initialize(model)
|
6
|
-
@certificate_type = nil
|
7
|
-
@codice_fiscale = nil
|
8
|
-
@id_carta = nil
|
9
|
-
|
10
|
-
unless model.nil?
|
11
|
-
@certificate_type = model.fetch(:certificateType)
|
12
|
-
@codice_fiscale = model.fetch(:codiceFiscale)
|
13
|
-
@id_carta = model.fetch(:idCarta)
|
14
|
-
end
|
15
|
-
end
|
1
|
+
class PkiItalyCertificateFields
|
2
|
+
|
3
|
+
attr_accessor :certificate_type, :codice_fiscale, :id_carta
|
4
|
+
|
5
|
+
def initialize(model)
|
6
|
+
@certificate_type = nil
|
7
|
+
@codice_fiscale = nil
|
8
|
+
@id_carta = nil
|
9
|
+
|
10
|
+
unless model.nil?
|
11
|
+
@certificate_type = model.fetch(:certificateType)
|
12
|
+
@codice_fiscale = model.fetch(:codiceFiscale)
|
13
|
+
@id_carta = model.fetch(:idCarta)
|
14
|
+
end
|
15
|
+
end
|
16
16
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
module PkiExpress
|
2
|
-
class PkiItalyCertificateTypes < Enum
|
3
|
-
UNDEFINED = 'Undefined'
|
4
|
-
CNS = 'Cns'
|
5
|
-
DIGITAL_SIGNATURE = 'DigitalSignature'
|
6
|
-
|
7
|
-
VALUES = [
|
8
|
-
UNDEFINED, CNS, DIGITAL_SIGNATURE
|
9
|
-
]
|
10
|
-
end
|
11
|
-
end
|
1
|
+
module PkiExpress
|
2
|
+
class PkiItalyCertificateTypes < Enum
|
3
|
+
UNDEFINED = 'Undefined'
|
4
|
+
CNS = 'Cns'
|
5
|
+
DIGITAL_SIGNATURE = 'DigitalSignature'
|
6
|
+
|
7
|
+
VALUES = [
|
8
|
+
UNDEFINED, CNS, DIGITAL_SIGNATURE
|
9
|
+
]
|
10
|
+
end
|
11
|
+
end
|
@@ -1,35 +1,35 @@
|
|
1
|
-
module PkiExpress
|
2
|
-
|
3
|
-
class SignatureAlgorithmAndValue
|
4
|
-
attr_accessor :algorithm, :value
|
5
|
-
def initialize(model)
|
6
|
-
@algorithm = nil
|
7
|
-
@value = nil
|
8
|
-
algorithm_identifier = nil
|
9
|
-
|
10
|
-
unless model.nil?
|
11
|
-
value = model.fetch(:value)
|
12
|
-
if value.nil?
|
13
|
-
raise 'The value was not set'
|
14
|
-
end
|
15
|
-
@value = Base64.decode64(value).bytes
|
16
|
-
|
17
|
-
algorithm_identifier = model.fetch(:algorithmIdentifier)
|
18
|
-
if algorithm_identifier.nil?
|
19
|
-
algorithm = model.fetch(:algorithm)
|
20
|
-
unless algorithm.nil?
|
21
|
-
@algorithm = DigestAlgorithm.get_instance_by_api_model(algorithm)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def hex_value
|
28
|
-
@value.map { |b| b.to_s(16).rjust(2,'0') }.join.upcase
|
29
|
-
end
|
30
|
-
|
31
|
-
def hex_value=(value)
|
32
|
-
@value = [value].pack('H*').unpack('C*')
|
33
|
-
end
|
34
|
-
end
|
1
|
+
module PkiExpress
|
2
|
+
|
3
|
+
class SignatureAlgorithmAndValue
|
4
|
+
attr_accessor :algorithm, :value
|
5
|
+
def initialize(model)
|
6
|
+
@algorithm = nil
|
7
|
+
@value = nil
|
8
|
+
algorithm_identifier = nil
|
9
|
+
|
10
|
+
unless model.nil?
|
11
|
+
value = model.fetch(:value)
|
12
|
+
if value.nil?
|
13
|
+
raise 'The value was not set'
|
14
|
+
end
|
15
|
+
@value = Base64.decode64(value).bytes
|
16
|
+
|
17
|
+
algorithm_identifier = model.fetch(:algorithmIdentifier)
|
18
|
+
if algorithm_identifier.nil?
|
19
|
+
algorithm = model.fetch(:algorithm)
|
20
|
+
unless algorithm.nil?
|
21
|
+
@algorithm = DigestAlgorithm.get_instance_by_api_model(algorithm)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def hex_value
|
28
|
+
@value.map { |b| b.to_s(16).rjust(2,'0') }.join.upcase
|
29
|
+
end
|
30
|
+
|
31
|
+
def hex_value=(value)
|
32
|
+
@value = [value].pack('H*').unpack('C*')
|
33
|
+
end
|
34
|
+
end
|
35
35
|
end
|