pki_express 1.3.0 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
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