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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -2
  3. data/.github/workflows/test.yml +22 -0
  4. data/.gitignore +27 -27
  5. data/.rspec +1 -0
  6. data/CHANGELOG.md +19 -12
  7. data/Gemfile +9 -4
  8. data/README.md +24 -24
  9. data/Rakefile +7 -1
  10. data/lib/pki_express/auth_complete_result.rb +21 -21
  11. data/lib/pki_express/auth_start_result.rb +76 -76
  12. data/lib/pki_express/authentication.rb +284 -284
  13. data/lib/pki_express/base_signer.rb +54 -54
  14. data/lib/pki_express/cades_signature.rb +89 -89
  15. data/lib/pki_express/cades_signature_starter.rb +242 -242
  16. data/lib/pki_express/check_service_result.rb +15 -15
  17. data/lib/pki_express/command_error.rb +13 -13
  18. data/lib/pki_express/commands.rb +24 -24
  19. data/lib/pki_express/digest_algorithm.rb +118 -118
  20. data/lib/pki_express/digest_algorithm_and_value.rb +30 -30
  21. data/lib/pki_express/discovery_service_result.rb +25 -25
  22. data/lib/pki_express/enum.rb +9 -9
  23. data/lib/pki_express/error_codes.rb +46 -46
  24. data/lib/pki_express/installation_not_found_error.rb +8 -8
  25. data/lib/pki_express/name.rb +47 -47
  26. data/lib/pki_express/oids.rb +30 -30
  27. data/lib/pki_express/pades_certification_level.rb +7 -7
  28. data/lib/pki_express/pades_horizontal_align.rb +9 -9
  29. data/lib/pki_express/pades_measurement_units.rb +8 -8
  30. data/lib/pki_express/pades_page_optimization.rb +50 -50
  31. data/lib/pki_express/pades_page_orientation.rb +9 -9
  32. data/lib/pki_express/pades_paper_size.rb +21 -21
  33. data/lib/pki_express/pades_signature.rb +16 -16
  34. data/lib/pki_express/pades_signature_explorer.rb +30 -30
  35. data/lib/pki_express/pades_signature_starter.rb +251 -251
  36. data/lib/pki_express/pades_signer.rb +274 -274
  37. data/lib/pki_express/pades_signer_info.rb +9 -9
  38. data/lib/pki_express/pades_size.rb +17 -17
  39. data/lib/pki_express/pades_text_horizontal_align.rb +8 -8
  40. data/lib/pki_express/pades_vertical_align.rb +9 -9
  41. data/lib/pki_express/pades_visual_auto_positioning.rb +21 -21
  42. data/lib/pki_express/pades_visual_image.rb +51 -51
  43. data/lib/pki_express/pades_visual_manual_positioning.rb +16 -16
  44. data/lib/pki_express/pades_visual_positioning.rb +27 -27
  45. data/lib/pki_express/pades_visual_rectangle.rb +74 -74
  46. data/lib/pki_express/pades_visual_representation.rb +22 -22
  47. data/lib/pki_express/pades_visual_text.rb +35 -35
  48. data/lib/pki_express/pk_algorithms.rb +157 -157
  49. data/lib/pki_express/pk_certificate.rb +61 -61
  50. data/lib/pki_express/pki_brazil_certificate_fields.rb +57 -57
  51. data/lib/pki_express/pki_brazil_certificate_types.rb +19 -19
  52. data/lib/pki_express/pki_express_config.rb +39 -26
  53. data/lib/pki_express/pki_express_operator.rb +240 -234
  54. data/lib/pki_express/pki_italy_certificate_fields.rb +15 -15
  55. data/lib/pki_express/pki_italy_certificate_types.rb +11 -11
  56. data/lib/pki_express/signature_algorithm_and_value.rb +34 -34
  57. data/lib/pki_express/signature_explorer.rb +74 -74
  58. data/lib/pki_express/signature_finisher.rb +314 -314
  59. data/lib/pki_express/signature_policy_identifier.rb +20 -20
  60. data/lib/pki_express/signature_start_result.rb +12 -12
  61. data/lib/pki_express/signature_starter.rb +116 -116
  62. data/lib/pki_express/signer.rb +151 -151
  63. data/lib/pki_express/standard_signature_policies.rb +58 -58
  64. data/lib/pki_express/timestamp_authority.rb +50 -50
  65. data/lib/pki_express/trust_service_auth_parameters.rb +20 -20
  66. data/lib/pki_express/trust_service_info.rb +37 -37
  67. data/lib/pki_express/trust_service_manager.rb +258 -258
  68. data/lib/pki_express/trust_service_session_result.rb +29 -29
  69. data/lib/pki_express/trust_service_session_types.rb +7 -7
  70. data/lib/pki_express/tsa_authentication_type.rb +14 -14
  71. data/lib/pki_express/validation_error.rb +8 -8
  72. data/lib/pki_express/validation_item.rb +43 -43
  73. data/lib/pki_express/validation_item_types.rb +103 -103
  74. data/lib/pki_express/validation_results.rb +120 -120
  75. data/lib/pki_express/version.rb +3 -3
  76. data/lib/pki_express/version_manager.rb +20 -20
  77. data/lib/pki_express.rb +69 -69
  78. data/pki_express.gemspec +26 -26
  79. data/spec/pki_express/pki_express_config_spec.rb +73 -0
  80. data/spec/pki_express/pki_express_operator_spec.rb +31 -0
  81. data/spec/spec_helper.rb +13 -0
  82. metadata +17 -9
@@ -1,251 +1,251 @@
1
- module PkiExpress
2
- class PadesSignatureStarter < SignatureStarter
3
- attr_accessor :suppress_default_visual_representation
4
- attr_accessor :custom_signature_field_name, :certification_level
5
-
6
- def initialize(config=PkiExpressConfig.new)
7
- super(config)
8
- @pdf_to_sign_path = nil
9
- @vr_json_path = nil
10
- @suppress_default_visual_representation = false
11
- @custom_signature_field_name = nil
12
- @certification_level = nil
13
- end
14
-
15
- # region The "pdf_to_sign" accessors
16
-
17
- def pdf_to_sign
18
- _get_pdf_to_sign
19
- end
20
-
21
- def _get_pdf_to_sign
22
- unless @pdf_to_sign_path
23
- return nil
24
- end
25
-
26
- File.read(@pdf_to_sign_path)
27
- end
28
- private :_get_pdf_to_sign
29
-
30
- def pdf_to_sign=(content_raw)
31
- _set_pdf_to_sign(content_raw)
32
- end
33
-
34
- def _set_pdf_to_sign(content_raw)
35
- unless content_raw
36
- raise 'The provided "pdf_to_sign" is not valid'
37
- end
38
-
39
- temp_file_path = self.create_temp_file
40
- File.open(temp_file_path, 'wb') do |f|
41
- f.write(content_raw)
42
- end
43
- @pdf_to_sign_path = temp_file_path
44
- end
45
- private :_set_pdf_to_sign
46
-
47
- def pdf_to_sign_base64
48
- _get_pdf_to_sign_base64
49
- end
50
-
51
- def _get_pdf_to_sign_base64
52
- unless @pdf_to_sign_path
53
- return nil
54
- end
55
-
56
- content = File.read(@pdf_to_sign_path)
57
- Base64.encode64(content)
58
- end
59
- private :_get_pdf_to_sign_base64
60
-
61
- def pdf_to_sign_base64=(content_base64)
62
- _set_pdf_to_sign_base64(content_base64)
63
- end
64
-
65
- def _set_pdf_to_sign_base64(content_base64)
66
- unless content_base64
67
- raise 'The provided "pdf_to_sign_base64" is not valid'
68
- end
69
-
70
- begin
71
- content_raw = Base64.decode64(content_base64)
72
- rescue Error
73
- raise 'The provided "pdf_to_sign_base64" is not Base64-encoded'
74
- end
75
-
76
- _set_pdf_to_sign(content_raw)
77
- end
78
- private :_set_pdf_to_sign_base64
79
-
80
- def pdf_to_sign_path
81
- _get_pdf_to_sign_path
82
- end
83
-
84
- def _get_pdf_to_sign_path
85
- @pdf_to_sign_path
86
- end
87
- private :_get_pdf_to_sign_path
88
-
89
- def pdf_to_sign_path=(path)
90
- _set_pdf_to_sign_path(path)
91
- end
92
-
93
- def _set_pdf_to_sign_path(path)
94
- unless path
95
- raise 'The provided "pdf_to_sign_path" is not valid'
96
- end
97
- unless File.exists?(path)
98
- raise 'The provided "pdf_to_sign_path" does not exist'
99
- end
100
- @pdf_to_sign_path = path
101
- end
102
- private :_set_pdf_to_sign_path
103
-
104
- # endregion
105
-
106
- # region set_visual_representation
107
-
108
- def visual_representation_content_raw
109
- _get_visual_representation_content_raw
110
- end
111
-
112
- def _get_visual_representation_content_raw
113
- unless @vr_json_path
114
- return nil
115
- end
116
-
117
- File.read(@vr_json_path)
118
- end
119
- private :_get_visual_representation_content_raw
120
-
121
- def visual_representation_content_raw=(content_raw)
122
- _set_visual_representation_content_raw(content_raw)
123
- end
124
-
125
- def _set_visual_representation_content_raw(content_raw)
126
- unless content_raw
127
- raise 'The provided "visual_representation" is not valid'
128
- end
129
-
130
- temp_file_path = self.create_temp_file
131
- File.open(temp_file_path, 'wb') do |f|
132
- f.write(content_raw)
133
- end
134
- @vr_json_path = temp_file_path
135
- end
136
- private :_set_visual_representation_content_raw
137
-
138
- def visual_representation_path
139
- _get_visual_representation_path
140
- end
141
-
142
- def _get_visual_representation_path
143
- @vr_json_path
144
- end
145
- private :_get_visual_representation_path
146
-
147
- def visual_representation_path=(path)
148
- _set_visual_representation_path(path)
149
- end
150
-
151
- def _set_visual_representation_path(path)
152
- unless path
153
- raise 'The provided "visual_representation_path" is not valid'
154
- end
155
- unless File.exists?(path)
156
- raise 'The provided "visual_representation_path" does not exist'
157
- end
158
- @vr_json_path = path
159
- end
160
- private :_set_visual_representation_path
161
-
162
- def visual_representation
163
- _get_visual_representation
164
- end
165
-
166
- def _get_visual_representation
167
- unless @vr_json_path
168
- return nil
169
- end
170
-
171
- content = File.read(@vr_json_path)
172
- JSON.parse(content)
173
- end
174
- private :_get_visual_representation
175
-
176
-
177
- def visual_representation=(vr)
178
- _set_visual_representation(vr)
179
- end
180
-
181
- def _set_visual_representation(vr)
182
- temp_file_path = self.create_temp_file
183
- json = JSON.pretty_generate(vr.to_model)
184
- File.open(temp_file_path, 'w') do |f|
185
- f.write(json)
186
- end
187
- @vr_json_path = temp_file_path
188
- end
189
- private :_set_visual_representation
190
-
191
- # endregion
192
-
193
- def start
194
- unless @pdf_to_sign_path
195
- raise 'The PDF to be signed was not set'
196
- end
197
-
198
- unless @certificate_path
199
- raise 'The certificate was not set'
200
- end
201
-
202
- # Generate transfer file.
203
- transfer_file_id = get_transfer_filename
204
-
205
- args = [
206
- @pdf_to_sign_path,
207
- @certificate_path,
208
- File.expand_path(transfer_file_id, @config.transfer_data_folder),
209
- ]
210
-
211
- # Verify and add common options between signers.
212
- verify_and_add_common_options(args)
213
-
214
- if @vr_json_path
215
- args.append('--visual-rep')
216
- args.append(@vr_json_path)
217
- end
218
-
219
- if @custom_signature_field_name
220
- args.append('--custom-signature-field-name')
221
- args.append(@custom_signature_field_name)
222
- # This option can only be used on versions greater than 1.15.0 of the
223
- # PKI Express.
224
- @version_manager.require_version('1.15')
225
- end
226
-
227
- if @certification_level
228
- args.append('--certification-level')
229
- args.append(@certification_level)
230
- # This option can only be used on versions greater than 1.16.0 of the
231
- # PKI Express.
232
- @version_manager.require_version('1.16')
233
- end
234
-
235
- if @suppress_default_visual_representation
236
- args.append('--suppress-default-visual-rep')
237
-
238
- # This option can only be used on versions greater than 1.13.1 of the
239
- # PKI Express.
240
- @version_manager.require_version('1.13.1')
241
- end
242
-
243
- # Invoke command.
244
- result = invoke(Commands::START_PADES, args)
245
-
246
- # Parse output and return model.
247
- model = parse_output(result)
248
- SignatureStartResult.new(model, transfer_file_id)
249
- end
250
- end
251
- end
1
+ module PkiExpress
2
+ class PadesSignatureStarter < SignatureStarter
3
+ attr_accessor :suppress_default_visual_representation
4
+ attr_accessor :custom_signature_field_name, :certification_level
5
+
6
+ def initialize(config=PkiExpressConfig.new)
7
+ super(config)
8
+ @pdf_to_sign_path = nil
9
+ @vr_json_path = nil
10
+ @suppress_default_visual_representation = false
11
+ @custom_signature_field_name = nil
12
+ @certification_level = nil
13
+ end
14
+
15
+ # region The "pdf_to_sign" accessors
16
+
17
+ def pdf_to_sign
18
+ _get_pdf_to_sign
19
+ end
20
+
21
+ def _get_pdf_to_sign
22
+ unless @pdf_to_sign_path
23
+ return nil
24
+ end
25
+
26
+ File.read(@pdf_to_sign_path)
27
+ end
28
+ private :_get_pdf_to_sign
29
+
30
+ def pdf_to_sign=(content_raw)
31
+ _set_pdf_to_sign(content_raw)
32
+ end
33
+
34
+ def _set_pdf_to_sign(content_raw)
35
+ unless content_raw
36
+ raise 'The provided "pdf_to_sign" is not valid'
37
+ end
38
+
39
+ temp_file_path = self.create_temp_file
40
+ File.open(temp_file_path, 'wb') do |f|
41
+ f.write(content_raw)
42
+ end
43
+ @pdf_to_sign_path = temp_file_path
44
+ end
45
+ private :_set_pdf_to_sign
46
+
47
+ def pdf_to_sign_base64
48
+ _get_pdf_to_sign_base64
49
+ end
50
+
51
+ def _get_pdf_to_sign_base64
52
+ unless @pdf_to_sign_path
53
+ return nil
54
+ end
55
+
56
+ content = File.read(@pdf_to_sign_path)
57
+ Base64.encode64(content)
58
+ end
59
+ private :_get_pdf_to_sign_base64
60
+
61
+ def pdf_to_sign_base64=(content_base64)
62
+ _set_pdf_to_sign_base64(content_base64)
63
+ end
64
+
65
+ def _set_pdf_to_sign_base64(content_base64)
66
+ unless content_base64
67
+ raise 'The provided "pdf_to_sign_base64" is not valid'
68
+ end
69
+
70
+ begin
71
+ content_raw = Base64.decode64(content_base64)
72
+ rescue Error
73
+ raise 'The provided "pdf_to_sign_base64" is not Base64-encoded'
74
+ end
75
+
76
+ _set_pdf_to_sign(content_raw)
77
+ end
78
+ private :_set_pdf_to_sign_base64
79
+
80
+ def pdf_to_sign_path
81
+ _get_pdf_to_sign_path
82
+ end
83
+
84
+ def _get_pdf_to_sign_path
85
+ @pdf_to_sign_path
86
+ end
87
+ private :_get_pdf_to_sign_path
88
+
89
+ def pdf_to_sign_path=(path)
90
+ _set_pdf_to_sign_path(path)
91
+ end
92
+
93
+ def _set_pdf_to_sign_path(path)
94
+ unless path
95
+ raise 'The provided "pdf_to_sign_path" is not valid'
96
+ end
97
+ unless File.exists?(path)
98
+ raise 'The provided "pdf_to_sign_path" does not exist'
99
+ end
100
+ @pdf_to_sign_path = path
101
+ end
102
+ private :_set_pdf_to_sign_path
103
+
104
+ # endregion
105
+
106
+ # region set_visual_representation
107
+
108
+ def visual_representation_content_raw
109
+ _get_visual_representation_content_raw
110
+ end
111
+
112
+ def _get_visual_representation_content_raw
113
+ unless @vr_json_path
114
+ return nil
115
+ end
116
+
117
+ File.read(@vr_json_path)
118
+ end
119
+ private :_get_visual_representation_content_raw
120
+
121
+ def visual_representation_content_raw=(content_raw)
122
+ _set_visual_representation_content_raw(content_raw)
123
+ end
124
+
125
+ def _set_visual_representation_content_raw(content_raw)
126
+ unless content_raw
127
+ raise 'The provided "visual_representation" is not valid'
128
+ end
129
+
130
+ temp_file_path = self.create_temp_file
131
+ File.open(temp_file_path, 'wb') do |f|
132
+ f.write(content_raw)
133
+ end
134
+ @vr_json_path = temp_file_path
135
+ end
136
+ private :_set_visual_representation_content_raw
137
+
138
+ def visual_representation_path
139
+ _get_visual_representation_path
140
+ end
141
+
142
+ def _get_visual_representation_path
143
+ @vr_json_path
144
+ end
145
+ private :_get_visual_representation_path
146
+
147
+ def visual_representation_path=(path)
148
+ _set_visual_representation_path(path)
149
+ end
150
+
151
+ def _set_visual_representation_path(path)
152
+ unless path
153
+ raise 'The provided "visual_representation_path" is not valid'
154
+ end
155
+ unless File.exists?(path)
156
+ raise 'The provided "visual_representation_path" does not exist'
157
+ end
158
+ @vr_json_path = path
159
+ end
160
+ private :_set_visual_representation_path
161
+
162
+ def visual_representation
163
+ _get_visual_representation
164
+ end
165
+
166
+ def _get_visual_representation
167
+ unless @vr_json_path
168
+ return nil
169
+ end
170
+
171
+ content = File.read(@vr_json_path)
172
+ JSON.parse(content)
173
+ end
174
+ private :_get_visual_representation
175
+
176
+
177
+ def visual_representation=(vr)
178
+ _set_visual_representation(vr)
179
+ end
180
+
181
+ def _set_visual_representation(vr)
182
+ temp_file_path = self.create_temp_file
183
+ json = JSON.pretty_generate(vr.to_model)
184
+ File.open(temp_file_path, 'w') do |f|
185
+ f.write(json)
186
+ end
187
+ @vr_json_path = temp_file_path
188
+ end
189
+ private :_set_visual_representation
190
+
191
+ # endregion
192
+
193
+ def start
194
+ unless @pdf_to_sign_path
195
+ raise 'The PDF to be signed was not set'
196
+ end
197
+
198
+ unless @certificate_path
199
+ raise 'The certificate was not set'
200
+ end
201
+
202
+ # Generate transfer file.
203
+ transfer_file_id = get_transfer_filename
204
+
205
+ args = [
206
+ @pdf_to_sign_path,
207
+ @certificate_path,
208
+ File.expand_path(transfer_file_id, @config.transfer_data_folder),
209
+ ]
210
+
211
+ # Verify and add common options between signers.
212
+ verify_and_add_common_options(args)
213
+
214
+ if @vr_json_path
215
+ args.append('--visual-rep')
216
+ args.append(@vr_json_path)
217
+ end
218
+
219
+ if @custom_signature_field_name
220
+ args.append('--custom-signature-field-name')
221
+ args.append(@custom_signature_field_name)
222
+ # This option can only be used on versions greater than 1.15.0 of the
223
+ # PKI Express.
224
+ @version_manager.require_version('1.15')
225
+ end
226
+
227
+ if @certification_level
228
+ args.append('--certification-level')
229
+ args.append(@certification_level)
230
+ # This option can only be used on versions greater than 1.16.0 of the
231
+ # PKI Express.
232
+ @version_manager.require_version('1.16')
233
+ end
234
+
235
+ if @suppress_default_visual_representation
236
+ args.append('--suppress-default-visual-rep')
237
+
238
+ # This option can only be used on versions greater than 1.13.1 of the
239
+ # PKI Express.
240
+ @version_manager.require_version('1.13.1')
241
+ end
242
+
243
+ # Invoke command.
244
+ result = invoke(Commands::START_PADES, args)
245
+
246
+ # Parse output and return model.
247
+ model = parse_output(result)
248
+ SignatureStartResult.new(model, transfer_file_id)
249
+ end
250
+ end
251
+ end