rest_pki 1.0.0 → 1.1.0

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/README.md +6 -1
  4. data/lib/rest_pki.rb +32 -0
  5. data/lib/rest_pki/cades_signature.rb +52 -0
  6. data/lib/rest_pki/color.rb +37 -0
  7. data/lib/rest_pki/digest_algorithm.rb +158 -0
  8. data/lib/rest_pki/digest_algorithm_and_value.rb +29 -0
  9. data/lib/rest_pki/oids.rb +163 -0
  10. data/lib/rest_pki/pades_measurement_units.rb +6 -0
  11. data/lib/rest_pki/pades_page_orientation.rb +7 -0
  12. data/lib/rest_pki/pades_paper_size.rb +17 -0
  13. data/lib/rest_pki/pades_signature_explorer.rb +17 -0
  14. data/lib/rest_pki/pades_signer_info.rb +11 -0
  15. data/lib/rest_pki/pades_size.rb +17 -0
  16. data/lib/rest_pki/pades_visual_rectangle.rb +25 -0
  17. data/lib/rest_pki/page_optimization.rb +34 -0
  18. data/lib/rest_pki/pdf_container_definition.rb +266 -0
  19. data/lib/rest_pki/pdf_helper.rb +29 -0
  20. data/lib/rest_pki/pdf_mark.rb +81 -0
  21. data/lib/rest_pki/pdf_mark_element.rb +54 -0
  22. data/lib/rest_pki/pdf_mark_element_type.rb +7 -0
  23. data/lib/rest_pki/pdf_mark_image.rb +25 -0
  24. data/lib/rest_pki/pdf_mark_image_element.rb +33 -0
  25. data/lib/rest_pki/pdf_mark_page_options.rb +8 -0
  26. data/lib/rest_pki/pdf_mark_qr_code_element.rb +32 -0
  27. data/lib/rest_pki/pdf_mark_text_element.rb +47 -0
  28. data/lib/rest_pki/pdf_marker.rb +61 -0
  29. data/lib/rest_pki/pdf_text_section.rb +57 -0
  30. data/lib/rest_pki/pdf_text_style.rb +7 -0
  31. data/lib/rest_pki/pk_algorithms.rb +173 -0
  32. data/lib/rest_pki/pk_certificate.rb +99 -0
  33. data/lib/rest_pki/resource_content_or_reference.rb +25 -0
  34. data/lib/rest_pki/resources/pades_explorer_model.rb +12 -0
  35. data/lib/rest_pki/resources/pdf_marker_model.rb +12 -0
  36. data/lib/rest_pki/signature_algorithm_and_value.rb +11 -0
  37. data/lib/rest_pki/signature_explorer.rb +48 -0
  38. data/lib/rest_pki/signature_policy_identifier.rb +10 -0
  39. data/lib/rest_pki/validation_item.rb +2 -2
  40. data/lib/rest_pki/validation_results.rb +11 -11
  41. data/lib/rest_pki/version.rb +1 -1
  42. metadata +37 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: efdf855b8c7a4a0f5884d7cbb7ae6237f57ef12a7b8e5fb9e3f97fd3b559cba4
4
- data.tar.gz: f4ae7fd56adca41b9be2723d376a98adc4d054b6cf1a837b9c2f9dce9af65f32
3
+ metadata.gz: db2a9c24b735beaae22137e4310fffb7d323dad317c944dbf22177e6a2d10ae5
4
+ data.tar.gz: a12f3d0a27313c2d39ff7dd29f4ec36bb57728fe093ea9c314a3f79957740d61
5
5
  SHA512:
6
- metadata.gz: 958e4840d4e0eaaaadf0fcc7e5eaa12bbc8c89480f9393feda3c57004617c5ce729ef8d7ded10573202946e648a91f8a887666faef8e24fdea0d7cc700c13725
7
- data.tar.gz: 97e35162fe53d8b8fe4a53bcdaf1ef7ccdc418efcdf9ad8fc0dc7889601d7ae4fc3a4b7b81f83644a9661998c02ae6226349ff62df2d068a02e929c3511261a4
6
+ metadata.gz: 1738123814dff03a59fe192926de714019de28321c7c4658a995a963fdd6106010defabaa87cf1ee5dbd4d1106814319b6c5e12dfdb7bbaa08ab8765d7c0f94f
7
+ data.tar.gz: 68654022530960bff5ce44ccdca64bba15c0d2f8ade4f05fd12642ae7deab2e964bdb83299571daaa4557d20ab0f12f510196e4548f5fccbda4bd550ceda2c9d
@@ -1,3 +1,7 @@
1
+ ## 1.1.0 (2020-04-30)
2
+ * Added PDF marks support
3
+ * Added PAdES signature validation support
4
+
1
5
  ## 1.0.0 (2018-04-11)
2
6
  * First publicly available version
3
7
  * Main features on this version:
data/README.md CHANGED
@@ -1,17 +1,22 @@
1
1
  REST PKI client lib for Ruby
2
2
  ============================
3
+ [![Gem Version](https://badge.fury.io/rb/rest_pki.svg)](https://badge.fury.io/rb/rest_pki)
3
4
 
4
5
  This library contains classes that encapsulate the calls to the REST PKI API.
5
6
 
6
7
  The recommended way to install **REST PKI Client lib** is through setting in your Gemfile:
7
8
 
8
9
  ````ruby
9
- gem 'rest_pki', '~> 1.0.0'
10
+ gem 'rest_pki', '~> 1.1.0'
10
11
  ````
11
12
 
12
13
  And with installing via [Bundler](http://bundler.io/) on your project root folder:
13
14
 
14
15
  bundle install
16
+
17
+ Alternatively, You can install this gem globally by executing the following command:
18
+
19
+ gem install rest_pki
15
20
 
16
21
  Samples
17
22
  -------
@@ -22,10 +22,42 @@ require_relative 'rest_pki/standard_security_contexts'
22
22
  require_relative 'rest_pki/standard_signature_policies'
23
23
  require_relative 'rest_pki/validation_item'
24
24
  require_relative 'rest_pki/validation_results'
25
+ require_relative 'rest_pki/signature_algorithm_and_value'
26
+ require_relative 'rest_pki/signature_explorer'
27
+ require_relative 'rest_pki/oids'
28
+ require_relative 'rest_pki/pades_signature_explorer'
29
+ require_relative 'rest_pki/signature_policy_identifier'
30
+ require_relative 'rest_pki/digest_algorithm_and_value'
31
+ require_relative 'rest_pki/digest_algorithm'
32
+ require_relative 'rest_pki/cades_signature'
33
+ require_relative 'rest_pki/pades_signer_info'
34
+ require_relative 'rest_pki/pk_algorithms'
35
+ require_relative 'rest_pki/pk_certificate'
25
36
  require_relative 'rest_pki/xml_element_signature_starter'
26
37
  require_relative 'rest_pki/xml_id_resolution_table'
27
38
  require_relative 'rest_pki/xml_insertion_options'
28
39
  require_relative 'rest_pki/xml_signature_finisher'
40
+ require_relative 'rest_pki/color'
41
+ require_relative 'rest_pki/pades_measurement_units'
42
+ require_relative 'rest_pki/pades_page_orientation'
43
+ require_relative 'rest_pki/pades_paper_size'
44
+ require_relative 'rest_pki/pades_size'
45
+ require_relative 'rest_pki/page_optimization'
46
+ require_relative 'rest_pki/pdf_mark'
47
+ require_relative 'rest_pki/pdf_mark_element'
48
+ require_relative 'rest_pki/pdf_mark_element_type'
49
+ require_relative 'rest_pki/pdf_mark_image'
50
+ require_relative 'rest_pki/pdf_mark_image_element'
51
+ require_relative 'rest_pki/pdf_mark_page_options'
52
+ require_relative 'rest_pki/pdf_mark_qr_code_element'
53
+ require_relative 'rest_pki/pdf_mark_text_element'
54
+ require_relative 'rest_pki/pdf_marker'
55
+ require_relative 'rest_pki/pdf_text_section'
56
+ require_relative 'rest_pki/pdf_text_style'
57
+ require_relative 'rest_pki/resource_content_or_reference'
58
+ require_relative 'rest_pki/pades_visual_rectangle'
59
+ require_relative 'rest_pki/pdf_container_definition'
60
+ require_relative 'rest_pki/pdf_helper'
29
61
 
30
62
  Dir[File.expand_path('../rest_pki/resources/*.rb', __FILE__)].map do |path|
31
63
  require path
@@ -0,0 +1,52 @@
1
+ module RestPki
2
+ class CadesSignature
3
+ attr_reader :encapsulated_content_type, :has_encapsulated_content, :signers
4
+ def initialize(model)
5
+ @encapsulated_content_type = model['encapsulatedContentType']
6
+ @has_encapsulated_content = model['hasEncapsulatedContent']
7
+ @signers = []
8
+ unless model['signers'].nil?
9
+ model['signers'].each { |signer|
10
+ @signers.push(CadesSignerInfo.new(signer))
11
+ }
12
+ end
13
+ end
14
+ end
15
+
16
+ class CadesTimestamp < CadesSignature
17
+ attr_reader :gen_time, :serial_number, :message_imprint
18
+ def initialize(model)
19
+ super(model)
20
+ @gen_time = model['genTime']
21
+ @serial_number = model['serialNumber']
22
+ @message_imprint = DigestAlgorithmAndValue.new(model['messageImprint'])
23
+ end
24
+ end
25
+
26
+ class CadesSignerInfo
27
+ attr_reader :message_digest, :signature, :certificate, :signing_time, :certified_date_reference, :signature_policy, :timestamps, :validation_results
28
+
29
+ def initialize(model)
30
+ @message_digest = DigestAlgorithmAndValue.new(model['messageDigest'])
31
+ @signature = SignatureAlgorithmAndValue.new(model['signature'])
32
+ @certificate = PKCertificate.new(model['certificate'])
33
+ @signing_time = model['signingTime']
34
+ @certified_date_reference = model['certifiedDateReference']
35
+
36
+ unless model['signaturePolicy'].nil?
37
+ @signature_policy = SignaturePolicyIdentifier.new(model['signaturePolicy'])
38
+ end
39
+
40
+ @timestamps = []
41
+ unless model['timestamps'].nil?
42
+ model['timestamps'].each { |timestamp|
43
+ @timestamps.push(CadesTimestamp.new(timestamp))
44
+ }
45
+ end
46
+
47
+ unless model['validationResults'].nil?
48
+ @validation_results = ValidationResults.new(model['validationResults'])
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,37 @@
1
+ module RestPki
2
+ class Color
3
+ attr_reader :alpha, :red, :green, :blue
4
+
5
+ def initialize(red, green, blue, alpha = 100)
6
+ @alpha = alpha
7
+ @red = red
8
+ @green = green
9
+ @blue = blue
10
+ end
11
+
12
+ def self.from_rgb_string(rgb_string, alpha = 100)
13
+ if rgb_string.length < 6 or rgb_string.length > 7
14
+ raise 'Invalid argument'
15
+ end
16
+
17
+ index = 0
18
+ if rgb_string[0] == '#'
19
+ index += 1
20
+ end
21
+
22
+ red = "0x0000#{rgb_string[index..index+1]}".to_i(16)
23
+ green = "0x0000#{rgb_string[index+2..index+3]}".to_i(16)
24
+ blue = "0x0000#{rgb_string[index+4..index+5]}".to_i(16)
25
+ Color.new(red, green, blue, alpha)
26
+ end
27
+
28
+ def to_model
29
+ {
30
+ alpha: @alpha,
31
+ red: @blue,
32
+ green: @green,
33
+ blue: @blue,
34
+ }
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,158 @@
1
+ require 'digest'
2
+
3
+ module RestPki
4
+ class DigestAlgorithm
5
+ attr_reader :name, :oid, :byte_length, :api_model, :xml_uri, :crypto_digest
6
+
7
+ def initialize(name, oid, byte_length, api_model, xml_uri, crypto_digest)
8
+ @name = name
9
+ @oid = oid
10
+ @byte_length = byte_length
11
+ @api_model = api_model
12
+ @xml_uri = xml_uri
13
+ @crypto_digest = crypto_digest
14
+ end
15
+
16
+ def self.MD5; MD5DigestAlgorithm.new end
17
+ def self.SHA1; SHA1DigestAlgorithm.new end
18
+ def self.SHA256; SHA256DigestAlgorithm.new end
19
+ def self.SHA384; SHA384DigestAlgorithm.new end
20
+ def self.SHA512; SHA512DigestAlgorithm.new end
21
+
22
+ def ==(comparison_object)
23
+ if comparison_object.equal?(self)
24
+ return true
25
+ end
26
+ unless comparison_object.instance_of?(self.class)
27
+ return false
28
+ end
29
+ self.oid == comparison_object.oid
30
+ end
31
+
32
+ def check_length(digest_value)
33
+ unless digest_value.length == @byte_length
34
+ raise "A #{@name} digest should contain #{@byte_length} bytes, but a value with #{digest_value.length} bytes was given"
35
+ end
36
+ end
37
+
38
+ def self.algorithms
39
+ [
40
+ DigestAlgorithm.MD5,
41
+ DigestAlgorithm.SHA1,
42
+ DigestAlgorithm.SHA256,
43
+ DigestAlgorithm.SHA384,
44
+ DigestAlgorithm.SHA512
45
+ ]
46
+ end
47
+
48
+ def self.get_instance_by_name(name)
49
+ begin
50
+ alg = DigestAlgorithm.algorithms.find{|a| a.name == name}
51
+ rescue
52
+ raise "Unrecognized digest algorithm name: #{name}"
53
+ end
54
+ alg
55
+ end
56
+
57
+ def self.get_instance_by_oid(oid)
58
+ begin
59
+ alg = DigestAlgorithm.algorithms.find{|a| a.oid == oid}
60
+ rescue
61
+ raise "Unrecognized digest algorithm oid: #{oid}"
62
+ end
63
+ alg
64
+ end
65
+
66
+ def self.get_instance_by_xml_uri(xml_uri)
67
+ begin
68
+ alg = DigestAlgorithm.algorithms.find{|a| a.xml_uri == xml_uri}
69
+ rescue
70
+ raise "Unrecognized digest algorithm xml_uri: #{xml_uri}"
71
+ end
72
+ alg
73
+ end
74
+
75
+ def self.get_instance_by_api_model(algorithm)
76
+ case algorithm.upcase
77
+ when 'MD5'
78
+ DigestAlgorithm.MD5
79
+ when 'SHA1'
80
+ DigestAlgorithm.SHA1
81
+ when 'SHA256'
82
+ DigestAlgorithm.SHA256
83
+ when 'SHA384'
84
+ DigestAlgorithm.SHA384
85
+ when 'SHA512'
86
+ DigestAlgorithm.SHA512
87
+ else
88
+ raise "Unsupported digest algorithm: #{algorithm}"
89
+ end
90
+ end
91
+
92
+ end
93
+
94
+ class MD5DigestAlgorithm < DigestAlgorithm
95
+
96
+ def initialize
97
+ @name = 'MD5'
98
+ @oid = Oids.oids["MD5"]
99
+ @byte_length = 16
100
+ @api_model = 'md5'
101
+ @xml_uri = 'http://www.w3.org/2001/04/xmldsig-more#md5'
102
+ @crypto_digest = Digest::MD5.new
103
+ super(name, oid, byte_length, api_model, xml_uri, crypto_digest)
104
+ end
105
+ end
106
+
107
+ class SHA1DigestAlgorithm < DigestAlgorithm
108
+
109
+ def initialize
110
+ @name = 'SHA1'
111
+ @oid = Oids.oids["SHA1"]
112
+ @byte_length = 20
113
+ @api_model = 'sha1'
114
+ @xml_uri = 'http://www.w3.org/2000/09/xmldsig#sha1'
115
+ @crypto_digest = Digest::SHA1.new
116
+ super(name, oid, byte_length, api_model, xml_uri, crypto_digest)
117
+ end
118
+ end
119
+
120
+ class SHA256DigestAlgorithm < DigestAlgorithm
121
+
122
+ def initialize
123
+ @name = 'SHA256'
124
+ @oid = Oids.oids["SHA256"]
125
+ @byte_length = 32
126
+ @api_model = 'sha256'
127
+ @xml_uri = 'http://www.w3.org/2001/04/xmlenc#sha256'
128
+ @crypto_digest = Digest::SHA2.new(256)
129
+ super(name, oid, byte_length, api_model, xml_uri, crypto_digest)
130
+ end
131
+ end
132
+
133
+ class SHA384DigestAlgorithm < DigestAlgorithm
134
+
135
+ def initialize
136
+ @name = 'SHA384'
137
+ @oid = Oids.oids["SHA384"]
138
+ @byte_length = 48
139
+ @api_model = 'sha384'
140
+ @xml_uri = 'http://www.w3.org/2001/04/xmldsig-more#sha384'
141
+ @crypto_digest = Digest::SHA2.new(384)
142
+ super(name, oid, byte_length, api_model, xml_uri, crypto_digest)
143
+ end
144
+ end
145
+
146
+ class SHA512DigestAlgorithm < DigestAlgorithm
147
+
148
+ def initialize
149
+ @name = 'SHA512'
150
+ @oid = Oids.oids["SHA512"]
151
+ @byte_length = 64
152
+ @api_model = 'sha512'
153
+ @xml_uri = 'http://www.w3.org/2001/04/xmlenc#sha512'
154
+ @crypto_digest = Digest::SHA2.new(512)
155
+ super(name, oid, byte_length, api_model, xml_uri, crypto_digest)
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,29 @@
1
+ require 'base64'
2
+
3
+ module RestPki
4
+ class DigestAlgorithmAndValue
5
+ attr_reader :algorithm, :value
6
+
7
+ def initialize(model)
8
+ if model['algorithm'].to_s.blank?
9
+ raise 'The algorithm was not set'
10
+ end
11
+ if model['value'].to_s.blank?
12
+ raise 'The value was not set'
13
+ end
14
+ @algorithm = DigestAlgorithm.get_instance_by_api_model(model['algorithm'])
15
+ @value = Base64.decode64(model['value'])
16
+ end
17
+
18
+ def hex_value
19
+ @value.each_byte.map { |b| b.to_s(16) }.join
20
+ end
21
+
22
+ def to_model
23
+ {
24
+ algorithm: @algorithm.api_model,
25
+ value: @value
26
+ }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,163 @@
1
+ module RestPki
2
+ class Oids
3
+ def self.oids
4
+ @oids
5
+ end
6
+ @oids = {
7
+ #region Digest Algorithms
8
+ "MD5" => '1.2.840.113549.2.5',
9
+ "SHA1" => '1.3.14.3.2.26',
10
+ # sha224" => '2.16.840.1.101.3.4.2.4', # RFC 3874 section 4
11
+ "SHA256" => '2.16.840.1.101.3.4.2.1',
12
+ "SHA384" => '2.16.840.1.101.3.4.2.2',
13
+ "SHA512" => '2.16.840.1.101.3.4.2.3',
14
+ #endregion
15
+
16
+ #region Signature Algorithms
17
+ "MD2_WITH_RSA" => '1.2.840.113549.1.1.2',
18
+ "MD5_WITH_RSA" => '1.2.840.113549.1.1.4',
19
+ "SHA1_WITH_RSA" => '1.2.840.113549.1.1.5',
20
+ "SHA256_WITH_RSA" => '1.2.840.113549.1.1.11',
21
+ "SHA384_WITH_RSA" => '1.2.840.113549.1.1.12',
22
+ "SHA512_WITH_RSA" => '1.2.840.113549.1.1.13',
23
+
24
+ "SHA1_WITH_DSA" => '1.2.840.10040.4.3', # RFC 3279 section 2.2.2
25
+ # dsaWithSHA224" => '2.16.840.1.101.3.4.3.1', # RFC 5758 section 3.1
26
+ "SHA256_WITH_DSA" => '2.16.840.1.101.3.4.3.2', # RFC 5758 section 3.1
27
+ #endregion
28
+
29
+ #region Asymmetric Algorithms
30
+ "RSA" => '1.2.840.113549.1.1.1', # RFC 3279 section 2.3.1
31
+ "DSA" => '1.2.840.10040.4.1', # RFC 3279 section 2.3.2
32
+ #endregion
33
+
34
+ #region X509
35
+ "X509_EXTENSION_SUBJECT_ALTERNATIVE_NAME" => '2.5.29.17', # RFC 5280 section 4.2.1.6
36
+ "X509_EXTENSION_BASIC_CONSTRAINTS" => '2.5.29.19', # RFC 5280 section 4.2.1.9
37
+ "X509_EXTENSION_AUTHORITY_KEY_IDENTIFIER" => '2.5.29.35', # RFC 5280 section 4.2.1.1
38
+ "X509_EXTENSION_SUBJECT_KEY_IDENTIFIER" => '2.5.29.14', # RFC 5280 section 4.2.1.2
39
+ "X509_EXTENSION_CRL_NUMBER" => '2.5.29.20', # RFC 5280 section 5.2.3
40
+ "X509_EXTENSION_CRL_REASONS" => '2.5.29.21', # RFC 5280 section 5.3.1
41
+ "X509_EXTENSION_ISSUING_DISTRIBUTION_POINT" => '2.5.29.28', # RFC 5280 section 5.2.5
42
+ "X509_EXTENSION_CERTIFICATE_ISSUER" => '2.5.29.29', # RFC 5280 section 5.3.3
43
+ "X509_EXTENSION_CRL_DISTRIBUTION_POINTS" => '2.5.29.31', # RFC 5280 section 4.2.1.13
44
+ "X509_EXTENSION_NO_REVOCATION_AVAILABLE" => '2.5.29.56', # RFC 5755 section 4.3.6
45
+ "X509_EXTENSION_CERTIFICATE_POLICIES" => '2.5.29.32', # RFC 5280 section 4.2.1.4
46
+ "X509_CERTIFICATE_POLICY_ANY" => '2.5.29.32.0', # RFC 5280 section 4.2.1.4
47
+ "X509_CERTIFICATE_POLICY_QUALIFIER_TYPE_CPS" => '1.3.6.1.5.5.7.2.1', # RFC 5280 section 4.2.1.4
48
+ "X509_CERTIFICATE_POLICY_QUALIFIER_TYPE_USER_NOTICE" => '1.3.6.1.5.5.7.2.2', # RFC 5280 section 4.2.1.4
49
+ "X509_EXTENSION_AUTHORITY_INFORMATION_ACCESS" => '1.3.6.1.5.5.7.1.1', # RFC 5280 section 4.2.2.1
50
+ "ACCESS_DESCRIPTION_CA_ISSUERS" => '1.3.6.1.5.5.7.48.2', # RFC 5280 section 4.2.2.1
51
+ "ACCESS_DESCRIPTION_OCSP" => '1.3.6.1.5.5.7.48.1', # RFC 5280 section 4.2.2.1
52
+
53
+ "KEY_USAGE" => '2.5.29.15',
54
+ "EXTENDED_KEY_USAGE" => '2.5.29.37',
55
+
56
+ # RFC 5280 section 4.2.1.12
57
+ "EXTENDED_KEY_USAGE_ANY" => '2.5.29.37.0',
58
+ "EXTENDED_KEY_USAGE_SERVER_AUTH" => '1.3.6.1.5.5.7.3.1',
59
+ "EXTENDED_KEY_USAGE_CLIENT_AUTH" => '1.3.6.1.5.5.7.3.2',
60
+ "EXTENDED_KEY_USAGE_CODE_SIGNING" => '1.3.6.1.5.5.7.3.3',
61
+ "EXTENDED_KEY_USAGE_EMAIL_PROTECTION" => '1.3.6.1.5.5.7.3.4',
62
+ "EXTENDED_KEY_USAGE_IPSEC_END_SYSTEM" => '1.3.6.1.5.5.7.3.5',
63
+ "EXTENDED_KEY_USAGE_IPSEC_TUNNEL" => '1.3.6.1.5.5.7.3.6',
64
+ "EXTENDED_KEY_USAGE_IPSEC_USER" => '1.3.6.1.5.5.7.3.7',
65
+ "EXTENDED_KEY_USAGE_TIME_STAMPING" => '1.3.6.1.5.5.7.3.8',
66
+ "EXTENDED_KEY_USAGE_OCSP_SIGNING" => '1.3.6.1.5.5.7.3.9',
67
+ #endregion
68
+
69
+ #region ICP-Brasil
70
+ "icpBrasil" => {
71
+ # CAdES
72
+ "CADES_ADR_BASICA_V10" => '2.16.76.1.7.1.1.1', # DOC-ICP 15.03 v6.1 pag 31
73
+ "CADES_ADR_BASICA_V11" => '2.16.76.1.7.1.1.1.1', # DOC-ICP 15.03 v6.1 pag 31
74
+ "CADES_ADR_BASICA_V20" => '2.16.76.1.7.1.1.2', # DOC-ICP 15.03 v6.1 pag 31
75
+ "CADES_ADR_BASICA_V21" => '2.16.76.1.7.1.1.2.1', # DOC-ICP 15.03 v6.1 pag 31
76
+ "CADES_ADR_TEMPO_V10" => '2.16.76.1.7.1.2.1', # DOC-ICP 15.03 v6.1 pag 35
77
+ "CADES_ADR_TEMPO_V11" => '2.16.76.1.7.1.2.1.1', # DOC-ICP 15.03 v6.1 pag 35
78
+ "CADES_ADR_TEMPO_V20" => '2.16.76.1.7.1.2.2', # DOC-ICP 15.03 v6.1 pag 35
79
+ "CADES_ADR_TEMPO_V21" => '2.16.76.1.7.1.2.2.1', # DOC-ICP 15.03 v6.1 pag 35
80
+ "CADES_ADR_VALIDACAO_V10" => '2.16.76.1.7.1.3.1', # DOC-ICP 15.03 v6.1 pag 40
81
+ "CADES_ADR_VALIDACAO_V11" => '2.16.76.1.7.1.3.1.1', # DOC-ICP 15.03 v6.1 pag 40
82
+ "CADES_ADR_VALIDACAO_V20" => '2.16.76.1.7.1.3.2', # DOC-ICP 15.03 v6.1 pag 40
83
+ "CADES_ADR_VALIDACAO_V21" => '2.16.76.1.7.1.3.2.1', # DOC-ICP 15.03 v6.1 pag 40
84
+ "CADES_ADR_COMPLETA_V10" => '2.16.76.1.7.1.4.1', # DOC-ICP 15.03 v6.1 pag 45
85
+ "CADES_ADR_COMPLETA_V11" => '2.16.76.1.7.1.4.1.1', # DOC-ICP 15.03 v6.1 pag 45
86
+ "CADES_ADR_COMPLETA_V20" => '2.16.76.1.7.1.4.2', # DOC-ICP 15.03 v6.1 pag 45
87
+ "CADES_ADR_COMPLETA_V21" => '2.16.76.1.7.1.4.2.1', # DOC-ICP 15.03 v6.1 pag 45
88
+ "CADES_ADR_ARQUIVAMENTO_V20" => '2.16.76.1.7.1.5.2', # DOC-ICP 15.03 v6.1 pag 50
89
+ "CADES_ADR_ARQUIVAMENTO_V21" => '2.16.76.1.7.1.5.2.1', # DOC-ICP 15.03 v6.1 pag 50
90
+ "CADES_ADR_ARQUIVAMENTO_V22" => '2.16.76.1.7.1.4.2.2', # DOC-ICP 15.03 v6.1 pag 50
91
+
92
+ # XAdES
93
+ "XADES_ADR_BASICA_V10" => '2.16.76.1.7.1.6.1', # DOC-ICP 15.03 v6.1 pág 56
94
+ "XADES_ADR_BASICA_V11" => '2.16.76.1.7.1.6.1.1', # DOC-ICP 15.03 v6.1 pág 56
95
+ "XADES_ADR_BASICA_V12" => '2.16.76.1.7.1.6.1.2', # DOC-ICP 15.03 v6.1 pág 56
96
+ "XADES_ADR_BASICA_V20" => '2.16.76.1.7.1.6.2', # DOC-ICP 15.03 v6.1 pág 56
97
+ "XADES_ADR_BASICA_V21" => '2.16.76.1.7.1.6.2.1', # DOC-ICP 15.03 v6.1 pág 56
98
+ "XADES_ADR_BASICA_V22" => '2.16.76.1.7.1.6.2.2', # DOC-ICP 15.03 v6.1 pág 56
99
+ "XADES_ADR_TEMPO_V10" => '2.16.76.1.7.1.7.1', # DOC-ICP 15.03 v6.1 pág 60
100
+ "XADES_ADR_TEMPO_V11" => '2.16.76.1.7.1.7.1.1', # DOC-ICP 15.03 v6.1 pág 60
101
+ "XADES_ADR_TEMPO_V12" => '2.16.76.1.7.1.7.1.2', # DOC-ICP 15.03 v6.1 pág 60
102
+ "XADES_ADR_TEMPO_V20" => '2.16.76.1.7.1.7.2', # DOC-ICP 15.03 v6.1 pág 60
103
+ "XADES_ADR_TEMPO_V21" => '2.16.76.1.7.1.7.2.1', # DOC-ICP 15.03 v6.1 pág 60
104
+ "XADES_ADR_TEMPO_V22" => '2.16.76.1.7.1.7.2.2', # DOC-ICP 15.03 v6.1 pág 60
105
+
106
+ # Subject alternative names
107
+ "SAN_CERTIFICADO_PESSOA_FISICA_DADOS_BASICOS" => '2.16.76.1.3.1', # DOC-ICP 04.01 v2.3 section 2.5
108
+ "SAN_CERTIFICADO_PESSOA_JURIDICA_NOME_RESPONSAVEL" => '2.16.76.1.3.2', # DOC-ICP 04.01 v2.3 section 2.5
109
+ "SAN_CERTIFICADO_PESSOA_JURIDICA_NUMERO_CNPJ" => '2.16.76.1.3.3', # DOC-ICP 04.01 v2.3 section 2.5
110
+ "SAN_CERTIFICADO_PESSOA_JURIDICA_DADOS_RESPONSAVEL" => '2.16.76.1.3.4', # DOC-ICP 04.01 v2.3 section 2.5
111
+ "SAN_CERTIFICADO_PESSOA_FISICA_DADOS_ELEITORAIS" => '2.16.76.1.3.5', # DOC-ICP 04.01 v2.3 section 2.5
112
+ "SAN_CERTIFICADO_PESSOA_FISICA_NUMERO_INSS" => '2.16.76.1.3.6', # DOC-ICP 04.01 v2.3 section 2.5
113
+ "SAN_CERTIFICADO_PESSOA_JURIDICA_NUMERO_INSS" => '2.16.76.1.3.7', # DOC-ICP 04.01 v2.3 section 2.5
114
+ "SAN_CERTIFICADO_PESSOA_JURIDICA_NOME_EMPRESARIAL" => '2.16.76.1.3.8', # DOC-ICP 04.01 v2.3 section 2.5
115
+ "ROOT_CERTIFICATE_DECLARATION_PRACTICES" => '2.16.76.1.1.0',
116
+ "SAN_INSCRICAO_OAB" => '2.16.76.1.4.2.1.1', # Política de Certificado de Assinatura Digital Tipo A3 da Autoridade Certificadora da Ordem dos Advogados do Brasil - OAB -- ver 5.0 de 30/11/2014 -- section 7.1.2.3 item a.2 -- http =#icp-brasil.certisign.com.br/repositorio/pc/AC_OAB/PC_A3_AC_OAB_v5.0.pdf
117
+
118
+ # Prefixes
119
+ "PREFIX" => '2.16.76.1.',
120
+ "PREFIX_CERTIFICATE_DECLARATION_PRACTICES" => '2.16.76.1.1.',
121
+ "PREFIX_CERTIFICATE_POLICIES" => '2.16.76.1.2.',
122
+ "PREFIX_CERTIFICATE_A1" => '2.16.76.1.2.1.',
123
+ "PREFIX_CERTIFICATE_A2" => '2.16.76.1.2.2.',
124
+ "PREFIX_CERTIFICATE_A3" => '2.16.76.1.2.3.',
125
+ "PREFIX_CERTIFICATE_A4" => '2.16.76.1.2.4.',
126
+ "PREFIX_CERTIFICATE_S1" => '2.16.76.1.2.101.',
127
+ "PREFIX_CERTIFICATE_S2" => '2.16.76.1.2.102.',
128
+ "PREFIX_CERTIFICATE_S3" => '2.16.76.1.2.103.',
129
+ "PREFIX_CERTIFICATE_S4" => '2.16.76.1.2.104.',
130
+ "PREFIX_CERTIFICATE_AC" => '2.16.76.1.2.201.',
131
+ "PREFIX_CERTIFICATE_T3" => '2.16.76.1.2.303.',
132
+ "PREFIX_CERTIFICATE_T4" => '2.16.76.1.2.304.',
133
+ },
134
+ #endregion
135
+
136
+ #region CMS
137
+ "DATA_CONTENT_TYPE" => '1.2.840.113549.1.7.1', # RFC 5652 item 4
138
+ "SIGNED_DATA_CONTENT_TYPE" => '1.2.840.113549.1.7.2', # RFC 5652 item 5.1
139
+ "ENVELOPED_DATA_CONTENT_TYPE" => '1.2.840.113549.1.7.3', # RFC 5652 item 6.1
140
+ "DIGESTED_DATA_CONTENT_TYPE" => '1.2.840.113549.1.7.5', # RFC 5652 item 7
141
+ "ENCRYPTED_DATA_CONTENT_TYPE" => '1.2.840.113549.1.7.6', # RFC 5652 item 8
142
+ "AUTHENTICATED_DATA_CONTENT_TYPE" => '1.2.840.113549.1.9.16.1.2', # RFC 5652 item 9.1
143
+ "TST_INFO_CONTENT_TYPE" => '1.2.840.113549.1.9.16.1.4', # RFC 3161 item 2.4.2
144
+ "CONTENT_TYPE_ATTRIBUTE" => '1.2.840.113549.1.9.3', # RFC 5652 item 11.1
145
+ "MESSAGE_DIGEST_ATTRIBUTE" => '1.2.840.113549.1.9.4', # RFC 5652 item 11.2
146
+ "SIGNING_TIME_ATTRIBUTE" => '1.2.840.113549.1.9.5', # RFC 5652 item 11.3
147
+ "SIGNING_CERTIFICATE_ATTRIBUTE" => '1.2.840.113549.1.9.16.2.12', # RFC 2634 item 5.4
148
+ "SIGNING_CERTIFICATE_V2_ATTRIBUTE" => '1.2.840.113549.1.9.16.2.47', # RFC 5035 item 3 ('Insert New Section 5.4.1...')
149
+ "SIGNATURE_TIMESTAMP_ATTRIBUTE" => '1.2.840.113549.1.9.16.2.14', # CAdES v2.2.1 item 6.1.1
150
+ "SIGNER_ATTRIBUTE_ATTRIBUTE" => '1.2.840.113549.1.9.16.2.18', # CAdES v2.2.1 item 6.1.1
151
+ "SIGNATURE_POLICY_IDENTIFIER_ATTRIBUTE" => '1.2.840.113549.1.9.16.2.15', # CAdES v2.2.1 item 5.8.1
152
+ "COMPLETE_CERTIFICATE_REFS_ATTRIBUTE" => '1.2.840.113549.1.9.16.2.21', # CAdES v2.2.1 item 6.2.1
153
+ "COMPLETE_REVOCATION_REFS_ATTRIBUTE" => '1.2.840.113549.1.9.16.2.22', # CAdES v2.2.1 item 6.2.2
154
+ "CERTIFICATE_VALUES_ATTRIBUTE" => '1.2.840.113549.1.9.16.2.23', # CAdES v2.2.1 item 6.3.3
155
+ "REVOCATION_VALUES_ATTRIBUTE" => '1.2.840.113549.1.9.16.2.24', # CAdES v2.2.1 item 6.3.4
156
+ "CADES_C_TIMESTAMP_ATTRIBUTE" => '1.2.840.113549.1.9.16.2.25', # CAdES v2.2.1 item 6.3.5
157
+ "SIGNATURE_POLICY_URI" => '1.2.840.113549.1.9.16.5.1', # CAdES v2.2.1 item 5.8.1
158
+ "CERT_CRL_TIMESTAMP" => '1.2.840.113549.1.9.16.2.26', # CAdES v2.2.1 item 6.3.6
159
+ "ARCHIEVE_TIMESTAMP" => '1.2.840.113549.1.9.16.2.48', # CAdES v2.2.1 item 6.4.1
160
+ #endregion
161
+ }
162
+ end
163
+ end