Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rapid7
GitHub Repository: rapid7/metasploit-framework
Path: blob/master/lib/rex/proto/crypto_asn1/x509.rb
19664 views
1
# -*- coding: binary -*-
2
require 'rasn1'
3
require 'rex/proto/crypto_asn1/types'
4
5
module Rex::Proto::CryptoAsn1::X509
6
class X121Address < RASN1::Model
7
numeric_string :X121Address
8
end
9
10
class NetworkAddress < X121Address
11
root_options implicit: 0
12
end
13
14
class TerminalIdentifier < RASN1::Model
15
printable_string :TerminalIdentifier, implicit: 1
16
end
17
18
class AdministrationDomainName < RASN1::Model
19
choice :AdministrationDomainName, class: :application, explicit: 2, content: [
20
numeric_string(:numeric),
21
printable_string(:printable)
22
]
23
end
24
25
class AttributeType < RASN1::Types::ObjectId
26
end
27
28
class AttributeValue < RASN1::Types::Any
29
end
30
31
class AttributeTypeAndValue < RASN1::Model
32
sequence :AttributeTypeAndValue, content: [
33
wrapper(model(:type, AttributeType)),
34
wrapper(model(:value, AttributeValue))
35
]
36
end
37
38
class CountryName < RASN1::Model
39
choice :CountryName, class: :application, explicit: 1, content: [
40
numeric_string(:x121_dcc_code),
41
printable_string(:iso_3166_alpha2_code)
42
]
43
end
44
45
class DirectoryString < RASN1::Model
46
choice :DirectoryString, content: [
47
teletex_string(:teletexString, strict_encoding: false),
48
printable_string(:printableString),
49
universal_string(:universalString),
50
utf8_string(:utf8String),
51
bmp_string(:bmpString)
52
]
53
end
54
55
class EDIPartyName < RASN1::Model
56
sequence :EDIPartyName, content: [
57
wrapper(model(:nameAssigner, DirectoryString), implicit: 0, optional: true),
58
wrapper(model(:partyName, DirectoryString), implicit: 1)
59
]
60
end
61
62
class ExtensionAttribute < RASN1::Model
63
sequence :ExtensionAttribute, content: [
64
integer(:extension_attribute_type, implicit: 0),
65
any(:extension_attribute_value, implicit: 1)
66
]
67
end
68
69
class ExtensionAttributes < RASN1::Model
70
set_of(:ExtensionAttributes, ExtensionAttribute)
71
end
72
73
class NumericUserIdentifier < RASN1::Model
74
numeric_string :NumericUserIdentifier, implicit: 4
75
end
76
77
class OrganizationName < RASN1::Model
78
printable_string :OrganizationName, implicit: 3
79
end
80
81
class OrganizationalUnitName < RASN1::Types::PrintableString
82
end
83
84
class OrganizationalUnitNames < RASN1::Model
85
sequence_of(:OrganizationalUnitNames, OrganizationalUnitName)
86
end
87
88
class PersonalName < RASN1::Model
89
set :PersonalName, content: [
90
printable_string(:surname, implicit: 0),
91
printable_string(:given_name, implicit: 1),
92
printable_string(:initials, implicit: 2),
93
printable_string(:generation_qualifier, implicit: 3)
94
]
95
end
96
97
class PrivateDomainName < RASN1::Model
98
choice :PrivateDomainName, content: [
99
numeric_string(:numeric),
100
printable_string(:printable)
101
]
102
end
103
104
class SubjectPublicKeyInfo < RASN1::Model
105
sequence :subject_public_key_info,
106
explicit: 1, constructed: true, optional: true,
107
content: [model(:algorithm, Rex::Proto::CryptoAsn1::Cms::AlgorithmIdentifier),
108
bit_string(:subject_public_key)
109
]
110
end
111
112
class BuiltinDomainDefinedAttribute < RASN1::Model
113
sequence :BuiltinDomainDefinedAttribute, content: [
114
printable_string(:type),
115
printable_string(:value)
116
]
117
end
118
119
class BuiltInDomainDefinedAttributes < RASN1::Model
120
sequence_of(:BuiltInDomainDefinedAttributes, BuiltinDomainDefinedAttribute)
121
end
122
123
class BuiltInStandardAttributes < RASN1::Model
124
sequence :BuiltInStandardAttributes, content: [
125
wrapper(model(:country_name, CountryName), explicit: 0, class: :application, optional: true),
126
wrapper(model(:administration_domain_name, AdministrationDomainName), explicit: 1, class: :application, optional: true),
127
wrapper(model(:network_address, NetworkAddress), implicit: 0, optional: true),
128
wrapper(model(:terminal_identifier, TerminalIdentifier), implicit: 1, optional: false),
129
wrapper(model(:private_domain_name, PrivateDomainName), implicit: 2, optional: true),
130
wrapper(model(:organization_name, OrganizationName), implicit: 3, optional: true),
131
wrapper(model(:numeric_user_identifier, NumericUserIdentifier), implicit: 4, optional: true),
132
wrapper(model(:personal_name, PersonalName), implicit: 5, optional: true),
133
wrapper(model(:organizational_unit_names, OrganizationalUnitNames), implicit: 6, optional: true)
134
]
135
end
136
137
class RelativeDistinguishedName < RASN1::Model
138
set_of(:RelativeDistinguishedName, AttributeTypeAndValue)
139
end
140
141
class RDNSequence < RASN1::Model
142
sequence_of(:RDNSequence, RelativeDistinguishedName)
143
end
144
145
class Name < RASN1::Model
146
choice :Name, content: [
147
wrapper(model(:RDNSequence, RDNSequence))
148
]
149
end
150
151
class ORAddress < RASN1::Model
152
sequence :ORAddress, implicit: 3, content: [
153
wrapper(model(:built_in_standard_attributes, BuiltInStandardAttributes)),
154
wrapper(model(:built_in_domain_defined_attributes, BuiltInDomainDefinedAttributes), optional: true),
155
wrapper(model(:extension_attributes, ExtensionAttributes), optional: true)
156
]
157
end
158
159
class OtherName < RASN1::Model
160
sequence :OtherName, implicit: 0, content: [
161
objectid(:type_id),
162
any(:value, explicit: 0, constructed: true)
163
]
164
end
165
166
class GeneralName < RASN1::Model
167
choice :GeneralName, content: [
168
wrapper(model(:otherName, OtherName), implicit: 0),
169
ia5_string(:rfc822Name, implicit: 1),
170
ia5_string(:dNSName, implicit: 2),
171
wrapper(model(:x400Address, ORAddress), implicit: 3),
172
wrapper(model(:directoryName, Name), implicit: 4),
173
wrapper(model(:ediPartyName, EDIPartyName), implicit: 5),
174
ia5_string(:uniformResourceIdentifier, implicit: 6),
175
octet_string(:iPAddress, implicit: 7),
176
objectid(:registeredID, implicit: 8)
177
]
178
end
179
180
# https://datatracker.ietf.org/doc/html/rfc3280#section-4.2.1.7
181
class GeneralNames < RASN1::Model
182
sequence_of(:GeneralNames, GeneralName)
183
end
184
185
# https://datatracker.ietf.org/doc/html/rfc3280#section-4.2.1.7
186
class SubjectAltName < GeneralNames
187
end
188
189
# https://datatracker.ietf.org/doc/html/rfc3280#section-4.2.1.5
190
class PolicyQualifierInfo < RASN1::Model
191
sequence :PolicyQualifierInfo, content: [
192
objectid(:policyQualifierId),
193
any(:qualifier)
194
]
195
end
196
197
# https://datatracker.ietf.org/doc/html/rfc3280#section-4.2.1.5
198
class PolicyInformation < RASN1::Model
199
sequence :PolicyInformation, content: [
200
objectid(:policyIdentifier),
201
sequence_of(:policyQualifiers, PolicyQualifierInfo, optional: true)
202
]
203
end
204
205
# https://datatracker.ietf.org/doc/html/rfc3280#section-4.2.1.5
206
class CertificatePolicies < RASN1::Model
207
sequence_of(:certificatePolicies, PolicyInformation)
208
end
209
end
210
211