@@ -20,1963 +20,1963 @@ |
||
20 | 20 | */ |
21 | 21 | |
22 | 22 | class Oids { |
23 | - public $oids = [ |
|
24 | - '0.2.262.1.10*' => 'Telesec', |
|
25 | - '0.2.262.1.10.0*' => 'extension', |
|
26 | - '0.2.262.1.10.1*' => 'mechanism', |
|
27 | - '0.2.262.1.10.1.0*' => 'authentication', |
|
28 | - '0.2.262.1.10.1.0.1*' => 'passwordAuthentication', |
|
29 | - '0.2.262.1.10.1.0.2*' => 'protectedPasswordAuthentication', |
|
30 | - '0.2.262.1.10.1.0.3*' => 'oneWayX509Authentication', |
|
31 | - '0.2.262.1.10.1.0.4*' => 'twoWayX509Authentication', |
|
32 | - '0.2.262.1.10.1.0.5*' => 'threeWayX509Authentication', |
|
33 | - '0.2.262.1.10.1.0.6*' => 'oneWayISO9798Authentication', |
|
34 | - '0.2.262.1.10.1.0.7*' => 'twoWayISO9798Authentication', |
|
35 | - '0.2.262.1.10.1.0.8*' => 'telekomAuthentication', |
|
36 | - '0.2.262.1.10.1.1*' => 'signature', |
|
37 | - '0.2.262.1.10.1.1.1*' => 'md4WithRSAAndISO9697', |
|
38 | - '0.2.262.1.10.1.1.2*' => 'md4WithRSAAndTelesecSignatureStandard', |
|
39 | - '0.2.262.1.10.1.1.3*' => 'md5WithRSAAndISO9697', |
|
40 | - '0.2.262.1.10.1.1.4*' => 'md5WithRSAAndTelesecSignatureStandard', |
|
41 | - '0.2.262.1.10.1.1.5*' => 'ripemd160WithRSAAndTelekomSignatureStandard', |
|
42 | - '0.2.262.1.10.1.1.9*' => 'hbciRsaSignature', |
|
43 | - '0.2.262.1.10.1.2*' => 'encryption', |
|
44 | - '0.2.262.1.10.1.2.0*' => 'none', |
|
45 | - '0.2.262.1.10.1.2.1*' => 'rsaTelesec', |
|
46 | - '0.2.262.1.10.1.2.2*' => 'des', |
|
47 | - '0.2.262.1.10.1.2.2.1*' => 'desECB', |
|
48 | - '0.2.262.1.10.1.2.2.2*' => 'desCBC', |
|
49 | - '0.2.262.1.10.1.2.2.3*' => 'desOFB', |
|
50 | - '0.2.262.1.10.1.2.2.4*' => 'desCFB8', |
|
51 | - '0.2.262.1.10.1.2.2.5*' => 'desCFB64', |
|
52 | - '0.2.262.1.10.1.2.3*' => 'des3', |
|
53 | - '0.2.262.1.10.1.2.3.1*' => 'des3ECB', |
|
54 | - '0.2.262.1.10.1.2.3.2*' => 'des3CBC', |
|
55 | - '0.2.262.1.10.1.2.3.3*' => 'des3OFB', |
|
56 | - '0.2.262.1.10.1.2.3.4*' => 'des3CFB8', |
|
57 | - '0.2.262.1.10.1.2.3.5*' => 'des3CFB64', |
|
58 | - '0.2.262.1.10.1.2.4*' => 'magenta', |
|
59 | - '0.2.262.1.10.1.2.5*' => 'idea', |
|
60 | - '0.2.262.1.10.1.2.5.1*' => 'ideaECB', |
|
61 | - '0.2.262.1.10.1.2.5.2*' => 'ideaCBC', |
|
62 | - '0.2.262.1.10.1.2.5.3*' => 'ideaOFB', |
|
63 | - '0.2.262.1.10.1.2.5.4*' => 'ideaCFB8', |
|
64 | - '0.2.262.1.10.1.2.5.5*' => 'ideaCFB64', |
|
65 | - '0.2.262.1.10.1.3*' => 'oneWayFunction', |
|
66 | - '0.2.262.1.10.1.3.1*' => 'md4', |
|
67 | - '0.2.262.1.10.1.3.2*' => 'md5', |
|
68 | - '0.2.262.1.10.1.3.3*' => 'sqModNX509', |
|
69 | - '0.2.262.1.10.1.3.4*' => 'sqModNISO', |
|
70 | - '0.2.262.1.10.1.3.5*' => 'ripemd128', |
|
71 | - '0.2.262.1.10.1.3.6*' => 'hashUsingBlockCipher', |
|
72 | - '0.2.262.1.10.1.3.7*' => 'mac', |
|
73 | - '0.2.262.1.10.1.3.8*' => 'ripemd160', |
|
74 | - '0.2.262.1.10.1.4*' => 'fecFunction', |
|
75 | - '0.2.262.1.10.1.4.1*' => 'reedSolomon', |
|
76 | - '0.2.262.1.10.2*' => 'module', |
|
77 | - '0.2.262.1.10.2.0*' => 'algorithms', |
|
78 | - '0.2.262.1.10.2.1*' => 'attributeTypes', |
|
79 | - '0.2.262.1.10.2.2*' => 'certificateTypes', |
|
80 | - '0.2.262.1.10.2.3*' => 'messageTypes', |
|
81 | - '0.2.262.1.10.2.4*' => 'plProtocol', |
|
82 | - '0.2.262.1.10.2.5*' => 'smeAndComponentsOfSme', |
|
83 | - '0.2.262.1.10.2.6*' => 'fec', |
|
84 | - '0.2.262.1.10.2.7*' => 'usefulDefinitions', |
|
85 | - '0.2.262.1.10.2.8*' => 'stefiles', |
|
86 | - '0.2.262.1.10.2.9*' => 'sadmib', |
|
87 | - '0.2.262.1.10.2.10*' => 'electronicOrder', |
|
88 | - '0.2.262.1.10.2.11*' => 'telesecTtpAsymmetricApplication', |
|
89 | - '0.2.262.1.10.2.12*' => 'telesecTtpBasisApplication', |
|
90 | - '0.2.262.1.10.2.13*' => 'telesecTtpMessages', |
|
91 | - '0.2.262.1.10.2.14*' => 'telesecTtpTimeStampApplication', |
|
92 | - '0.2.262.1.10.3*' => 'objectClass', |
|
93 | - '0.2.262.1.10.3.0*' => 'telesecOtherName', |
|
94 | - '0.2.262.1.10.3.1*' => 'directory', |
|
95 | - '0.2.262.1.10.3.2*' => 'directoryType', |
|
96 | - '0.2.262.1.10.3.3*' => 'directoryGroup', |
|
97 | - '0.2.262.1.10.3.4*' => 'directoryUser', |
|
98 | - '0.2.262.1.10.3.5*' => 'symmetricKeyEntry', |
|
99 | - '0.2.262.1.10.4*' => 'package', |
|
100 | - '0.2.262.1.10.5*' => 'parameter', |
|
101 | - '0.2.262.1.10.6*' => 'nameBinding', |
|
102 | - '0.2.262.1.10.7*' => 'attribute', |
|
103 | - '0.2.262.1.10.7.0*' => 'applicationGroupIdentifier', |
|
104 | - '0.2.262.1.10.7.1*' => 'certificateType', |
|
105 | - '0.2.262.1.10.7.2*' => 'telesecCertificate', |
|
106 | - '0.2.262.1.10.7.3*' => 'certificateNumber', |
|
107 | - '0.2.262.1.10.7.4*' => 'certificateRevocationList', |
|
108 | - '0.2.262.1.10.7.5*' => 'creationDate', |
|
109 | - '0.2.262.1.10.7.6*' => 'issuer', |
|
110 | - '0.2.262.1.10.7.7*' => 'namingAuthority', |
|
111 | - '0.2.262.1.10.7.8*' => 'publicKeyDirectory', |
|
112 | - '0.2.262.1.10.7.9*' => 'securityDomain', |
|
113 | - '0.2.262.1.10.7.10*' => 'subject', |
|
114 | - '0.2.262.1.10.7.11*' => 'timeOfRevocation', |
|
115 | - '0.2.262.1.10.7.12*' => 'userGroupReference', |
|
116 | - '0.2.262.1.10.7.13*' => 'validity', |
|
117 | - '0.2.262.1.10.7.14*' => 'zert93', |
|
118 | - '0.2.262.1.10.7.15*' => 'securityMessEnv', |
|
119 | - '0.2.262.1.10.7.16*' => 'anonymizedPublicKeyDirectory', |
|
120 | - '0.2.262.1.10.7.17*' => 'telesecGivenName', |
|
121 | - '0.2.262.1.10.7.18*' => 'nameAdditions', |
|
122 | - '0.2.262.1.10.7.19*' => 'telesecPostalCode', |
|
123 | - '0.2.262.1.10.7.20*' => 'nameDistinguisher', |
|
124 | - '0.2.262.1.10.7.21*' => 'telesecCertificateList', |
|
125 | - '0.2.262.1.10.7.22*' => 'teletrustCertificateList', |
|
126 | - '0.2.262.1.10.7.23*' => 'x509CertificateList', |
|
127 | - '0.2.262.1.10.7.24*' => 'timeOfIssue', |
|
128 | - '0.2.262.1.10.7.25*' => 'physicalCardNumber', |
|
129 | - '0.2.262.1.10.7.26*' => 'fileType', |
|
130 | - '0.2.262.1.10.7.27*' => 'ctlFileIsArchive', |
|
131 | - '0.2.262.1.10.7.28*' => 'emailAddress', |
|
132 | - '0.2.262.1.10.7.29*' => 'certificateTemplateList', |
|
133 | - '0.2.262.1.10.7.30*' => 'directoryName', |
|
134 | - '0.2.262.1.10.7.31*' => 'directoryTypeName', |
|
135 | - '0.2.262.1.10.7.32*' => 'directoryGroupName', |
|
136 | - '0.2.262.1.10.7.33*' => 'directoryUserName', |
|
137 | - '0.2.262.1.10.7.34*' => 'revocationFlag', |
|
138 | - '0.2.262.1.10.7.35*' => 'symmetricKeyEntryName', |
|
139 | - '0.2.262.1.10.7.36*' => 'glNumber', |
|
140 | - '0.2.262.1.10.7.37*' => 'goNumber', |
|
141 | - '0.2.262.1.10.7.38*' => 'gKeyData', |
|
142 | - '0.2.262.1.10.7.39*' => 'zKeyData', |
|
143 | - '0.2.262.1.10.7.40*' => 'ktKeyData', |
|
144 | - '0.2.262.1.10.7.41*' => 'ktKeyNumber', |
|
145 | - '0.2.262.1.10.7.51*' => 'timeOfRevocationGen', |
|
146 | - '0.2.262.1.10.7.52*' => 'liabilityText', |
|
147 | - '0.2.262.1.10.8*' => 'attributeGroup', |
|
148 | - '0.2.262.1.10.9*' => 'action', |
|
149 | - '0.2.262.1.10.10*' => 'notification', |
|
150 | - '0.2.262.1.10.11*' => 'snmp-mibs', |
|
151 | - '0.2.262.1.10.11.1*' => 'securityApplication', |
|
152 | - '0.2.262.1.10.12*' => 'certAndCrlExtensionDefinitions', |
|
153 | - '0.2.262.1.10.12.0*' => 'liabilityLimitationFlag', |
|
154 | - '0.2.262.1.10.12.1*' => 'telesecCertIdExt', |
|
155 | - '0.2.262.1.10.12.2*' => 'Telesec policyIdentifier', |
|
156 | - '0.2.262.1.10.12.3*' => 'telesecPolicyQualifierID', |
|
157 | - '0.2.262.1.10.12.4*' => 'telesecCRLFilteredExt', |
|
158 | - '0.2.262.1.10.12.5*' => 'telesecCRLFilterExt', |
|
159 | - '0.2.262.1.10.12.6*' => 'telesecNamingAuthorityExt', |
|
160 | - '0.4.0.127.0.7*' => 'bsi', |
|
161 | - '0.4.0.127.0.7.1*' => 'bsiEcc', |
|
162 | - '0.4.0.127.0.7.1.1*' => 'bsifieldType', |
|
163 | - '0.4.0.127.0.7.1.1.1*' => 'bsiPrimeField', |
|
164 | - '0.4.0.127.0.7.1.1.2*' => 'bsiCharacteristicTwoField', |
|
165 | - '0.4.0.127.0.7.1.1.2.3*' => 'bsiCharacteristicTwoBasis', |
|
166 | - '0.4.0.127.0.7.1.1.2.3.1*' => 'bsiGnBasis', |
|
167 | - '0.4.0.127.0.7.1.1.2.3.2*' => 'bsiTpBasis', |
|
168 | - '0.4.0.127.0.7.1.1.2.3.3*' => 'bsiPpBasis', |
|
169 | - '0.4.0.127.0.7.1.1.4.1*' => 'bsiEcdsaSignatures', |
|
170 | - '0.4.0.127.0.7.1.1.4.1.1*' => 'bsiEcdsaWithSHA1', |
|
171 | - '0.4.0.127.0.7.1.1.4.1.2*' => 'bsiEcdsaWithSHA224', |
|
172 | - '0.4.0.127.0.7.1.1.4.1.3*' => 'bsiEcdsaWithSHA256', |
|
173 | - '0.4.0.127.0.7.1.1.4.1.4*' => 'bsiEcdsaWithSHA384', |
|
174 | - '0.4.0.127.0.7.1.1.4.1.5*' => 'bsiEcdsaWithSHA512', |
|
175 | - '0.4.0.127.0.7.1.1.4.1.6*' => 'bsiEcdsaWithRIPEMD160', |
|
176 | - '0.4.0.127.0.7.1.2*' => 'bsiEcKeyType', |
|
177 | - '0.4.0.127.0.7.1.2.1*' => 'bsiEcPublicKey', |
|
178 | - '0.4.0.127.0.7.1.5.1*' => 'bsiKaeg', |
|
179 | - '0.4.0.127.0.7.1.5.1.1*' => 'bsiKaegWithX963KDF', |
|
180 | - '0.4.0.127.0.7.1.5.1.2*' => 'bsiKaegWith3DESKDF', |
|
181 | - '0.4.0.127.0.7.2.2.1*' => 'bsiPK', |
|
182 | - '0.4.0.127.0.7.2.2.1.1*' => 'bsiPK_DH', |
|
183 | - '0.4.0.127.0.7.2.2.1.2*' => 'bsiPK_ECDH', |
|
184 | - '0.4.0.127.0.7.2.2.2*' => 'bsiTA', |
|
185 | - '0.4.0.127.0.7.2.2.2.1*' => 'bsiTA_RSA', |
|
186 | - '0.4.0.127.0.7.2.2.2.1.1*' => 'bsiTA_RSAv1_5_SHA1', |
|
187 | - '0.4.0.127.0.7.2.2.2.1.2*' => 'bsiTA_RSAv1_5_SHA256', |
|
188 | - '0.4.0.127.0.7.2.2.2.1.3*' => 'bsiTA_RSAPSS_SHA1', |
|
189 | - '0.4.0.127.0.7.2.2.2.1.4*' => 'bsiTA_RSAPSS_SHA256', |
|
190 | - '0.4.0.127.0.7.2.2.2.2*' => 'bsiTA_ECDSA', |
|
191 | - '0.4.0.127.0.7.2.2.2.2.1*' => 'bsiTA_ECDSA_SHA1', |
|
192 | - '0.4.0.127.0.7.2.2.2.2.2*' => 'bsiTA_ECDSA_SHA224', |
|
193 | - '0.4.0.127.0.7.2.2.2.2.3*' => 'bsiTA_ECDSA_SHA256', |
|
194 | - '0.4.0.127.0.7.2.2.3*' => 'bsiCA', |
|
195 | - '0.4.0.127.0.7.2.2.3.1*' => 'bsiCA_DH', |
|
196 | - '0.4.0.127.0.7.2.2.3.2*' => 'bsiCA_ECDH', |
|
197 | - '0.4.0.127.0.7.3.1.2.1*' => 'bsiRoleEAC', |
|
198 | - '0.4.0.1862*' => 'etsiQcsProfile', |
|
199 | - '0.4.0.1862.1*' => 'etsiQcs', |
|
200 | - '0.4.0.1862.1.1*' => 'etsiQcsCompliance', |
|
201 | - '0.4.0.1862.1.2*' => 'etsiQcsLimitValue', |
|
202 | - '0.4.0.1862.1.3*' => 'etsiQcsRetentionPeriod', |
|
203 | - '0.4.0.1862.1.4*' => 'etsiQcsQcSSCD', |
|
204 | - '0.9.2342.19200300.100.1.1*' => 'userID', |
|
205 | - '0.9.2342.19200300.100.1.3*' => 'rfc822Mailbox', |
|
206 | - '0.9.2342.19200300.100.1.25*' => 'domainComponent', |
|
207 | - '1.0.10118.3.0.49*' => 'ripemd160', |
|
208 | - '1.0.10118.3.0.50*' => 'ripemd128', |
|
209 | - '1.0.10118.3.0.55*' => 'whirlpool', |
|
210 | - '1.2.36.1.3.1.1.1*' => 'qgpki', |
|
211 | - '1.2.36.1.3.1.1.1.1*' => 'qgpkiPolicies', |
|
212 | - '1.2.36.1.3.1.1.1.1.1*' => 'qgpkiMedIntermedCA', |
|
213 | - '1.2.36.1.3.1.1.1.1.1.1*' => 'qgpkiMedIntermedIndividual', |
|
214 | - '1.2.36.1.3.1.1.1.1.1.2*' => 'qgpkiMedIntermedDeviceControl', |
|
215 | - '1.2.36.1.3.1.1.1.1.1.3*' => 'qgpkiMedIntermedDevice', |
|
216 | - '1.2.36.1.3.1.1.1.1.1.4*' => 'qgpkiMedIntermedAuthorisedParty', |
|
217 | - '1.2.36.1.3.1.1.1.1.1.5*' => 'qgpkiMedIntermedDeviceSystem', |
|
218 | - '1.2.36.1.3.1.1.1.1.2*' => 'qgpkiMedIssuingCA', |
|
219 | - '1.2.36.1.3.1.1.1.1.2.1*' => 'qgpkiMedIssuingIndividual', |
|
220 | - '1.2.36.1.3.1.1.1.1.2.2*' => 'qgpkiMedIssuingDeviceControl', |
|
221 | - '1.2.36.1.3.1.1.1.1.2.3*' => 'qgpkiMedIssuingDevice', |
|
222 | - '1.2.36.1.3.1.1.1.1.2.4*' => 'qgpkiMedIssuingAuthorisedParty', |
|
223 | - '1.2.36.1.3.1.1.1.1.2.5*' => 'qgpkiMedIssuingClientAuth', |
|
224 | - '1.2.36.1.3.1.1.1.1.2.6*' => 'qgpkiMedIssuingServerAuth', |
|
225 | - '1.2.36.1.3.1.1.1.1.2.7*' => 'qgpkiMedIssuingDataProt', |
|
226 | - '1.2.36.1.3.1.1.1.1.2.8*' => 'qgpkiMedIssuingTokenAuth', |
|
227 | - '1.2.36.1.3.1.1.1.1.3*' => 'qgpkiBasicIntermedCA', |
|
228 | - '1.2.36.1.3.1.1.1.1.3.1*' => 'qgpkiBasicIntermedDeviceSystem', |
|
229 | - '1.2.36.1.3.1.1.1.1.4*' => 'qgpkiBasicIssuingCA', |
|
230 | - '1.2.36.1.3.1.1.1.1.4.1*' => 'qgpkiBasicIssuingClientAuth', |
|
231 | - '1.2.36.1.3.1.1.1.1.4.2*' => 'qgpkiBasicIssuingServerAuth', |
|
232 | - '1.2.36.1.3.1.1.1.1.4.3*' => 'qgpkiBasicIssuingDataSigning', |
|
233 | - '1.2.36.1.3.1.1.1.2*' => 'qgpkiAssuranceLevel', |
|
234 | - '1.2.36.1.3.1.1.1.2.1*' => 'qgpkiAssuranceRudimentary', |
|
235 | - '1.2.36.1.3.1.1.1.2.2*' => 'qgpkiAssuranceBasic', |
|
236 | - '1.2.36.1.3.1.1.1.2.3*' => 'qgpkiAssuranceMedium', |
|
237 | - '1.2.36.1.3.1.1.1.2.4*' => 'qgpkiAssuranceHigh', |
|
238 | - '1.2.36.1.3.1.1.1.3*' => 'qgpkiCertFunction', |
|
239 | - '1.2.36.1.3.1.1.1.3.1*' => 'qgpkiFunctionIndividual', |
|
240 | - '1.2.36.1.3.1.1.1.3.2*' => 'qgpkiFunctionDevice', |
|
241 | - '1.2.36.1.3.1.1.1.3.3*' => 'qgpkiFunctionAuthorisedParty', |
|
242 | - '1.2.36.1.3.1.1.1.3.4*' => 'qgpkiFunctionDeviceControl', |
|
243 | - '1.2.36.1.3.1.2*' => 'qpspki', |
|
244 | - '1.2.36.1.3.1.2.1*' => 'qpspkiPolicies', |
|
245 | - '1.2.36.1.3.1.2.1.2*' => 'qpspkiPolicyBasic', |
|
246 | - '1.2.36.1.3.1.2.1.3*' => 'qpspkiPolicyMedium', |
|
247 | - '1.2.36.1.3.1.2.1.4*' => 'qpspkiPolicyHigh', |
|
248 | - '1.2.36.1.3.1.3.2*' => 'qtmrpki', |
|
249 | - '1.2.36.1.3.1.3.2.1*' => 'qtmrpkiPolicies', |
|
250 | - '1.2.36.1.3.1.3.2.2*' => 'qtmrpkiPurpose', |
|
251 | - '1.2.36.1.3.1.3.2.2.1*' => 'qtmrpkiIndividual', |
|
252 | - '1.2.36.1.3.1.3.2.2.2*' => 'qtmrpkiDeviceControl', |
|
253 | - '1.2.36.1.3.1.3.2.2.3*' => 'qtmrpkiDevice', |
|
254 | - '1.2.36.1.3.1.3.2.2.4*' => 'qtmrpkiAuthorisedParty', |
|
255 | - '1.2.36.1.3.1.3.2.2.5*' => 'qtmrpkiDeviceSystem', |
|
256 | - '1.2.36.1.3.1.3.2.3*' => 'qtmrpkiDevice', |
|
257 | - '1.2.36.1.3.1.3.2.3.1*' => 'qtmrpkiDriverLicense', |
|
258 | - '1.2.36.1.3.1.3.2.3.2*' => 'qtmrpkiIndustryAuthority', |
|
259 | - '1.2.36.1.3.1.3.2.3.3*' => 'qtmrpkiMarineLicense', |
|
260 | - '1.2.36.1.3.1.3.2.3.4*' => 'qtmrpkiAdultProofOfAge', |
|
261 | - '1.2.36.1.3.1.3.2.3.5*' => 'qtmrpkiSam', |
|
262 | - '1.2.36.1.3.1.3.2.4*' => 'qtmrpkiAuthorisedParty', |
|
263 | - '1.2.36.1.3.1.3.2.4.1*' => 'qtmrpkiTransportInspector', |
|
264 | - '1.2.36.1.3.1.3.2.4.2*' => 'qtmrpkiPoliceOfficer', |
|
265 | - '1.2.36.1.3.1.3.2.4.3*' => 'qtmrpkiSystem', |
|
266 | - '1.2.36.1.3.1.3.2.4.4*' => 'qtmrpkiLiquorLicensingInspector', |
|
267 | - '1.2.36.1.3.1.3.2.4.5*' => 'qtmrpkiMarineEnforcementOfficer', |
|
268 | - '1.2.36.1.333.1*' => 'australianBusinessNumber', |
|
269 | - '1.2.36.68980861.1.1.2*' => 'signetPersonal', |
|
270 | - '1.2.36.68980861.1.1.3*' => 'signetBusiness', |
|
271 | - '1.2.36.68980861.1.1.4*' => 'signetLegal', |
|
272 | - '1.2.36.68980861.1.1.10*' => 'signetPilot', |
|
273 | - '1.2.36.68980861.1.1.11*' => 'signetIntraNet', |
|
274 | - '1.2.36.68980861.1.1.20*' => 'signetPolicy', |
|
275 | - '1.2.36.75878867.1.100.1.1*' => 'certificatesAustraliaPolicy', |
|
276 | - '1.2.392.200011.61.1.1.1*' => 'mitsubishiSecurityAlgorithm', |
|
277 | - '1.2.392.200011.61.1.1.1.1*' => 'misty1-cbc', |
|
278 | - '1.2.410.200004.1.4*' => 'seedCBC', |
|
279 | - '1.2.410.200004.1.7*' => 'seedMAC', |
|
280 | - '1.2.410.200004.1.15*' => 'pbeWithSHA1AndSEED-CBC', |
|
281 | - '1.2.410.200046.1.1*' => 'aria1AlgorithmModes', |
|
282 | - '1.2.410.200046.1.1.1*' => 'aria128-ecb', |
|
283 | - '1.2.410.200046.1.1.2*' => 'aria128-cbc', |
|
284 | - '1.2.410.200046.1.1.3*' => 'aria128-cfb', |
|
285 | - '1.2.410.200046.1.1.4*' => 'aria128-ofb', |
|
286 | - '1.2.410.200046.1.1.5*' => 'aria128-ctr', |
|
287 | - '1.2.410.200046.1.1.6*' => 'aria192-ecb', |
|
288 | - '1.2.410.200046.1.1.7*' => 'aria192-cbc', |
|
289 | - '1.2.410.200046.1.1.8*' => 'aria192-cfb', |
|
290 | - '1.2.410.200046.1.1.9*' => 'aria192-ofb', |
|
291 | - '1.2.410.200046.1.1.10*' => 'aria192-ctr', |
|
292 | - '1.2.410.200046.1.1.11*' => 'aria256-ecb', |
|
293 | - '1.2.410.200046.1.1.12*' => 'aria256-cbc', |
|
294 | - '1.2.410.200046.1.1.13*' => 'aria256-ctr', |
|
295 | - '1.2.410.200046.1.1.21*' => 'aria128-cmac', |
|
296 | - '1.2.410.200046.1.1.22*' => 'aria192-cmac', |
|
297 | - '1.2.410.200046.1.1.23*' => 'aria256-cmac', |
|
298 | - '1.2.410.200046.1.1.31*' => 'aria128-ocb2', |
|
299 | - '1.2.410.200046.1.1.32*' => 'aria192-ocb2', |
|
300 | - '1.2.410.200046.1.1.33*' => 'aria256-ocb2', |
|
301 | - '1.2.410.200046.1.1.34*' => 'aria128-gcm', |
|
302 | - '1.2.410.200046.1.1.35*' => 'aria192-gcm', |
|
303 | - '1.2.410.200046.1.1.36*' => 'aria256-gcm', |
|
304 | - '1.2.410.200046.1.1.37*' => 'aria128-ccm', |
|
305 | - '1.2.410.200046.1.1.38*' => 'aria192-ccm', |
|
306 | - '1.2.410.200046.1.1.39*' => 'aria256-ccm', |
|
307 | - '1.2.410.200046.1.1.40*' => 'aria128-keywrap', |
|
308 | - '1.2.410.200046.1.1.41*' => 'aria192-keywrap', |
|
309 | - '1.2.410.200046.1.1.42*' => 'aria256-keywrap', |
|
310 | - '1.2.410.200046.1.1.43*' => 'aria128-keywrapWithPad', |
|
311 | - '1.2.410.200046.1.1.44*' => 'aria192-keywrapWithPad', |
|
312 | - '1.2.410.200046.1.1.45*' => 'aria256-keywrapWithPad', |
|
313 | - '1.2.643.2.2.3*' => 'gostSignature', |
|
314 | - '1.2.643.2.2.4*' => 'gost94Signature', |
|
315 | - '1.2.643.2.2.20*' => 'gost94PublicKey', |
|
316 | - '1.2.643.2.2.19*' => 'gostPublicKey', |
|
317 | - '1.2.643.2.2.21*' => 'gostCipher', |
|
318 | - '1.2.643.2.2.31.0*' => 'testCipherParams', |
|
319 | - '1.2.643.2.2.31.1*' => 'cryptoProCipherA', |
|
320 | - '1.2.643.2.2.31.2*' => 'cryptoProCipherB', |
|
321 | - '1.2.643.2.2.31.3*' => 'cryptoProCipherC', |
|
322 | - '1.2.643.2.2.31.4*' => 'cryptoProCipherD', |
|
323 | - '1.2.643.2.2.31.5*' => 'oscar11Cipher', |
|
324 | - '1.2.643.2.2.31.6*' => 'oscar10Cipher', |
|
325 | - '1.2.643.2.2.31.7*' => 'ric1Cipher', |
|
326 | - '1.2.643.2.2.9*' => 'gostDigest', |
|
327 | - '1.2.643.2.2.30.0*' => 'testDigestParams', |
|
328 | - '1.2.643.2.2.30.1*' => 'cryptoProDigestA', |
|
329 | - '1.2.643.2.2.35.0*' => 'testSignParams', |
|
330 | - '1.2.643.2.2.35.1*' => 'cryptoProSignA', |
|
331 | - '1.2.643.2.2.35.2*' => 'cryptoProSignB', |
|
332 | - '1.2.643.2.2.35.3*' => 'cryptoProSignC', |
|
333 | - '1.2.643.2.2.36.0*' => 'cryptoProSignXA', |
|
334 | - '1.2.643.2.2.36.1*' => 'cryptoProSignXB', |
|
335 | - '1.2.643.2.2.14.0*' => 'nullMeshing', |
|
336 | - '1.2.643.2.2.14.1*' => 'cryptoProMeshing', |
|
337 | - '1.2.643.2.2.10*' => 'hmacGost', |
|
338 | - '1.2.643.2.2.13.0*' => 'gostWrap', |
|
339 | - '1.2.643.2.2.13.1*' => 'cryptoProWrap', |
|
340 | - '1.2.643.2.2.96*' => 'cryptoProECDHWrap', |
|
341 | - '1.2.752.34.1*' => 'seis-cp', |
|
342 | - '1.2.752.34.1.1*' => 'SEIS high-assurance policyIdentifier', |
|
343 | - '1.2.752.34.1.2*' => 'SEIS GAK policyIdentifier', |
|
344 | - '1.2.752.34.2*' => 'SEIS pe', |
|
345 | - '1.2.752.34.3*' => 'SEIS at', |
|
346 | - '1.2.752.34.3.1*' => 'SEIS at-personalIdentifier', |
|
347 | - '1.2.840.10040.1*' => 'module', |
|
348 | - '1.2.840.10040.1.1*' => 'x9f1-cert-mgmt', |
|
349 | - '1.2.840.10040.2*' => 'holdinstruction', |
|
350 | - '1.2.840.10040.2.1*' => 'holdinstruction-none', |
|
351 | - '1.2.840.10040.2.2*' => 'callissuer', |
|
352 | - '1.2.840.10040.2.3*' => 'reject', |
|
353 | - '1.2.840.10040.2.4*' => 'pickupToken', |
|
354 | - '1.2.840.10040.3*' => 'attribute', |
|
355 | - '1.2.840.10040.3.1*' => 'countersignature', |
|
356 | - '1.2.840.10040.3.2*' => 'attribute-cert', |
|
357 | - '1.2.840.10040.4*' => 'algorithm', |
|
358 | - '1.2.840.10040.4.1*' => 'dsa', |
|
359 | - '1.2.840.10040.4.2*' => 'dsa-match', |
|
360 | - '1.2.840.10040.4.3*' => 'dsaWithSha1', |
|
361 | - '1.2.840.10045.1*' => 'fieldType', |
|
362 | - '1.2.840.10045.1.1*' => 'prime-field', |
|
363 | - '1.2.840.10045.1.2*' => 'characteristic-two-field', |
|
364 | - '1.2.840.10045.1.2.3*' => 'characteristic-two-basis', |
|
365 | - '1.2.840.10045.1.2.3.1*' => 'onBasis', |
|
366 | - '1.2.840.10045.1.2.3.2*' => 'tpBasis', |
|
367 | - '1.2.840.10045.1.2.3.3*' => 'ppBasis', |
|
368 | - '1.2.840.10045.2*' => 'publicKeyType', |
|
369 | - '1.2.840.10045.2.1*' => 'ecPublicKey', |
|
370 | - '1.2.840.10045.3.0.1*' => 'c2pnb163v1', |
|
371 | - '1.2.840.10045.3.0.2*' => 'c2pnb163v2', |
|
372 | - '1.2.840.10045.3.0.3*' => 'c2pnb163v3', |
|
373 | - '1.2.840.10045.3.0.5*' => 'c2tnb191v1', |
|
374 | - '1.2.840.10045.3.0.6*' => 'c2tnb191v2', |
|
375 | - '1.2.840.10045.3.0.7*' => 'c2tnb191v3', |
|
376 | - '1.2.840.10045.3.0.10*' => 'c2pnb208w1', |
|
377 | - '1.2.840.10045.3.0.11*' => 'c2tnb239v1', |
|
378 | - '1.2.840.10045.3.0.12*' => 'c2tnb239v2', |
|
379 | - '1.2.840.10045.3.0.13*' => 'c2tnb239v3', |
|
380 | - '1.2.840.10045.3.0.16*' => 'c2pnb272w1', |
|
381 | - '1.2.840.10045.3.0.18*' => 'c2tnb359v1', |
|
382 | - '1.2.840.10045.3.0.19*' => 'c2pnb368w1', |
|
383 | - '1.2.840.10045.3.0.20*' => 'c2tnb431r1', |
|
384 | - '1.2.840.10045.3.1.1*' => 'ansiX9p192r1', |
|
385 | - '1.2.840.10045.3.1.1.1*' => 'prime192v1', |
|
386 | - '1.2.840.10045.3.1.1.2*' => 'prime192v2', |
|
387 | - '1.2.840.10045.3.1.1.3*' => 'prime192v3', |
|
388 | - '1.2.840.10045.3.1.1.4*' => 'prime239v1', |
|
389 | - '1.2.840.10045.3.1.1.5*' => 'prime239v2', |
|
390 | - '1.2.840.10045.3.1.1.6*' => 'prime239v3', |
|
391 | - '1.2.840.10045.3.1.1.7*' => 'prime256v1', |
|
392 | - '1.2.840.10045.3.1.7*' => 'ansiX9p256r1', |
|
393 | - '1.2.840.10045.4.1*' => 'ecdsaWithSHA1', |
|
394 | - '1.2.840.10045.4.2*' => 'ecdsaWithRecommended', |
|
395 | - '1.2.840.10045.4.3*' => 'ecdsaWithSpecified', |
|
396 | - '1.2.840.10045.4.3.1*' => 'ecdsaWithSHA224', |
|
397 | - '1.2.840.10045.4.3.2*' => 'ecdsaWithSHA256', |
|
398 | - '1.2.840.10045.4.3.3*' => 'ecdsaWithSHA384', |
|
399 | - '1.2.840.10045.4.3.4*' => 'ecdsaWithSHA512', |
|
400 | - '1.2.840.10046.1*' => 'fieldType', |
|
401 | - '1.2.840.10046.1.1*' => 'gf-prime', |
|
402 | - '1.2.840.10046.2*' => 'numberType', |
|
403 | - '1.2.840.10046.2.1*' => 'dhPublicKey', |
|
404 | - '1.2.840.10046.3*' => 'scheme', |
|
405 | - '1.2.840.10046.3.1*' => 'dhStatic', |
|
406 | - '1.2.840.10046.3.2*' => 'dhEphem', |
|
407 | - '1.2.840.10046.3.3*' => 'dhHybrid1', |
|
408 | - '1.2.840.10046.3.4*' => 'dhHybrid2', |
|
409 | - '1.2.840.10046.3.5*' => 'mqv2', |
|
410 | - '1.2.840.10046.3.6*' => 'mqv1', |
|
411 | - '1.2.840.10065.2.2*' => '?', |
|
412 | - '1.2.840.10065.2.3*' => 'healthcareLicense', |
|
413 | - '1.2.840.10065.2.3.1.1*' => 'license?', |
|
414 | - '1.2.840.113533.7*' => 'nsn', |
|
415 | - '1.2.840.113533.7.65*' => 'nsn-ce', |
|
416 | - '1.2.840.113533.7.65.0*' => 'entrustVersInfo', |
|
417 | - '1.2.840.113533.7.66*' => 'nsn-alg', |
|
418 | - '1.2.840.113533.7.66.3*' => 'cast3CBC', |
|
419 | - '1.2.840.113533.7.66.10*' => 'cast5CBC', |
|
420 | - '1.2.840.113533.7.66.11*' => 'cast5MAC', |
|
421 | - '1.2.840.113533.7.66.12*' => 'pbeWithMD5AndCAST5-CBC', |
|
422 | - '1.2.840.113533.7.66.13*' => 'passwordBasedMac', |
|
423 | - '1.2.840.113533.7.67*' => 'nsn-oc', |
|
424 | - '1.2.840.113533.7.67.0*' => 'entrustUser', |
|
425 | - '1.2.840.113533.7.68*' => 'nsn-at', |
|
426 | - '1.2.840.113533.7.68.0*' => 'entrustCAInfo', |
|
427 | - '1.2.840.113533.7.68.10*' => 'attributeCertificate', |
|
428 | - '1.2.840.113549.1.1*' => 'pkcs-1', |
|
429 | - '1.2.840.113549.1.1.1*' => 'rsaEncryption', |
|
430 | - '1.2.840.113549.1.1.2*' => 'md2WithRSAEncryption', |
|
431 | - '1.2.840.113549.1.1.3*' => 'md4WithRSAEncryption', |
|
432 | - '1.2.840.113549.1.1.4*' => 'md5WithRSAEncryption', |
|
433 | - '1.2.840.113549.1.1.5*' => 'sha1WithRSAEncryption', |
|
434 | - '1.2.840.113549.1.1.7*' => 'rsaOAEP', |
|
435 | - '1.2.840.113549.1.1.8*' => 'pkcs1-MGF', |
|
436 | - '1.2.840.113549.1.1.9*' => 'rsaOAEP-pSpecified', |
|
437 | - '1.2.840.113549.1.1.10*' => 'rsaPSS', |
|
438 | - '1.2.840.113549.1.1.11*' => 'sha256WithRSAEncryption', |
|
439 | - '1.2.840.113549.1.1.12*' => 'sha384WithRSAEncryption', |
|
440 | - '1.2.840.113549.1.1.13*' => 'sha512WithRSAEncryption', |
|
441 | - '1.2.840.113549.1.1.14*' => 'sha224WithRSAEncryption', |
|
442 | - '1.2.840.113549.1.1.6*' => 'rsaOAEPEncryptionSET', |
|
443 | - '1.2.840.113549.1.2*' => 'bsafeRsaEncr', |
|
444 | - '1.2.840.113549.1.3*' => 'pkcs-3', |
|
445 | - '1.2.840.113549.1.3.1*' => 'dhKeyAgreement', |
|
446 | - '1.2.840.113549.1.5*' => 'pkcs-5', |
|
447 | - '1.2.840.113549.1.5.1*' => 'pbeWithMD2AndDES-CBC', |
|
448 | - '1.2.840.113549.1.5.3*' => 'pbeWithMD5AndDES-CBC', |
|
449 | - '1.2.840.113549.1.5.4*' => 'pbeWithMD2AndRC2-CBC', |
|
450 | - '1.2.840.113549.1.5.6*' => 'pbeWithMD5AndRC2-CBC', |
|
451 | - '1.2.840.113549.1.5.9*' => 'pbeWithMD5AndXOR', |
|
452 | - '1.2.840.113549.1.5.10*' => 'pbeWithSHAAndDES-CBC', |
|
453 | - '1.2.840.113549.1.5.12*' => 'pkcs5PBKDF2', |
|
454 | - '1.2.840.113549.1.5.13*' => 'pkcs5PBES2', |
|
455 | - '1.2.840.113549.1.5.14*' => 'pkcs5PBMAC1', |
|
456 | - '1.2.840.113549.1.7*' => 'pkcs-7', |
|
457 | - '1.2.840.113549.1.7.1*' => 'data', |
|
458 | - '1.2.840.113549.1.7.2*' => 'signedData', |
|
459 | - '1.2.840.113549.1.7.3*' => 'envelopedData', |
|
460 | - '1.2.840.113549.1.7.4*' => 'signedAndEnvelopedData', |
|
461 | - '1.2.840.113549.1.7.5*' => 'digestedData', |
|
462 | - '1.2.840.113549.1.7.6*' => 'encryptedData', |
|
463 | - '1.2.840.113549.1.7.7*' => 'dataWithAttributes', |
|
464 | - '1.2.840.113549.1.7.8*' => 'encryptedPrivateKeyInfo', |
|
465 | - '1.2.840.113549.1.9*' => 'pkcs-9', |
|
466 | - '1.2.840.113549.1.9.1*' => 'emailAddress', |
|
467 | - '1.2.840.113549.1.9.2*' => 'unstructuredName', |
|
468 | - '1.2.840.113549.1.9.3*' => 'contentType', |
|
469 | - '1.2.840.113549.1.9.4*' => 'messageDigest', |
|
470 | - '1.2.840.113549.1.9.5*' => 'signingTime', |
|
471 | - '1.2.840.113549.1.9.6*' => 'countersignature', |
|
472 | - '1.2.840.113549.1.9.7*' => 'challengePassword', |
|
473 | - '1.2.840.113549.1.9.8*' => 'unstructuredAddress', |
|
474 | - '1.2.840.113549.1.9.9*' => 'extendedCertificateAttributes', |
|
475 | - '1.2.840.113549.1.9.10*' => 'issuerAndSerialNumber', |
|
476 | - '1.2.840.113549.1.9.11*' => 'passwordCheck', |
|
477 | - '1.2.840.113549.1.9.12*' => 'publicKey', |
|
478 | - '1.2.840.113549.1.9.13*' => 'signingDescription', |
|
479 | - '1.2.840.113549.1.9.14*' => 'extensionRequest', |
|
480 | - '1.2.840.113549.1.9.15*' => 'sMIMECapabilities', |
|
481 | - '1.2.840.113549.1.9.15.1*' => 'preferSignedData', |
|
482 | - '1.2.840.113549.1.9.15.2*' => 'canNotDecryptAny', |
|
483 | - '1.2.840.113549.1.9.15.3*' => 'receiptRequest', |
|
484 | - '1.2.840.113549.1.9.15.4*' => 'receipt', |
|
485 | - '1.2.840.113549.1.9.15.5*' => 'contentHints', |
|
486 | - '1.2.840.113549.1.9.15.6*' => 'mlExpansionHistory', |
|
487 | - '1.2.840.113549.1.9.16*' => 'id-sMIME', |
|
488 | - '1.2.840.113549.1.9.16.0*' => 'id-mod', |
|
489 | - '1.2.840.113549.1.9.16.0.1*' => 'id-mod-cms', |
|
490 | - '1.2.840.113549.1.9.16.0.2*' => 'id-mod-ess', |
|
491 | - '1.2.840.113549.1.9.16.0.3*' => 'id-mod-oid', |
|
492 | - '1.2.840.113549.1.9.16.0.4*' => 'id-mod-msg-v3', |
|
493 | - '1.2.840.113549.1.9.16.0.5*' => 'id-mod-ets-eSignature-88', |
|
494 | - '1.2.840.113549.1.9.16.0.6*' => 'id-mod-ets-eSignature-97', |
|
495 | - '1.2.840.113549.1.9.16.0.7*' => 'id-mod-ets-eSigPolicy-88', |
|
496 | - '1.2.840.113549.1.9.16.0.8*' => 'id-mod-ets-eSigPolicy-88', |
|
497 | - '1.2.840.113549.1.9.16.1*' => 'contentType', |
|
498 | - '1.2.840.113549.1.9.16.1.1*' => 'receipt', |
|
499 | - '1.2.840.113549.1.9.16.1.2*' => 'authData', |
|
500 | - '1.2.840.113549.1.9.16.1.3*' => 'publishCert', |
|
501 | - '1.2.840.113549.1.9.16.1.4*' => 'tSTInfo', |
|
502 | - '1.2.840.113549.1.9.16.1.5*' => 'tDTInfo', |
|
503 | - '1.2.840.113549.1.9.16.1.6*' => 'contentInfo', |
|
504 | - '1.2.840.113549.1.9.16.1.7*' => 'dVCSRequestData', |
|
505 | - '1.2.840.113549.1.9.16.1.8*' => 'dVCSResponseData', |
|
506 | - '1.2.840.113549.1.9.16.1.9*' => 'compressedData', |
|
507 | - '1.2.840.113549.1.9.16.1.10*' => 'scvpCertValRequest', |
|
508 | - '1.2.840.113549.1.9.16.1.11*' => 'scvpCertValResponse', |
|
509 | - '1.2.840.113549.1.9.16.1.12*' => 'scvpValPolRequest', |
|
510 | - '1.2.840.113549.1.9.16.1.13*' => 'scvpValPolResponse', |
|
511 | - '1.2.840.113549.1.9.16.1.14*' => 'attrCertEncAttrs', |
|
512 | - '1.2.840.113549.1.9.16.1.15*' => 'tSReq', |
|
513 | - '1.2.840.113549.1.9.16.1.16*' => 'firmwarePackage', |
|
514 | - '1.2.840.113549.1.9.16.1.17*' => 'firmwareLoadReceipt', |
|
515 | - '1.2.840.113549.1.9.16.1.18*' => 'firmwareLoadError', |
|
516 | - '1.2.840.113549.1.9.16.1.19*' => 'contentCollection', |
|
517 | - '1.2.840.113549.1.9.16.1.20*' => 'contentWithAttrs', |
|
518 | - '1.2.840.113549.1.9.16.1.21*' => 'encKeyWithID', |
|
519 | - '1.2.840.113549.1.9.16.1.22*' => 'encPEPSI', |
|
520 | - '1.2.840.113549.1.9.16.1.23*' => 'authEnvelopedData', |
|
521 | - '1.2.840.113549.1.9.16.1.24*' => 'routeOriginAttest', |
|
522 | - '1.2.840.113549.1.9.16.1.25*' => 'symmetricKeyPackage', |
|
523 | - '1.2.840.113549.1.9.16.1.26*' => 'rpkiManifest', |
|
524 | - '1.2.840.113549.1.9.16.1.27*' => 'asciiTextWithCRLF', |
|
525 | - '1.2.840.113549.1.9.16.1.28*' => 'xml', |
|
526 | - '1.2.840.113549.1.9.16.1.29*' => 'pdf', |
|
527 | - '1.2.840.113549.1.9.16.1.30*' => 'postscript', |
|
528 | - '1.2.840.113549.1.9.16.1.31*' => 'timestampedData', |
|
529 | - '1.2.840.113549.1.9.16.1.32*' => 'asAdjacencyAttest', |
|
530 | - '1.2.840.113549.1.9.16.1.33*' => 'rpkiTrustAnchor', |
|
531 | - '1.2.840.113549.1.9.16.1.34*' => 'trustAnchorList', |
|
532 | - '1.2.840.113549.1.9.16.2*' => 'authenticatedAttributes', |
|
533 | - '1.2.840.113549.1.9.16.2.1*' => 'receiptRequest', |
|
534 | - '1.2.840.113549.1.9.16.2.2*' => 'securityLabel', |
|
535 | - '1.2.840.113549.1.9.16.2.3*' => 'mlExpandHistory', |
|
536 | - '1.2.840.113549.1.9.16.2.4*' => 'contentHint', |
|
537 | - '1.2.840.113549.1.9.16.2.5*' => 'msgSigDigest', |
|
538 | - '1.2.840.113549.1.9.16.2.6*' => 'encapContentType', |
|
539 | - '1.2.840.113549.1.9.16.2.7*' => 'contentIdentifier', |
|
540 | - '1.2.840.113549.1.9.16.2.8*' => 'macValue', |
|
541 | - '1.2.840.113549.1.9.16.2.9*' => 'equivalentLabels', |
|
542 | - '1.2.840.113549.1.9.16.2.10*' => 'contentReference', |
|
543 | - '1.2.840.113549.1.9.16.2.11*' => 'encrypKeyPref', |
|
544 | - '1.2.840.113549.1.9.16.2.12*' => 'signingCertificate', |
|
545 | - '1.2.840.113549.1.9.16.2.13*' => 'smimeEncryptCerts', |
|
546 | - '1.2.840.113549.1.9.16.2.14*' => 'timeStampToken', |
|
547 | - '1.2.840.113549.1.9.16.2.15*' => 'sigPolicyId', |
|
548 | - '1.2.840.113549.1.9.16.2.16*' => 'commitmentType', |
|
549 | - '1.2.840.113549.1.9.16.2.17*' => 'signerLocation', |
|
550 | - '1.2.840.113549.1.9.16.2.18*' => 'signerAttr', |
|
551 | - '1.2.840.113549.1.9.16.2.19*' => 'otherSigCert', |
|
552 | - '1.2.840.113549.1.9.16.2.20*' => 'contentTimestamp', |
|
553 | - '1.2.840.113549.1.9.16.2.21*' => 'certificateRefs', |
|
554 | - '1.2.840.113549.1.9.16.2.22*' => 'revocationRefs', |
|
555 | - '1.2.840.113549.1.9.16.2.23*' => 'certValues', |
|
556 | - '1.2.840.113549.1.9.16.2.24*' => 'revocationValues', |
|
557 | - '1.2.840.113549.1.9.16.2.25*' => 'escTimeStamp', |
|
558 | - '1.2.840.113549.1.9.16.2.26*' => 'certCRLTimestamp', |
|
559 | - '1.2.840.113549.1.9.16.2.27*' => 'archiveTimeStamp', |
|
560 | - '1.2.840.113549.1.9.16.2.28*' => 'signatureType', |
|
561 | - '1.2.840.113549.1.9.16.2.29*' => 'dvcsDvc', |
|
562 | - '1.2.840.113549.1.9.16.2.30*' => 'cekReference', |
|
563 | - '1.2.840.113549.1.9.16.2.31*' => 'maxCEKDecrypts', |
|
564 | - '1.2.840.113549.1.9.16.2.32*' => 'kekDerivationAlg', |
|
565 | - '1.2.840.113549.1.9.16.2.33*' => 'intendedRecipients', |
|
566 | - '1.2.840.113549.1.9.16.2.34*' => 'cmcUnsignedData', |
|
567 | - '1.2.840.113549.1.9.16.2.35*' => 'fwPackageID', |
|
568 | - '1.2.840.113549.1.9.16.2.36*' => 'fwTargetHardwareIDs', |
|
569 | - '1.2.840.113549.1.9.16.2.37*' => 'fwDecryptKeyID', |
|
570 | - '1.2.840.113549.1.9.16.2.38*' => 'fwImplCryptAlgs', |
|
571 | - '1.2.840.113549.1.9.16.2.39*' => 'fwWrappedFirmwareKey', |
|
572 | - '1.2.840.113549.1.9.16.2.40*' => 'fwCommunityIdentifiers', |
|
573 | - '1.2.840.113549.1.9.16.2.41*' => 'fwPkgMessageDigest', |
|
574 | - '1.2.840.113549.1.9.16.2.42*' => 'fwPackageInfo', |
|
575 | - '1.2.840.113549.1.9.16.2.43*' => 'fwImplCompressAlgs', |
|
576 | - '1.2.840.113549.1.9.16.2.44*' => 'etsAttrCertificateRefs', |
|
577 | - '1.2.840.113549.1.9.16.2.45*' => 'etsAttrRevocationRefs', |
|
578 | - '1.2.840.113549.1.9.16.2.46*' => 'binarySigningTime', |
|
579 | - '1.2.840.113549.1.9.16.2.47*' => 'signingCertificateV2', |
|
580 | - '1.2.840.113549.1.9.16.2.48*' => 'etsArchiveTimeStampV2', |
|
581 | - '1.2.840.113549.1.9.16.2.49*' => 'erInternal', |
|
582 | - '1.2.840.113549.1.9.16.2.50*' => 'erExternal', |
|
583 | - '1.2.840.113549.1.9.16.2.51*' => 'multipleSignatures', |
|
584 | - '1.2.840.113549.1.9.16.3.1*' => 'esDHwith3DES', |
|
585 | - '1.2.840.113549.1.9.16.3.2*' => 'esDHwithRC2', |
|
586 | - '1.2.840.113549.1.9.16.3.3*' => '3desWrap', |
|
587 | - '1.2.840.113549.1.9.16.3.4*' => 'rc2Wrap', |
|
588 | - '1.2.840.113549.1.9.16.3.5*' => 'esDH', |
|
589 | - '1.2.840.113549.1.9.16.3.6*' => 'cms3DESwrap', |
|
590 | - '1.2.840.113549.1.9.16.3.7*' => 'cmsRC2wrap', |
|
591 | - '1.2.840.113549.1.9.16.3.8*' => 'zlib', |
|
592 | - '1.2.840.113549.1.9.16.3.9*' => 'pwriKEK', |
|
593 | - '1.2.840.113549.1.9.16.3.10*' => 'ssDH', |
|
594 | - '1.2.840.113549.1.9.16.3.11*' => 'hmacWith3DESwrap', |
|
595 | - '1.2.840.113549.1.9.16.3.12*' => 'hmacWithAESwrap', |
|
596 | - '1.2.840.113549.1.9.16.3.13*' => 'md5XorExperiment', |
|
597 | - '1.2.840.113549.1.9.16.3.14*' => 'rsaKEM', |
|
598 | - '1.2.840.113549.1.9.16.3.15*' => 'authEnc128', |
|
599 | - '1.2.840.113549.1.9.16.3.16*' => 'authEnc256', |
|
600 | - '1.2.840.113549.1.9.16.4.1*' => 'certDist-ldap', |
|
601 | - '1.2.840.113549.1.9.16.5.1*' => 'sigPolicyQualifier-spuri x', |
|
602 | - '1.2.840.113549.1.9.16.5.2*' => 'sigPolicyQualifier-spUserNotice', |
|
603 | - '1.2.840.113549.1.9.16.6.1*' => 'proofOfOrigin', |
|
604 | - '1.2.840.113549.1.9.16.6.2*' => 'proofOfReceipt', |
|
605 | - '1.2.840.113549.1.9.16.6.3*' => 'proofOfDelivery', |
|
606 | - '1.2.840.113549.1.9.16.6.4*' => 'proofOfSender', |
|
607 | - '1.2.840.113549.1.9.16.6.5*' => 'proofOfApproval', |
|
608 | - '1.2.840.113549.1.9.16.6.6*' => 'proofOfCreation', |
|
609 | - '1.2.840.113549.1.9.16.8.1*' => 'glUseKEK', |
|
610 | - '1.2.840.113549.1.9.16.8.2*' => 'glDelete', |
|
611 | - '1.2.840.113549.1.9.16.8.3*' => 'glAddMember', |
|
612 | - '1.2.840.113549.1.9.16.8.4*' => 'glDeleteMember', |
|
613 | - '1.2.840.113549.1.9.16.8.5*' => 'glRekey', |
|
614 | - '1.2.840.113549.1.9.16.8.6*' => 'glAddOwner', |
|
615 | - '1.2.840.113549.1.9.16.8.7*' => 'glRemoveOwner', |
|
616 | - '1.2.840.113549.1.9.16.8.8*' => 'glkCompromise', |
|
617 | - '1.2.840.113549.1.9.16.8.9*' => 'glkRefresh', |
|
618 | - '1.2.840.113549.1.9.16.8.10*' => 'glFailInfo', |
|
619 | - '1.2.840.113549.1.9.16.8.11*' => 'glaQueryRequest', |
|
620 | - '1.2.840.113549.1.9.16.8.12*' => 'glaQueryResponse', |
|
621 | - '1.2.840.113549.1.9.16.8.13*' => 'glProvideCert', |
|
622 | - '1.2.840.113549.1.9.16.8.14*' => 'glUpdateCert', |
|
623 | - '1.2.840.113549.1.9.16.8.15*' => 'glKey', |
|
624 | - '1.2.840.113549.1.9.16.9*' => 'signatureTypeIdentifier', |
|
625 | - '1.2.840.113549.1.9.16.9.1*' => 'originatorSig', |
|
626 | - '1.2.840.113549.1.9.16.9.2*' => 'domainSig', |
|
627 | - '1.2.840.113549.1.9.16.9.3*' => 'additionalAttributesSig', |
|
628 | - '1.2.840.113549.1.9.16.9.4*' => 'reviewSig', |
|
629 | - '1.2.840.113549.1.9.16.11*' => 'capabilities', |
|
630 | - '1.2.840.113549.1.9.16.11.1*' => 'preferBinaryInside', |
|
631 | - '1.2.840.113549.1.9.20*' => 'friendlyName (for PKCS #12)', |
|
632 | - '1.2.840.113549.1.9.21*' => 'localKeyID (for PKCS #12)', |
|
633 | - '1.2.840.113549.1.9.22*' => 'certTypes (for PKCS #12)', |
|
634 | - '1.2.840.113549.1.9.22.1*' => 'x509Certificate (for PKCS #12)', |
|
635 | - '1.2.840.113549.1.9.22.2*' => 'sdsiCertificate (for PKCS #12)', |
|
636 | - '1.2.840.113549.1.9.23*' => 'crlTypes (for PKCS #12)', |
|
637 | - '1.2.840.113549.1.9.23.1*' => 'x509Crl (for PKCS #12)', |
|
638 | - '1.2.840.113549.1.9.24*' => 'pkcs9objectClass', |
|
639 | - '1.2.840.113549.1.9.25*' => 'pkcs9attributes', |
|
640 | - '1.2.840.113549.1.9.25.1*' => 'pkcs15Token', |
|
641 | - '1.2.840.113549.1.9.25.2*' => 'encryptedPrivateKeyInfo', |
|
642 | - '1.2.840.113549.1.9.25.3*' => 'randomNonce', |
|
643 | - '1.2.840.113549.1.9.25.4*' => 'sequenceNumber', |
|
644 | - '1.2.840.113549.1.9.25.5*' => 'pkcs7PDU', |
|
645 | - '1.2.840.113549.1.9.26*' => 'pkcs9syntax', |
|
646 | - '1.2.840.113549.1.9.27*' => 'pkcs9matchingRules', |
|
647 | - '1.2.840.113549.1.12*' => 'pkcs-12', |
|
648 | - '1.2.840.113549.1.12.1*' => 'pkcs-12-PbeIds', |
|
649 | - '1.2.840.113549.1.12.1.1*' => 'pbeWithSHAAnd128BitRC4', |
|
650 | - '1.2.840.113549.1.12.1.2*' => 'pbeWithSHAAnd40BitRC4', |
|
651 | - '1.2.840.113549.1.12.1.3*' => 'pbeWithSHAAnd3-KeyTripleDES-CBC', |
|
652 | - '1.2.840.113549.1.12.1.4*' => 'pbeWithSHAAnd2-KeyTripleDES-CBC', |
|
653 | - '1.2.840.113549.1.12.1.5*' => 'pbeWithSHAAnd128BitRC2-CBC', |
|
654 | - '1.2.840.113549.1.12.1.6*' => 'pbeWithSHAAnd40BitRC2-CBC', |
|
655 | - '1.2.840.113549.1.12.2*' => 'pkcs-12-ESPVKID', |
|
656 | - '1.2.840.113549.1.12.2.1*' => 'pkcs-12-PKCS8KeyShrouding', |
|
657 | - '1.2.840.113549.1.12.3*' => 'pkcs-12-BagIds', |
|
658 | - '1.2.840.113549.1.12.3.1*' => 'pkcs-12-keyBagId', |
|
659 | - '1.2.840.113549.1.12.3.2*' => 'pkcs-12-certAndCRLBagId', |
|
660 | - '1.2.840.113549.1.12.3.3*' => 'pkcs-12-secretBagId', |
|
661 | - '1.2.840.113549.1.12.3.4*' => 'pkcs-12-safeContentsId', |
|
662 | - '1.2.840.113549.1.12.3.5*' => 'pkcs-12-pkcs-8ShroudedKeyBagId', |
|
663 | - '1.2.840.113549.1.12.4*' => 'pkcs-12-CertBagID', |
|
664 | - '1.2.840.113549.1.12.4.1*' => 'pkcs-12-X509CertCRLBagID', |
|
665 | - '1.2.840.113549.1.12.4.2*' => 'pkcs-12-SDSICertBagID', |
|
666 | - '1.2.840.113549.1.12.5*' => 'pkcs-12-OID', |
|
667 | - '1.2.840.113549.1.12.5.1*' => 'pkcs-12-PBEID', |
|
668 | - '1.2.840.113549.1.12.5.1.1*' => 'pkcs-12-PBEWithSha1And128BitRC4', |
|
669 | - '1.2.840.113549.1.12.5.1.2*' => 'pkcs-12-PBEWithSha1And40BitRC4', |
|
670 | - '1.2.840.113549.1.12.5.1.3*' => 'pkcs-12-PBEWithSha1AndTripleDESCBC', |
|
671 | - '1.2.840.113549.1.12.5.1.4*' => 'pkcs-12-PBEWithSha1And128BitRC2CBC', |
|
672 | - '1.2.840.113549.1.12.5.1.5*' => 'pkcs-12-PBEWithSha1And40BitRC2CBC', |
|
673 | - '1.2.840.113549.1.12.5.1.6*' => 'pkcs-12-PBEWithSha1AndRC4', |
|
674 | - '1.2.840.113549.1.12.5.1.7*' => 'pkcs-12-PBEWithSha1AndRC2CBC', |
|
675 | - '1.2.840.113549.1.12.5.2*' => 'pkcs-12-EnvelopingID', |
|
676 | - '1.2.840.113549.1.12.5.2.1*' => 'pkcs-12-RSAEncryptionWith128BitRC4', |
|
677 | - '1.2.840.113549.1.12.5.2.2*' => 'pkcs-12-RSAEncryptionWith40BitRC4', |
|
678 | - '1.2.840.113549.1.12.5.2.3*' => 'pkcs-12-RSAEncryptionWithTripleDES', |
|
679 | - '1.2.840.113549.1.12.5.3*' => 'pkcs-12-SignatureID', |
|
680 | - '1.2.840.113549.1.12.5.3.1*' => 'pkcs-12-RSASignatureWithSHA1Digest', |
|
681 | - '1.2.840.113549.1.12.10*' => 'pkcs-12Version1', |
|
682 | - '1.2.840.113549.1.12.10.1*' => 'pkcs-12BadIds', |
|
683 | - '1.2.840.113549.1.12.10.1.1*' => 'pkcs-12-keyBag', |
|
684 | - '1.2.840.113549.1.12.10.1.2*' => 'pkcs-12-pkcs-8ShroudedKeyBag', |
|
685 | - '1.2.840.113549.1.12.10.1.3*' => 'pkcs-12-certBag', |
|
686 | - '1.2.840.113549.1.12.10.1.4*' => 'pkcs-12-crlBag', |
|
687 | - '1.2.840.113549.1.12.10.1.5*' => 'pkcs-12-secretBag', |
|
688 | - '1.2.840.113549.1.12.10.1.6*' => 'pkcs-12-safeContentsBag', |
|
689 | - '1.2.840.113549.1.15.1*' => 'pkcs15modules', |
|
690 | - '1.2.840.113549.1.15.2*' => 'pkcs15attributes', |
|
691 | - '1.2.840.113549.1.15.3*' => 'pkcs15contentType', |
|
692 | - '1.2.840.113549.1.15.3.1*' => 'pkcs15content', |
|
693 | - '1.2.840.113549.2*' => 'digestAlgorithm', |
|
694 | - '1.2.840.113549.2.2*' => 'md2', |
|
695 | - '1.2.840.113549.2.4*' => 'md4', |
|
696 | - '1.2.840.113549.2.5*' => 'md5', |
|
697 | - '1.2.840.113549.2.7*' => 'hmacWithSHA1', |
|
698 | - '1.2.840.113549.2.8*' => 'hmacWithSHA224', |
|
699 | - '1.2.840.113549.2.9*' => 'hmacWithSHA256', |
|
700 | - '1.2.840.113549.2.10*' => 'hmacWithSHA384', |
|
701 | - '1.2.840.113549.2.11*' => 'hmacWithSHA512', |
|
702 | - '1.2.840.113549.3*' => 'encryptionAlgorithm', |
|
703 | - '1.2.840.113549.3.2*' => 'rc2CBC', |
|
704 | - '1.2.840.113549.3.3*' => 'rc2ECB', |
|
705 | - '1.2.840.113549.3.4*' => 'rc4', |
|
706 | - '1.2.840.113549.3.5*' => 'rc4WithMAC', |
|
707 | - '1.2.840.113549.3.6*' => 'desx-CBC', |
|
708 | - '1.2.840.113549.3.7*' => 'des-EDE3-CBC', |
|
709 | - '1.2.840.113549.3.8*' => 'rc5CBC', |
|
710 | - '1.2.840.113549.3.9*' => 'rc5-CBCPad', |
|
711 | - '1.2.840.113549.3.10*' => 'desCDMF', |
|
712 | - '1.2.840.114021.1.6.1*' => 'Identrus unknown policyIdentifier', |
|
713 | - '1.2.840.114021.4.1*' => 'identrusOCSP', |
|
714 | - '1.2.840.113556.1.2.241*' => 'deliveryMechanism', |
|
715 | - '1.2.840.113556.1.3.0*' => 'site-Addressing', |
|
716 | - '1.2.840.113556.1.3.13*' => 'classSchema', |
|
717 | - '1.2.840.113556.1.3.14*' => 'attributeSchema', |
|
718 | - '1.2.840.113556.1.3.17*' => 'mailbox-Agent', |
|
719 | - '1.2.840.113556.1.3.22*' => 'mailbox', |
|
720 | - '1.2.840.113556.1.3.23*' => 'container', |
|
721 | - '1.2.840.113556.1.3.46*' => 'mailRecipient', |
|
722 | - '1.2.840.113556.1.2.281*' => 'ntSecurityDescriptor', |
|
723 | - '1.2.840.113556.1.4.145*' => 'revision', |
|
724 | - '1.2.840.113556.1.4.1327*' => 'pKIDefaultKeySpec', |
|
725 | - '1.2.840.113556.1.4.1328*' => 'pKIKeyUsage', |
|
726 | - '1.2.840.113556.1.4.1329*' => 'pKIMaxIssuingDepth', |
|
727 | - '1.2.840.113556.1.4.1330*' => 'pKICriticalExtensions', |
|
728 | - '1.2.840.113556.1.4.1331*' => 'pKIExpirationPeriod', |
|
729 | - '1.2.840.113556.1.4.1332*' => 'pKIOverlapPeriod', |
|
730 | - '1.2.840.113556.1.4.1333*' => 'pKIExtendedKeyUsage', |
|
731 | - '1.2.840.113556.1.4.1334*' => 'pKIDefaultCSPs', |
|
732 | - '1.2.840.113556.1.4.1335*' => 'pKIEnrollmentAccess', |
|
733 | - '1.2.840.113556.1.4.1429*' => 'msPKI-RA-Signature', |
|
734 | - '1.2.840.113556.1.4.1430*' => 'msPKI-Enrollment-Flag', |
|
735 | - '1.2.840.113556.1.4.1431*' => 'msPKI-Private-Key-Flag', |
|
736 | - '1.2.840.113556.1.4.1432*' => 'msPKI-Certificate-Name-Flag', |
|
737 | - '1.2.840.113556.1.4.1433*' => 'msPKI-Minimal-Key-Size', |
|
738 | - '1.2.840.113556.1.4.1434*' => 'msPKI-Template-Schema-Version', |
|
739 | - '1.2.840.113556.1.4.1435*' => 'msPKI-Template-Minor-Revision', |
|
740 | - '1.2.840.113556.1.4.1436*' => 'msPKI-Cert-Template-OID', |
|
741 | - '1.2.840.113556.1.4.1437*' => 'msPKI-Supersede-Templates', |
|
742 | - '1.2.840.113556.1.4.1438*' => 'msPKI-RA-Policies', |
|
743 | - '1.2.840.113556.1.4.1439*' => 'msPKI-Certificate-Policy', |
|
744 | - '1.2.840.113556.1.4.1674*' => 'msPKI-Certificate-Application-Policy', |
|
745 | - '1.2.840.113556.1.4.1675*' => 'msPKI-RA-Application-Policies', |
|
746 | - '1.2.840.113556.4.3*' => 'microsoftExcel', |
|
747 | - '1.2.840.113556.4.4*' => 'titledWithOID', |
|
748 | - '1.2.840.113556.4.5*' => 'microsoftPowerPoint', |
|
749 | - '1.2.840.113628.114.1.7*' => 'adobePKCS7', |
|
750 | - '1.2.840.113635.100*' => 'appleDataSecurity', |
|
751 | - '1.2.840.113635.100.1*' => 'appleTrustPolicy', |
|
752 | - '1.2.840.113635.100.1.1*' => 'appleISignTP', |
|
753 | - '1.2.840.113635.100.1.2*' => 'appleX509Basic', |
|
754 | - '1.2.840.113635.100.1.3*' => 'appleSSLPolicy', |
|
755 | - '1.2.840.113635.100.1.4*' => 'appleLocalCertGenPolicy', |
|
756 | - '1.2.840.113635.100.1.5*' => 'appleCSRGenPolicy', |
|
757 | - '1.2.840.113635.100.1.6*' => 'appleCRLPolicy', |
|
758 | - '1.2.840.113635.100.1.7*' => 'appleOCSPPolicy', |
|
759 | - '1.2.840.113635.100.1.8*' => 'appleSMIMEPolicy', |
|
760 | - '1.2.840.113635.100.1.9*' => 'appleEAPPolicy', |
|
761 | - '1.2.840.113635.100.1.10*' => 'appleSWUpdateSigningPolicy', |
|
762 | - '1.2.840.113635.100.1.11*' => 'appleIPSecPolicy', |
|
763 | - '1.2.840.113635.100.1.12*' => 'appleIChatPolicy', |
|
764 | - '1.2.840.113635.100.1.13*' => 'appleResourceSignPolicy', |
|
765 | - '1.2.840.113635.100.1.14*' => 'applePKINITClientPolicy', |
|
766 | - '1.2.840.113635.100.1.15*' => 'applePKINITServerPolicy', |
|
767 | - '1.2.840.113635.100.1.16*' => 'appleCodeSigningPolicy', |
|
768 | - '1.2.840.113635.100.1.17*' => 'applePackageSigningPolicy', |
|
769 | - '1.2.840.113635.100.2*' => 'appleSecurityAlgorithm', |
|
770 | - '1.2.840.113635.100.2.1*' => 'appleFEE', |
|
771 | - '1.2.840.113635.100.2.2*' => 'appleASC', |
|
772 | - '1.2.840.113635.100.2.3*' => 'appleFEE_MD5', |
|
773 | - '1.2.840.113635.100.2.4*' => 'appleFEE_SHA1', |
|
774 | - '1.2.840.113635.100.2.5*' => 'appleFEED', |
|
775 | - '1.2.840.113635.100.2.6*' => 'appleFEEDEXP', |
|
776 | - '1.2.840.113635.100.2.7*' => 'appleECDSA', |
|
777 | - '1.2.840.113635.100.3*' => 'appleDotMacCertificate', |
|
778 | - '1.2.840.113635.100.3.1*' => 'appleDotMacCertificateRequest', |
|
779 | - '1.2.840.113635.100.3.2*' => 'appleDotMacCertificateExtension', |
|
780 | - '1.2.840.113635.100.3.3*' => 'appleDotMacCertificateRequestValues', |
|
781 | - '1.2.840.113635.100.4*' => 'appleExtendedKeyUsage', |
|
782 | - '1.2.840.113635.100.4.1*' => 'appleCodeSigning', |
|
783 | - '1.2.840.113635.100.4.1.1*' => 'appleCodeSigningDevelopment', |
|
784 | - '1.2.840.113635.100.4.1.2*' => 'appleSoftwareUpdateSigning', |
|
785 | - '1.2.840.113635.100.4.1.3*' => 'appleCodeSigningThirdParty', |
|
786 | - '1.2.840.113635.100.4.1.4*' => 'appleResourceSigning', |
|
787 | - '1.2.840.113635.100.4.2*' => 'appleIChatSigning', |
|
788 | - '1.2.840.113635.100.4.3*' => 'appleIChatEncryption', |
|
789 | - '1.2.840.113635.100.4.4*' => 'appleSystemIdentity', |
|
790 | - '1.2.840.113635.100.4.5*' => 'appleCryptoEnv', |
|
791 | - '1.2.840.113635.100.4.5.1*' => 'appleCryptoProductionEnv', |
|
792 | - '1.2.840.113635.100.4.5.2*' => 'appleCryptoMaintenanceEnv', |
|
793 | - '1.2.840.113635.100.4.5.3*' => 'appleCryptoTestEnv', |
|
794 | - '1.2.840.113635.100.4.5.4*' => 'appleCryptoDevelopmentEnv', |
|
795 | - '1.2.840.113635.100.4.6*' => 'appleCryptoQoS', |
|
796 | - '1.2.840.113635.100.4.6.1*' => 'appleCryptoTier0QoS', |
|
797 | - '1.2.840.113635.100.4.6.2*' => 'appleCryptoTier1QoS', |
|
798 | - '1.2.840.113635.100.4.6.3*' => 'appleCryptoTier2QoS', |
|
799 | - '1.2.840.113635.100.4.6.4*' => 'appleCryptoTier3QoS', |
|
800 | - '1.2.840.113635.100.5*' => 'appleCertificatePolicies', |
|
801 | - '1.2.840.113635.100.5.1*' => 'appleCertificatePolicyID', |
|
802 | - '1.2.840.113635.100.5.2*' => 'appleDotMacCertificatePolicyID', |
|
803 | - '1.2.840.113635.100.5.3*' => 'appleADCCertificatePolicyID', |
|
804 | - '1.2.840.113635.100.6*' => 'appleCertificateExtensions', |
|
805 | - '1.2.840.113635.100.6.1*' => 'appleCertificateExtensionCodeSigning', |
|
806 | - '1.2.840.113635.100.6.1.1*' => 'appleCertificateExtensionAppleSigning', |
|
807 | - '1.2.840.113635.100.6.1.2*' => 'appleCertificateExtensionADCDeveloperSigning', |
|
808 | - '1.2.840.113635.100.6.1.3*' => 'appleCertificateExtensionADCAppleSigning', |
|
809 | - '1.3.6.1.4.1.311.2.1.4*' => 'spcIndirectDataContext', |
|
810 | - '1.3.6.1.4.1.311.2.1.10*' => 'spcAgencyInfo', |
|
811 | - '1.3.6.1.4.1.311.2.1.11*' => 'spcStatementType', |
|
812 | - '1.3.6.1.4.1.311.2.1.12*' => 'spcSpOpusInfo', |
|
813 | - '1.3.6.1.4.1.311.2.1.14*' => 'certReqExtensions', |
|
814 | - '1.3.6.1.4.1.311.2.1.15*' => 'spcPEImageData', |
|
815 | - '1.3.6.1.4.1.311.2.1.18*' => 'spcRawFileData', |
|
816 | - '1.3.6.1.4.1.311.2.1.19*' => 'spcStructuredStorageData', |
|
817 | - '1.3.6.1.4.1.311.2.1.20*' => 'spcJavaClassData (type 1)', |
|
818 | - '1.3.6.1.4.1.311.2.1.21*' => 'individualCodeSigning', |
|
819 | - '1.3.6.1.4.1.311.2.1.22*' => 'commercialCodeSigning', |
|
820 | - '1.3.6.1.4.1.311.2.1.25*' => 'spcLink (type 2)', |
|
821 | - '1.3.6.1.4.1.311.2.1.26*' => 'spcMinimalCriteriaInfo', |
|
822 | - '1.3.6.1.4.1.311.2.1.27*' => 'spcFinancialCriteriaInfo', |
|
823 | - '1.3.6.1.4.1.311.2.1.28*' => 'spcLink (type 3)', |
|
824 | - '1.3.6.1.4.1.311.3.2.1*' => 'timestampRequest', |
|
825 | - '1.3.6.1.4.1.311.10.1*' => 'certTrustList', |
|
826 | - '1.3.6.1.4.1.311.10.1.1*' => 'sortedCtl', |
|
827 | - '1.3.6.1.4.1.311.10.2*' => 'nextUpdateLocation', |
|
828 | - '1.3.6.1.4.1.311.10.3.1*' => 'certTrustListSigning', |
|
829 | - '1.3.6.1.4.1.311.10.3.2*' => 'timeStampSigning', |
|
830 | - '1.3.6.1.4.1.311.10.3.3*' => 'serverGatedCrypto', |
|
831 | - '1.3.6.1.4.1.311.10.3.3.1*' => 'serialized', |
|
832 | - '1.3.6.1.4.1.311.10.3.4*' => 'encryptedFileSystem', |
|
833 | - '1.3.6.1.4.1.311.10.3.5*' => 'whqlCrypto', |
|
834 | - '1.3.6.1.4.1.311.10.3.6*' => 'nt5Crypto', |
|
835 | - '1.3.6.1.4.1.311.10.3.7*' => 'oemWHQLCrypto', |
|
836 | - '1.3.6.1.4.1.311.10.3.8*' => 'embeddedNTCrypto', |
|
837 | - '1.3.6.1.4.1.311.10.3.9*' => 'rootListSigner', |
|
838 | - '1.3.6.1.4.1.311.10.3.10*' => 'qualifiedSubordination', |
|
839 | - '1.3.6.1.4.1.311.10.3.11*' => 'keyRecovery', |
|
840 | - '1.3.6.1.4.1.311.10.3.12*' => 'documentSigning', |
|
841 | - '1.3.6.1.4.1.311.10.3.13*' => 'lifetimeSigning', |
|
842 | - '1.3.6.1.4.1.311.10.3.14*' => 'mobileDeviceSoftware', |
|
843 | - '1.3.6.1.4.1.311.10.3.15*' => 'smartDisplay', |
|
844 | - '1.3.6.1.4.1.311.10.3.16*' => 'cspSignature', |
|
845 | - '1.3.6.1.4.1.311.10.3.4.1*' => 'efsRecovery', |
|
846 | - '1.3.6.1.4.1.311.10.4.1*' => 'yesnoTrustAttr', |
|
847 | - '1.3.6.1.4.1.311.10.5.1*' => 'drm', |
|
848 | - '1.3.6.1.4.1.311.10.5.2*' => 'drmIndividualization', |
|
849 | - '1.3.6.1.4.1.311.10.6.1*' => 'licenses', |
|
850 | - '1.3.6.1.4.1.311.10.6.2*' => 'licenseServer', |
|
851 | - '1.3.6.1.4.1.311.10.7.1*' => 'keyidRdn', |
|
852 | - '1.3.6.1.4.1.311.10.8.1*' => 'removeCertificate', |
|
853 | - '1.3.6.1.4.1.311.10.9.1*' => 'crossCertDistPoints', |
|
854 | - '1.3.6.1.4.1.311.10.10.1*' => 'cmcAddAttributes', |
|
855 | - '1.3.6.1.4.1.311.10.11*' => 'certPropIdPrefix', |
|
856 | - '1.3.6.1.4.1.311.10.11.4*' => 'certMd5HashPropId', |
|
857 | - '1.3.6.1.4.1.311.10.11.20*' => 'certKeyIdentifierPropId', |
|
858 | - '1.3.6.1.4.1.311.10.11.28*' => 'certIssuerSerialNumberMd5HashPropId', |
|
859 | - '1.3.6.1.4.1.311.10.11.29*' => 'certSubjectNameMd5HashPropId', |
|
860 | - '1.3.6.1.4.1.311.10.12.1*' => 'anyApplicationPolicy', |
|
861 | - '1.3.6.1.4.1.311.13.1*' => 'renewalCertificate', |
|
862 | - '1.3.6.1.4.1.311.13.2.1*' => 'enrolmentNameValuePair', |
|
863 | - '1.3.6.1.4.1.311.13.2.2*' => 'enrolmentCSP', |
|
864 | - '1.3.6.1.4.1.311.13.2.3*' => 'osVersion', |
|
865 | - '1.3.6.1.4.1.311.16.4*' => 'microsoftRecipientInfo', |
|
866 | - '1.3.6.1.4.1.311.17.1*' => 'pkcs12KeyProviderNameAttr', |
|
867 | - '1.3.6.1.4.1.311.17.2*' => 'localMachineKeyset', |
|
868 | - '1.3.6.1.4.1.311.17.3*' => 'pkcs12ExtendedAttributes', |
|
869 | - '1.3.6.1.4.1.311.20.1*' => 'autoEnrollCtlUsage', |
|
870 | - '1.3.6.1.4.1.311.20.2*' => 'enrollCerttypeExtension', |
|
871 | - '1.3.6.1.4.1.311.20.2.1*' => 'enrollmentAgent', |
|
872 | - '1.3.6.1.4.1.311.20.2.2*' => 'smartcardLogon', |
|
873 | - '1.3.6.1.4.1.311.20.2.3*' => 'universalPrincipalName', |
|
874 | - '1.3.6.1.4.1.311.20.3*' => 'certManifold', |
|
875 | - '1.3.6.1.4.1.311.21.1*' => 'cAKeyCertIndexPair', |
|
876 | - '1.3.6.1.4.1.311.21.5*' => 'caExchange', |
|
877 | - '1.3.6.1.4.1.311.21.2*' => 'certSrvPreviousCertHash', |
|
878 | - '1.3.6.1.4.1.311.21.3*' => 'crlVirtualBase', |
|
879 | - '1.3.6.1.4.1.311.21.4*' => 'crlNextPublish', |
|
880 | - '1.3.6.1.4.1.311.21.6*' => 'keyRecovery', |
|
881 | - '1.3.6.1.4.1.311.21.7*' => 'certificateTemplate', |
|
882 | - '1.3.6.1.4.1.311.21.9*' => 'rdnDummySigner', |
|
883 | - '1.3.6.1.4.1.311.21.10*' => 'applicationCertPolicies', |
|
884 | - '1.3.6.1.4.1.311.21.11*' => 'applicationPolicyMappings', |
|
885 | - '1.3.6.1.4.1.311.21.12*' => 'applicationPolicyConstraints', |
|
886 | - '1.3.6.1.4.1.311.21.13*' => 'archivedKey', |
|
887 | - '1.3.6.1.4.1.311.21.14*' => 'crlSelfCDP', |
|
888 | - '1.3.6.1.4.1.311.21.15*' => 'requireCertChainPolicy', |
|
889 | - '1.3.6.1.4.1.311.21.16*' => 'archivedKeyCertHash', |
|
890 | - '1.3.6.1.4.1.311.21.17*' => 'issuedCertHash', |
|
891 | - '1.3.6.1.4.1.311.21.19*' => 'dsEmailReplication', |
|
892 | - '1.3.6.1.4.1.311.21.20*' => 'requestClientInfo', |
|
893 | - '1.3.6.1.4.1.311.21.21*' => 'encryptedKeyHash', |
|
894 | - '1.3.6.1.4.1.311.21.22*' => 'certsrvCrossCaVersion', |
|
895 | - '1.3.6.1.4.1.311.25.1*' => 'ntdsReplication', |
|
896 | - '1.3.6.1.4.1.311.31.1*' => 'productUpdate', |
|
897 | - '1.3.6.1.4.1.311.47.1.1*' => 'systemHealth', |
|
898 | - '1.3.6.1.4.1.311.47.1.3*' => 'systemHealthLoophole', |
|
899 | - '1.3.6.1.4.1.311.60.1.1*' => 'rootProgramFlags', |
|
900 | - '1.3.6.1.4.1.311.61.1.1*' => 'kernelModeCodeSigning', |
|
901 | - '1.3.6.1.4.1.311.60.2.1.1*' => 'jurisdictionOfIncorporationL', |
|
902 | - '1.3.6.1.4.1.311.60.2.1.2*' => 'jurisdictionOfIncorporationSP', |
|
903 | - '1.3.6.1.4.1.311.60.2.1.3*' => 'jurisdictionOfIncorporationC', |
|
904 | - '1.3.6.1.4.1.311.88.2.1*' => 'originalFilename', |
|
905 | - '1.3.6.1.4.1.188.7.1.1*' => 'ascom', |
|
906 | - '1.3.6.1.4.1.188.7.1.1.1*' => 'ideaECB', |
|
907 | - '1.3.6.1.4.1.188.7.1.1.2*' => 'ideaCBC', |
|
908 | - '1.3.6.1.4.1.188.7.1.1.3*' => 'ideaCFB', |
|
909 | - '1.3.6.1.4.1.188.7.1.1.4*' => 'ideaOFB', |
|
910 | - '1.3.6.1.4.1.2428.10.1.1*' => 'UNINETT policyIdentifier', |
|
911 | - '1.3.6.1.4.1.2712.10*' => 'ICE-TEL policyIdentifier', |
|
912 | - '1.3.6.1.4.1.2786.1.1.1*' => 'ICE-TEL Italian policyIdentifier', |
|
913 | - '1.3.6.1.4.1.3029.1.1.1*' => 'blowfishECB', |
|
914 | - '1.3.6.1.4.1.3029.1.1.2*' => 'blowfishCBC', |
|
915 | - '1.3.6.1.4.1.3029.1.1.3*' => 'blowfishCFB', |
|
916 | - '1.3.6.1.4.1.3029.1.1.4*' => 'blowfishOFB', |
|
917 | - '1.3.6.1.4.1.3029.1.2.1*' => 'elgamal', |
|
918 | - '1.3.6.1.4.1.3029.1.2.1.1*' => 'elgamalWithSHA-1', |
|
919 | - '1.3.6.1.4.1.3029.1.2.1.2*' => 'elgamalWithRIPEMD-160', |
|
920 | - '1.3.6.1.4.1.3029.3.1.1*' => 'cryptlibPresenceCheck', |
|
921 | - '1.3.6.1.4.1.3029.3.1.2*' => 'pkiBoot', |
|
922 | - '1.3.6.1.4.1.3029.3.1.4*' => 'crlExtReason', |
|
923 | - '1.3.6.1.4.1.3029.3.1.5*' => 'keyFeatures', |
|
924 | - '1.3.6.1.4.1.3029.4.1*' => 'cryptlibContent', |
|
925 | - '1.3.6.1.4.1.3029.4.1.1*' => 'cryptlibConfigData', |
|
926 | - '1.3.6.1.4.1.3029.4.1.2*' => 'cryptlibUserIndex', |
|
927 | - '1.3.6.1.4.1.3029.4.1.3*' => 'cryptlibUserInfo', |
|
928 | - '1.3.6.1.4.1.3029.4.1.4*' => 'rtcsRequest', |
|
929 | - '1.3.6.1.4.1.3029.4.1.5*' => 'rtcsResponse', |
|
930 | - '1.3.6.1.4.1.3029.4.1.6*' => 'rtcsResponseExt', |
|
931 | - '1.3.6.1.4.1.3029.42.11172.1*' => 'mpeg-1', |
|
932 | - '1.3.6.1.4.1.3029.88.89.90.90.89*' => 'xYZZY policyIdentifier', |
|
933 | - '1.3.6.1.4.1.3401.8.1.1*' => 'pgpExtension', |
|
934 | - '1.3.6.1.4.1.3576.7*' => 'eciaAscX12Edi', |
|
935 | - '1.3.6.1.4.1.3576.7.1*' => 'plainEDImessage', |
|
936 | - '1.3.6.1.4.1.3576.7.2*' => 'signedEDImessage', |
|
937 | - '1.3.6.1.4.1.3576.7.5*' => 'integrityEDImessage', |
|
938 | - '1.3.6.1.4.1.3576.7.65*' => 'iaReceiptMessage', |
|
939 | - '1.3.6.1.4.1.3576.7.97*' => 'iaStatusMessage', |
|
940 | - '1.3.6.1.4.1.3576.8*' => 'eciaEdifact', |
|
941 | - '1.3.6.1.4.1.3576.9*' => 'eciaNonEdi', |
|
942 | - '1.3.6.1.4.1.4146*' => 'Globalsign', |
|
943 | - '1.3.6.1.4.1.4146.1*' => 'globalsignPolicy', |
|
944 | - '1.3.6.1.4.1.4146.1.10*' => 'globalsignDVPolicy', |
|
945 | - '1.3.6.1.4.1.4146.1.20*' => 'globalsignOVPolicy', |
|
946 | - '1.3.6.1.4.1.4146.1.30*' => 'globalsignTSAPolicy', |
|
947 | - '1.3.6.1.4.1.4146.1.40*' => 'globalsignClientCertPolicy', |
|
948 | - '1.3.6.1.4.1.4146.1.50*' => 'globalsignCodeSignPolicy', |
|
949 | - '1.3.6.1.4.1.4146.1.60*' => 'globalsignRootSignPolicy', |
|
950 | - '1.3.6.1.4.1.4146.1.70*' => 'globalsignTrustedRootPolicy', |
|
951 | - '1.3.6.1.4.1.4146.1.80*' => 'globalsignEDIClientPolicy', |
|
952 | - '1.3.6.1.4.1.4146.1.81*' => 'globalsignEDIServerPolicy', |
|
953 | - '1.3.6.1.4.1.4146.1.90*' => 'globalsignTPMRootPolicy', |
|
954 | - '1.3.6.1.4.1.4146.1.95*' => 'globalsignOCSPPolicy', |
|
955 | - '1.3.6.1.4.1.5309.1.2.2*' => 'edelWebTSAPolicy', |
|
956 | - '1.3.6.1.4.1.5472*' => 'timeproof', |
|
957 | - '1.3.6.1.4.1.5472.1*' => 'tss', |
|
958 | - '1.3.6.1.4.1.5472.1.1*' => 'tss80', |
|
959 | - '1.3.6.1.4.1.5472.1.2*' => 'tss380', |
|
960 | - '1.3.6.1.4.1.5472.1.3*' => 'tss400', |
|
961 | - '1.3.6.1.4.1.5770.0.3*' => 'secondaryPractices', |
|
962 | - '1.3.6.1.4.1.5770.0.4*' => 'physicianIdentifiers', |
|
963 | - '1.3.6.1.4.1.6449.1.2.1.3.1*' => 'comodoPolicy', |
|
964 | - '1.3.6.1.4.1.6449.1.3.5.2*' => 'validityModelX', |
|
965 | - '1.3.6.1.4.1.8301.3.5.1*' => 'validityModelChain', |
|
966 | - '1.3.6.1.4.1.8301.3.5.2*' => 'validityModelShell', |
|
967 | - '1.3.6.1.4.1.8231.1*' => 'rolUnicoNacional', |
|
968 | - '1.3.6.1.4.1.11591*' => 'gnu', |
|
969 | - '1.3.6.1.4.1.11591.1*' => 'gnuRadius', |
|
970 | - '1.3.6.1.4.1.11591.3*' => 'gnuRadar', |
|
971 | - '1.3.6.1.4.1.11591.12*' => 'gnuDigestAlgorithm', |
|
972 | - '1.3.6.1.4.1.11591.12.2*' => 'tiger', |
|
973 | - '1.3.6.1.4.1.11591.13*' => 'gnuEncryptionAlgorithm', |
|
974 | - '1.3.6.1.4.1.11591.13.2*' => 'serpent', |
|
975 | - '1.3.6.1.4.1.11591.13.2.1*' => 'serpent128_ECB', |
|
976 | - '1.3.6.1.4.1.11591.13.2.2*' => 'serpent128_CBC', |
|
977 | - '1.3.6.1.4.1.11591.13.2.3*' => 'serpent128_OFB', |
|
978 | - '1.3.6.1.4.1.11591.13.2.4*' => 'serpent128_CFB', |
|
979 | - '1.3.6.1.4.1.11591.13.2.21*' => 'serpent192_ECB', |
|
980 | - '1.3.6.1.4.1.11591.13.2.22*' => 'serpent192_CBC', |
|
981 | - '1.3.6.1.4.1.11591.13.2.23*' => 'serpent192_OFB', |
|
982 | - '1.3.6.1.4.1.11591.13.2.24*' => 'serpent192_CFB', |
|
983 | - '1.3.6.1.4.1.11591.13.2.41*' => 'serpent256_ECB', |
|
984 | - '1.3.6.1.4.1.11591.13.2.42*' => 'serpent256_CBC', |
|
985 | - '1.3.6.1.4.1.11591.13.2.43*' => 'serpent256_OFB', |
|
986 | - '1.3.6.1.4.1.11591.13.2.44*' => 'serpent256_CFB', |
|
987 | - '1.3.6.1.4.1.16334.509.1.1*' => 'Northrop Grumman extKeyUsage?', |
|
988 | - '1.3.6.1.4.1.16334.509.2.1*' => 'ngcClass1', |
|
989 | - '1.3.6.1.4.1.16334.509.2.2*' => 'ngcClass2', |
|
990 | - '1.3.6.1.4.1.16334.509.2.3*' => 'ngcClass3', |
|
991 | - '1.3.6.1.5.5.7*' => 'pkix', |
|
992 | - '1.3.6.1.5.5.7.0.12*' => 'attributeCert', |
|
993 | - '1.3.6.1.5.5.7.1*' => 'privateExtension', |
|
994 | - '1.3.6.1.5.5.7.1.1*' => 'authorityInfoAccess', |
|
995 | - '1.3.6.1.5.5.7.1.2*' => 'biometricInfo', |
|
996 | - '1.3.6.1.5.5.7.1.3*' => 'qcStatements', |
|
997 | - '1.3.6.1.5.5.7.1.4*' => 'acAuditIdentity', |
|
998 | - '1.3.6.1.5.5.7.1.5*' => 'acTargeting', |
|
999 | - '1.3.6.1.5.5.7.1.6*' => 'acAaControls', |
|
1000 | - '1.3.6.1.5.5.7.1.7*' => 'ipAddrBlocks', |
|
1001 | - '1.3.6.1.5.5.7.1.8*' => 'autonomousSysIds', |
|
1002 | - '1.3.6.1.5.5.7.1.9*' => 'routerIdentifier', |
|
1003 | - '1.3.6.1.5.5.7.1.10*' => 'acProxying', |
|
1004 | - '1.3.6.1.5.5.7.1.11*' => 'subjectInfoAccess', |
|
1005 | - '1.3.6.1.5.5.7.1.12*' => 'logoType', |
|
1006 | - '1.3.6.1.5.5.7.1.13*' => 'wlanSSID', |
|
1007 | - '1.3.6.1.5.5.7.2*' => 'policyQualifierIds', |
|
1008 | - '1.3.6.1.5.5.7.2.1*' => 'cps', |
|
1009 | - '1.3.6.1.5.5.7.2.2*' => 'unotice', |
|
1010 | - '1.3.6.1.5.5.7.2.3*' => 'textNotice', |
|
1011 | - '1.3.6.1.5.5.7.3*' => 'keyPurpose', |
|
1012 | - '1.3.6.1.5.5.7.3.1*' => 'serverAuth', |
|
1013 | - '1.3.6.1.5.5.7.3.2*' => 'clientAuth', |
|
1014 | - '1.3.6.1.5.5.7.3.3*' => 'codeSigning', |
|
1015 | - '1.3.6.1.5.5.7.3.4*' => 'emailProtection', |
|
1016 | - '1.3.6.1.5.5.7.3.5*' => 'ipsecEndSystem', |
|
1017 | - '1.3.6.1.5.5.7.3.6*' => 'ipsecTunnel', |
|
1018 | - '1.3.6.1.5.5.7.3.7*' => 'ipsecUser', |
|
1019 | - '1.3.6.1.5.5.7.3.8*' => 'timeStamping', |
|
1020 | - '1.3.6.1.5.5.7.3.9*' => 'ocspSigning', |
|
1021 | - '1.3.6.1.5.5.7.3.10*' => 'dvcs', |
|
1022 | - '1.3.6.1.5.5.7.3.11*' => 'sbgpCertAAServerAuth', |
|
1023 | - '1.3.6.1.5.5.7.3.13*' => 'eapOverPPP', |
|
1024 | - '1.3.6.1.5.5.7.3.14*' => 'eapOverLAN', |
|
1025 | - '1.3.6.1.5.5.7.4*' => 'cmpInformationTypes', |
|
1026 | - '1.3.6.1.5.5.7.4.1*' => 'caProtEncCert', |
|
1027 | - '1.3.6.1.5.5.7.4.2*' => 'signKeyPairTypes', |
|
1028 | - '1.3.6.1.5.5.7.4.3*' => 'encKeyPairTypes', |
|
1029 | - '1.3.6.1.5.5.7.4.4*' => 'preferredSymmAlg', |
|
1030 | - '1.3.6.1.5.5.7.4.5*' => 'caKeyUpdateInfo', |
|
1031 | - '1.3.6.1.5.5.7.4.6*' => 'currentCRL', |
|
1032 | - '1.3.6.1.5.5.7.4.7*' => 'unsupportedOIDs', |
|
1033 | - '1.3.6.1.5.5.7.4.10*' => 'keyPairParamReq', |
|
1034 | - '1.3.6.1.5.5.7.4.11*' => 'keyPairParamRep', |
|
1035 | - '1.3.6.1.5.5.7.4.12*' => 'revPassphrase', |
|
1036 | - '1.3.6.1.5.5.7.4.13*' => 'implicitConfirm', |
|
1037 | - '1.3.6.1.5.5.7.4.14*' => 'confirmWaitTime', |
|
1038 | - '1.3.6.1.5.5.7.4.15*' => 'origPKIMessage', |
|
1039 | - '1.3.6.1.5.5.7.4.16*' => 'suppLangTags', |
|
1040 | - '1.3.6.1.5.5.7.5*' => 'crmfRegistration', |
|
1041 | - '1.3.6.1.5.5.7.5.1*' => 'regCtrl', |
|
1042 | - '1.3.6.1.5.5.7.5.1.1*' => 'regToken', |
|
1043 | - '1.3.6.1.5.5.7.5.1.2*' => 'authenticator', |
|
1044 | - '1.3.6.1.5.5.7.5.1.3*' => 'pkiPublicationInfo', |
|
1045 | - '1.3.6.1.5.5.7.5.1.4*' => 'pkiArchiveOptions', |
|
1046 | - '1.3.6.1.5.5.7.5.1.5*' => 'oldCertID', |
|
1047 | - '1.3.6.1.5.5.7.5.1.6*' => 'protocolEncrKey', |
|
1048 | - '1.3.6.1.5.5.7.5.1.7*' => 'altCertTemplate', |
|
1049 | - '1.3.6.1.5.5.7.5.1.8*' => 'wtlsTemplate', |
|
1050 | - '1.3.6.1.5.5.7.5.2*' => 'utf8Pairs', |
|
1051 | - '1.3.6.1.5.5.7.5.2.1*' => 'utf8Pairs', |
|
1052 | - '1.3.6.1.5.5.7.5.2.2*' => 'certReq', |
|
1053 | - '1.3.6.1.5.5.7.6*' => 'algorithms', |
|
1054 | - '1.3.6.1.5.5.7.6.1*' => 'des40', |
|
1055 | - '1.3.6.1.5.5.7.6.2*' => 'noSignature', |
|
1056 | - '1.3.6.1.5.5.7.6.3*' => 'dh-sig-hmac-sha1', |
|
1057 | - '1.3.6.1.5.5.7.6.4*' => 'dh-pop', |
|
1058 | - '1.3.6.1.5.5.7.7*' => 'cmcControls', |
|
1059 | - '1.3.6.1.5.5.7.8*' => 'otherNames', |
|
1060 | - '1.3.6.1.5.5.7.8.1*' => 'personalData', |
|
1061 | - '1.3.6.1.5.5.7.8.2*' => 'userGroup', |
|
1062 | - '1.3.6.1.5.5.7.9*' => 'personalData', |
|
1063 | - '1.3.6.1.5.5.7.9.1*' => 'dateOfBirth', |
|
1064 | - '1.3.6.1.5.5.7.9.2*' => 'placeOfBirth', |
|
1065 | - '1.3.6.1.5.5.7.9.3*' => 'gender', |
|
1066 | - '1.3.6.1.5.5.7.9.4*' => 'countryOfCitizenship', |
|
1067 | - '1.3.6.1.5.5.7.9.5*' => 'countryOfResidence', |
|
1068 | - '1.3.6.1.5.5.7.10*' => 'attributeCertificate', |
|
1069 | - '1.3.6.1.5.5.7.10.1*' => 'authenticationInfo', |
|
1070 | - '1.3.6.1.5.5.7.10.2*' => 'accessIdentity', |
|
1071 | - '1.3.6.1.5.5.7.10.3*' => 'chargingIdentity', |
|
1072 | - '1.3.6.1.5.5.7.10.4*' => 'group', |
|
1073 | - '1.3.6.1.5.5.7.10.5*' => 'role', |
|
1074 | - '1.3.6.1.5.5.7.10.6*' => 'wlanSSID', |
|
1075 | - '1.3.6.1.5.5.7.11*' => 'personalData', |
|
1076 | - '1.3.6.1.5.5.7.11.1*' => 'pkixQCSyntax-v1', |
|
1077 | - '1.3.6.1.5.5.7.14.2*' => 'resourceCertificatePolicy', |
|
1078 | - '1.3.6.1.5.5.7.20*' => 'logo', |
|
1079 | - '1.3.6.1.5.5.7.20.1*' => 'logoLoyalty', |
|
1080 | - '1.3.6.1.5.5.7.20.2*' => 'logoBackground', |
|
1081 | - '1.3.6.1.5.5.7.48.1*' => 'ocsp', |
|
1082 | - '1.3.6.1.5.5.7.48.1.1*' => 'ocspBasic', |
|
1083 | - '1.3.6.1.5.5.7.48.1.2*' => 'ocspNonce', |
|
1084 | - '1.3.6.1.5.5.7.48.1.3*' => 'ocspCRL', |
|
1085 | - '1.3.6.1.5.5.7.48.1.4*' => 'ocspResponse', |
|
1086 | - '1.3.6.1.5.5.7.48.1.5*' => 'ocspNoCheck', |
|
1087 | - '1.3.6.1.5.5.7.48.1.6*' => 'ocspArchiveCutoff', |
|
1088 | - '1.3.6.1.5.5.7.48.1.7*' => 'ocspServiceLocator', |
|
1089 | - '1.3.6.1.5.5.7.48.2*' => 'caIssuers', |
|
1090 | - '1.3.6.1.5.5.7.48.3*' => 'timeStamping', |
|
1091 | - '1.3.6.1.5.5.7.48.4*' => 'dvcs', |
|
1092 | - '1.3.6.1.5.5.7.48.5*' => 'caRepository', |
|
1093 | - '1.3.6.1.5.5.7.48.7*' => 'signedObjectRepository', |
|
1094 | - '1.3.6.1.5.5.7.48.10*' => 'rpkiManifest', |
|
1095 | - '1.3.6.1.5.5.7.48.11*' => 'signedObject', |
|
1096 | - '1.3.6.1.5.5.8.1.1*' => 'hmacMD5', |
|
1097 | - '1.3.6.1.5.5.8.1.2*' => 'hmacSHA', |
|
1098 | - '1.3.6.1.5.5.8.1.3*' => 'hmacTiger', |
|
1099 | - '1.3.6.1.5.5.8.2.2*' => 'iKEIntermediate', |
|
1100 | - '1.3.12.2.1011.7.1*' => 'decEncryptionAlgorithm', |
|
1101 | - '1.3.12.2.1011.7.1.2*' => 'decDEA', |
|
1102 | - '1.3.12.2.1011.7.2*' => 'decHashAlgorithm', |
|
1103 | - '1.3.12.2.1011.7.2.1*' => 'decMD2', |
|
1104 | - '1.3.12.2.1011.7.2.2*' => 'decMD4', |
|
1105 | - '1.3.12.2.1011.7.3*' => 'decSignatureAlgorithm', |
|
1106 | - '1.3.12.2.1011.7.3.1*' => 'decMD2withRSA', |
|
1107 | - '1.3.12.2.1011.7.3.2*' => 'decMD4withRSA', |
|
1108 | - '1.3.12.2.1011.7.3.3*' => 'decDEAMAC', |
|
1109 | - '1.3.14.2.26.5*' => 'sha', |
|
1110 | - '1.3.14.3.2.1.1*' => 'rsa', |
|
1111 | - '1.3.14.3.2.2*' => 'md4WitRSA', |
|
1112 | - '1.3.14.3.2.3*' => 'md5WithRSA', |
|
1113 | - '1.3.14.3.2.4*' => 'md4WithRSAEncryption', |
|
1114 | - '1.3.14.3.2.2.1*' => 'sqmod-N', |
|
1115 | - '1.3.14.3.2.3.1*' => 'sqmod-NwithRSA', |
|
1116 | - '1.3.14.3.2.6*' => 'desECB', |
|
1117 | - '1.3.14.3.2.7*' => 'desCBC', |
|
1118 | - '1.3.14.3.2.8*' => 'desOFB', |
|
1119 | - '1.3.14.3.2.9*' => 'desCFB', |
|
1120 | - '1.3.14.3.2.10*' => 'desMAC', |
|
1121 | - '1.3.14.3.2.11*' => 'rsaSignature', |
|
1122 | - '1.3.14.3.2.12*' => 'dsa', |
|
1123 | - '1.3.14.3.2.13*' => 'dsaWithSHA', |
|
1124 | - '1.3.14.3.2.14*' => 'mdc2WithRSASignature', |
|
1125 | - '1.3.14.3.2.15*' => 'shaWithRSASignature', |
|
1126 | - '1.3.14.3.2.16*' => 'dhWithCommonModulus', |
|
1127 | - '1.3.14.3.2.17*' => 'desEDE', |
|
1128 | - '1.3.14.3.2.18*' => 'sha', |
|
1129 | - '1.3.14.3.2.19*' => 'mdc-2', |
|
1130 | - '1.3.14.3.2.20*' => 'dsaCommon', |
|
1131 | - '1.3.14.3.2.21*' => 'dsaCommonWithSHA', |
|
1132 | - '1.3.14.3.2.22*' => 'rsaKeyTransport', |
|
1133 | - '1.3.14.3.2.23*' => 'keyed-hash-seal', |
|
1134 | - '1.3.14.3.2.24*' => 'md2WithRSASignature', |
|
1135 | - '1.3.14.3.2.25*' => 'md5WithRSASignature', |
|
1136 | - '1.3.14.3.2.26*' => 'sha1', |
|
1137 | - '1.3.14.3.2.27*' => 'dsaWithSHA1', |
|
1138 | - '1.3.14.3.2.28*' => 'dsaWithCommonSHA1', |
|
1139 | - # '1.3.14.3.2.29*' => 'sha-1WithRSAEncryption', |
|
1140 | - '1.3.14.3.2.29*' => 'sha1WithRSAEncryption', |
|
1141 | - '1.3.14.3.3.1*' => 'simple-strong-auth-mechanism', |
|
1142 | - '1.3.14.7.2.1.1*' => 'ElGamal', |
|
1143 | - '1.3.14.7.2.3.1*' => 'md2WithRSA', |
|
1144 | - '1.3.14.7.2.3.2*' => 'md2WithElGamal', |
|
1145 | - '1.3.36.1*' => 'document', |
|
1146 | - '1.3.36.1.1*' => 'finalVersion', |
|
1147 | - '1.3.36.1.2*' => 'draft', |
|
1148 | - '1.3.36.2*' => 'sio', |
|
1149 | - '1.3.36.2.1*' => 'sedu', |
|
1150 | - '1.3.36.3*' => 'algorithm', |
|
1151 | - '1.3.36.3.1*' => 'encryptionAlgorithm', |
|
1152 | - '1.3.36.3.1.1*' => 'des', |
|
1153 | - '1.3.36.3.1.1.1*' => 'desECB_pad', |
|
1154 | - '1.3.36.3.1.1.1.1*' => 'desECB_ISOpad', |
|
1155 | - '1.3.36.3.1.1.2.1*' => 'desCBC_pad', |
|
1156 | - '1.3.36.3.1.1.2.1.1*' => 'desCBC_ISOpad', |
|
1157 | - '1.3.36.3.1.3*' => 'des_3', |
|
1158 | - '1.3.36.3.1.3.1.1*' => 'des_3ECB_pad', |
|
1159 | - '1.3.36.3.1.3.1.1.1*' => 'des_3ECB_ISOpad', |
|
1160 | - '1.3.36.3.1.3.2.1*' => 'des_3CBC_pad', |
|
1161 | - '1.3.36.3.1.3.2.1.1*' => 'des_3CBC_ISOpad', |
|
1162 | - '1.3.36.3.1.2*' => 'idea', |
|
1163 | - '1.3.36.3.1.2.1*' => 'ideaECB', |
|
1164 | - '1.3.36.3.1.2.1.1*' => 'ideaECB_pad', |
|
1165 | - '1.3.36.3.1.2.1.1.1*' => 'ideaECB_ISOpad', |
|
1166 | - '1.3.36.3.1.2.2*' => 'ideaCBC', |
|
1167 | - '1.3.36.3.1.2.2.1*' => 'ideaCBC_pad', |
|
1168 | - '1.3.36.3.1.2.2.1.1*' => 'ideaCBC_ISOpad', |
|
1169 | - '1.3.36.3.1.2.3*' => 'ideaOFB', |
|
1170 | - '1.3.36.3.1.2.4*' => 'ideaCFB', |
|
1171 | - '1.3.36.3.1.4*' => 'rsaEncryption', |
|
1172 | - '1.3.36.3.1.4.512.17*' => 'rsaEncryptionWithlmod512expe17', |
|
1173 | - '1.3.36.3.1.5*' => 'bsi-1', |
|
1174 | - '1.3.36.3.1.5.1*' => 'bsi_1ECB_pad', |
|
1175 | - '1.3.36.3.1.5.2*' => 'bsi_1CBC_pad', |
|
1176 | - '1.3.36.3.1.5.2.1*' => 'bsi_1CBC_PEMpad', |
|
1177 | - '1.3.36.3.2*' => 'hashAlgorithm', |
|
1178 | - '1.3.36.3.2.1*' => 'ripemd160', |
|
1179 | - '1.3.36.3.2.2*' => 'ripemd128', |
|
1180 | - '1.3.36.3.2.3*' => 'ripemd256', |
|
1181 | - '1.3.36.3.2.4*' => 'mdc2singleLength', |
|
1182 | - '1.3.36.3.2.5*' => 'mdc2doubleLength', |
|
1183 | - '1.3.36.3.3*' => 'signatureAlgorithm', |
|
1184 | - '1.3.36.3.3.1*' => 'rsaSignature', |
|
1185 | - '1.3.36.3.3.1.1*' => 'rsaSignatureWithsha1', |
|
1186 | - '1.3.36.3.3.1.1.512.2*' => 'rsaSignatureWithsha1_l512_l2', |
|
1187 | - '1.3.36.3.3.1.1.640.2*' => 'rsaSignatureWithsha1_l640_l2', |
|
1188 | - '1.3.36.3.3.1.1.768.2*' => 'rsaSignatureWithsha1_l768_l2', |
|
1189 | - '1.3.36.3.3.1.1.896.2*' => 'rsaSignatureWithsha1_l896_l2', |
|
1190 | - '1.3.36.3.3.1.1.1024.2*' => 'rsaSignatureWithsha1_l1024_l2', |
|
1191 | - '1.3.36.3.3.1.1.512.3*' => 'rsaSignatureWithsha1_l512_l3', |
|
1192 | - '1.3.36.3.3.1.1.640.3*' => 'rsaSignatureWithsha1_l640_l3', |
|
1193 | - '1.3.36.3.3.1.1.768.3*' => 'rsaSignatureWithsha1_l768_l3', |
|
1194 | - '1.3.36.3.3.1.1.896.3*' => 'rsaSignatureWithsha1_l896_l3', |
|
1195 | - '1.3.36.3.3.1.1.1024.3*' => 'rsaSignatureWithsha1_l1024_l3', |
|
1196 | - '1.3.36.3.3.1.1.512.5*' => 'rsaSignatureWithsha1_l512_l5', |
|
1197 | - '1.3.36.3.3.1.1.640.5*' => 'rsaSignatureWithsha1_l640_l5', |
|
1198 | - '1.3.36.3.3.1.1.768.5*' => 'rsaSignatureWithsha1_l768_l5', |
|
1199 | - '1.3.36.3.3.1.1.896.5*' => 'rsaSignatureWithsha1_l896_l5', |
|
1200 | - '1.3.36.3.3.1.1.1024.5*' => 'rsaSignatureWithsha1_l1024_l5', |
|
1201 | - '1.3.36.3.3.1.1.512.9*' => 'rsaSignatureWithsha1_l512_l9', |
|
1202 | - '1.3.36.3.3.1.1.640.9*' => 'rsaSignatureWithsha1_l640_l9', |
|
1203 | - '1.3.36.3.3.1.1.768.9*' => 'rsaSignatureWithsha1_l768_l9', |
|
1204 | - '1.3.36.3.3.1.1.896.9*' => 'rsaSignatureWithsha1_l896_l9', |
|
1205 | - '1.3.36.3.3.1.1.1024.9*' => 'rsaSignatureWithsha1_l1024_l9', |
|
1206 | - '1.3.36.3.3.1.1.512.11*' => 'rsaSignatureWithsha1_l512_l11', |
|
1207 | - '1.3.36.3.3.1.1.640.11*' => 'rsaSignatureWithsha1_l640_l11', |
|
1208 | - '1.3.36.3.3.1.1.768.11*' => 'rsaSignatureWithsha1_l768_l11', |
|
1209 | - '1.3.36.3.3.1.1.896.11*' => 'rsaSignatureWithsha1_l896_l11', |
|
1210 | - '1.3.36.3.3.1.1.1024.11*' => 'rsaSignatureWithsha1_l1024_l11', |
|
1211 | - '1.3.36.3.3.1.2*' => 'rsaSignatureWithripemd160', |
|
1212 | - '1.3.36.3.3.1.2.512.2*' => 'rsaSignatureWithripemd160_l512_l2', |
|
1213 | - '1.3.36.3.3.1.2.640.2*' => 'rsaSignatureWithripemd160_l640_l2', |
|
1214 | - '1.3.36.3.3.1.2.768.2*' => 'rsaSignatureWithripemd160_l768_l2', |
|
1215 | - '1.3.36.3.3.1.2.896.2*' => 'rsaSignatureWithripemd160_l896_l2', |
|
1216 | - '1.3.36.3.3.1.2.1024.2*' => 'rsaSignatureWithripemd160_l1024_l2', |
|
1217 | - '1.3.36.3.3.1.2.512.3*' => 'rsaSignatureWithripemd160_l512_l3', |
|
1218 | - '1.3.36.3.3.1.2.640.3*' => 'rsaSignatureWithripemd160_l640_l3', |
|
1219 | - '1.3.36.3.3.1.2.768.3*' => 'rsaSignatureWithripemd160_l768_l3', |
|
1220 | - '1.3.36.3.3.1.2.896.3*' => 'rsaSignatureWithripemd160_l896_l3', |
|
1221 | - '1.3.36.3.3.1.2.1024.3*' => 'rsaSignatureWithripemd160_l1024_l3', |
|
1222 | - '1.3.36.3.3.1.2.512.5*' => 'rsaSignatureWithripemd160_l512_l5', |
|
1223 | - '1.3.36.3.3.1.2.640.5*' => 'rsaSignatureWithripemd160_l640_l5', |
|
1224 | - '1.3.36.3.3.1.2.768.5*' => 'rsaSignatureWithripemd160_l768_l5', |
|
1225 | - '1.3.36.3.3.1.2.896.5*' => 'rsaSignatureWithripemd160_l896_l5', |
|
1226 | - '1.3.36.3.3.1.2.1024.5*' => 'rsaSignatureWithripemd160_l1024_l5', |
|
1227 | - '1.3.36.3.3.1.2.512.9*' => 'rsaSignatureWithripemd160_l512_l9', |
|
1228 | - '1.3.36.3.3.1.2.640.9*' => 'rsaSignatureWithripemd160_l640_l9', |
|
1229 | - '1.3.36.3.3.1.2.768.9*' => 'rsaSignatureWithripemd160_l768_l9', |
|
1230 | - '1.3.36.3.3.1.2.896.9*' => 'rsaSignatureWithripemd160_l896_l9', |
|
1231 | - '1.3.36.3.3.1.2.1024.9*' => 'rsaSignatureWithripemd160_l1024_l9', |
|
1232 | - '1.3.36.3.3.1.2.512.11*' => 'rsaSignatureWithripemd160_l512_l11', |
|
1233 | - '1.3.36.3.3.1.2.640.11*' => 'rsaSignatureWithripemd160_l640_l11', |
|
1234 | - '1.3.36.3.3.1.2.768.11*' => 'rsaSignatureWithripemd160_l768_l11', |
|
1235 | - '1.3.36.3.3.1.2.896.11*' => 'rsaSignatureWithripemd160_l896_l11', |
|
1236 | - '1.3.36.3.3.1.2.1024.11*' => 'rsaSignatureWithripemd160_l1024_l11', |
|
1237 | - '1.3.36.3.3.1.3*' => 'rsaSignatureWithrimpemd128', |
|
1238 | - '1.3.36.3.3.1.4*' => 'rsaSignatureWithrimpemd256', |
|
1239 | - '1.3.36.3.3.2*' => 'ecsieSign', |
|
1240 | - '1.3.36.3.3.2.1*' => 'ecsieSignWithsha1', |
|
1241 | - '1.3.36.3.3.2.2*' => 'ecsieSignWithripemd160', |
|
1242 | - '1.3.36.3.3.2.3*' => 'ecsieSignWithmd2', |
|
1243 | - '1.3.36.3.3.2.4*' => 'ecsieSignWithmd5', |
|
1244 | - '1.3.36.3.3.2.8.1.1.1*' => 'brainpoolP160r1', |
|
1245 | - '1.3.36.3.3.2.8.1.1.2*' => 'brainpoolP160t1', |
|
1246 | - '1.3.36.3.3.2.8.1.1.3*' => 'brainpoolP192r1', |
|
1247 | - '1.3.36.3.3.2.8.1.1.4*' => 'brainpoolP192t1', |
|
1248 | - '1.3.36.3.3.2.8.1.1.5*' => 'brainpoolP224r1', |
|
1249 | - '1.3.36.3.3.2.8.1.1.6*' => 'brainpoolP224t1', |
|
1250 | - '1.3.36.3.3.2.8.1.1.7*' => 'brainpoolP256r1', |
|
1251 | - '1.3.36.3.3.2.8.1.1.8*' => 'brainpoolP256t1', |
|
1252 | - '1.3.36.3.3.2.8.1.1.9*' => 'brainpoolP320r1', |
|
1253 | - '1.3.36.3.3.2.8.1.1.10*' => 'brainpoolP320t1', |
|
1254 | - '1.3.36.3.3.2.8.1.1.11*' => 'brainpoolP384r1', |
|
1255 | - '1.3.36.3.3.2.8.1.1.12*' => 'brainpoolP384t1', |
|
1256 | - '1.3.36.3.3.2.8.1.1.13*' => 'brainpoolP512r1', |
|
1257 | - '1.3.36.3.3.2.8.1.1.14*' => 'brainpoolP512t1', |
|
1258 | - '1.3.36.3.4*' => 'signatureScheme', |
|
1259 | - '1.3.36.3.4.1*' => 'sigS_ISO9796-1', |
|
1260 | - '1.3.36.3.4.2*' => 'sigS_ISO9796-2', |
|
1261 | - '1.3.36.3.4.2.1*' => 'sigS_ISO9796-2Withred', |
|
1262 | - '1.3.36.3.4.2.2*' => 'sigS_ISO9796-2Withrsa', |
|
1263 | - '1.3.36.3.4.2.3*' => 'sigS_ISO9796-2Withrnd', |
|
1264 | - '1.3.36.4*' => 'attribute', |
|
1265 | - '1.3.36.5*' => 'policy', |
|
1266 | - '1.3.36.6*' => 'api', |
|
1267 | - '1.3.36.6.1*' => 'manufacturer-specific_api', |
|
1268 | - '1.3.36.6.1.1*' => 'utimaco-api', |
|
1269 | - '1.3.36.6.2*' => 'functionality-specific_api', |
|
1270 | - '1.3.36.7*' => 'keymgmnt', |
|
1271 | - '1.3.36.7.1*' => 'keyagree', |
|
1272 | - '1.3.36.7.1.1*' => 'bsiPKE', |
|
1273 | - '1.3.36.7.2*' => 'keytrans', |
|
1274 | - '1.3.36.7.2.1*' => 'encISO9796-2Withrsa', |
|
1275 | - '1.3.36.8.1.1*' => 'Teletrust SigGConform policyIdentifier', |
|
1276 | - '1.3.36.8.2.1*' => 'directoryService', |
|
1277 | - '1.3.36.8.3.1*' => 'dateOfCertGen', |
|
1278 | - '1.3.36.8.3.2*' => 'procuration', |
|
1279 | - '1.3.36.8.3.3*' => 'admission', |
|
1280 | - '1.3.36.8.3.4*' => 'monetaryLimit', |
|
1281 | - '1.3.36.8.3.5*' => 'declarationOfMajority', |
|
1282 | - '1.3.36.8.3.6*' => 'integratedCircuitCardSerialNumber', |
|
1283 | - '1.3.36.8.3.7*' => 'pKReference', |
|
1284 | - '1.3.36.8.3.8*' => 'restriction', |
|
1285 | - '1.3.36.8.3.9*' => 'retrieveIfAllowed', |
|
1286 | - '1.3.36.8.3.10*' => 'requestedCertificate', |
|
1287 | - '1.3.36.8.3.11*' => 'namingAuthorities', |
|
1288 | - '1.3.36.8.3.11.1*' => 'rechtWirtschaftSteuern', |
|
1289 | - '1.3.36.8.3.11.1.1*' => 'rechtsanwaeltin', |
|
1290 | - '1.3.36.8.3.11.1.2*' => 'rechtsanwalt', |
|
1291 | - '1.3.36.8.3.11.1.3*' => 'rechtsBeistand', |
|
1292 | - '1.3.36.8.3.11.1.4*' => 'steuerBeraterin', |
|
1293 | - '1.3.36.8.3.11.1.5*' => 'steuerBerater', |
|
1294 | - '1.3.36.8.3.11.1.6*' => 'steuerBevollmaechtigte', |
|
1295 | - '1.3.36.8.3.11.1.7*' => 'steuerBevollmaechtigter', |
|
1296 | - '1.3.36.8.3.11.1.8*' => 'notarin', |
|
1297 | - '1.3.36.8.3.11.1.9*' => 'notar', |
|
1298 | - '1.3.36.8.3.11.1.10*' => 'notarVertreterin', |
|
1299 | - '1.3.36.8.3.11.1.11*' => 'notarVertreter', |
|
1300 | - '1.3.36.8.3.11.1.12*' => 'notariatsVerwalterin', |
|
1301 | - '1.3.36.8.3.11.1.13*' => 'notariatsVerwalter', |
|
1302 | - '1.3.36.8.3.11.1.14*' => 'wirtschaftsPrueferin', |
|
1303 | - '1.3.36.8.3.11.1.15*' => 'wirtschaftsPruefer', |
|
1304 | - '1.3.36.8.3.11.1.16*' => 'vereidigteBuchprueferin', |
|
1305 | - '1.3.36.8.3.11.1.17*' => 'vereidigterBuchpruefer', |
|
1306 | - '1.3.36.8.3.11.1.18*' => 'patentAnwaeltin', |
|
1307 | - '1.3.36.8.3.11.1.19*' => 'patentAnwalt', |
|
1308 | - '1.3.36.8.3.12*' => 'certInDirSince', |
|
1309 | - '1.3.36.8.3.13*' => 'certHash', |
|
1310 | - '1.3.36.8.3.14*' => 'nameAtBirth', |
|
1311 | - '1.3.36.8.3.15*' => 'additionalInformation', |
|
1312 | - '1.3.36.8.4.1*' => 'personalData', |
|
1313 | - '1.3.36.8.4.8*' => 'restriction', |
|
1314 | - '1.3.36.8.5.1.1.1*' => 'rsaIndicateSHA1', |
|
1315 | - '1.3.36.8.5.1.1.2*' => 'rsaIndicateRIPEMD160', |
|
1316 | - '1.3.36.8.5.1.1.3*' => 'rsaWithSHA1', |
|
1317 | - '1.3.36.8.5.1.1.4*' => 'rsaWithRIPEMD160', |
|
1318 | - '1.3.36.8.5.1.2.1*' => 'dsaExtended', |
|
1319 | - '1.3.36.8.5.1.2.2*' => 'dsaWithRIPEMD160', |
|
1320 | - '1.3.36.8.6.1*' => 'cert', |
|
1321 | - '1.3.36.8.6.2*' => 'certRef', |
|
1322 | - '1.3.36.8.6.3*' => 'attrCert', |
|
1323 | - '1.3.36.8.6.4*' => 'attrRef', |
|
1324 | - '1.3.36.8.6.5*' => 'fileName', |
|
1325 | - '1.3.36.8.6.6*' => 'storageTime', |
|
1326 | - '1.3.36.8.6.7*' => 'fileSize', |
|
1327 | - '1.3.36.8.6.8*' => 'location', |
|
1328 | - '1.3.36.8.6.9*' => 'sigNumber', |
|
1329 | - '1.3.36.8.6.10*' => 'autoGen', |
|
1330 | - '1.3.36.8.7.1.1*' => 'ptAdobeILL', |
|
1331 | - '1.3.36.8.7.1.2*' => 'ptAmiPro', |
|
1332 | - '1.3.36.8.7.1.3*' => 'ptAutoCAD', |
|
1333 | - '1.3.36.8.7.1.4*' => 'ptBinary', |
|
1334 | - '1.3.36.8.7.1.5*' => 'ptBMP', |
|
1335 | - '1.3.36.8.7.1.6*' => 'ptCGM', |
|
1336 | - '1.3.36.8.7.1.7*' => 'ptCorelCRT', |
|
1337 | - '1.3.36.8.7.1.8*' => 'ptCorelDRW', |
|
1338 | - '1.3.36.8.7.1.9*' => 'ptCorelEXC', |
|
1339 | - '1.3.36.8.7.1.10*' => 'ptCorelPHT', |
|
1340 | - '1.3.36.8.7.1.11*' => 'ptDraw', |
|
1341 | - '1.3.36.8.7.1.12*' => 'ptDVI', |
|
1342 | - '1.3.36.8.7.1.13*' => 'ptEPS', |
|
1343 | - '1.3.36.8.7.1.14*' => 'ptExcel', |
|
1344 | - '1.3.36.8.7.1.15*' => 'ptGEM', |
|
1345 | - '1.3.36.8.7.1.16*' => 'ptGIF', |
|
1346 | - '1.3.36.8.7.1.17*' => 'ptHPGL', |
|
1347 | - '1.3.36.8.7.1.18*' => 'ptJPEG', |
|
1348 | - '1.3.36.8.7.1.19*' => 'ptKodak', |
|
1349 | - '1.3.36.8.7.1.20*' => 'ptLaTeX', |
|
1350 | - '1.3.36.8.7.1.21*' => 'ptLotus', |
|
1351 | - '1.3.36.8.7.1.22*' => 'ptLotusPIC', |
|
1352 | - '1.3.36.8.7.1.23*' => 'ptMacPICT', |
|
1353 | - '1.3.36.8.7.1.24*' => 'ptMacWord', |
|
1354 | - '1.3.36.8.7.1.25*' => 'ptMSWfD', |
|
1355 | - '1.3.36.8.7.1.26*' => 'ptMSWord', |
|
1356 | - '1.3.36.8.7.1.27*' => 'ptMSWord2', |
|
1357 | - '1.3.36.8.7.1.28*' => 'ptMSWord6', |
|
1358 | - '1.3.36.8.7.1.29*' => 'ptMSWord8', |
|
1359 | - '1.3.36.8.7.1.30*' => 'ptPDF', |
|
1360 | - '1.3.36.8.7.1.31*' => 'ptPIF', |
|
1361 | - '1.3.36.8.7.1.32*' => 'ptPostscript', |
|
1362 | - '1.3.36.8.7.1.33*' => 'ptRTF', |
|
1363 | - '1.3.36.8.7.1.34*' => 'ptSCITEX', |
|
1364 | - '1.3.36.8.7.1.35*' => 'ptTAR', |
|
1365 | - '1.3.36.8.7.1.36*' => 'ptTarga', |
|
1366 | - '1.3.36.8.7.1.37*' => 'ptTeX', |
|
1367 | - '1.3.36.8.7.1.38*' => 'ptText', |
|
1368 | - '1.3.36.8.7.1.39*' => 'ptTIFF', |
|
1369 | - '1.3.36.8.7.1.40*' => 'ptTIFF-FC', |
|
1370 | - '1.3.36.8.7.1.41*' => 'ptUID', |
|
1371 | - '1.3.36.8.7.1.42*' => 'ptUUEncode', |
|
1372 | - '1.3.36.8.7.1.43*' => 'ptWordPerfect x', |
|
1373 | - '1.3.36.8.7.1.45*' => 'ptWPGrph', |
|
1374 | - '1.3.101.1.4*' => 'thawte-ce', |
|
1375 | - '1.3.101.1.4.1*' => 'strongExtranet', |
|
1376 | - '1.3.132.0.1*' => 'sect163k1', |
|
1377 | - '1.3.132.0.2*' => 'sect163r1', |
|
1378 | - '1.3.132.0.3*' => 'sect239k1', |
|
1379 | - '1.3.132.0.4*' => 'sect113r1', |
|
1380 | - '1.3.132.0.5*' => 'sect113r2', |
|
1381 | - '1.3.132.0.6*' => 'secp112r1', |
|
1382 | - '1.3.132.0.7*' => 'secp112r2', |
|
1383 | - '1.3.132.0.8*' => 'secp160r1', |
|
1384 | - '1.3.132.0.9*' => 'secp160k1', |
|
1385 | - '1.3.132.0.10*' => 'secp256k1', |
|
1386 | - '1.3.132.0.15*' => 'sect163r2', |
|
1387 | - '1.3.132.0.16*' => 'sect283k1', |
|
1388 | - '1.3.132.0.17*' => 'sect283r1', |
|
1389 | - '1.3.132.0.22*' => 'sect131r1', |
|
1390 | - '1.3.132.0.23*' => 'sect131r2', |
|
1391 | - '1.3.132.0.24*' => 'sect193r1', |
|
1392 | - '1.3.132.0.25*' => 'sect193r2', |
|
1393 | - '1.3.132.0.26*' => 'sect233k1', |
|
1394 | - '1.3.132.0.27*' => 'sect233r1', |
|
1395 | - '1.3.132.0.28*' => 'secp128r1', |
|
1396 | - '1.3.132.0.29*' => 'secp128r2', |
|
1397 | - '1.3.132.0.30*' => 'secp160r2', |
|
1398 | - '1.3.132.0.31*' => 'secp192k1', |
|
1399 | - '1.3.132.0.32*' => 'secp224k1', |
|
1400 | - '1.3.132.0.33*' => 'secp224r1', |
|
1401 | - '1.3.132.0.34*' => 'secp384r1', |
|
1402 | - '1.3.132.0.35*' => 'secp521r1', |
|
1403 | - '1.3.132.0.36*' => 'sect409k1', |
|
1404 | - '1.3.132.0.37*' => 'sect409r1', |
|
1405 | - '1.3.132.0.38*' => 'sect571k1', |
|
1406 | - '1.3.132.0.39*' => 'sect571r1', |
|
1407 | - '2.5.4.0*' => 'objectClass', |
|
1408 | - '2.5.4.1*' => 'aliasedEntryName', |
|
1409 | - '2.5.4.2*' => 'knowledgeInformation', |
|
1410 | - '2.5.4.3*' => 'commonName', |
|
1411 | - '2.5.4.4*' => 'surname', |
|
1412 | - '2.5.4.5*' => 'serialNumber', |
|
1413 | - '2.5.4.6*' => 'countryName', |
|
1414 | - '2.5.4.7*' => 'localityName', |
|
1415 | - '2.5.4.7.1*' => 'collectiveLocalityName', |
|
1416 | - '2.5.4.8*' => 'stateOrProvinceName', |
|
1417 | - '2.5.4.8.1*' => 'collectiveStateOrProvinceName', |
|
1418 | - '2.5.4.9*' => 'streetAddress', |
|
1419 | - '2.5.4.9.1*' => 'collectiveStreetAddress', |
|
1420 | - '2.5.4.10*' => 'organizationName', |
|
1421 | - '2.5.4.10.1*' => 'collectiveOrganizationName', |
|
1422 | - '2.5.4.11*' => 'organizationalUnitName', |
|
1423 | - '2.5.4.11.1*' => 'collectiveOrganizationalUnitName', |
|
1424 | - '2.5.4.12*' => 'title', |
|
1425 | - '2.5.4.13*' => 'description', |
|
1426 | - '2.5.4.14*' => 'searchGuide', |
|
1427 | - '2.5.4.15*' => 'businessCategory', |
|
1428 | - '2.5.4.16*' => 'postalAddress', |
|
1429 | - '2.5.4.16.1*' => 'collectivePostalAddress', |
|
1430 | - '2.5.4.17*' => 'postalCode', |
|
1431 | - '2.5.4.17.1*' => 'collectivePostalCode', |
|
1432 | - '2.5.4.18*' => 'postOfficeBox', |
|
1433 | - '2.5.4.18.1*' => 'collectivePostOfficeBox', |
|
1434 | - '2.5.4.19*' => 'physicalDeliveryOfficeName', |
|
1435 | - '2.5.4.19.1*' => 'collectivePhysicalDeliveryOfficeName', |
|
1436 | - '2.5.4.20*' => 'telephoneNumber', |
|
1437 | - '2.5.4.20.1*' => 'collectiveTelephoneNumber', |
|
1438 | - '2.5.4.21*' => 'telexNumber', |
|
1439 | - '2.5.4.21.1*' => 'collectiveTelexNumber', |
|
1440 | - '2.5.4.22*' => 'teletexTerminalIdentifier', |
|
1441 | - '2.5.4.22.1*' => 'collectiveTeletexTerminalIdentifier', |
|
1442 | - '2.5.4.23*' => 'facsimileTelephoneNumber', |
|
1443 | - '2.5.4.23.1*' => 'collectiveFacsimileTelephoneNumber', |
|
1444 | - '2.5.4.24*' => 'x121Address', |
|
1445 | - '2.5.4.25*' => 'internationalISDNNumber', |
|
1446 | - '2.5.4.25.1*' => 'collectiveInternationalISDNNumber', |
|
1447 | - '2.5.4.26*' => 'registeredAddress', |
|
1448 | - '2.5.4.27*' => 'destinationIndicator', |
|
1449 | - '2.5.4.28*' => 'preferredDeliveryMehtod', |
|
1450 | - '2.5.4.29*' => 'presentationAddress', |
|
1451 | - '2.5.4.30*' => 'supportedApplicationContext', |
|
1452 | - '2.5.4.31*' => 'member', |
|
1453 | - '2.5.4.32*' => 'owner', |
|
1454 | - '2.5.4.33*' => 'roleOccupant', |
|
1455 | - '2.5.4.34*' => 'seeAlso', |
|
1456 | - '2.5.4.35*' => 'userPassword', |
|
1457 | - '2.5.4.36*' => 'userCertificate', |
|
1458 | - '2.5.4.37*' => 'caCertificate', |
|
1459 | - '2.5.4.38*' => 'authorityRevocationList', |
|
1460 | - '2.5.4.39*' => 'certificateRevocationList', |
|
1461 | - '2.5.4.40*' => 'crossCertificatePair', |
|
1462 | - '2.5.4.41*' => 'name', |
|
1463 | - '2.5.4.42*' => 'givenName', |
|
1464 | - '2.5.4.43*' => 'initials', |
|
1465 | - '2.5.4.44*' => 'generationQualifier', |
|
1466 | - '2.5.4.45*' => 'uniqueIdentifier', |
|
1467 | - '2.5.4.46*' => 'dnQualifier', |
|
1468 | - '2.5.4.47*' => 'enhancedSearchGuide', |
|
1469 | - '2.5.4.48*' => 'protocolInformation', |
|
1470 | - '2.5.4.49*' => 'distinguishedName', |
|
1471 | - '2.5.4.50*' => 'uniqueMember', |
|
1472 | - '2.5.4.51*' => 'houseIdentifier', |
|
1473 | - '2.5.4.52*' => 'supportedAlgorithms', |
|
1474 | - '2.5.4.53*' => 'deltaRevocationList', |
|
1475 | - '2.5.4.54*' => 'dmdName', |
|
1476 | - '2.5.4.55*' => 'clearance', |
|
1477 | - '2.5.4.56*' => 'defaultDirQop', |
|
1478 | - '2.5.4.57*' => 'attributeIntegrityInfo', |
|
1479 | - '2.5.4.58*' => 'attributeCertificate', |
|
1480 | - '2.5.4.59*' => 'attributeCertificateRevocationList', |
|
1481 | - '2.5.4.60*' => 'confKeyInfo', |
|
1482 | - '2.5.4.61*' => 'aACertificate', |
|
1483 | - '2.5.4.62*' => 'attributeDescriptorCertificate', |
|
1484 | - '2.5.4.63*' => 'attributeAuthorityRevocationList', |
|
1485 | - '2.5.4.64*' => 'familyInformation', |
|
1486 | - '2.5.4.65*' => 'pseudonym', |
|
1487 | - '2.5.4.66*' => 'communicationsService', |
|
1488 | - '2.5.4.67*' => 'communicationsNetwork', |
|
1489 | - '2.5.4.68*' => 'certificationPracticeStmt', |
|
1490 | - '2.5.4.69*' => 'certificatePolicy', |
|
1491 | - '2.5.4.70*' => 'pkiPath', |
|
1492 | - '2.5.4.71*' => 'privPolicy', |
|
1493 | - '2.5.4.72*' => 'role', |
|
1494 | - '2.5.4.73*' => 'delegationPath', |
|
1495 | - '2.5.4.74*' => 'protPrivPolicy', |
|
1496 | - '2.5.4.75*' => 'xMLPrivilegeInfo', |
|
1497 | - '2.5.4.76*' => 'xmlPrivPolicy', |
|
1498 | - '2.5.4.82*' => 'permission', |
|
1499 | - '2.5.6.0*' => 'top', |
|
1500 | - '2.5.6.1*' => 'alias', |
|
1501 | - '2.5.6.2*' => 'country', |
|
1502 | - '2.5.6.3*' => 'locality', |
|
1503 | - '2.5.6.4*' => 'organization', |
|
1504 | - '2.5.6.5*' => 'organizationalUnit', |
|
1505 | - '2.5.6.6*' => 'person', |
|
1506 | - '2.5.6.7*' => 'organizationalPerson', |
|
1507 | - '2.5.6.8*' => 'organizationalRole', |
|
1508 | - '2.5.6.9*' => 'groupOfNames', |
|
1509 | - '2.5.6.10*' => 'residentialPerson', |
|
1510 | - '2.5.6.11*' => 'applicationProcess', |
|
1511 | - '2.5.6.12*' => 'applicationEntity', |
|
1512 | - '2.5.6.13*' => 'dSA', |
|
1513 | - '2.5.6.14*' => 'device', |
|
1514 | - '2.5.6.15*' => 'strongAuthenticationUser', |
|
1515 | - '2.5.6.16*' => 'certificateAuthority', |
|
1516 | - '2.5.6.17*' => 'groupOfUniqueNames', |
|
1517 | - '2.5.6.21*' => 'pkiUser', |
|
1518 | - '2.5.6.22*' => 'pkiCA', |
|
1519 | - '2.5.8.1.1*' => 'rsa', |
|
1520 | - '2.5.29.1*' => 'authorityKeyIdentifier', |
|
1521 | - '2.5.29.2*' => 'keyAttributes', |
|
1522 | - '2.5.29.3*' => 'certificatePolicies', |
|
1523 | - '2.5.29.4*' => 'keyUsageRestriction', |
|
1524 | - '2.5.29.5*' => 'policyMapping', |
|
1525 | - '2.5.29.6*' => 'subtreesConstraint', |
|
1526 | - '2.5.29.7*' => 'subjectAltName', |
|
1527 | - '2.5.29.8*' => 'issuerAltName', |
|
1528 | - '2.5.29.9*' => 'subjectDirectoryAttributes', |
|
1529 | - '2.5.29.10*' => 'basicConstraints', |
|
1530 | - '2.5.29.11*' => 'nameConstraints', |
|
1531 | - '2.5.29.12*' => 'policyConstraints', |
|
1532 | - '2.5.29.13*' => 'basicConstraints', |
|
1533 | - '2.5.29.14*' => 'subjectKeyIdentifier', |
|
1534 | - '2.5.29.15*' => 'keyUsage', |
|
1535 | - '2.5.29.16*' => 'privateKeyUsagePeriod', |
|
1536 | - '2.5.29.17*' => 'subjectAltName', |
|
1537 | - '2.5.29.18*' => 'issuerAltName', |
|
1538 | - '2.5.29.19*' => 'basicConstraints', |
|
1539 | - '2.5.29.20*' => 'cRLNumber', |
|
1540 | - '2.5.29.21*' => 'cRLReason', |
|
1541 | - '2.5.29.22*' => 'expirationDate', |
|
1542 | - '2.5.29.23*' => 'instructionCode', |
|
1543 | - '2.5.29.24*' => 'invalidityDate', |
|
1544 | - '2.5.29.25*' => 'cRLDistributionPoints', |
|
1545 | - '2.5.29.26*' => 'issuingDistributionPoint', |
|
1546 | - '2.5.29.27*' => 'deltaCRLIndicator', |
|
1547 | - '2.5.29.28*' => 'issuingDistributionPoint', |
|
1548 | - '2.5.29.29*' => 'certificateIssuer', |
|
1549 | - '2.5.29.30*' => 'nameConstraints', |
|
1550 | - '2.5.29.31*' => 'cRLDistributionPoints', |
|
1551 | - '2.5.29.32*' => 'certificatePolicies', |
|
1552 | - '2.5.29.32.0*' => 'anyPolicy', |
|
1553 | - '2.5.29.33*' => 'policyMappings', |
|
1554 | - '2.5.29.34*' => 'policyConstraints', |
|
1555 | - '2.5.29.35*' => 'authorityKeyIdentifier', |
|
1556 | - '2.5.29.36*' => 'policyConstraints', |
|
1557 | - '2.5.29.37*' => 'extKeyUsage', |
|
1558 | - '2.5.29.37.0*' => 'anyExtendedKeyUsage', |
|
1559 | - '2.5.29.38*' => 'authorityAttributeIdentifier', |
|
1560 | - '2.5.29.39*' => 'roleSpecCertIdentifier', |
|
1561 | - '2.5.29.40*' => 'cRLStreamIdentifier', |
|
1562 | - '2.5.29.41*' => 'basicAttConstraints', |
|
1563 | - '2.5.29.42*' => 'delegatedNameConstraints', |
|
1564 | - '2.5.29.43*' => 'timeSpecification', |
|
1565 | - '2.5.29.44*' => 'cRLScope', |
|
1566 | - '2.5.29.45*' => 'statusReferrals', |
|
1567 | - '2.5.29.46*' => 'freshestCRL', |
|
1568 | - '2.5.29.47*' => 'orderedList', |
|
1569 | - '2.5.29.48*' => 'attributeDescriptor', |
|
1570 | - '2.5.29.49*' => 'userNotice', |
|
1571 | - '2.5.29.50*' => 'sOAIdentifier', |
|
1572 | - '2.5.29.51*' => 'baseUpdateTime', |
|
1573 | - '2.5.29.52*' => 'acceptableCertPolicies', |
|
1574 | - '2.5.29.53*' => 'deltaInfo', |
|
1575 | - '2.5.29.54*' => 'inhibitAnyPolicy', |
|
1576 | - '2.5.29.55*' => 'targetInformation', |
|
1577 | - '2.5.29.56*' => 'noRevAvail', |
|
1578 | - '2.5.29.57*' => 'acceptablePrivilegePolicies', |
|
1579 | - '2.5.29.58*' => 'toBeRevoked', |
|
1580 | - '2.5.29.59*' => 'revokedGroups', |
|
1581 | - '2.5.29.60*' => 'expiredCertsOnCRL', |
|
1582 | - '2.5.29.61*' => 'indirectIssuer', |
|
1583 | - '2.5.29.62*' => 'noAssertion', |
|
1584 | - '2.5.29.63*' => 'aAissuingDistributionPoint', |
|
1585 | - '2.5.29.64*' => 'issuedOnBehalfOf', |
|
1586 | - '2.5.29.65*' => 'singleUse', |
|
1587 | - '2.5.29.66*' => 'groupAC', |
|
1588 | - '2.5.29.67*' => 'allowedAttAss', |
|
1589 | - '2.5.29.68*' => 'attributeMappings', |
|
1590 | - '2.5.29.69*' => 'holderNameConstraints', |
|
1591 | - '2.16.840.1.101.2.1.1.1*' => 'sdnsSignatureAlgorithm', |
|
1592 | - '2.16.840.1.101.2.1.1.2*' => 'fortezzaSignatureAlgorithm', |
|
1593 | - '2.16.840.1.101.2.1.1.3*' => 'sdnsConfidentialityAlgorithm', |
|
1594 | - '2.16.840.1.101.2.1.1.4*' => 'fortezzaConfidentialityAlgorithm', |
|
1595 | - '2.16.840.1.101.2.1.1.5*' => 'sdnsIntegrityAlgorithm', |
|
1596 | - '2.16.840.1.101.2.1.1.6*' => 'fortezzaIntegrityAlgorithm', |
|
1597 | - '2.16.840.1.101.2.1.1.7*' => 'sdnsTokenProtectionAlgorithm', |
|
1598 | - '2.16.840.1.101.2.1.1.8*' => 'fortezzaTokenProtectionAlgorithm', |
|
1599 | - '2.16.840.1.101.2.1.1.9*' => 'sdnsKeyManagementAlgorithm', |
|
1600 | - '2.16.840.1.101.2.1.1.10*' => 'fortezzaKeyManagementAlgorithm', |
|
1601 | - '2.16.840.1.101.2.1.1.11*' => 'sdnsKMandSigAlgorithm', |
|
1602 | - '2.16.840.1.101.2.1.1.12*' => 'fortezzaKMandSigAlgorithm', |
|
1603 | - '2.16.840.1.101.2.1.1.13*' => 'suiteASignatureAlgorithm', |
|
1604 | - '2.16.840.1.101.2.1.1.14*' => 'suiteAConfidentialityAlgorithm', |
|
1605 | - '2.16.840.1.101.2.1.1.15*' => 'suiteAIntegrityAlgorithm', |
|
1606 | - '2.16.840.1.101.2.1.1.16*' => 'suiteATokenProtectionAlgorithm', |
|
1607 | - '2.16.840.1.101.2.1.1.17*' => 'suiteAKeyManagementAlgorithm', |
|
1608 | - '2.16.840.1.101.2.1.1.18*' => 'suiteAKMandSigAlgorithm', |
|
1609 | - '2.16.840.1.101.2.1.1.19*' => 'fortezzaUpdatedSigAlgorithm', |
|
1610 | - '2.16.840.1.101.2.1.1.20*' => 'fortezzaKMandUpdSigAlgorithms', |
|
1611 | - '2.16.840.1.101.2.1.1.21*' => 'fortezzaUpdatedIntegAlgorithm', |
|
1612 | - '2.16.840.1.101.2.1.1.22*' => 'keyExchangeAlgorithm', |
|
1613 | - '2.16.840.1.101.2.1.1.23*' => 'fortezzaWrap80Algorithm', |
|
1614 | - '2.16.840.1.101.2.1.1.24*' => 'kEAKeyEncryptionAlgorithm', |
|
1615 | - '2.16.840.1.101.2.1.2.1*' => 'rfc822MessageFormat', |
|
1616 | - '2.16.840.1.101.2.1.2.2*' => 'emptyContent', |
|
1617 | - '2.16.840.1.101.2.1.2.3*' => 'cspContentType', |
|
1618 | - '2.16.840.1.101.2.1.2.42*' => 'mspRev3ContentType', |
|
1619 | - '2.16.840.1.101.2.1.2.48*' => 'mspContentType', |
|
1620 | - '2.16.840.1.101.2.1.2.49*' => 'mspRekeyAgentProtocol', |
|
1621 | - '2.16.840.1.101.2.1.2.50*' => 'mspMMP', |
|
1622 | - '2.16.840.1.101.2.1.2.66*' => 'mspRev3-1ContentType', |
|
1623 | - '2.16.840.1.101.2.1.2.72*' => 'forwardedMSPMessageBodyPart', |
|
1624 | - '2.16.840.1.101.2.1.2.73*' => 'mspForwardedMessageParameters', |
|
1625 | - '2.16.840.1.101.2.1.2.74*' => 'forwardedCSPMsgBodyPart', |
|
1626 | - '2.16.840.1.101.2.1.2.75*' => 'cspForwardedMessageParameters', |
|
1627 | - '2.16.840.1.101.2.1.2.76*' => 'mspMMP2', |
|
1628 | - '2.16.840.1.101.2.1.3.1*' => 'sdnsSecurityPolicy', |
|
1629 | - '2.16.840.1.101.2.1.3.2*' => 'sdnsPRBAC', |
|
1630 | - '2.16.840.1.101.2.1.3.3*' => 'mosaicPRBAC', |
|
1631 | - '2.16.840.1.101.2.1.3.10*' => 'siSecurityPolicy', |
|
1632 | - '2.16.840.1.101.2.1.3.10.0*' => 'siNASP', |
|
1633 | - '2.16.840.1.101.2.1.3.10.1*' => 'siELCO', |
|
1634 | - '2.16.840.1.101.2.1.3.10.2*' => 'siTK', |
|
1635 | - '2.16.840.1.101.2.1.3.10.3*' => 'siDSAP', |
|
1636 | - '2.16.840.1.101.2.1.3.10.4*' => 'siSSSS', |
|
1637 | - '2.16.840.1.101.2.1.3.10.5*' => 'siDNASP', |
|
1638 | - '2.16.840.1.101.2.1.3.10.6*' => 'siBYEMAN', |
|
1639 | - '2.16.840.1.101.2.1.3.10.7*' => 'siREL-US', |
|
1640 | - '2.16.840.1.101.2.1.3.10.8*' => 'siREL-AUS', |
|
1641 | - '2.16.840.1.101.2.1.3.10.9*' => 'siREL-CAN', |
|
1642 | - '2.16.840.1.101.2.1.3.10.10*' => 'siREL_UK', |
|
1643 | - '2.16.840.1.101.2.1.3.10.11*' => 'siREL-NZ', |
|
1644 | - '2.16.840.1.101.2.1.3.10.12*' => 'siGeneric', |
|
1645 | - '2.16.840.1.101.2.1.3.11*' => 'genser', |
|
1646 | - '2.16.840.1.101.2.1.3.11.0*' => 'genserNations', |
|
1647 | - '2.16.840.1.101.2.1.3.11.1*' => 'genserComsec', |
|
1648 | - '2.16.840.1.101.2.1.3.11.2*' => 'genserAcquisition', |
|
1649 | - '2.16.840.1.101.2.1.3.11.3*' => 'genserSecurityCategories', |
|
1650 | - '2.16.840.1.101.2.1.3.11.3.0*' => 'genserTagSetName', |
|
1651 | - '2.16.840.1.101.2.1.3.12*' => 'defaultSecurityPolicy', |
|
1652 | - '2.16.840.1.101.2.1.3.13*' => 'capcoMarkings', |
|
1653 | - '2.16.840.1.101.2.1.3.13.0*' => 'capcoSecurityCategories', |
|
1654 | - '2.16.840.1.101.2.1.3.13.0.1*' => 'capcoTagSetName1', |
|
1655 | - '2.16.840.1.101.2.1.3.13.0.2*' => 'capcoTagSetName2', |
|
1656 | - '2.16.840.1.101.2.1.3.13.0.3*' => 'capcoTagSetName3', |
|
1657 | - '2.16.840.1.101.2.1.3.13.0.4*' => 'capcoTagSetName4', |
|
1658 | - '2.16.840.1.101.2.1.5.1*' => 'sdnsKeyManagementCertificate', |
|
1659 | - '2.16.840.1.101.2.1.5.2*' => 'sdnsUserSignatureCertificate', |
|
1660 | - '2.16.840.1.101.2.1.5.3*' => 'sdnsKMandSigCertificate', |
|
1661 | - '2.16.840.1.101.2.1.5.4*' => 'fortezzaKeyManagementCertificate', |
|
1662 | - '2.16.840.1.101.2.1.5.5*' => 'fortezzaKMandSigCertificate', |
|
1663 | - '2.16.840.1.101.2.1.5.6*' => 'fortezzaUserSignatureCertificate', |
|
1664 | - '2.16.840.1.101.2.1.5.7*' => 'fortezzaCASignatureCertificate', |
|
1665 | - '2.16.840.1.101.2.1.5.8*' => 'sdnsCASignatureCertificate', |
|
1666 | - '2.16.840.1.101.2.1.5.10*' => 'auxiliaryVector', |
|
1667 | - '2.16.840.1.101.2.1.5.11*' => 'mlReceiptPolicy', |
|
1668 | - '2.16.840.1.101.2.1.5.12*' => 'mlMembership', |
|
1669 | - '2.16.840.1.101.2.1.5.13*' => 'mlAdministrators', |
|
1670 | - '2.16.840.1.101.2.1.5.14*' => 'alid', |
|
1671 | - '2.16.840.1.101.2.1.5.20*' => 'janUKMs', |
|
1672 | - '2.16.840.1.101.2.1.5.21*' => 'febUKMs', |
|
1673 | - '2.16.840.1.101.2.1.5.22*' => 'marUKMs', |
|
1674 | - '2.16.840.1.101.2.1.5.23*' => 'aprUKMs', |
|
1675 | - '2.16.840.1.101.2.1.5.24*' => 'mayUKMs', |
|
1676 | - '2.16.840.1.101.2.1.5.25*' => 'junUKMs', |
|
1677 | - '2.16.840.1.101.2.1.5.26*' => 'julUKMs', |
|
1678 | - '2.16.840.1.101.2.1.5.27*' => 'augUKMs', |
|
1679 | - '2.16.840.1.101.2.1.5.28*' => 'sepUKMs', |
|
1680 | - '2.16.840.1.101.2.1.5.29*' => 'octUKMs', |
|
1681 | - '2.16.840.1.101.2.1.5.30*' => 'novUKMs', |
|
1682 | - '2.16.840.1.101.2.1.5.31*' => 'decUKMs', |
|
1683 | - '2.16.840.1.101.2.1.5.40*' => 'metaSDNSckl', |
|
1684 | - '2.16.840.1.101.2.1.5.41*' => 'sdnsCKL', |
|
1685 | - '2.16.840.1.101.2.1.5.42*' => 'metaSDNSsignatureCKL', |
|
1686 | - '2.16.840.1.101.2.1.5.43*' => 'sdnsSignatureCKL', |
|
1687 | - '2.16.840.1.101.2.1.5.44*' => 'sdnsCertificateRevocationList', |
|
1688 | - '2.16.840.1.101.2.1.5.45*' => 'fortezzaCertificateRevocationList', |
|
1689 | - '2.16.840.1.101.2.1.5.46*' => 'fortezzaCKL', |
|
1690 | - '2.16.840.1.101.2.1.5.47*' => 'alExemptedAddressProcessor', |
|
1691 | - '2.16.840.1.101.2.1.5.48*' => 'guard', |
|
1692 | - '2.16.840.1.101.2.1.5.49*' => 'algorithmsSupported', |
|
1693 | - '2.16.840.1.101.2.1.5.50*' => 'suiteAKeyManagementCertificate', |
|
1694 | - '2.16.840.1.101.2.1.5.51*' => 'suiteAKMandSigCertificate', |
|
1695 | - '2.16.840.1.101.2.1.5.52*' => 'suiteAUserSignatureCertificate', |
|
1696 | - '2.16.840.1.101.2.1.5.53*' => 'prbacInfo', |
|
1697 | - '2.16.840.1.101.2.1.5.54*' => 'prbacCAConstraints', |
|
1698 | - '2.16.840.1.101.2.1.5.55*' => 'sigOrKMPrivileges', |
|
1699 | - '2.16.840.1.101.2.1.5.56*' => 'commPrivileges', |
|
1700 | - '2.16.840.1.101.2.1.5.57*' => 'labeledAttribute', |
|
1701 | - '2.16.840.1.101.2.1.5.58*' => 'policyInformationFile', |
|
1702 | - '2.16.840.1.101.2.1.5.59*' => 'secPolicyInformationFile', |
|
1703 | - '2.16.840.1.101.2.1.5.60*' => 'cAClearanceConstraint', |
|
1704 | - '2.16.840.1.101.2.1.7.1*' => 'cspExtns', |
|
1705 | - '2.16.840.1.101.2.1.7.1.0*' => 'cspCsExtn', |
|
1706 | - '2.16.840.1.101.2.1.8.1*' => 'mISSISecurityCategories', |
|
1707 | - '2.16.840.1.101.2.1.8.2*' => 'standardSecurityLabelPrivileges', |
|
1708 | - '2.16.840.1.101.2.1.10.1*' => 'sigPrivileges', |
|
1709 | - '2.16.840.1.101.2.1.10.2*' => 'kmPrivileges', |
|
1710 | - '2.16.840.1.101.2.1.10.3*' => 'namedTagSetPrivilege', |
|
1711 | - '2.16.840.1.101.2.1.11.1*' => 'ukDemo', |
|
1712 | - '2.16.840.1.101.2.1.11.2*' => 'usDODClass2', |
|
1713 | - '2.16.840.1.101.2.1.11.3*' => 'usMediumPilot', |
|
1714 | - '2.16.840.1.101.2.1.11.4*' => 'usDODClass4', |
|
1715 | - '2.16.840.1.101.2.1.11.5*' => 'usDODClass3', |
|
1716 | - '2.16.840.1.101.2.1.11.6*' => 'usDODClass5', |
|
1717 | - '2.16.840.1.101.2.1.12.0*' => 'testSecurityPolicy', |
|
1718 | - '2.16.840.1.101.2.1.12.0.1*' => 'tsp1', |
|
1719 | - '2.16.840.1.101.2.1.12.0.1.0*' => 'tsp1SecurityCategories', |
|
1720 | - '2.16.840.1.101.2.1.12.0.1.0.0*' => 'tsp1TagSetZero', |
|
1721 | - '2.16.840.1.101.2.1.12.0.1.0.1*' => 'tsp1TagSetOne', |
|
1722 | - '2.16.840.1.101.2.1.12.0.1.0.2*' => 'tsp1TagSetTwo', |
|
1723 | - '2.16.840.1.101.2.1.12.0.2*' => 'tsp2', |
|
1724 | - '2.16.840.1.101.2.1.12.0.2.0*' => 'tsp2SecurityCategories', |
|
1725 | - '2.16.840.1.101.2.1.12.0.2.0.0*' => 'tsp2TagSetZero', |
|
1726 | - '2.16.840.1.101.2.1.12.0.2.0.1*' => 'tsp2TagSetOne', |
|
1727 | - '2.16.840.1.101.2.1.12.0.2.0.2*' => 'tsp2TagSetTwo', |
|
1728 | - '2.16.840.1.101.2.1.12.0.3*' => 'kafka', |
|
1729 | - '2.16.840.1.101.2.1.12.0.3.0*' => 'kafkaSecurityCategories', |
|
1730 | - '2.16.840.1.101.2.1.12.0.3.0.1*' => 'kafkaTagSetName1', |
|
1731 | - '2.16.840.1.101.2.1.12.0.3.0.2*' => 'kafkaTagSetName2', |
|
1732 | - '2.16.840.1.101.2.1.12.0.3.0.3*' => 'kafkaTagSetName3', |
|
1733 | - '2.16.840.1.101.2.1.12.1.1*' => 'tcp1', |
|
1734 | - '2.16.840.1.101.3.1*' => 'slabel', |
|
1735 | - '2.16.840.1.101.3.2*' => 'pki', |
|
1736 | - '2.16.840.1.101.3.2.1*' => 'NIST policyIdentifier', |
|
1737 | - '2.16.840.1.101.3.2.1.3.1*' => 'fbcaRudimentaryPolicy', |
|
1738 | - '2.16.840.1.101.3.2.1.3.2*' => 'fbcaBasicPolicy', |
|
1739 | - '2.16.840.1.101.3.2.1.3.3*' => 'fbcaMediumPolicy', |
|
1740 | - '2.16.840.1.101.3.2.1.3.4*' => 'fbcaHighPolicy', |
|
1741 | - '2.16.840.1.101.3.2.1.48.1*' => 'nistTestPolicy1', |
|
1742 | - '2.16.840.1.101.3.2.1.48.2*' => 'nistTestPolicy2', |
|
1743 | - '2.16.840.1.101.3.2.1.48.3*' => 'nistTestPolicy3', |
|
1744 | - '2.16.840.1.101.3.2.1.48.4*' => 'nistTestPolicy4', |
|
1745 | - '2.16.840.1.101.3.2.1.48.5*' => 'nistTestPolicy5', |
|
1746 | - '2.16.840.1.101.3.2.1.48.6*' => 'nistTestPolicy6', |
|
1747 | - '2.16.840.1.101.3.2.2*' => 'gak', |
|
1748 | - '2.16.840.1.101.3.2.2.1*' => 'kRAKey', |
|
1749 | - '2.16.840.1.101.3.2.3*' => 'extensions', |
|
1750 | - '2.16.840.1.101.3.2.3.1*' => 'kRTechnique', |
|
1751 | - '2.16.840.1.101.3.2.3.2*' => 'kRecoveryCapable', |
|
1752 | - '2.16.840.1.101.3.2.3.3*' => 'kR', |
|
1753 | - '2.16.840.1.101.3.2.4*' => 'keyRecoverySchemes', |
|
1754 | - '2.16.840.1.101.3.2.5*' => 'krapola', |
|
1755 | - '2.16.840.1.101.3.3*' => 'arpa', |
|
1756 | - '2.16.840.1.101.3.4*' => 'nistAlgorithm', |
|
1757 | - '2.16.840.1.101.3.4.1*' => 'aes', |
|
1758 | - '2.16.840.1.101.3.4.1.1*' => 'aes128-ECB', |
|
1759 | - '2.16.840.1.101.3.4.1.2*' => 'aes128-CBC', |
|
1760 | - '2.16.840.1.101.3.4.1.3*' => 'aes128-OFB', |
|
1761 | - '2.16.840.1.101.3.4.1.4*' => 'aes128-CFB', |
|
1762 | - '2.16.840.1.101.3.4.1.5*' => 'aes128-wrap', |
|
1763 | - '2.16.840.1.101.3.4.1.6*' => 'aes128-GCM', |
|
1764 | - '2.16.840.1.101.3.4.1.7*' => 'aes128-CCM', |
|
1765 | - '2.16.840.1.101.3.4.1.8*' => 'aes128-wrap-pad', |
|
1766 | - '2.16.840.1.101.3.4.1.21*' => 'aes192-ECB', |
|
1767 | - '2.16.840.1.101.3.4.1.22*' => 'aes192-CBC', |
|
1768 | - '2.16.840.1.101.3.4.1.23*' => 'aes192-OFB', |
|
1769 | - '2.16.840.1.101.3.4.1.24*' => 'aes192-CFB', |
|
1770 | - '2.16.840.1.101.3.4.1.25*' => 'aes192-wrap', |
|
1771 | - '2.16.840.1.101.3.4.1.26*' => 'aes192-GCM', |
|
1772 | - '2.16.840.1.101.3.4.1.27*' => 'aes192-CCM', |
|
1773 | - '2.16.840.1.101.3.4.1.28*' => 'aes192-wrap-pad', |
|
1774 | - '2.16.840.1.101.3.4.1.41*' => 'aes256-ECB', |
|
1775 | - '2.16.840.1.101.3.4.1.42*' => 'aes256-CBC', |
|
1776 | - '2.16.840.1.101.3.4.1.43*' => 'aes256-OFB', |
|
1777 | - '2.16.840.1.101.3.4.1.44*' => 'aes256-CFB', |
|
1778 | - '2.16.840.1.101.3.4.1.45*' => 'aes256-wrap', |
|
1779 | - '2.16.840.1.101.3.4.1.46*' => 'aes256-GCM', |
|
1780 | - '2.16.840.1.101.3.4.1.47*' => 'aes256-CCM', |
|
1781 | - '2.16.840.1.101.3.4.1.48*' => 'aes256-wrap-pad', |
|
1782 | - '2.16.840.1.101.3.4.2*' => 'hashAlgos', |
|
1783 | - '2.16.840.1.101.3.4.2.1*' => 'sha-256', |
|
1784 | - '2.16.840.1.101.3.4.2.2*' => 'sha-384', |
|
1785 | - '2.16.840.1.101.3.4.2.3*' => 'sha-512', |
|
1786 | - '2.16.840.1.101.3.4.2.4*' => 'sha-224', |
|
1787 | - '2.16.840.1.101.3.4.3.1*' => 'dsaWithSha224', |
|
1788 | - '2.16.840.1.101.3.4.3.2*' => 'dsaWithSha256', |
|
1789 | - '2.16.840.1.113719.1.2.8*' => 'novellAlgorithm', |
|
1790 | - '2.16.840.1.113719.1.2.8.22*' => 'desCbcIV8', |
|
1791 | - '2.16.840.1.113719.1.2.8.23*' => 'desCbcPadIV8', |
|
1792 | - '2.16.840.1.113719.1.2.8.24*' => 'desEDE2CbcIV8', |
|
1793 | - '2.16.840.1.113719.1.2.8.25*' => 'desEDE2CbcPadIV8', |
|
1794 | - '2.16.840.1.113719.1.2.8.26*' => 'desEDE3CbcIV8', |
|
1795 | - '2.16.840.1.113719.1.2.8.27*' => 'desEDE3CbcPadIV8', |
|
1796 | - '2.16.840.1.113719.1.2.8.28*' => 'rc5CbcPad', |
|
1797 | - '2.16.840.1.113719.1.2.8.29*' => 'md2WithRSAEncryptionBSafe1', |
|
1798 | - '2.16.840.1.113719.1.2.8.30*' => 'md5WithRSAEncryptionBSafe1', |
|
1799 | - '2.16.840.1.113719.1.2.8.31*' => 'sha1WithRSAEncryptionBSafe1', |
|
1800 | - '2.16.840.1.113719.1.2.8.32*' => 'lmDigest', |
|
1801 | - '2.16.840.1.113719.1.2.8.40*' => 'md2', |
|
1802 | - '2.16.840.1.113719.1.2.8.50*' => 'md5', |
|
1803 | - '2.16.840.1.113719.1.2.8.51*' => 'ikeHmacWithSHA1-RSA', |
|
1804 | - '2.16.840.1.113719.1.2.8.52*' => 'ikeHmacWithMD5-RSA', |
|
1805 | - '2.16.840.1.113719.1.2.8.69*' => 'rc2CbcPad', |
|
1806 | - '2.16.840.1.113719.1.2.8.82*' => 'sha-1', |
|
1807 | - '2.16.840.1.113719.1.2.8.92*' => 'rc2BSafe1Cbc', |
|
1808 | - '2.16.840.1.113719.1.2.8.95*' => 'md4', |
|
1809 | - '2.16.840.1.113719.1.2.8.130*' => 'md4Packet', |
|
1810 | - '2.16.840.1.113719.1.2.8.131*' => 'rsaEncryptionBsafe1', |
|
1811 | - '2.16.840.1.113719.1.2.8.132*' => 'nwPassword', |
|
1812 | - '2.16.840.1.113719.1.2.8.133*' => 'novellObfuscate-1', |
|
1813 | - '2.16.840.1.113719.1.9*' => 'pki', |
|
1814 | - '2.16.840.1.113719.1.9.4*' => 'pkiAttributeType', |
|
1815 | - '2.16.840.1.113719.1.9.4.1*' => 'securityAttributes', |
|
1816 | - '2.16.840.1.113719.1.9.4.2*' => 'relianceLimit', |
|
1817 | - '2.16.840.1.113730.1*' => 'cert-extension', |
|
1818 | - '2.16.840.1.113730.1.1*' => 'netscape-cert-type', |
|
1819 | - '2.16.840.1.113730.1.2*' => 'netscape-base-url', |
|
1820 | - '2.16.840.1.113730.1.3*' => 'netscape-revocation-url', |
|
1821 | - '2.16.840.1.113730.1.4*' => 'netscape-ca-revocation-url', |
|
1822 | - '2.16.840.1.113730.1.7*' => 'netscape-cert-renewal-url', |
|
1823 | - '2.16.840.1.113730.1.8*' => 'netscape-ca-policy-url', |
|
1824 | - '2.16.840.1.113730.1.9*' => 'HomePage-url', |
|
1825 | - '2.16.840.1.113730.1.10*' => 'EntityLogo', |
|
1826 | - '2.16.840.1.113730.1.11*' => 'UserPicture', |
|
1827 | - '2.16.840.1.113730.1.12*' => 'netscape-ssl-server-name', |
|
1828 | - '2.16.840.1.113730.1.13*' => 'netscape-comment', |
|
1829 | - '2.16.840.1.113730.2*' => 'data-type', |
|
1830 | - '2.16.840.1.113730.2.1*' => 'dataGIF', |
|
1831 | - '2.16.840.1.113730.2.2*' => 'dataJPEG', |
|
1832 | - '2.16.840.1.113730.2.3*' => 'dataURL', |
|
1833 | - '2.16.840.1.113730.2.4*' => 'dataHTML', |
|
1834 | - '2.16.840.1.113730.2.5*' => 'certSequence', |
|
1835 | - '2.16.840.1.113730.2.6*' => 'certURL', |
|
1836 | - '2.16.840.1.113730.3*' => 'directory', |
|
1837 | - '2.16.840.1.113730.3.1*' => 'ldapDefinitions', |
|
1838 | - '2.16.840.1.113730.3.1.1*' => 'carLicense', |
|
1839 | - '2.16.840.1.113730.3.1.2*' => 'departmentNumber', |
|
1840 | - '2.16.840.1.113730.3.1.3*' => 'employeeNumber', |
|
1841 | - '2.16.840.1.113730.3.1.4*' => 'employeeType', |
|
1842 | - '2.16.840.1.113730.3.2.2*' => 'inetOrgPerson', |
|
1843 | - '2.16.840.1.113730.4.1*' => 'serverGatedCrypto', |
|
1844 | - '2.16.840.1.113733.1.6.3*' => 'verisignCZAG', |
|
1845 | - '2.16.840.1.113733.1.6.6*' => 'verisignInBox', |
|
1846 | - '2.16.840.1.113733.1.6.11*' => 'verisignOnsiteJurisdictionHash', |
|
1847 | - '2.16.840.1.113733.1.6.13*' => 'Unknown Verisign VPN extension', |
|
1848 | - '2.16.840.1.113733.1.6.15*' => 'verisignServerID', |
|
1849 | - '2.16.840.1.113733.1.7.1.1*' => 'verisignCertPolicies95Qualifier1', |
|
1850 | - '2.16.840.1.113733.1.7.1.1.1*' => 'verisignCPSv1notice', |
|
1851 | - '2.16.840.1.113733.1.7.1.1.2*' => 'verisignCPSv1nsi', |
|
1852 | - '2.16.840.1.113733.1.7.23.6*' => 'VeriSign EV policy', |
|
1853 | - '2.16.840.1.113733.1.8.1*' => 'verisignISSStrongCrypto', |
|
1854 | - '2.16.840.1.113733.1*' => 'pki', |
|
1855 | - '2.16.840.1.113733.1.9*' => 'pkcs7Attribute', |
|
1856 | - '2.16.840.1.113733.1.9.2*' => 'messageType', |
|
1857 | - '2.16.840.1.113733.1.9.3*' => 'pkiStatus', |
|
1858 | - '2.16.840.1.113733.1.9.4*' => 'failInfo', |
|
1859 | - '2.16.840.1.113733.1.9.5*' => 'senderNonce', |
|
1860 | - '2.16.840.1.113733.1.9.6*' => 'recipientNonce', |
|
1861 | - '2.16.840.1.113733.1.9.7*' => 'transID', |
|
1862 | - '2.16.840.1.113733.1.9.8*' => 'extensionReq', |
|
1863 | - '2.16.840.1.114412.1.3.0.1*' => 'digiCertGlobalCAPolicy', |
|
1864 | - '2.16.840.1.114412.1.3.0.2*' => 'digiCertHighAssuranceEVCAPolicy', |
|
1865 | - '2.16.840.1.114412.1.3.0.3*' => 'digiCertGlobalRootCAPolicy', |
|
1866 | - '2.16.840.1.114412.1.3.0.4*' => 'digiCertAssuredIDRootCAPolicy', |
|
1867 | - '2.23.42.0*' => 'contentType', |
|
1868 | - '2.23.42.0.0*' => 'panData', |
|
1869 | - '2.23.42.0.1*' => 'panToken', |
|
1870 | - '2.23.42.0.2*' => 'panOnly', |
|
1871 | - '2.23.42.1*' => 'msgExt', |
|
1872 | - '2.23.42.2*' => 'field', |
|
1873 | - '2.23.42.2.0*' => 'fullName', |
|
1874 | - '2.23.42.2.1*' => 'givenName', |
|
1875 | - '2.23.42.2.2*' => 'familyName', |
|
1876 | - '2.23.42.2.3*' => 'birthFamilyName', |
|
1877 | - '2.23.42.2.4*' => 'placeName', |
|
1878 | - '2.23.42.2.5*' => 'identificationNumber', |
|
1879 | - '2.23.42.2.6*' => 'month', |
|
1880 | - '2.23.42.2.7*' => 'date', |
|
1881 | - '2.23.42.2.8*' => 'address', |
|
1882 | - '2.23.42.2.9*' => 'telephone', |
|
1883 | - '2.23.42.2.10*' => 'amount', |
|
1884 | - '2.23.42.2.11*' => 'accountNumber', |
|
1885 | - '2.23.42.2.12*' => 'passPhrase', |
|
1886 | - '2.23.42.3*' => 'attribute', |
|
1887 | - '2.23.42.3.0*' => 'cert', |
|
1888 | - '2.23.42.3.0.0*' => 'rootKeyThumb', |
|
1889 | - '2.23.42.3.0.1*' => 'additionalPolicy', |
|
1890 | - '2.23.42.4*' => 'algorithm', |
|
1891 | - '2.23.42.5*' => 'policy', |
|
1892 | - '2.23.42.5.0*' => 'root', |
|
1893 | - '2.23.42.6*' => 'module', |
|
1894 | - '2.23.42.7*' => 'certExt', |
|
1895 | - '2.23.42.7.0*' => 'hashedRootKey', |
|
1896 | - '2.23.42.7.1*' => 'certificateType', |
|
1897 | - '2.23.42.7.2*' => 'merchantData', |
|
1898 | - '2.23.42.7.3*' => 'cardCertRequired', |
|
1899 | - '2.23.42.7.4*' => 'tunneling', |
|
1900 | - '2.23.42.7.5*' => 'setExtensions', |
|
1901 | - '2.23.42.7.6*' => 'setQualifier', |
|
1902 | - '2.23.42.8*' => 'brand', |
|
1903 | - '2.23.42.8.1*' => 'IATA-ATA', |
|
1904 | - '2.23.42.8.4*' => 'VISA', |
|
1905 | - '2.23.42.8.5*' => 'MasterCard', |
|
1906 | - '2.23.42.8.30*' => 'Diners', |
|
1907 | - '2.23.42.8.34*' => 'AmericanExpress', |
|
1908 | - '2.23.42.8.6011*' => 'Novus', |
|
1909 | - '2.23.42.9*' => 'vendor', |
|
1910 | - '2.23.42.9.0*' => 'GlobeSet', |
|
1911 | - '2.23.42.9.1*' => 'IBM', |
|
1912 | - '2.23.42.9.2*' => 'CyberCash', |
|
1913 | - '2.23.42.9.3*' => 'Terisa', |
|
1914 | - '2.23.42.9.4*' => 'RSADSI', |
|
1915 | - '2.23.42.9.5*' => 'VeriFone', |
|
1916 | - '2.23.42.9.6*' => 'TrinTech', |
|
1917 | - '2.23.42.9.7*' => 'BankGate', |
|
1918 | - '2.23.42.9.8*' => 'GTE', |
|
1919 | - '2.23.42.9.9*' => 'CompuSource', |
|
1920 | - '2.23.42.9.10*' => 'Griffin', |
|
1921 | - '2.23.42.9.11*' => 'Certicom', |
|
1922 | - '2.23.42.9.12*' => 'OSS', |
|
1923 | - '2.23.42.9.13*' => 'TenthMountain', |
|
1924 | - '2.23.42.9.14*' => 'Antares', |
|
1925 | - '2.23.42.9.15*' => 'ECC', |
|
1926 | - '2.23.42.9.16*' => 'Maithean', |
|
1927 | - '2.23.42.9.17*' => 'Netscape', |
|
1928 | - '2.23.42.9.18*' => 'Verisign', |
|
1929 | - '2.23.42.9.19*' => 'BlueMoney', |
|
1930 | - '2.23.42.9.20*' => 'Lacerte', |
|
1931 | - '2.23.42.9.21*' => 'Fujitsu', |
|
1932 | - '2.23.42.9.22*' => 'eLab', |
|
1933 | - '2.23.42.9.23*' => 'Entrust', |
|
1934 | - '2.23.42.9.24*' => 'VIAnet', |
|
1935 | - '2.23.42.9.25*' => 'III', |
|
1936 | - '2.23.42.9.26*' => 'OpenMarket', |
|
1937 | - '2.23.42.9.27*' => 'Lexem', |
|
1938 | - '2.23.42.9.28*' => 'Intertrader', |
|
1939 | - '2.23.42.9.29*' => 'Persimmon', |
|
1940 | - '2.23.42.9.30*' => 'NABLE', |
|
1941 | - '2.23.42.9.31*' => 'espace-net', |
|
1942 | - '2.23.42.9.32*' => 'Hitachi', |
|
1943 | - '2.23.42.9.33*' => 'Microsoft', |
|
1944 | - '2.23.42.9.34*' => 'NEC', |
|
1945 | - '2.23.42.9.35*' => 'Mitsubishi', |
|
1946 | - '2.23.42.9.36*' => 'NCR', |
|
1947 | - '2.23.42.9.37*' => 'e-COMM', |
|
1948 | - '2.23.42.9.38*' => 'Gemplus', |
|
1949 | - '2.23.42.10*' => 'national', |
|
1950 | - '2.23.42.10.392*' => 'Japan', |
|
1951 | - '2.23.136.1.1.1*' => 'mRTDSignatureData', |
|
1952 | - '2.54.1775.2*' => 'hashedRootKey', |
|
1953 | - '2.54.1775.3*' => 'certificateType', |
|
1954 | - '2.54.1775.4*' => 'merchantData', |
|
1955 | - '2.54.1775.5*' => 'cardCertRequired', |
|
1956 | - '2.54.1775.6*' => 'tunneling', |
|
1957 | - '2.54.1775.7*' => 'setQualifier', |
|
1958 | - '2.54.1775.99*' => 'setData', |
|
1959 | - '1.3.6.1.4.1.6449.1.2.1.5.1*' => 'UTN-USERFirst EV policy', |
|
1960 | - '1.3.6.1.4.1.34697.2.1*' => 'AffirmTrust EV policy', |
|
1961 | - '1.3.6.1.4.1.34697.2.2*' => 'AffirmTrust EV policy', |
|
1962 | - '1.3.6.1.4.1.34697.2.3*' => 'AffirmTrust EV policy', |
|
1963 | - '1.3.6.1.4.1.34697.2.4*' => 'AffirmTrust EV policy', |
|
1964 | - '1.3.6.1.4.1.22234.2.5.2.3.1*' => 'CertPlus EV policy', |
|
1965 | - '1.3.6.1.4.1.6334.1.100.1*' => 'GTE CyberTrust EV policy', |
|
1966 | - '2.16.840.1.114412.2.1*' => 'DigiCert EV policy', |
|
1967 | - '2.16.528.1.1001.1.1.1.12.6.1.1.1*' => 'DigiNotar EV policy', |
|
1968 | - '2.16.840.1.114028.10.1.2*' => 'Entrust EV policy', |
|
1969 | - '1.3.6.1.4.1.14370.1.6*' => 'GeoTrust EV policy', |
|
1970 | - '1.3.6.1.4.1.4146.1.1*' => 'GlobalSign EV policy', |
|
1971 | - '2.16.840.1.114413.1.7.23.3*' => 'ValiCert EV policy', |
|
1972 | - '1.3.6.1.4.1.782.1.2.1.8.1*' => 'Network Solutions EV policy', |
|
1973 | - '1.3.6.1.4.1.8024.0.2.100.1.2*' => 'QuoVadis EV policy', |
|
1974 | - '2.16.840.1.114404.1.1.2.4.1*' => 'Secure Global EV policy', |
|
1975 | - '1.2.392.200091.100.721.1*' => 'Security Communication EV policy', |
|
1976 | - '1.3.6.1.4.1.23223.1.1.1*' => 'StartCom EV policy', |
|
1977 | - '2.16.840.1.114414.1.7.23.3*' => 'Starfield EV policy', |
|
1978 | - '2.16.756.1.89.1.2.1.1*' => 'SwissSign EV policy', |
|
1979 | - '2.16.840.1.113733.1.7.48.1*' => 'Thawte EV policy', |
|
1980 | - '2.16.840.1.114171.500.9*' => 'Wells Fargo EV policy', |
|
1981 | - ]; |
|
23 | + public $oids = [ |
|
24 | + '0.2.262.1.10*' => 'Telesec', |
|
25 | + '0.2.262.1.10.0*' => 'extension', |
|
26 | + '0.2.262.1.10.1*' => 'mechanism', |
|
27 | + '0.2.262.1.10.1.0*' => 'authentication', |
|
28 | + '0.2.262.1.10.1.0.1*' => 'passwordAuthentication', |
|
29 | + '0.2.262.1.10.1.0.2*' => 'protectedPasswordAuthentication', |
|
30 | + '0.2.262.1.10.1.0.3*' => 'oneWayX509Authentication', |
|
31 | + '0.2.262.1.10.1.0.4*' => 'twoWayX509Authentication', |
|
32 | + '0.2.262.1.10.1.0.5*' => 'threeWayX509Authentication', |
|
33 | + '0.2.262.1.10.1.0.6*' => 'oneWayISO9798Authentication', |
|
34 | + '0.2.262.1.10.1.0.7*' => 'twoWayISO9798Authentication', |
|
35 | + '0.2.262.1.10.1.0.8*' => 'telekomAuthentication', |
|
36 | + '0.2.262.1.10.1.1*' => 'signature', |
|
37 | + '0.2.262.1.10.1.1.1*' => 'md4WithRSAAndISO9697', |
|
38 | + '0.2.262.1.10.1.1.2*' => 'md4WithRSAAndTelesecSignatureStandard', |
|
39 | + '0.2.262.1.10.1.1.3*' => 'md5WithRSAAndISO9697', |
|
40 | + '0.2.262.1.10.1.1.4*' => 'md5WithRSAAndTelesecSignatureStandard', |
|
41 | + '0.2.262.1.10.1.1.5*' => 'ripemd160WithRSAAndTelekomSignatureStandard', |
|
42 | + '0.2.262.1.10.1.1.9*' => 'hbciRsaSignature', |
|
43 | + '0.2.262.1.10.1.2*' => 'encryption', |
|
44 | + '0.2.262.1.10.1.2.0*' => 'none', |
|
45 | + '0.2.262.1.10.1.2.1*' => 'rsaTelesec', |
|
46 | + '0.2.262.1.10.1.2.2*' => 'des', |
|
47 | + '0.2.262.1.10.1.2.2.1*' => 'desECB', |
|
48 | + '0.2.262.1.10.1.2.2.2*' => 'desCBC', |
|
49 | + '0.2.262.1.10.1.2.2.3*' => 'desOFB', |
|
50 | + '0.2.262.1.10.1.2.2.4*' => 'desCFB8', |
|
51 | + '0.2.262.1.10.1.2.2.5*' => 'desCFB64', |
|
52 | + '0.2.262.1.10.1.2.3*' => 'des3', |
|
53 | + '0.2.262.1.10.1.2.3.1*' => 'des3ECB', |
|
54 | + '0.2.262.1.10.1.2.3.2*' => 'des3CBC', |
|
55 | + '0.2.262.1.10.1.2.3.3*' => 'des3OFB', |
|
56 | + '0.2.262.1.10.1.2.3.4*' => 'des3CFB8', |
|
57 | + '0.2.262.1.10.1.2.3.5*' => 'des3CFB64', |
|
58 | + '0.2.262.1.10.1.2.4*' => 'magenta', |
|
59 | + '0.2.262.1.10.1.2.5*' => 'idea', |
|
60 | + '0.2.262.1.10.1.2.5.1*' => 'ideaECB', |
|
61 | + '0.2.262.1.10.1.2.5.2*' => 'ideaCBC', |
|
62 | + '0.2.262.1.10.1.2.5.3*' => 'ideaOFB', |
|
63 | + '0.2.262.1.10.1.2.5.4*' => 'ideaCFB8', |
|
64 | + '0.2.262.1.10.1.2.5.5*' => 'ideaCFB64', |
|
65 | + '0.2.262.1.10.1.3*' => 'oneWayFunction', |
|
66 | + '0.2.262.1.10.1.3.1*' => 'md4', |
|
67 | + '0.2.262.1.10.1.3.2*' => 'md5', |
|
68 | + '0.2.262.1.10.1.3.3*' => 'sqModNX509', |
|
69 | + '0.2.262.1.10.1.3.4*' => 'sqModNISO', |
|
70 | + '0.2.262.1.10.1.3.5*' => 'ripemd128', |
|
71 | + '0.2.262.1.10.1.3.6*' => 'hashUsingBlockCipher', |
|
72 | + '0.2.262.1.10.1.3.7*' => 'mac', |
|
73 | + '0.2.262.1.10.1.3.8*' => 'ripemd160', |
|
74 | + '0.2.262.1.10.1.4*' => 'fecFunction', |
|
75 | + '0.2.262.1.10.1.4.1*' => 'reedSolomon', |
|
76 | + '0.2.262.1.10.2*' => 'module', |
|
77 | + '0.2.262.1.10.2.0*' => 'algorithms', |
|
78 | + '0.2.262.1.10.2.1*' => 'attributeTypes', |
|
79 | + '0.2.262.1.10.2.2*' => 'certificateTypes', |
|
80 | + '0.2.262.1.10.2.3*' => 'messageTypes', |
|
81 | + '0.2.262.1.10.2.4*' => 'plProtocol', |
|
82 | + '0.2.262.1.10.2.5*' => 'smeAndComponentsOfSme', |
|
83 | + '0.2.262.1.10.2.6*' => 'fec', |
|
84 | + '0.2.262.1.10.2.7*' => 'usefulDefinitions', |
|
85 | + '0.2.262.1.10.2.8*' => 'stefiles', |
|
86 | + '0.2.262.1.10.2.9*' => 'sadmib', |
|
87 | + '0.2.262.1.10.2.10*' => 'electronicOrder', |
|
88 | + '0.2.262.1.10.2.11*' => 'telesecTtpAsymmetricApplication', |
|
89 | + '0.2.262.1.10.2.12*' => 'telesecTtpBasisApplication', |
|
90 | + '0.2.262.1.10.2.13*' => 'telesecTtpMessages', |
|
91 | + '0.2.262.1.10.2.14*' => 'telesecTtpTimeStampApplication', |
|
92 | + '0.2.262.1.10.3*' => 'objectClass', |
|
93 | + '0.2.262.1.10.3.0*' => 'telesecOtherName', |
|
94 | + '0.2.262.1.10.3.1*' => 'directory', |
|
95 | + '0.2.262.1.10.3.2*' => 'directoryType', |
|
96 | + '0.2.262.1.10.3.3*' => 'directoryGroup', |
|
97 | + '0.2.262.1.10.3.4*' => 'directoryUser', |
|
98 | + '0.2.262.1.10.3.5*' => 'symmetricKeyEntry', |
|
99 | + '0.2.262.1.10.4*' => 'package', |
|
100 | + '0.2.262.1.10.5*' => 'parameter', |
|
101 | + '0.2.262.1.10.6*' => 'nameBinding', |
|
102 | + '0.2.262.1.10.7*' => 'attribute', |
|
103 | + '0.2.262.1.10.7.0*' => 'applicationGroupIdentifier', |
|
104 | + '0.2.262.1.10.7.1*' => 'certificateType', |
|
105 | + '0.2.262.1.10.7.2*' => 'telesecCertificate', |
|
106 | + '0.2.262.1.10.7.3*' => 'certificateNumber', |
|
107 | + '0.2.262.1.10.7.4*' => 'certificateRevocationList', |
|
108 | + '0.2.262.1.10.7.5*' => 'creationDate', |
|
109 | + '0.2.262.1.10.7.6*' => 'issuer', |
|
110 | + '0.2.262.1.10.7.7*' => 'namingAuthority', |
|
111 | + '0.2.262.1.10.7.8*' => 'publicKeyDirectory', |
|
112 | + '0.2.262.1.10.7.9*' => 'securityDomain', |
|
113 | + '0.2.262.1.10.7.10*' => 'subject', |
|
114 | + '0.2.262.1.10.7.11*' => 'timeOfRevocation', |
|
115 | + '0.2.262.1.10.7.12*' => 'userGroupReference', |
|
116 | + '0.2.262.1.10.7.13*' => 'validity', |
|
117 | + '0.2.262.1.10.7.14*' => 'zert93', |
|
118 | + '0.2.262.1.10.7.15*' => 'securityMessEnv', |
|
119 | + '0.2.262.1.10.7.16*' => 'anonymizedPublicKeyDirectory', |
|
120 | + '0.2.262.1.10.7.17*' => 'telesecGivenName', |
|
121 | + '0.2.262.1.10.7.18*' => 'nameAdditions', |
|
122 | + '0.2.262.1.10.7.19*' => 'telesecPostalCode', |
|
123 | + '0.2.262.1.10.7.20*' => 'nameDistinguisher', |
|
124 | + '0.2.262.1.10.7.21*' => 'telesecCertificateList', |
|
125 | + '0.2.262.1.10.7.22*' => 'teletrustCertificateList', |
|
126 | + '0.2.262.1.10.7.23*' => 'x509CertificateList', |
|
127 | + '0.2.262.1.10.7.24*' => 'timeOfIssue', |
|
128 | + '0.2.262.1.10.7.25*' => 'physicalCardNumber', |
|
129 | + '0.2.262.1.10.7.26*' => 'fileType', |
|
130 | + '0.2.262.1.10.7.27*' => 'ctlFileIsArchive', |
|
131 | + '0.2.262.1.10.7.28*' => 'emailAddress', |
|
132 | + '0.2.262.1.10.7.29*' => 'certificateTemplateList', |
|
133 | + '0.2.262.1.10.7.30*' => 'directoryName', |
|
134 | + '0.2.262.1.10.7.31*' => 'directoryTypeName', |
|
135 | + '0.2.262.1.10.7.32*' => 'directoryGroupName', |
|
136 | + '0.2.262.1.10.7.33*' => 'directoryUserName', |
|
137 | + '0.2.262.1.10.7.34*' => 'revocationFlag', |
|
138 | + '0.2.262.1.10.7.35*' => 'symmetricKeyEntryName', |
|
139 | + '0.2.262.1.10.7.36*' => 'glNumber', |
|
140 | + '0.2.262.1.10.7.37*' => 'goNumber', |
|
141 | + '0.2.262.1.10.7.38*' => 'gKeyData', |
|
142 | + '0.2.262.1.10.7.39*' => 'zKeyData', |
|
143 | + '0.2.262.1.10.7.40*' => 'ktKeyData', |
|
144 | + '0.2.262.1.10.7.41*' => 'ktKeyNumber', |
|
145 | + '0.2.262.1.10.7.51*' => 'timeOfRevocationGen', |
|
146 | + '0.2.262.1.10.7.52*' => 'liabilityText', |
|
147 | + '0.2.262.1.10.8*' => 'attributeGroup', |
|
148 | + '0.2.262.1.10.9*' => 'action', |
|
149 | + '0.2.262.1.10.10*' => 'notification', |
|
150 | + '0.2.262.1.10.11*' => 'snmp-mibs', |
|
151 | + '0.2.262.1.10.11.1*' => 'securityApplication', |
|
152 | + '0.2.262.1.10.12*' => 'certAndCrlExtensionDefinitions', |
|
153 | + '0.2.262.1.10.12.0*' => 'liabilityLimitationFlag', |
|
154 | + '0.2.262.1.10.12.1*' => 'telesecCertIdExt', |
|
155 | + '0.2.262.1.10.12.2*' => 'Telesec policyIdentifier', |
|
156 | + '0.2.262.1.10.12.3*' => 'telesecPolicyQualifierID', |
|
157 | + '0.2.262.1.10.12.4*' => 'telesecCRLFilteredExt', |
|
158 | + '0.2.262.1.10.12.5*' => 'telesecCRLFilterExt', |
|
159 | + '0.2.262.1.10.12.6*' => 'telesecNamingAuthorityExt', |
|
160 | + '0.4.0.127.0.7*' => 'bsi', |
|
161 | + '0.4.0.127.0.7.1*' => 'bsiEcc', |
|
162 | + '0.4.0.127.0.7.1.1*' => 'bsifieldType', |
|
163 | + '0.4.0.127.0.7.1.1.1*' => 'bsiPrimeField', |
|
164 | + '0.4.0.127.0.7.1.1.2*' => 'bsiCharacteristicTwoField', |
|
165 | + '0.4.0.127.0.7.1.1.2.3*' => 'bsiCharacteristicTwoBasis', |
|
166 | + '0.4.0.127.0.7.1.1.2.3.1*' => 'bsiGnBasis', |
|
167 | + '0.4.0.127.0.7.1.1.2.3.2*' => 'bsiTpBasis', |
|
168 | + '0.4.0.127.0.7.1.1.2.3.3*' => 'bsiPpBasis', |
|
169 | + '0.4.0.127.0.7.1.1.4.1*' => 'bsiEcdsaSignatures', |
|
170 | + '0.4.0.127.0.7.1.1.4.1.1*' => 'bsiEcdsaWithSHA1', |
|
171 | + '0.4.0.127.0.7.1.1.4.1.2*' => 'bsiEcdsaWithSHA224', |
|
172 | + '0.4.0.127.0.7.1.1.4.1.3*' => 'bsiEcdsaWithSHA256', |
|
173 | + '0.4.0.127.0.7.1.1.4.1.4*' => 'bsiEcdsaWithSHA384', |
|
174 | + '0.4.0.127.0.7.1.1.4.1.5*' => 'bsiEcdsaWithSHA512', |
|
175 | + '0.4.0.127.0.7.1.1.4.1.6*' => 'bsiEcdsaWithRIPEMD160', |
|
176 | + '0.4.0.127.0.7.1.2*' => 'bsiEcKeyType', |
|
177 | + '0.4.0.127.0.7.1.2.1*' => 'bsiEcPublicKey', |
|
178 | + '0.4.0.127.0.7.1.5.1*' => 'bsiKaeg', |
|
179 | + '0.4.0.127.0.7.1.5.1.1*' => 'bsiKaegWithX963KDF', |
|
180 | + '0.4.0.127.0.7.1.5.1.2*' => 'bsiKaegWith3DESKDF', |
|
181 | + '0.4.0.127.0.7.2.2.1*' => 'bsiPK', |
|
182 | + '0.4.0.127.0.7.2.2.1.1*' => 'bsiPK_DH', |
|
183 | + '0.4.0.127.0.7.2.2.1.2*' => 'bsiPK_ECDH', |
|
184 | + '0.4.0.127.0.7.2.2.2*' => 'bsiTA', |
|
185 | + '0.4.0.127.0.7.2.2.2.1*' => 'bsiTA_RSA', |
|
186 | + '0.4.0.127.0.7.2.2.2.1.1*' => 'bsiTA_RSAv1_5_SHA1', |
|
187 | + '0.4.0.127.0.7.2.2.2.1.2*' => 'bsiTA_RSAv1_5_SHA256', |
|
188 | + '0.4.0.127.0.7.2.2.2.1.3*' => 'bsiTA_RSAPSS_SHA1', |
|
189 | + '0.4.0.127.0.7.2.2.2.1.4*' => 'bsiTA_RSAPSS_SHA256', |
|
190 | + '0.4.0.127.0.7.2.2.2.2*' => 'bsiTA_ECDSA', |
|
191 | + '0.4.0.127.0.7.2.2.2.2.1*' => 'bsiTA_ECDSA_SHA1', |
|
192 | + '0.4.0.127.0.7.2.2.2.2.2*' => 'bsiTA_ECDSA_SHA224', |
|
193 | + '0.4.0.127.0.7.2.2.2.2.3*' => 'bsiTA_ECDSA_SHA256', |
|
194 | + '0.4.0.127.0.7.2.2.3*' => 'bsiCA', |
|
195 | + '0.4.0.127.0.7.2.2.3.1*' => 'bsiCA_DH', |
|
196 | + '0.4.0.127.0.7.2.2.3.2*' => 'bsiCA_ECDH', |
|
197 | + '0.4.0.127.0.7.3.1.2.1*' => 'bsiRoleEAC', |
|
198 | + '0.4.0.1862*' => 'etsiQcsProfile', |
|
199 | + '0.4.0.1862.1*' => 'etsiQcs', |
|
200 | + '0.4.0.1862.1.1*' => 'etsiQcsCompliance', |
|
201 | + '0.4.0.1862.1.2*' => 'etsiQcsLimitValue', |
|
202 | + '0.4.0.1862.1.3*' => 'etsiQcsRetentionPeriod', |
|
203 | + '0.4.0.1862.1.4*' => 'etsiQcsQcSSCD', |
|
204 | + '0.9.2342.19200300.100.1.1*' => 'userID', |
|
205 | + '0.9.2342.19200300.100.1.3*' => 'rfc822Mailbox', |
|
206 | + '0.9.2342.19200300.100.1.25*' => 'domainComponent', |
|
207 | + '1.0.10118.3.0.49*' => 'ripemd160', |
|
208 | + '1.0.10118.3.0.50*' => 'ripemd128', |
|
209 | + '1.0.10118.3.0.55*' => 'whirlpool', |
|
210 | + '1.2.36.1.3.1.1.1*' => 'qgpki', |
|
211 | + '1.2.36.1.3.1.1.1.1*' => 'qgpkiPolicies', |
|
212 | + '1.2.36.1.3.1.1.1.1.1*' => 'qgpkiMedIntermedCA', |
|
213 | + '1.2.36.1.3.1.1.1.1.1.1*' => 'qgpkiMedIntermedIndividual', |
|
214 | + '1.2.36.1.3.1.1.1.1.1.2*' => 'qgpkiMedIntermedDeviceControl', |
|
215 | + '1.2.36.1.3.1.1.1.1.1.3*' => 'qgpkiMedIntermedDevice', |
|
216 | + '1.2.36.1.3.1.1.1.1.1.4*' => 'qgpkiMedIntermedAuthorisedParty', |
|
217 | + '1.2.36.1.3.1.1.1.1.1.5*' => 'qgpkiMedIntermedDeviceSystem', |
|
218 | + '1.2.36.1.3.1.1.1.1.2*' => 'qgpkiMedIssuingCA', |
|
219 | + '1.2.36.1.3.1.1.1.1.2.1*' => 'qgpkiMedIssuingIndividual', |
|
220 | + '1.2.36.1.3.1.1.1.1.2.2*' => 'qgpkiMedIssuingDeviceControl', |
|
221 | + '1.2.36.1.3.1.1.1.1.2.3*' => 'qgpkiMedIssuingDevice', |
|
222 | + '1.2.36.1.3.1.1.1.1.2.4*' => 'qgpkiMedIssuingAuthorisedParty', |
|
223 | + '1.2.36.1.3.1.1.1.1.2.5*' => 'qgpkiMedIssuingClientAuth', |
|
224 | + '1.2.36.1.3.1.1.1.1.2.6*' => 'qgpkiMedIssuingServerAuth', |
|
225 | + '1.2.36.1.3.1.1.1.1.2.7*' => 'qgpkiMedIssuingDataProt', |
|
226 | + '1.2.36.1.3.1.1.1.1.2.8*' => 'qgpkiMedIssuingTokenAuth', |
|
227 | + '1.2.36.1.3.1.1.1.1.3*' => 'qgpkiBasicIntermedCA', |
|
228 | + '1.2.36.1.3.1.1.1.1.3.1*' => 'qgpkiBasicIntermedDeviceSystem', |
|
229 | + '1.2.36.1.3.1.1.1.1.4*' => 'qgpkiBasicIssuingCA', |
|
230 | + '1.2.36.1.3.1.1.1.1.4.1*' => 'qgpkiBasicIssuingClientAuth', |
|
231 | + '1.2.36.1.3.1.1.1.1.4.2*' => 'qgpkiBasicIssuingServerAuth', |
|
232 | + '1.2.36.1.3.1.1.1.1.4.3*' => 'qgpkiBasicIssuingDataSigning', |
|
233 | + '1.2.36.1.3.1.1.1.2*' => 'qgpkiAssuranceLevel', |
|
234 | + '1.2.36.1.3.1.1.1.2.1*' => 'qgpkiAssuranceRudimentary', |
|
235 | + '1.2.36.1.3.1.1.1.2.2*' => 'qgpkiAssuranceBasic', |
|
236 | + '1.2.36.1.3.1.1.1.2.3*' => 'qgpkiAssuranceMedium', |
|
237 | + '1.2.36.1.3.1.1.1.2.4*' => 'qgpkiAssuranceHigh', |
|
238 | + '1.2.36.1.3.1.1.1.3*' => 'qgpkiCertFunction', |
|
239 | + '1.2.36.1.3.1.1.1.3.1*' => 'qgpkiFunctionIndividual', |
|
240 | + '1.2.36.1.3.1.1.1.3.2*' => 'qgpkiFunctionDevice', |
|
241 | + '1.2.36.1.3.1.1.1.3.3*' => 'qgpkiFunctionAuthorisedParty', |
|
242 | + '1.2.36.1.3.1.1.1.3.4*' => 'qgpkiFunctionDeviceControl', |
|
243 | + '1.2.36.1.3.1.2*' => 'qpspki', |
|
244 | + '1.2.36.1.3.1.2.1*' => 'qpspkiPolicies', |
|
245 | + '1.2.36.1.3.1.2.1.2*' => 'qpspkiPolicyBasic', |
|
246 | + '1.2.36.1.3.1.2.1.3*' => 'qpspkiPolicyMedium', |
|
247 | + '1.2.36.1.3.1.2.1.4*' => 'qpspkiPolicyHigh', |
|
248 | + '1.2.36.1.3.1.3.2*' => 'qtmrpki', |
|
249 | + '1.2.36.1.3.1.3.2.1*' => 'qtmrpkiPolicies', |
|
250 | + '1.2.36.1.3.1.3.2.2*' => 'qtmrpkiPurpose', |
|
251 | + '1.2.36.1.3.1.3.2.2.1*' => 'qtmrpkiIndividual', |
|
252 | + '1.2.36.1.3.1.3.2.2.2*' => 'qtmrpkiDeviceControl', |
|
253 | + '1.2.36.1.3.1.3.2.2.3*' => 'qtmrpkiDevice', |
|
254 | + '1.2.36.1.3.1.3.2.2.4*' => 'qtmrpkiAuthorisedParty', |
|
255 | + '1.2.36.1.3.1.3.2.2.5*' => 'qtmrpkiDeviceSystem', |
|
256 | + '1.2.36.1.3.1.3.2.3*' => 'qtmrpkiDevice', |
|
257 | + '1.2.36.1.3.1.3.2.3.1*' => 'qtmrpkiDriverLicense', |
|
258 | + '1.2.36.1.3.1.3.2.3.2*' => 'qtmrpkiIndustryAuthority', |
|
259 | + '1.2.36.1.3.1.3.2.3.3*' => 'qtmrpkiMarineLicense', |
|
260 | + '1.2.36.1.3.1.3.2.3.4*' => 'qtmrpkiAdultProofOfAge', |
|
261 | + '1.2.36.1.3.1.3.2.3.5*' => 'qtmrpkiSam', |
|
262 | + '1.2.36.1.3.1.3.2.4*' => 'qtmrpkiAuthorisedParty', |
|
263 | + '1.2.36.1.3.1.3.2.4.1*' => 'qtmrpkiTransportInspector', |
|
264 | + '1.2.36.1.3.1.3.2.4.2*' => 'qtmrpkiPoliceOfficer', |
|
265 | + '1.2.36.1.3.1.3.2.4.3*' => 'qtmrpkiSystem', |
|
266 | + '1.2.36.1.3.1.3.2.4.4*' => 'qtmrpkiLiquorLicensingInspector', |
|
267 | + '1.2.36.1.3.1.3.2.4.5*' => 'qtmrpkiMarineEnforcementOfficer', |
|
268 | + '1.2.36.1.333.1*' => 'australianBusinessNumber', |
|
269 | + '1.2.36.68980861.1.1.2*' => 'signetPersonal', |
|
270 | + '1.2.36.68980861.1.1.3*' => 'signetBusiness', |
|
271 | + '1.2.36.68980861.1.1.4*' => 'signetLegal', |
|
272 | + '1.2.36.68980861.1.1.10*' => 'signetPilot', |
|
273 | + '1.2.36.68980861.1.1.11*' => 'signetIntraNet', |
|
274 | + '1.2.36.68980861.1.1.20*' => 'signetPolicy', |
|
275 | + '1.2.36.75878867.1.100.1.1*' => 'certificatesAustraliaPolicy', |
|
276 | + '1.2.392.200011.61.1.1.1*' => 'mitsubishiSecurityAlgorithm', |
|
277 | + '1.2.392.200011.61.1.1.1.1*' => 'misty1-cbc', |
|
278 | + '1.2.410.200004.1.4*' => 'seedCBC', |
|
279 | + '1.2.410.200004.1.7*' => 'seedMAC', |
|
280 | + '1.2.410.200004.1.15*' => 'pbeWithSHA1AndSEED-CBC', |
|
281 | + '1.2.410.200046.1.1*' => 'aria1AlgorithmModes', |
|
282 | + '1.2.410.200046.1.1.1*' => 'aria128-ecb', |
|
283 | + '1.2.410.200046.1.1.2*' => 'aria128-cbc', |
|
284 | + '1.2.410.200046.1.1.3*' => 'aria128-cfb', |
|
285 | + '1.2.410.200046.1.1.4*' => 'aria128-ofb', |
|
286 | + '1.2.410.200046.1.1.5*' => 'aria128-ctr', |
|
287 | + '1.2.410.200046.1.1.6*' => 'aria192-ecb', |
|
288 | + '1.2.410.200046.1.1.7*' => 'aria192-cbc', |
|
289 | + '1.2.410.200046.1.1.8*' => 'aria192-cfb', |
|
290 | + '1.2.410.200046.1.1.9*' => 'aria192-ofb', |
|
291 | + '1.2.410.200046.1.1.10*' => 'aria192-ctr', |
|
292 | + '1.2.410.200046.1.1.11*' => 'aria256-ecb', |
|
293 | + '1.2.410.200046.1.1.12*' => 'aria256-cbc', |
|
294 | + '1.2.410.200046.1.1.13*' => 'aria256-ctr', |
|
295 | + '1.2.410.200046.1.1.21*' => 'aria128-cmac', |
|
296 | + '1.2.410.200046.1.1.22*' => 'aria192-cmac', |
|
297 | + '1.2.410.200046.1.1.23*' => 'aria256-cmac', |
|
298 | + '1.2.410.200046.1.1.31*' => 'aria128-ocb2', |
|
299 | + '1.2.410.200046.1.1.32*' => 'aria192-ocb2', |
|
300 | + '1.2.410.200046.1.1.33*' => 'aria256-ocb2', |
|
301 | + '1.2.410.200046.1.1.34*' => 'aria128-gcm', |
|
302 | + '1.2.410.200046.1.1.35*' => 'aria192-gcm', |
|
303 | + '1.2.410.200046.1.1.36*' => 'aria256-gcm', |
|
304 | + '1.2.410.200046.1.1.37*' => 'aria128-ccm', |
|
305 | + '1.2.410.200046.1.1.38*' => 'aria192-ccm', |
|
306 | + '1.2.410.200046.1.1.39*' => 'aria256-ccm', |
|
307 | + '1.2.410.200046.1.1.40*' => 'aria128-keywrap', |
|
308 | + '1.2.410.200046.1.1.41*' => 'aria192-keywrap', |
|
309 | + '1.2.410.200046.1.1.42*' => 'aria256-keywrap', |
|
310 | + '1.2.410.200046.1.1.43*' => 'aria128-keywrapWithPad', |
|
311 | + '1.2.410.200046.1.1.44*' => 'aria192-keywrapWithPad', |
|
312 | + '1.2.410.200046.1.1.45*' => 'aria256-keywrapWithPad', |
|
313 | + '1.2.643.2.2.3*' => 'gostSignature', |
|
314 | + '1.2.643.2.2.4*' => 'gost94Signature', |
|
315 | + '1.2.643.2.2.20*' => 'gost94PublicKey', |
|
316 | + '1.2.643.2.2.19*' => 'gostPublicKey', |
|
317 | + '1.2.643.2.2.21*' => 'gostCipher', |
|
318 | + '1.2.643.2.2.31.0*' => 'testCipherParams', |
|
319 | + '1.2.643.2.2.31.1*' => 'cryptoProCipherA', |
|
320 | + '1.2.643.2.2.31.2*' => 'cryptoProCipherB', |
|
321 | + '1.2.643.2.2.31.3*' => 'cryptoProCipherC', |
|
322 | + '1.2.643.2.2.31.4*' => 'cryptoProCipherD', |
|
323 | + '1.2.643.2.2.31.5*' => 'oscar11Cipher', |
|
324 | + '1.2.643.2.2.31.6*' => 'oscar10Cipher', |
|
325 | + '1.2.643.2.2.31.7*' => 'ric1Cipher', |
|
326 | + '1.2.643.2.2.9*' => 'gostDigest', |
|
327 | + '1.2.643.2.2.30.0*' => 'testDigestParams', |
|
328 | + '1.2.643.2.2.30.1*' => 'cryptoProDigestA', |
|
329 | + '1.2.643.2.2.35.0*' => 'testSignParams', |
|
330 | + '1.2.643.2.2.35.1*' => 'cryptoProSignA', |
|
331 | + '1.2.643.2.2.35.2*' => 'cryptoProSignB', |
|
332 | + '1.2.643.2.2.35.3*' => 'cryptoProSignC', |
|
333 | + '1.2.643.2.2.36.0*' => 'cryptoProSignXA', |
|
334 | + '1.2.643.2.2.36.1*' => 'cryptoProSignXB', |
|
335 | + '1.2.643.2.2.14.0*' => 'nullMeshing', |
|
336 | + '1.2.643.2.2.14.1*' => 'cryptoProMeshing', |
|
337 | + '1.2.643.2.2.10*' => 'hmacGost', |
|
338 | + '1.2.643.2.2.13.0*' => 'gostWrap', |
|
339 | + '1.2.643.2.2.13.1*' => 'cryptoProWrap', |
|
340 | + '1.2.643.2.2.96*' => 'cryptoProECDHWrap', |
|
341 | + '1.2.752.34.1*' => 'seis-cp', |
|
342 | + '1.2.752.34.1.1*' => 'SEIS high-assurance policyIdentifier', |
|
343 | + '1.2.752.34.1.2*' => 'SEIS GAK policyIdentifier', |
|
344 | + '1.2.752.34.2*' => 'SEIS pe', |
|
345 | + '1.2.752.34.3*' => 'SEIS at', |
|
346 | + '1.2.752.34.3.1*' => 'SEIS at-personalIdentifier', |
|
347 | + '1.2.840.10040.1*' => 'module', |
|
348 | + '1.2.840.10040.1.1*' => 'x9f1-cert-mgmt', |
|
349 | + '1.2.840.10040.2*' => 'holdinstruction', |
|
350 | + '1.2.840.10040.2.1*' => 'holdinstruction-none', |
|
351 | + '1.2.840.10040.2.2*' => 'callissuer', |
|
352 | + '1.2.840.10040.2.3*' => 'reject', |
|
353 | + '1.2.840.10040.2.4*' => 'pickupToken', |
|
354 | + '1.2.840.10040.3*' => 'attribute', |
|
355 | + '1.2.840.10040.3.1*' => 'countersignature', |
|
356 | + '1.2.840.10040.3.2*' => 'attribute-cert', |
|
357 | + '1.2.840.10040.4*' => 'algorithm', |
|
358 | + '1.2.840.10040.4.1*' => 'dsa', |
|
359 | + '1.2.840.10040.4.2*' => 'dsa-match', |
|
360 | + '1.2.840.10040.4.3*' => 'dsaWithSha1', |
|
361 | + '1.2.840.10045.1*' => 'fieldType', |
|
362 | + '1.2.840.10045.1.1*' => 'prime-field', |
|
363 | + '1.2.840.10045.1.2*' => 'characteristic-two-field', |
|
364 | + '1.2.840.10045.1.2.3*' => 'characteristic-two-basis', |
|
365 | + '1.2.840.10045.1.2.3.1*' => 'onBasis', |
|
366 | + '1.2.840.10045.1.2.3.2*' => 'tpBasis', |
|
367 | + '1.2.840.10045.1.2.3.3*' => 'ppBasis', |
|
368 | + '1.2.840.10045.2*' => 'publicKeyType', |
|
369 | + '1.2.840.10045.2.1*' => 'ecPublicKey', |
|
370 | + '1.2.840.10045.3.0.1*' => 'c2pnb163v1', |
|
371 | + '1.2.840.10045.3.0.2*' => 'c2pnb163v2', |
|
372 | + '1.2.840.10045.3.0.3*' => 'c2pnb163v3', |
|
373 | + '1.2.840.10045.3.0.5*' => 'c2tnb191v1', |
|
374 | + '1.2.840.10045.3.0.6*' => 'c2tnb191v2', |
|
375 | + '1.2.840.10045.3.0.7*' => 'c2tnb191v3', |
|
376 | + '1.2.840.10045.3.0.10*' => 'c2pnb208w1', |
|
377 | + '1.2.840.10045.3.0.11*' => 'c2tnb239v1', |
|
378 | + '1.2.840.10045.3.0.12*' => 'c2tnb239v2', |
|
379 | + '1.2.840.10045.3.0.13*' => 'c2tnb239v3', |
|
380 | + '1.2.840.10045.3.0.16*' => 'c2pnb272w1', |
|
381 | + '1.2.840.10045.3.0.18*' => 'c2tnb359v1', |
|
382 | + '1.2.840.10045.3.0.19*' => 'c2pnb368w1', |
|
383 | + '1.2.840.10045.3.0.20*' => 'c2tnb431r1', |
|
384 | + '1.2.840.10045.3.1.1*' => 'ansiX9p192r1', |
|
385 | + '1.2.840.10045.3.1.1.1*' => 'prime192v1', |
|
386 | + '1.2.840.10045.3.1.1.2*' => 'prime192v2', |
|
387 | + '1.2.840.10045.3.1.1.3*' => 'prime192v3', |
|
388 | + '1.2.840.10045.3.1.1.4*' => 'prime239v1', |
|
389 | + '1.2.840.10045.3.1.1.5*' => 'prime239v2', |
|
390 | + '1.2.840.10045.3.1.1.6*' => 'prime239v3', |
|
391 | + '1.2.840.10045.3.1.1.7*' => 'prime256v1', |
|
392 | + '1.2.840.10045.3.1.7*' => 'ansiX9p256r1', |
|
393 | + '1.2.840.10045.4.1*' => 'ecdsaWithSHA1', |
|
394 | + '1.2.840.10045.4.2*' => 'ecdsaWithRecommended', |
|
395 | + '1.2.840.10045.4.3*' => 'ecdsaWithSpecified', |
|
396 | + '1.2.840.10045.4.3.1*' => 'ecdsaWithSHA224', |
|
397 | + '1.2.840.10045.4.3.2*' => 'ecdsaWithSHA256', |
|
398 | + '1.2.840.10045.4.3.3*' => 'ecdsaWithSHA384', |
|
399 | + '1.2.840.10045.4.3.4*' => 'ecdsaWithSHA512', |
|
400 | + '1.2.840.10046.1*' => 'fieldType', |
|
401 | + '1.2.840.10046.1.1*' => 'gf-prime', |
|
402 | + '1.2.840.10046.2*' => 'numberType', |
|
403 | + '1.2.840.10046.2.1*' => 'dhPublicKey', |
|
404 | + '1.2.840.10046.3*' => 'scheme', |
|
405 | + '1.2.840.10046.3.1*' => 'dhStatic', |
|
406 | + '1.2.840.10046.3.2*' => 'dhEphem', |
|
407 | + '1.2.840.10046.3.3*' => 'dhHybrid1', |
|
408 | + '1.2.840.10046.3.4*' => 'dhHybrid2', |
|
409 | + '1.2.840.10046.3.5*' => 'mqv2', |
|
410 | + '1.2.840.10046.3.6*' => 'mqv1', |
|
411 | + '1.2.840.10065.2.2*' => '?', |
|
412 | + '1.2.840.10065.2.3*' => 'healthcareLicense', |
|
413 | + '1.2.840.10065.2.3.1.1*' => 'license?', |
|
414 | + '1.2.840.113533.7*' => 'nsn', |
|
415 | + '1.2.840.113533.7.65*' => 'nsn-ce', |
|
416 | + '1.2.840.113533.7.65.0*' => 'entrustVersInfo', |
|
417 | + '1.2.840.113533.7.66*' => 'nsn-alg', |
|
418 | + '1.2.840.113533.7.66.3*' => 'cast3CBC', |
|
419 | + '1.2.840.113533.7.66.10*' => 'cast5CBC', |
|
420 | + '1.2.840.113533.7.66.11*' => 'cast5MAC', |
|
421 | + '1.2.840.113533.7.66.12*' => 'pbeWithMD5AndCAST5-CBC', |
|
422 | + '1.2.840.113533.7.66.13*' => 'passwordBasedMac', |
|
423 | + '1.2.840.113533.7.67*' => 'nsn-oc', |
|
424 | + '1.2.840.113533.7.67.0*' => 'entrustUser', |
|
425 | + '1.2.840.113533.7.68*' => 'nsn-at', |
|
426 | + '1.2.840.113533.7.68.0*' => 'entrustCAInfo', |
|
427 | + '1.2.840.113533.7.68.10*' => 'attributeCertificate', |
|
428 | + '1.2.840.113549.1.1*' => 'pkcs-1', |
|
429 | + '1.2.840.113549.1.1.1*' => 'rsaEncryption', |
|
430 | + '1.2.840.113549.1.1.2*' => 'md2WithRSAEncryption', |
|
431 | + '1.2.840.113549.1.1.3*' => 'md4WithRSAEncryption', |
|
432 | + '1.2.840.113549.1.1.4*' => 'md5WithRSAEncryption', |
|
433 | + '1.2.840.113549.1.1.5*' => 'sha1WithRSAEncryption', |
|
434 | + '1.2.840.113549.1.1.7*' => 'rsaOAEP', |
|
435 | + '1.2.840.113549.1.1.8*' => 'pkcs1-MGF', |
|
436 | + '1.2.840.113549.1.1.9*' => 'rsaOAEP-pSpecified', |
|
437 | + '1.2.840.113549.1.1.10*' => 'rsaPSS', |
|
438 | + '1.2.840.113549.1.1.11*' => 'sha256WithRSAEncryption', |
|
439 | + '1.2.840.113549.1.1.12*' => 'sha384WithRSAEncryption', |
|
440 | + '1.2.840.113549.1.1.13*' => 'sha512WithRSAEncryption', |
|
441 | + '1.2.840.113549.1.1.14*' => 'sha224WithRSAEncryption', |
|
442 | + '1.2.840.113549.1.1.6*' => 'rsaOAEPEncryptionSET', |
|
443 | + '1.2.840.113549.1.2*' => 'bsafeRsaEncr', |
|
444 | + '1.2.840.113549.1.3*' => 'pkcs-3', |
|
445 | + '1.2.840.113549.1.3.1*' => 'dhKeyAgreement', |
|
446 | + '1.2.840.113549.1.5*' => 'pkcs-5', |
|
447 | + '1.2.840.113549.1.5.1*' => 'pbeWithMD2AndDES-CBC', |
|
448 | + '1.2.840.113549.1.5.3*' => 'pbeWithMD5AndDES-CBC', |
|
449 | + '1.2.840.113549.1.5.4*' => 'pbeWithMD2AndRC2-CBC', |
|
450 | + '1.2.840.113549.1.5.6*' => 'pbeWithMD5AndRC2-CBC', |
|
451 | + '1.2.840.113549.1.5.9*' => 'pbeWithMD5AndXOR', |
|
452 | + '1.2.840.113549.1.5.10*' => 'pbeWithSHAAndDES-CBC', |
|
453 | + '1.2.840.113549.1.5.12*' => 'pkcs5PBKDF2', |
|
454 | + '1.2.840.113549.1.5.13*' => 'pkcs5PBES2', |
|
455 | + '1.2.840.113549.1.5.14*' => 'pkcs5PBMAC1', |
|
456 | + '1.2.840.113549.1.7*' => 'pkcs-7', |
|
457 | + '1.2.840.113549.1.7.1*' => 'data', |
|
458 | + '1.2.840.113549.1.7.2*' => 'signedData', |
|
459 | + '1.2.840.113549.1.7.3*' => 'envelopedData', |
|
460 | + '1.2.840.113549.1.7.4*' => 'signedAndEnvelopedData', |
|
461 | + '1.2.840.113549.1.7.5*' => 'digestedData', |
|
462 | + '1.2.840.113549.1.7.6*' => 'encryptedData', |
|
463 | + '1.2.840.113549.1.7.7*' => 'dataWithAttributes', |
|
464 | + '1.2.840.113549.1.7.8*' => 'encryptedPrivateKeyInfo', |
|
465 | + '1.2.840.113549.1.9*' => 'pkcs-9', |
|
466 | + '1.2.840.113549.1.9.1*' => 'emailAddress', |
|
467 | + '1.2.840.113549.1.9.2*' => 'unstructuredName', |
|
468 | + '1.2.840.113549.1.9.3*' => 'contentType', |
|
469 | + '1.2.840.113549.1.9.4*' => 'messageDigest', |
|
470 | + '1.2.840.113549.1.9.5*' => 'signingTime', |
|
471 | + '1.2.840.113549.1.9.6*' => 'countersignature', |
|
472 | + '1.2.840.113549.1.9.7*' => 'challengePassword', |
|
473 | + '1.2.840.113549.1.9.8*' => 'unstructuredAddress', |
|
474 | + '1.2.840.113549.1.9.9*' => 'extendedCertificateAttributes', |
|
475 | + '1.2.840.113549.1.9.10*' => 'issuerAndSerialNumber', |
|
476 | + '1.2.840.113549.1.9.11*' => 'passwordCheck', |
|
477 | + '1.2.840.113549.1.9.12*' => 'publicKey', |
|
478 | + '1.2.840.113549.1.9.13*' => 'signingDescription', |
|
479 | + '1.2.840.113549.1.9.14*' => 'extensionRequest', |
|
480 | + '1.2.840.113549.1.9.15*' => 'sMIMECapabilities', |
|
481 | + '1.2.840.113549.1.9.15.1*' => 'preferSignedData', |
|
482 | + '1.2.840.113549.1.9.15.2*' => 'canNotDecryptAny', |
|
483 | + '1.2.840.113549.1.9.15.3*' => 'receiptRequest', |
|
484 | + '1.2.840.113549.1.9.15.4*' => 'receipt', |
|
485 | + '1.2.840.113549.1.9.15.5*' => 'contentHints', |
|
486 | + '1.2.840.113549.1.9.15.6*' => 'mlExpansionHistory', |
|
487 | + '1.2.840.113549.1.9.16*' => 'id-sMIME', |
|
488 | + '1.2.840.113549.1.9.16.0*' => 'id-mod', |
|
489 | + '1.2.840.113549.1.9.16.0.1*' => 'id-mod-cms', |
|
490 | + '1.2.840.113549.1.9.16.0.2*' => 'id-mod-ess', |
|
491 | + '1.2.840.113549.1.9.16.0.3*' => 'id-mod-oid', |
|
492 | + '1.2.840.113549.1.9.16.0.4*' => 'id-mod-msg-v3', |
|
493 | + '1.2.840.113549.1.9.16.0.5*' => 'id-mod-ets-eSignature-88', |
|
494 | + '1.2.840.113549.1.9.16.0.6*' => 'id-mod-ets-eSignature-97', |
|
495 | + '1.2.840.113549.1.9.16.0.7*' => 'id-mod-ets-eSigPolicy-88', |
|
496 | + '1.2.840.113549.1.9.16.0.8*' => 'id-mod-ets-eSigPolicy-88', |
|
497 | + '1.2.840.113549.1.9.16.1*' => 'contentType', |
|
498 | + '1.2.840.113549.1.9.16.1.1*' => 'receipt', |
|
499 | + '1.2.840.113549.1.9.16.1.2*' => 'authData', |
|
500 | + '1.2.840.113549.1.9.16.1.3*' => 'publishCert', |
|
501 | + '1.2.840.113549.1.9.16.1.4*' => 'tSTInfo', |
|
502 | + '1.2.840.113549.1.9.16.1.5*' => 'tDTInfo', |
|
503 | + '1.2.840.113549.1.9.16.1.6*' => 'contentInfo', |
|
504 | + '1.2.840.113549.1.9.16.1.7*' => 'dVCSRequestData', |
|
505 | + '1.2.840.113549.1.9.16.1.8*' => 'dVCSResponseData', |
|
506 | + '1.2.840.113549.1.9.16.1.9*' => 'compressedData', |
|
507 | + '1.2.840.113549.1.9.16.1.10*' => 'scvpCertValRequest', |
|
508 | + '1.2.840.113549.1.9.16.1.11*' => 'scvpCertValResponse', |
|
509 | + '1.2.840.113549.1.9.16.1.12*' => 'scvpValPolRequest', |
|
510 | + '1.2.840.113549.1.9.16.1.13*' => 'scvpValPolResponse', |
|
511 | + '1.2.840.113549.1.9.16.1.14*' => 'attrCertEncAttrs', |
|
512 | + '1.2.840.113549.1.9.16.1.15*' => 'tSReq', |
|
513 | + '1.2.840.113549.1.9.16.1.16*' => 'firmwarePackage', |
|
514 | + '1.2.840.113549.1.9.16.1.17*' => 'firmwareLoadReceipt', |
|
515 | + '1.2.840.113549.1.9.16.1.18*' => 'firmwareLoadError', |
|
516 | + '1.2.840.113549.1.9.16.1.19*' => 'contentCollection', |
|
517 | + '1.2.840.113549.1.9.16.1.20*' => 'contentWithAttrs', |
|
518 | + '1.2.840.113549.1.9.16.1.21*' => 'encKeyWithID', |
|
519 | + '1.2.840.113549.1.9.16.1.22*' => 'encPEPSI', |
|
520 | + '1.2.840.113549.1.9.16.1.23*' => 'authEnvelopedData', |
|
521 | + '1.2.840.113549.1.9.16.1.24*' => 'routeOriginAttest', |
|
522 | + '1.2.840.113549.1.9.16.1.25*' => 'symmetricKeyPackage', |
|
523 | + '1.2.840.113549.1.9.16.1.26*' => 'rpkiManifest', |
|
524 | + '1.2.840.113549.1.9.16.1.27*' => 'asciiTextWithCRLF', |
|
525 | + '1.2.840.113549.1.9.16.1.28*' => 'xml', |
|
526 | + '1.2.840.113549.1.9.16.1.29*' => 'pdf', |
|
527 | + '1.2.840.113549.1.9.16.1.30*' => 'postscript', |
|
528 | + '1.2.840.113549.1.9.16.1.31*' => 'timestampedData', |
|
529 | + '1.2.840.113549.1.9.16.1.32*' => 'asAdjacencyAttest', |
|
530 | + '1.2.840.113549.1.9.16.1.33*' => 'rpkiTrustAnchor', |
|
531 | + '1.2.840.113549.1.9.16.1.34*' => 'trustAnchorList', |
|
532 | + '1.2.840.113549.1.9.16.2*' => 'authenticatedAttributes', |
|
533 | + '1.2.840.113549.1.9.16.2.1*' => 'receiptRequest', |
|
534 | + '1.2.840.113549.1.9.16.2.2*' => 'securityLabel', |
|
535 | + '1.2.840.113549.1.9.16.2.3*' => 'mlExpandHistory', |
|
536 | + '1.2.840.113549.1.9.16.2.4*' => 'contentHint', |
|
537 | + '1.2.840.113549.1.9.16.2.5*' => 'msgSigDigest', |
|
538 | + '1.2.840.113549.1.9.16.2.6*' => 'encapContentType', |
|
539 | + '1.2.840.113549.1.9.16.2.7*' => 'contentIdentifier', |
|
540 | + '1.2.840.113549.1.9.16.2.8*' => 'macValue', |
|
541 | + '1.2.840.113549.1.9.16.2.9*' => 'equivalentLabels', |
|
542 | + '1.2.840.113549.1.9.16.2.10*' => 'contentReference', |
|
543 | + '1.2.840.113549.1.9.16.2.11*' => 'encrypKeyPref', |
|
544 | + '1.2.840.113549.1.9.16.2.12*' => 'signingCertificate', |
|
545 | + '1.2.840.113549.1.9.16.2.13*' => 'smimeEncryptCerts', |
|
546 | + '1.2.840.113549.1.9.16.2.14*' => 'timeStampToken', |
|
547 | + '1.2.840.113549.1.9.16.2.15*' => 'sigPolicyId', |
|
548 | + '1.2.840.113549.1.9.16.2.16*' => 'commitmentType', |
|
549 | + '1.2.840.113549.1.9.16.2.17*' => 'signerLocation', |
|
550 | + '1.2.840.113549.1.9.16.2.18*' => 'signerAttr', |
|
551 | + '1.2.840.113549.1.9.16.2.19*' => 'otherSigCert', |
|
552 | + '1.2.840.113549.1.9.16.2.20*' => 'contentTimestamp', |
|
553 | + '1.2.840.113549.1.9.16.2.21*' => 'certificateRefs', |
|
554 | + '1.2.840.113549.1.9.16.2.22*' => 'revocationRefs', |
|
555 | + '1.2.840.113549.1.9.16.2.23*' => 'certValues', |
|
556 | + '1.2.840.113549.1.9.16.2.24*' => 'revocationValues', |
|
557 | + '1.2.840.113549.1.9.16.2.25*' => 'escTimeStamp', |
|
558 | + '1.2.840.113549.1.9.16.2.26*' => 'certCRLTimestamp', |
|
559 | + '1.2.840.113549.1.9.16.2.27*' => 'archiveTimeStamp', |
|
560 | + '1.2.840.113549.1.9.16.2.28*' => 'signatureType', |
|
561 | + '1.2.840.113549.1.9.16.2.29*' => 'dvcsDvc', |
|
562 | + '1.2.840.113549.1.9.16.2.30*' => 'cekReference', |
|
563 | + '1.2.840.113549.1.9.16.2.31*' => 'maxCEKDecrypts', |
|
564 | + '1.2.840.113549.1.9.16.2.32*' => 'kekDerivationAlg', |
|
565 | + '1.2.840.113549.1.9.16.2.33*' => 'intendedRecipients', |
|
566 | + '1.2.840.113549.1.9.16.2.34*' => 'cmcUnsignedData', |
|
567 | + '1.2.840.113549.1.9.16.2.35*' => 'fwPackageID', |
|
568 | + '1.2.840.113549.1.9.16.2.36*' => 'fwTargetHardwareIDs', |
|
569 | + '1.2.840.113549.1.9.16.2.37*' => 'fwDecryptKeyID', |
|
570 | + '1.2.840.113549.1.9.16.2.38*' => 'fwImplCryptAlgs', |
|
571 | + '1.2.840.113549.1.9.16.2.39*' => 'fwWrappedFirmwareKey', |
|
572 | + '1.2.840.113549.1.9.16.2.40*' => 'fwCommunityIdentifiers', |
|
573 | + '1.2.840.113549.1.9.16.2.41*' => 'fwPkgMessageDigest', |
|
574 | + '1.2.840.113549.1.9.16.2.42*' => 'fwPackageInfo', |
|
575 | + '1.2.840.113549.1.9.16.2.43*' => 'fwImplCompressAlgs', |
|
576 | + '1.2.840.113549.1.9.16.2.44*' => 'etsAttrCertificateRefs', |
|
577 | + '1.2.840.113549.1.9.16.2.45*' => 'etsAttrRevocationRefs', |
|
578 | + '1.2.840.113549.1.9.16.2.46*' => 'binarySigningTime', |
|
579 | + '1.2.840.113549.1.9.16.2.47*' => 'signingCertificateV2', |
|
580 | + '1.2.840.113549.1.9.16.2.48*' => 'etsArchiveTimeStampV2', |
|
581 | + '1.2.840.113549.1.9.16.2.49*' => 'erInternal', |
|
582 | + '1.2.840.113549.1.9.16.2.50*' => 'erExternal', |
|
583 | + '1.2.840.113549.1.9.16.2.51*' => 'multipleSignatures', |
|
584 | + '1.2.840.113549.1.9.16.3.1*' => 'esDHwith3DES', |
|
585 | + '1.2.840.113549.1.9.16.3.2*' => 'esDHwithRC2', |
|
586 | + '1.2.840.113549.1.9.16.3.3*' => '3desWrap', |
|
587 | + '1.2.840.113549.1.9.16.3.4*' => 'rc2Wrap', |
|
588 | + '1.2.840.113549.1.9.16.3.5*' => 'esDH', |
|
589 | + '1.2.840.113549.1.9.16.3.6*' => 'cms3DESwrap', |
|
590 | + '1.2.840.113549.1.9.16.3.7*' => 'cmsRC2wrap', |
|
591 | + '1.2.840.113549.1.9.16.3.8*' => 'zlib', |
|
592 | + '1.2.840.113549.1.9.16.3.9*' => 'pwriKEK', |
|
593 | + '1.2.840.113549.1.9.16.3.10*' => 'ssDH', |
|
594 | + '1.2.840.113549.1.9.16.3.11*' => 'hmacWith3DESwrap', |
|
595 | + '1.2.840.113549.1.9.16.3.12*' => 'hmacWithAESwrap', |
|
596 | + '1.2.840.113549.1.9.16.3.13*' => 'md5XorExperiment', |
|
597 | + '1.2.840.113549.1.9.16.3.14*' => 'rsaKEM', |
|
598 | + '1.2.840.113549.1.9.16.3.15*' => 'authEnc128', |
|
599 | + '1.2.840.113549.1.9.16.3.16*' => 'authEnc256', |
|
600 | + '1.2.840.113549.1.9.16.4.1*' => 'certDist-ldap', |
|
601 | + '1.2.840.113549.1.9.16.5.1*' => 'sigPolicyQualifier-spuri x', |
|
602 | + '1.2.840.113549.1.9.16.5.2*' => 'sigPolicyQualifier-spUserNotice', |
|
603 | + '1.2.840.113549.1.9.16.6.1*' => 'proofOfOrigin', |
|
604 | + '1.2.840.113549.1.9.16.6.2*' => 'proofOfReceipt', |
|
605 | + '1.2.840.113549.1.9.16.6.3*' => 'proofOfDelivery', |
|
606 | + '1.2.840.113549.1.9.16.6.4*' => 'proofOfSender', |
|
607 | + '1.2.840.113549.1.9.16.6.5*' => 'proofOfApproval', |
|
608 | + '1.2.840.113549.1.9.16.6.6*' => 'proofOfCreation', |
|
609 | + '1.2.840.113549.1.9.16.8.1*' => 'glUseKEK', |
|
610 | + '1.2.840.113549.1.9.16.8.2*' => 'glDelete', |
|
611 | + '1.2.840.113549.1.9.16.8.3*' => 'glAddMember', |
|
612 | + '1.2.840.113549.1.9.16.8.4*' => 'glDeleteMember', |
|
613 | + '1.2.840.113549.1.9.16.8.5*' => 'glRekey', |
|
614 | + '1.2.840.113549.1.9.16.8.6*' => 'glAddOwner', |
|
615 | + '1.2.840.113549.1.9.16.8.7*' => 'glRemoveOwner', |
|
616 | + '1.2.840.113549.1.9.16.8.8*' => 'glkCompromise', |
|
617 | + '1.2.840.113549.1.9.16.8.9*' => 'glkRefresh', |
|
618 | + '1.2.840.113549.1.9.16.8.10*' => 'glFailInfo', |
|
619 | + '1.2.840.113549.1.9.16.8.11*' => 'glaQueryRequest', |
|
620 | + '1.2.840.113549.1.9.16.8.12*' => 'glaQueryResponse', |
|
621 | + '1.2.840.113549.1.9.16.8.13*' => 'glProvideCert', |
|
622 | + '1.2.840.113549.1.9.16.8.14*' => 'glUpdateCert', |
|
623 | + '1.2.840.113549.1.9.16.8.15*' => 'glKey', |
|
624 | + '1.2.840.113549.1.9.16.9*' => 'signatureTypeIdentifier', |
|
625 | + '1.2.840.113549.1.9.16.9.1*' => 'originatorSig', |
|
626 | + '1.2.840.113549.1.9.16.9.2*' => 'domainSig', |
|
627 | + '1.2.840.113549.1.9.16.9.3*' => 'additionalAttributesSig', |
|
628 | + '1.2.840.113549.1.9.16.9.4*' => 'reviewSig', |
|
629 | + '1.2.840.113549.1.9.16.11*' => 'capabilities', |
|
630 | + '1.2.840.113549.1.9.16.11.1*' => 'preferBinaryInside', |
|
631 | + '1.2.840.113549.1.9.20*' => 'friendlyName (for PKCS #12)', |
|
632 | + '1.2.840.113549.1.9.21*' => 'localKeyID (for PKCS #12)', |
|
633 | + '1.2.840.113549.1.9.22*' => 'certTypes (for PKCS #12)', |
|
634 | + '1.2.840.113549.1.9.22.1*' => 'x509Certificate (for PKCS #12)', |
|
635 | + '1.2.840.113549.1.9.22.2*' => 'sdsiCertificate (for PKCS #12)', |
|
636 | + '1.2.840.113549.1.9.23*' => 'crlTypes (for PKCS #12)', |
|
637 | + '1.2.840.113549.1.9.23.1*' => 'x509Crl (for PKCS #12)', |
|
638 | + '1.2.840.113549.1.9.24*' => 'pkcs9objectClass', |
|
639 | + '1.2.840.113549.1.9.25*' => 'pkcs9attributes', |
|
640 | + '1.2.840.113549.1.9.25.1*' => 'pkcs15Token', |
|
641 | + '1.2.840.113549.1.9.25.2*' => 'encryptedPrivateKeyInfo', |
|
642 | + '1.2.840.113549.1.9.25.3*' => 'randomNonce', |
|
643 | + '1.2.840.113549.1.9.25.4*' => 'sequenceNumber', |
|
644 | + '1.2.840.113549.1.9.25.5*' => 'pkcs7PDU', |
|
645 | + '1.2.840.113549.1.9.26*' => 'pkcs9syntax', |
|
646 | + '1.2.840.113549.1.9.27*' => 'pkcs9matchingRules', |
|
647 | + '1.2.840.113549.1.12*' => 'pkcs-12', |
|
648 | + '1.2.840.113549.1.12.1*' => 'pkcs-12-PbeIds', |
|
649 | + '1.2.840.113549.1.12.1.1*' => 'pbeWithSHAAnd128BitRC4', |
|
650 | + '1.2.840.113549.1.12.1.2*' => 'pbeWithSHAAnd40BitRC4', |
|
651 | + '1.2.840.113549.1.12.1.3*' => 'pbeWithSHAAnd3-KeyTripleDES-CBC', |
|
652 | + '1.2.840.113549.1.12.1.4*' => 'pbeWithSHAAnd2-KeyTripleDES-CBC', |
|
653 | + '1.2.840.113549.1.12.1.5*' => 'pbeWithSHAAnd128BitRC2-CBC', |
|
654 | + '1.2.840.113549.1.12.1.6*' => 'pbeWithSHAAnd40BitRC2-CBC', |
|
655 | + '1.2.840.113549.1.12.2*' => 'pkcs-12-ESPVKID', |
|
656 | + '1.2.840.113549.1.12.2.1*' => 'pkcs-12-PKCS8KeyShrouding', |
|
657 | + '1.2.840.113549.1.12.3*' => 'pkcs-12-BagIds', |
|
658 | + '1.2.840.113549.1.12.3.1*' => 'pkcs-12-keyBagId', |
|
659 | + '1.2.840.113549.1.12.3.2*' => 'pkcs-12-certAndCRLBagId', |
|
660 | + '1.2.840.113549.1.12.3.3*' => 'pkcs-12-secretBagId', |
|
661 | + '1.2.840.113549.1.12.3.4*' => 'pkcs-12-safeContentsId', |
|
662 | + '1.2.840.113549.1.12.3.5*' => 'pkcs-12-pkcs-8ShroudedKeyBagId', |
|
663 | + '1.2.840.113549.1.12.4*' => 'pkcs-12-CertBagID', |
|
664 | + '1.2.840.113549.1.12.4.1*' => 'pkcs-12-X509CertCRLBagID', |
|
665 | + '1.2.840.113549.1.12.4.2*' => 'pkcs-12-SDSICertBagID', |
|
666 | + '1.2.840.113549.1.12.5*' => 'pkcs-12-OID', |
|
667 | + '1.2.840.113549.1.12.5.1*' => 'pkcs-12-PBEID', |
|
668 | + '1.2.840.113549.1.12.5.1.1*' => 'pkcs-12-PBEWithSha1And128BitRC4', |
|
669 | + '1.2.840.113549.1.12.5.1.2*' => 'pkcs-12-PBEWithSha1And40BitRC4', |
|
670 | + '1.2.840.113549.1.12.5.1.3*' => 'pkcs-12-PBEWithSha1AndTripleDESCBC', |
|
671 | + '1.2.840.113549.1.12.5.1.4*' => 'pkcs-12-PBEWithSha1And128BitRC2CBC', |
|
672 | + '1.2.840.113549.1.12.5.1.5*' => 'pkcs-12-PBEWithSha1And40BitRC2CBC', |
|
673 | + '1.2.840.113549.1.12.5.1.6*' => 'pkcs-12-PBEWithSha1AndRC4', |
|
674 | + '1.2.840.113549.1.12.5.1.7*' => 'pkcs-12-PBEWithSha1AndRC2CBC', |
|
675 | + '1.2.840.113549.1.12.5.2*' => 'pkcs-12-EnvelopingID', |
|
676 | + '1.2.840.113549.1.12.5.2.1*' => 'pkcs-12-RSAEncryptionWith128BitRC4', |
|
677 | + '1.2.840.113549.1.12.5.2.2*' => 'pkcs-12-RSAEncryptionWith40BitRC4', |
|
678 | + '1.2.840.113549.1.12.5.2.3*' => 'pkcs-12-RSAEncryptionWithTripleDES', |
|
679 | + '1.2.840.113549.1.12.5.3*' => 'pkcs-12-SignatureID', |
|
680 | + '1.2.840.113549.1.12.5.3.1*' => 'pkcs-12-RSASignatureWithSHA1Digest', |
|
681 | + '1.2.840.113549.1.12.10*' => 'pkcs-12Version1', |
|
682 | + '1.2.840.113549.1.12.10.1*' => 'pkcs-12BadIds', |
|
683 | + '1.2.840.113549.1.12.10.1.1*' => 'pkcs-12-keyBag', |
|
684 | + '1.2.840.113549.1.12.10.1.2*' => 'pkcs-12-pkcs-8ShroudedKeyBag', |
|
685 | + '1.2.840.113549.1.12.10.1.3*' => 'pkcs-12-certBag', |
|
686 | + '1.2.840.113549.1.12.10.1.4*' => 'pkcs-12-crlBag', |
|
687 | + '1.2.840.113549.1.12.10.1.5*' => 'pkcs-12-secretBag', |
|
688 | + '1.2.840.113549.1.12.10.1.6*' => 'pkcs-12-safeContentsBag', |
|
689 | + '1.2.840.113549.1.15.1*' => 'pkcs15modules', |
|
690 | + '1.2.840.113549.1.15.2*' => 'pkcs15attributes', |
|
691 | + '1.2.840.113549.1.15.3*' => 'pkcs15contentType', |
|
692 | + '1.2.840.113549.1.15.3.1*' => 'pkcs15content', |
|
693 | + '1.2.840.113549.2*' => 'digestAlgorithm', |
|
694 | + '1.2.840.113549.2.2*' => 'md2', |
|
695 | + '1.2.840.113549.2.4*' => 'md4', |
|
696 | + '1.2.840.113549.2.5*' => 'md5', |
|
697 | + '1.2.840.113549.2.7*' => 'hmacWithSHA1', |
|
698 | + '1.2.840.113549.2.8*' => 'hmacWithSHA224', |
|
699 | + '1.2.840.113549.2.9*' => 'hmacWithSHA256', |
|
700 | + '1.2.840.113549.2.10*' => 'hmacWithSHA384', |
|
701 | + '1.2.840.113549.2.11*' => 'hmacWithSHA512', |
|
702 | + '1.2.840.113549.3*' => 'encryptionAlgorithm', |
|
703 | + '1.2.840.113549.3.2*' => 'rc2CBC', |
|
704 | + '1.2.840.113549.3.3*' => 'rc2ECB', |
|
705 | + '1.2.840.113549.3.4*' => 'rc4', |
|
706 | + '1.2.840.113549.3.5*' => 'rc4WithMAC', |
|
707 | + '1.2.840.113549.3.6*' => 'desx-CBC', |
|
708 | + '1.2.840.113549.3.7*' => 'des-EDE3-CBC', |
|
709 | + '1.2.840.113549.3.8*' => 'rc5CBC', |
|
710 | + '1.2.840.113549.3.9*' => 'rc5-CBCPad', |
|
711 | + '1.2.840.113549.3.10*' => 'desCDMF', |
|
712 | + '1.2.840.114021.1.6.1*' => 'Identrus unknown policyIdentifier', |
|
713 | + '1.2.840.114021.4.1*' => 'identrusOCSP', |
|
714 | + '1.2.840.113556.1.2.241*' => 'deliveryMechanism', |
|
715 | + '1.2.840.113556.1.3.0*' => 'site-Addressing', |
|
716 | + '1.2.840.113556.1.3.13*' => 'classSchema', |
|
717 | + '1.2.840.113556.1.3.14*' => 'attributeSchema', |
|
718 | + '1.2.840.113556.1.3.17*' => 'mailbox-Agent', |
|
719 | + '1.2.840.113556.1.3.22*' => 'mailbox', |
|
720 | + '1.2.840.113556.1.3.23*' => 'container', |
|
721 | + '1.2.840.113556.1.3.46*' => 'mailRecipient', |
|
722 | + '1.2.840.113556.1.2.281*' => 'ntSecurityDescriptor', |
|
723 | + '1.2.840.113556.1.4.145*' => 'revision', |
|
724 | + '1.2.840.113556.1.4.1327*' => 'pKIDefaultKeySpec', |
|
725 | + '1.2.840.113556.1.4.1328*' => 'pKIKeyUsage', |
|
726 | + '1.2.840.113556.1.4.1329*' => 'pKIMaxIssuingDepth', |
|
727 | + '1.2.840.113556.1.4.1330*' => 'pKICriticalExtensions', |
|
728 | + '1.2.840.113556.1.4.1331*' => 'pKIExpirationPeriod', |
|
729 | + '1.2.840.113556.1.4.1332*' => 'pKIOverlapPeriod', |
|
730 | + '1.2.840.113556.1.4.1333*' => 'pKIExtendedKeyUsage', |
|
731 | + '1.2.840.113556.1.4.1334*' => 'pKIDefaultCSPs', |
|
732 | + '1.2.840.113556.1.4.1335*' => 'pKIEnrollmentAccess', |
|
733 | + '1.2.840.113556.1.4.1429*' => 'msPKI-RA-Signature', |
|
734 | + '1.2.840.113556.1.4.1430*' => 'msPKI-Enrollment-Flag', |
|
735 | + '1.2.840.113556.1.4.1431*' => 'msPKI-Private-Key-Flag', |
|
736 | + '1.2.840.113556.1.4.1432*' => 'msPKI-Certificate-Name-Flag', |
|
737 | + '1.2.840.113556.1.4.1433*' => 'msPKI-Minimal-Key-Size', |
|
738 | + '1.2.840.113556.1.4.1434*' => 'msPKI-Template-Schema-Version', |
|
739 | + '1.2.840.113556.1.4.1435*' => 'msPKI-Template-Minor-Revision', |
|
740 | + '1.2.840.113556.1.4.1436*' => 'msPKI-Cert-Template-OID', |
|
741 | + '1.2.840.113556.1.4.1437*' => 'msPKI-Supersede-Templates', |
|
742 | + '1.2.840.113556.1.4.1438*' => 'msPKI-RA-Policies', |
|
743 | + '1.2.840.113556.1.4.1439*' => 'msPKI-Certificate-Policy', |
|
744 | + '1.2.840.113556.1.4.1674*' => 'msPKI-Certificate-Application-Policy', |
|
745 | + '1.2.840.113556.1.4.1675*' => 'msPKI-RA-Application-Policies', |
|
746 | + '1.2.840.113556.4.3*' => 'microsoftExcel', |
|
747 | + '1.2.840.113556.4.4*' => 'titledWithOID', |
|
748 | + '1.2.840.113556.4.5*' => 'microsoftPowerPoint', |
|
749 | + '1.2.840.113628.114.1.7*' => 'adobePKCS7', |
|
750 | + '1.2.840.113635.100*' => 'appleDataSecurity', |
|
751 | + '1.2.840.113635.100.1*' => 'appleTrustPolicy', |
|
752 | + '1.2.840.113635.100.1.1*' => 'appleISignTP', |
|
753 | + '1.2.840.113635.100.1.2*' => 'appleX509Basic', |
|
754 | + '1.2.840.113635.100.1.3*' => 'appleSSLPolicy', |
|
755 | + '1.2.840.113635.100.1.4*' => 'appleLocalCertGenPolicy', |
|
756 | + '1.2.840.113635.100.1.5*' => 'appleCSRGenPolicy', |
|
757 | + '1.2.840.113635.100.1.6*' => 'appleCRLPolicy', |
|
758 | + '1.2.840.113635.100.1.7*' => 'appleOCSPPolicy', |
|
759 | + '1.2.840.113635.100.1.8*' => 'appleSMIMEPolicy', |
|
760 | + '1.2.840.113635.100.1.9*' => 'appleEAPPolicy', |
|
761 | + '1.2.840.113635.100.1.10*' => 'appleSWUpdateSigningPolicy', |
|
762 | + '1.2.840.113635.100.1.11*' => 'appleIPSecPolicy', |
|
763 | + '1.2.840.113635.100.1.12*' => 'appleIChatPolicy', |
|
764 | + '1.2.840.113635.100.1.13*' => 'appleResourceSignPolicy', |
|
765 | + '1.2.840.113635.100.1.14*' => 'applePKINITClientPolicy', |
|
766 | + '1.2.840.113635.100.1.15*' => 'applePKINITServerPolicy', |
|
767 | + '1.2.840.113635.100.1.16*' => 'appleCodeSigningPolicy', |
|
768 | + '1.2.840.113635.100.1.17*' => 'applePackageSigningPolicy', |
|
769 | + '1.2.840.113635.100.2*' => 'appleSecurityAlgorithm', |
|
770 | + '1.2.840.113635.100.2.1*' => 'appleFEE', |
|
771 | + '1.2.840.113635.100.2.2*' => 'appleASC', |
|
772 | + '1.2.840.113635.100.2.3*' => 'appleFEE_MD5', |
|
773 | + '1.2.840.113635.100.2.4*' => 'appleFEE_SHA1', |
|
774 | + '1.2.840.113635.100.2.5*' => 'appleFEED', |
|
775 | + '1.2.840.113635.100.2.6*' => 'appleFEEDEXP', |
|
776 | + '1.2.840.113635.100.2.7*' => 'appleECDSA', |
|
777 | + '1.2.840.113635.100.3*' => 'appleDotMacCertificate', |
|
778 | + '1.2.840.113635.100.3.1*' => 'appleDotMacCertificateRequest', |
|
779 | + '1.2.840.113635.100.3.2*' => 'appleDotMacCertificateExtension', |
|
780 | + '1.2.840.113635.100.3.3*' => 'appleDotMacCertificateRequestValues', |
|
781 | + '1.2.840.113635.100.4*' => 'appleExtendedKeyUsage', |
|
782 | + '1.2.840.113635.100.4.1*' => 'appleCodeSigning', |
|
783 | + '1.2.840.113635.100.4.1.1*' => 'appleCodeSigningDevelopment', |
|
784 | + '1.2.840.113635.100.4.1.2*' => 'appleSoftwareUpdateSigning', |
|
785 | + '1.2.840.113635.100.4.1.3*' => 'appleCodeSigningThirdParty', |
|
786 | + '1.2.840.113635.100.4.1.4*' => 'appleResourceSigning', |
|
787 | + '1.2.840.113635.100.4.2*' => 'appleIChatSigning', |
|
788 | + '1.2.840.113635.100.4.3*' => 'appleIChatEncryption', |
|
789 | + '1.2.840.113635.100.4.4*' => 'appleSystemIdentity', |
|
790 | + '1.2.840.113635.100.4.5*' => 'appleCryptoEnv', |
|
791 | + '1.2.840.113635.100.4.5.1*' => 'appleCryptoProductionEnv', |
|
792 | + '1.2.840.113635.100.4.5.2*' => 'appleCryptoMaintenanceEnv', |
|
793 | + '1.2.840.113635.100.4.5.3*' => 'appleCryptoTestEnv', |
|
794 | + '1.2.840.113635.100.4.5.4*' => 'appleCryptoDevelopmentEnv', |
|
795 | + '1.2.840.113635.100.4.6*' => 'appleCryptoQoS', |
|
796 | + '1.2.840.113635.100.4.6.1*' => 'appleCryptoTier0QoS', |
|
797 | + '1.2.840.113635.100.4.6.2*' => 'appleCryptoTier1QoS', |
|
798 | + '1.2.840.113635.100.4.6.3*' => 'appleCryptoTier2QoS', |
|
799 | + '1.2.840.113635.100.4.6.4*' => 'appleCryptoTier3QoS', |
|
800 | + '1.2.840.113635.100.5*' => 'appleCertificatePolicies', |
|
801 | + '1.2.840.113635.100.5.1*' => 'appleCertificatePolicyID', |
|
802 | + '1.2.840.113635.100.5.2*' => 'appleDotMacCertificatePolicyID', |
|
803 | + '1.2.840.113635.100.5.3*' => 'appleADCCertificatePolicyID', |
|
804 | + '1.2.840.113635.100.6*' => 'appleCertificateExtensions', |
|
805 | + '1.2.840.113635.100.6.1*' => 'appleCertificateExtensionCodeSigning', |
|
806 | + '1.2.840.113635.100.6.1.1*' => 'appleCertificateExtensionAppleSigning', |
|
807 | + '1.2.840.113635.100.6.1.2*' => 'appleCertificateExtensionADCDeveloperSigning', |
|
808 | + '1.2.840.113635.100.6.1.3*' => 'appleCertificateExtensionADCAppleSigning', |
|
809 | + '1.3.6.1.4.1.311.2.1.4*' => 'spcIndirectDataContext', |
|
810 | + '1.3.6.1.4.1.311.2.1.10*' => 'spcAgencyInfo', |
|
811 | + '1.3.6.1.4.1.311.2.1.11*' => 'spcStatementType', |
|
812 | + '1.3.6.1.4.1.311.2.1.12*' => 'spcSpOpusInfo', |
|
813 | + '1.3.6.1.4.1.311.2.1.14*' => 'certReqExtensions', |
|
814 | + '1.3.6.1.4.1.311.2.1.15*' => 'spcPEImageData', |
|
815 | + '1.3.6.1.4.1.311.2.1.18*' => 'spcRawFileData', |
|
816 | + '1.3.6.1.4.1.311.2.1.19*' => 'spcStructuredStorageData', |
|
817 | + '1.3.6.1.4.1.311.2.1.20*' => 'spcJavaClassData (type 1)', |
|
818 | + '1.3.6.1.4.1.311.2.1.21*' => 'individualCodeSigning', |
|
819 | + '1.3.6.1.4.1.311.2.1.22*' => 'commercialCodeSigning', |
|
820 | + '1.3.6.1.4.1.311.2.1.25*' => 'spcLink (type 2)', |
|
821 | + '1.3.6.1.4.1.311.2.1.26*' => 'spcMinimalCriteriaInfo', |
|
822 | + '1.3.6.1.4.1.311.2.1.27*' => 'spcFinancialCriteriaInfo', |
|
823 | + '1.3.6.1.4.1.311.2.1.28*' => 'spcLink (type 3)', |
|
824 | + '1.3.6.1.4.1.311.3.2.1*' => 'timestampRequest', |
|
825 | + '1.3.6.1.4.1.311.10.1*' => 'certTrustList', |
|
826 | + '1.3.6.1.4.1.311.10.1.1*' => 'sortedCtl', |
|
827 | + '1.3.6.1.4.1.311.10.2*' => 'nextUpdateLocation', |
|
828 | + '1.3.6.1.4.1.311.10.3.1*' => 'certTrustListSigning', |
|
829 | + '1.3.6.1.4.1.311.10.3.2*' => 'timeStampSigning', |
|
830 | + '1.3.6.1.4.1.311.10.3.3*' => 'serverGatedCrypto', |
|
831 | + '1.3.6.1.4.1.311.10.3.3.1*' => 'serialized', |
|
832 | + '1.3.6.1.4.1.311.10.3.4*' => 'encryptedFileSystem', |
|
833 | + '1.3.6.1.4.1.311.10.3.5*' => 'whqlCrypto', |
|
834 | + '1.3.6.1.4.1.311.10.3.6*' => 'nt5Crypto', |
|
835 | + '1.3.6.1.4.1.311.10.3.7*' => 'oemWHQLCrypto', |
|
836 | + '1.3.6.1.4.1.311.10.3.8*' => 'embeddedNTCrypto', |
|
837 | + '1.3.6.1.4.1.311.10.3.9*' => 'rootListSigner', |
|
838 | + '1.3.6.1.4.1.311.10.3.10*' => 'qualifiedSubordination', |
|
839 | + '1.3.6.1.4.1.311.10.3.11*' => 'keyRecovery', |
|
840 | + '1.3.6.1.4.1.311.10.3.12*' => 'documentSigning', |
|
841 | + '1.3.6.1.4.1.311.10.3.13*' => 'lifetimeSigning', |
|
842 | + '1.3.6.1.4.1.311.10.3.14*' => 'mobileDeviceSoftware', |
|
843 | + '1.3.6.1.4.1.311.10.3.15*' => 'smartDisplay', |
|
844 | + '1.3.6.1.4.1.311.10.3.16*' => 'cspSignature', |
|
845 | + '1.3.6.1.4.1.311.10.3.4.1*' => 'efsRecovery', |
|
846 | + '1.3.6.1.4.1.311.10.4.1*' => 'yesnoTrustAttr', |
|
847 | + '1.3.6.1.4.1.311.10.5.1*' => 'drm', |
|
848 | + '1.3.6.1.4.1.311.10.5.2*' => 'drmIndividualization', |
|
849 | + '1.3.6.1.4.1.311.10.6.1*' => 'licenses', |
|
850 | + '1.3.6.1.4.1.311.10.6.2*' => 'licenseServer', |
|
851 | + '1.3.6.1.4.1.311.10.7.1*' => 'keyidRdn', |
|
852 | + '1.3.6.1.4.1.311.10.8.1*' => 'removeCertificate', |
|
853 | + '1.3.6.1.4.1.311.10.9.1*' => 'crossCertDistPoints', |
|
854 | + '1.3.6.1.4.1.311.10.10.1*' => 'cmcAddAttributes', |
|
855 | + '1.3.6.1.4.1.311.10.11*' => 'certPropIdPrefix', |
|
856 | + '1.3.6.1.4.1.311.10.11.4*' => 'certMd5HashPropId', |
|
857 | + '1.3.6.1.4.1.311.10.11.20*' => 'certKeyIdentifierPropId', |
|
858 | + '1.3.6.1.4.1.311.10.11.28*' => 'certIssuerSerialNumberMd5HashPropId', |
|
859 | + '1.3.6.1.4.1.311.10.11.29*' => 'certSubjectNameMd5HashPropId', |
|
860 | + '1.3.6.1.4.1.311.10.12.1*' => 'anyApplicationPolicy', |
|
861 | + '1.3.6.1.4.1.311.13.1*' => 'renewalCertificate', |
|
862 | + '1.3.6.1.4.1.311.13.2.1*' => 'enrolmentNameValuePair', |
|
863 | + '1.3.6.1.4.1.311.13.2.2*' => 'enrolmentCSP', |
|
864 | + '1.3.6.1.4.1.311.13.2.3*' => 'osVersion', |
|
865 | + '1.3.6.1.4.1.311.16.4*' => 'microsoftRecipientInfo', |
|
866 | + '1.3.6.1.4.1.311.17.1*' => 'pkcs12KeyProviderNameAttr', |
|
867 | + '1.3.6.1.4.1.311.17.2*' => 'localMachineKeyset', |
|
868 | + '1.3.6.1.4.1.311.17.3*' => 'pkcs12ExtendedAttributes', |
|
869 | + '1.3.6.1.4.1.311.20.1*' => 'autoEnrollCtlUsage', |
|
870 | + '1.3.6.1.4.1.311.20.2*' => 'enrollCerttypeExtension', |
|
871 | + '1.3.6.1.4.1.311.20.2.1*' => 'enrollmentAgent', |
|
872 | + '1.3.6.1.4.1.311.20.2.2*' => 'smartcardLogon', |
|
873 | + '1.3.6.1.4.1.311.20.2.3*' => 'universalPrincipalName', |
|
874 | + '1.3.6.1.4.1.311.20.3*' => 'certManifold', |
|
875 | + '1.3.6.1.4.1.311.21.1*' => 'cAKeyCertIndexPair', |
|
876 | + '1.3.6.1.4.1.311.21.5*' => 'caExchange', |
|
877 | + '1.3.6.1.4.1.311.21.2*' => 'certSrvPreviousCertHash', |
|
878 | + '1.3.6.1.4.1.311.21.3*' => 'crlVirtualBase', |
|
879 | + '1.3.6.1.4.1.311.21.4*' => 'crlNextPublish', |
|
880 | + '1.3.6.1.4.1.311.21.6*' => 'keyRecovery', |
|
881 | + '1.3.6.1.4.1.311.21.7*' => 'certificateTemplate', |
|
882 | + '1.3.6.1.4.1.311.21.9*' => 'rdnDummySigner', |
|
883 | + '1.3.6.1.4.1.311.21.10*' => 'applicationCertPolicies', |
|
884 | + '1.3.6.1.4.1.311.21.11*' => 'applicationPolicyMappings', |
|
885 | + '1.3.6.1.4.1.311.21.12*' => 'applicationPolicyConstraints', |
|
886 | + '1.3.6.1.4.1.311.21.13*' => 'archivedKey', |
|
887 | + '1.3.6.1.4.1.311.21.14*' => 'crlSelfCDP', |
|
888 | + '1.3.6.1.4.1.311.21.15*' => 'requireCertChainPolicy', |
|
889 | + '1.3.6.1.4.1.311.21.16*' => 'archivedKeyCertHash', |
|
890 | + '1.3.6.1.4.1.311.21.17*' => 'issuedCertHash', |
|
891 | + '1.3.6.1.4.1.311.21.19*' => 'dsEmailReplication', |
|
892 | + '1.3.6.1.4.1.311.21.20*' => 'requestClientInfo', |
|
893 | + '1.3.6.1.4.1.311.21.21*' => 'encryptedKeyHash', |
|
894 | + '1.3.6.1.4.1.311.21.22*' => 'certsrvCrossCaVersion', |
|
895 | + '1.3.6.1.4.1.311.25.1*' => 'ntdsReplication', |
|
896 | + '1.3.6.1.4.1.311.31.1*' => 'productUpdate', |
|
897 | + '1.3.6.1.4.1.311.47.1.1*' => 'systemHealth', |
|
898 | + '1.3.6.1.4.1.311.47.1.3*' => 'systemHealthLoophole', |
|
899 | + '1.3.6.1.4.1.311.60.1.1*' => 'rootProgramFlags', |
|
900 | + '1.3.6.1.4.1.311.61.1.1*' => 'kernelModeCodeSigning', |
|
901 | + '1.3.6.1.4.1.311.60.2.1.1*' => 'jurisdictionOfIncorporationL', |
|
902 | + '1.3.6.1.4.1.311.60.2.1.2*' => 'jurisdictionOfIncorporationSP', |
|
903 | + '1.3.6.1.4.1.311.60.2.1.3*' => 'jurisdictionOfIncorporationC', |
|
904 | + '1.3.6.1.4.1.311.88.2.1*' => 'originalFilename', |
|
905 | + '1.3.6.1.4.1.188.7.1.1*' => 'ascom', |
|
906 | + '1.3.6.1.4.1.188.7.1.1.1*' => 'ideaECB', |
|
907 | + '1.3.6.1.4.1.188.7.1.1.2*' => 'ideaCBC', |
|
908 | + '1.3.6.1.4.1.188.7.1.1.3*' => 'ideaCFB', |
|
909 | + '1.3.6.1.4.1.188.7.1.1.4*' => 'ideaOFB', |
|
910 | + '1.3.6.1.4.1.2428.10.1.1*' => 'UNINETT policyIdentifier', |
|
911 | + '1.3.6.1.4.1.2712.10*' => 'ICE-TEL policyIdentifier', |
|
912 | + '1.3.6.1.4.1.2786.1.1.1*' => 'ICE-TEL Italian policyIdentifier', |
|
913 | + '1.3.6.1.4.1.3029.1.1.1*' => 'blowfishECB', |
|
914 | + '1.3.6.1.4.1.3029.1.1.2*' => 'blowfishCBC', |
|
915 | + '1.3.6.1.4.1.3029.1.1.3*' => 'blowfishCFB', |
|
916 | + '1.3.6.1.4.1.3029.1.1.4*' => 'blowfishOFB', |
|
917 | + '1.3.6.1.4.1.3029.1.2.1*' => 'elgamal', |
|
918 | + '1.3.6.1.4.1.3029.1.2.1.1*' => 'elgamalWithSHA-1', |
|
919 | + '1.3.6.1.4.1.3029.1.2.1.2*' => 'elgamalWithRIPEMD-160', |
|
920 | + '1.3.6.1.4.1.3029.3.1.1*' => 'cryptlibPresenceCheck', |
|
921 | + '1.3.6.1.4.1.3029.3.1.2*' => 'pkiBoot', |
|
922 | + '1.3.6.1.4.1.3029.3.1.4*' => 'crlExtReason', |
|
923 | + '1.3.6.1.4.1.3029.3.1.5*' => 'keyFeatures', |
|
924 | + '1.3.6.1.4.1.3029.4.1*' => 'cryptlibContent', |
|
925 | + '1.3.6.1.4.1.3029.4.1.1*' => 'cryptlibConfigData', |
|
926 | + '1.3.6.1.4.1.3029.4.1.2*' => 'cryptlibUserIndex', |
|
927 | + '1.3.6.1.4.1.3029.4.1.3*' => 'cryptlibUserInfo', |
|
928 | + '1.3.6.1.4.1.3029.4.1.4*' => 'rtcsRequest', |
|
929 | + '1.3.6.1.4.1.3029.4.1.5*' => 'rtcsResponse', |
|
930 | + '1.3.6.1.4.1.3029.4.1.6*' => 'rtcsResponseExt', |
|
931 | + '1.3.6.1.4.1.3029.42.11172.1*' => 'mpeg-1', |
|
932 | + '1.3.6.1.4.1.3029.88.89.90.90.89*' => 'xYZZY policyIdentifier', |
|
933 | + '1.3.6.1.4.1.3401.8.1.1*' => 'pgpExtension', |
|
934 | + '1.3.6.1.4.1.3576.7*' => 'eciaAscX12Edi', |
|
935 | + '1.3.6.1.4.1.3576.7.1*' => 'plainEDImessage', |
|
936 | + '1.3.6.1.4.1.3576.7.2*' => 'signedEDImessage', |
|
937 | + '1.3.6.1.4.1.3576.7.5*' => 'integrityEDImessage', |
|
938 | + '1.3.6.1.4.1.3576.7.65*' => 'iaReceiptMessage', |
|
939 | + '1.3.6.1.4.1.3576.7.97*' => 'iaStatusMessage', |
|
940 | + '1.3.6.1.4.1.3576.8*' => 'eciaEdifact', |
|
941 | + '1.3.6.1.4.1.3576.9*' => 'eciaNonEdi', |
|
942 | + '1.3.6.1.4.1.4146*' => 'Globalsign', |
|
943 | + '1.3.6.1.4.1.4146.1*' => 'globalsignPolicy', |
|
944 | + '1.3.6.1.4.1.4146.1.10*' => 'globalsignDVPolicy', |
|
945 | + '1.3.6.1.4.1.4146.1.20*' => 'globalsignOVPolicy', |
|
946 | + '1.3.6.1.4.1.4146.1.30*' => 'globalsignTSAPolicy', |
|
947 | + '1.3.6.1.4.1.4146.1.40*' => 'globalsignClientCertPolicy', |
|
948 | + '1.3.6.1.4.1.4146.1.50*' => 'globalsignCodeSignPolicy', |
|
949 | + '1.3.6.1.4.1.4146.1.60*' => 'globalsignRootSignPolicy', |
|
950 | + '1.3.6.1.4.1.4146.1.70*' => 'globalsignTrustedRootPolicy', |
|
951 | + '1.3.6.1.4.1.4146.1.80*' => 'globalsignEDIClientPolicy', |
|
952 | + '1.3.6.1.4.1.4146.1.81*' => 'globalsignEDIServerPolicy', |
|
953 | + '1.3.6.1.4.1.4146.1.90*' => 'globalsignTPMRootPolicy', |
|
954 | + '1.3.6.1.4.1.4146.1.95*' => 'globalsignOCSPPolicy', |
|
955 | + '1.3.6.1.4.1.5309.1.2.2*' => 'edelWebTSAPolicy', |
|
956 | + '1.3.6.1.4.1.5472*' => 'timeproof', |
|
957 | + '1.3.6.1.4.1.5472.1*' => 'tss', |
|
958 | + '1.3.6.1.4.1.5472.1.1*' => 'tss80', |
|
959 | + '1.3.6.1.4.1.5472.1.2*' => 'tss380', |
|
960 | + '1.3.6.1.4.1.5472.1.3*' => 'tss400', |
|
961 | + '1.3.6.1.4.1.5770.0.3*' => 'secondaryPractices', |
|
962 | + '1.3.6.1.4.1.5770.0.4*' => 'physicianIdentifiers', |
|
963 | + '1.3.6.1.4.1.6449.1.2.1.3.1*' => 'comodoPolicy', |
|
964 | + '1.3.6.1.4.1.6449.1.3.5.2*' => 'validityModelX', |
|
965 | + '1.3.6.1.4.1.8301.3.5.1*' => 'validityModelChain', |
|
966 | + '1.3.6.1.4.1.8301.3.5.2*' => 'validityModelShell', |
|
967 | + '1.3.6.1.4.1.8231.1*' => 'rolUnicoNacional', |
|
968 | + '1.3.6.1.4.1.11591*' => 'gnu', |
|
969 | + '1.3.6.1.4.1.11591.1*' => 'gnuRadius', |
|
970 | + '1.3.6.1.4.1.11591.3*' => 'gnuRadar', |
|
971 | + '1.3.6.1.4.1.11591.12*' => 'gnuDigestAlgorithm', |
|
972 | + '1.3.6.1.4.1.11591.12.2*' => 'tiger', |
|
973 | + '1.3.6.1.4.1.11591.13*' => 'gnuEncryptionAlgorithm', |
|
974 | + '1.3.6.1.4.1.11591.13.2*' => 'serpent', |
|
975 | + '1.3.6.1.4.1.11591.13.2.1*' => 'serpent128_ECB', |
|
976 | + '1.3.6.1.4.1.11591.13.2.2*' => 'serpent128_CBC', |
|
977 | + '1.3.6.1.4.1.11591.13.2.3*' => 'serpent128_OFB', |
|
978 | + '1.3.6.1.4.1.11591.13.2.4*' => 'serpent128_CFB', |
|
979 | + '1.3.6.1.4.1.11591.13.2.21*' => 'serpent192_ECB', |
|
980 | + '1.3.6.1.4.1.11591.13.2.22*' => 'serpent192_CBC', |
|
981 | + '1.3.6.1.4.1.11591.13.2.23*' => 'serpent192_OFB', |
|
982 | + '1.3.6.1.4.1.11591.13.2.24*' => 'serpent192_CFB', |
|
983 | + '1.3.6.1.4.1.11591.13.2.41*' => 'serpent256_ECB', |
|
984 | + '1.3.6.1.4.1.11591.13.2.42*' => 'serpent256_CBC', |
|
985 | + '1.3.6.1.4.1.11591.13.2.43*' => 'serpent256_OFB', |
|
986 | + '1.3.6.1.4.1.11591.13.2.44*' => 'serpent256_CFB', |
|
987 | + '1.3.6.1.4.1.16334.509.1.1*' => 'Northrop Grumman extKeyUsage?', |
|
988 | + '1.3.6.1.4.1.16334.509.2.1*' => 'ngcClass1', |
|
989 | + '1.3.6.1.4.1.16334.509.2.2*' => 'ngcClass2', |
|
990 | + '1.3.6.1.4.1.16334.509.2.3*' => 'ngcClass3', |
|
991 | + '1.3.6.1.5.5.7*' => 'pkix', |
|
992 | + '1.3.6.1.5.5.7.0.12*' => 'attributeCert', |
|
993 | + '1.3.6.1.5.5.7.1*' => 'privateExtension', |
|
994 | + '1.3.6.1.5.5.7.1.1*' => 'authorityInfoAccess', |
|
995 | + '1.3.6.1.5.5.7.1.2*' => 'biometricInfo', |
|
996 | + '1.3.6.1.5.5.7.1.3*' => 'qcStatements', |
|
997 | + '1.3.6.1.5.5.7.1.4*' => 'acAuditIdentity', |
|
998 | + '1.3.6.1.5.5.7.1.5*' => 'acTargeting', |
|
999 | + '1.3.6.1.5.5.7.1.6*' => 'acAaControls', |
|
1000 | + '1.3.6.1.5.5.7.1.7*' => 'ipAddrBlocks', |
|
1001 | + '1.3.6.1.5.5.7.1.8*' => 'autonomousSysIds', |
|
1002 | + '1.3.6.1.5.5.7.1.9*' => 'routerIdentifier', |
|
1003 | + '1.3.6.1.5.5.7.1.10*' => 'acProxying', |
|
1004 | + '1.3.6.1.5.5.7.1.11*' => 'subjectInfoAccess', |
|
1005 | + '1.3.6.1.5.5.7.1.12*' => 'logoType', |
|
1006 | + '1.3.6.1.5.5.7.1.13*' => 'wlanSSID', |
|
1007 | + '1.3.6.1.5.5.7.2*' => 'policyQualifierIds', |
|
1008 | + '1.3.6.1.5.5.7.2.1*' => 'cps', |
|
1009 | + '1.3.6.1.5.5.7.2.2*' => 'unotice', |
|
1010 | + '1.3.6.1.5.5.7.2.3*' => 'textNotice', |
|
1011 | + '1.3.6.1.5.5.7.3*' => 'keyPurpose', |
|
1012 | + '1.3.6.1.5.5.7.3.1*' => 'serverAuth', |
|
1013 | + '1.3.6.1.5.5.7.3.2*' => 'clientAuth', |
|
1014 | + '1.3.6.1.5.5.7.3.3*' => 'codeSigning', |
|
1015 | + '1.3.6.1.5.5.7.3.4*' => 'emailProtection', |
|
1016 | + '1.3.6.1.5.5.7.3.5*' => 'ipsecEndSystem', |
|
1017 | + '1.3.6.1.5.5.7.3.6*' => 'ipsecTunnel', |
|
1018 | + '1.3.6.1.5.5.7.3.7*' => 'ipsecUser', |
|
1019 | + '1.3.6.1.5.5.7.3.8*' => 'timeStamping', |
|
1020 | + '1.3.6.1.5.5.7.3.9*' => 'ocspSigning', |
|
1021 | + '1.3.6.1.5.5.7.3.10*' => 'dvcs', |
|
1022 | + '1.3.6.1.5.5.7.3.11*' => 'sbgpCertAAServerAuth', |
|
1023 | + '1.3.6.1.5.5.7.3.13*' => 'eapOverPPP', |
|
1024 | + '1.3.6.1.5.5.7.3.14*' => 'eapOverLAN', |
|
1025 | + '1.3.6.1.5.5.7.4*' => 'cmpInformationTypes', |
|
1026 | + '1.3.6.1.5.5.7.4.1*' => 'caProtEncCert', |
|
1027 | + '1.3.6.1.5.5.7.4.2*' => 'signKeyPairTypes', |
|
1028 | + '1.3.6.1.5.5.7.4.3*' => 'encKeyPairTypes', |
|
1029 | + '1.3.6.1.5.5.7.4.4*' => 'preferredSymmAlg', |
|
1030 | + '1.3.6.1.5.5.7.4.5*' => 'caKeyUpdateInfo', |
|
1031 | + '1.3.6.1.5.5.7.4.6*' => 'currentCRL', |
|
1032 | + '1.3.6.1.5.5.7.4.7*' => 'unsupportedOIDs', |
|
1033 | + '1.3.6.1.5.5.7.4.10*' => 'keyPairParamReq', |
|
1034 | + '1.3.6.1.5.5.7.4.11*' => 'keyPairParamRep', |
|
1035 | + '1.3.6.1.5.5.7.4.12*' => 'revPassphrase', |
|
1036 | + '1.3.6.1.5.5.7.4.13*' => 'implicitConfirm', |
|
1037 | + '1.3.6.1.5.5.7.4.14*' => 'confirmWaitTime', |
|
1038 | + '1.3.6.1.5.5.7.4.15*' => 'origPKIMessage', |
|
1039 | + '1.3.6.1.5.5.7.4.16*' => 'suppLangTags', |
|
1040 | + '1.3.6.1.5.5.7.5*' => 'crmfRegistration', |
|
1041 | + '1.3.6.1.5.5.7.5.1*' => 'regCtrl', |
|
1042 | + '1.3.6.1.5.5.7.5.1.1*' => 'regToken', |
|
1043 | + '1.3.6.1.5.5.7.5.1.2*' => 'authenticator', |
|
1044 | + '1.3.6.1.5.5.7.5.1.3*' => 'pkiPublicationInfo', |
|
1045 | + '1.3.6.1.5.5.7.5.1.4*' => 'pkiArchiveOptions', |
|
1046 | + '1.3.6.1.5.5.7.5.1.5*' => 'oldCertID', |
|
1047 | + '1.3.6.1.5.5.7.5.1.6*' => 'protocolEncrKey', |
|
1048 | + '1.3.6.1.5.5.7.5.1.7*' => 'altCertTemplate', |
|
1049 | + '1.3.6.1.5.5.7.5.1.8*' => 'wtlsTemplate', |
|
1050 | + '1.3.6.1.5.5.7.5.2*' => 'utf8Pairs', |
|
1051 | + '1.3.6.1.5.5.7.5.2.1*' => 'utf8Pairs', |
|
1052 | + '1.3.6.1.5.5.7.5.2.2*' => 'certReq', |
|
1053 | + '1.3.6.1.5.5.7.6*' => 'algorithms', |
|
1054 | + '1.3.6.1.5.5.7.6.1*' => 'des40', |
|
1055 | + '1.3.6.1.5.5.7.6.2*' => 'noSignature', |
|
1056 | + '1.3.6.1.5.5.7.6.3*' => 'dh-sig-hmac-sha1', |
|
1057 | + '1.3.6.1.5.5.7.6.4*' => 'dh-pop', |
|
1058 | + '1.3.6.1.5.5.7.7*' => 'cmcControls', |
|
1059 | + '1.3.6.1.5.5.7.8*' => 'otherNames', |
|
1060 | + '1.3.6.1.5.5.7.8.1*' => 'personalData', |
|
1061 | + '1.3.6.1.5.5.7.8.2*' => 'userGroup', |
|
1062 | + '1.3.6.1.5.5.7.9*' => 'personalData', |
|
1063 | + '1.3.6.1.5.5.7.9.1*' => 'dateOfBirth', |
|
1064 | + '1.3.6.1.5.5.7.9.2*' => 'placeOfBirth', |
|
1065 | + '1.3.6.1.5.5.7.9.3*' => 'gender', |
|
1066 | + '1.3.6.1.5.5.7.9.4*' => 'countryOfCitizenship', |
|
1067 | + '1.3.6.1.5.5.7.9.5*' => 'countryOfResidence', |
|
1068 | + '1.3.6.1.5.5.7.10*' => 'attributeCertificate', |
|
1069 | + '1.3.6.1.5.5.7.10.1*' => 'authenticationInfo', |
|
1070 | + '1.3.6.1.5.5.7.10.2*' => 'accessIdentity', |
|
1071 | + '1.3.6.1.5.5.7.10.3*' => 'chargingIdentity', |
|
1072 | + '1.3.6.1.5.5.7.10.4*' => 'group', |
|
1073 | + '1.3.6.1.5.5.7.10.5*' => 'role', |
|
1074 | + '1.3.6.1.5.5.7.10.6*' => 'wlanSSID', |
|
1075 | + '1.3.6.1.5.5.7.11*' => 'personalData', |
|
1076 | + '1.3.6.1.5.5.7.11.1*' => 'pkixQCSyntax-v1', |
|
1077 | + '1.3.6.1.5.5.7.14.2*' => 'resourceCertificatePolicy', |
|
1078 | + '1.3.6.1.5.5.7.20*' => 'logo', |
|
1079 | + '1.3.6.1.5.5.7.20.1*' => 'logoLoyalty', |
|
1080 | + '1.3.6.1.5.5.7.20.2*' => 'logoBackground', |
|
1081 | + '1.3.6.1.5.5.7.48.1*' => 'ocsp', |
|
1082 | + '1.3.6.1.5.5.7.48.1.1*' => 'ocspBasic', |
|
1083 | + '1.3.6.1.5.5.7.48.1.2*' => 'ocspNonce', |
|
1084 | + '1.3.6.1.5.5.7.48.1.3*' => 'ocspCRL', |
|
1085 | + '1.3.6.1.5.5.7.48.1.4*' => 'ocspResponse', |
|
1086 | + '1.3.6.1.5.5.7.48.1.5*' => 'ocspNoCheck', |
|
1087 | + '1.3.6.1.5.5.7.48.1.6*' => 'ocspArchiveCutoff', |
|
1088 | + '1.3.6.1.5.5.7.48.1.7*' => 'ocspServiceLocator', |
|
1089 | + '1.3.6.1.5.5.7.48.2*' => 'caIssuers', |
|
1090 | + '1.3.6.1.5.5.7.48.3*' => 'timeStamping', |
|
1091 | + '1.3.6.1.5.5.7.48.4*' => 'dvcs', |
|
1092 | + '1.3.6.1.5.5.7.48.5*' => 'caRepository', |
|
1093 | + '1.3.6.1.5.5.7.48.7*' => 'signedObjectRepository', |
|
1094 | + '1.3.6.1.5.5.7.48.10*' => 'rpkiManifest', |
|
1095 | + '1.3.6.1.5.5.7.48.11*' => 'signedObject', |
|
1096 | + '1.3.6.1.5.5.8.1.1*' => 'hmacMD5', |
|
1097 | + '1.3.6.1.5.5.8.1.2*' => 'hmacSHA', |
|
1098 | + '1.3.6.1.5.5.8.1.3*' => 'hmacTiger', |
|
1099 | + '1.3.6.1.5.5.8.2.2*' => 'iKEIntermediate', |
|
1100 | + '1.3.12.2.1011.7.1*' => 'decEncryptionAlgorithm', |
|
1101 | + '1.3.12.2.1011.7.1.2*' => 'decDEA', |
|
1102 | + '1.3.12.2.1011.7.2*' => 'decHashAlgorithm', |
|
1103 | + '1.3.12.2.1011.7.2.1*' => 'decMD2', |
|
1104 | + '1.3.12.2.1011.7.2.2*' => 'decMD4', |
|
1105 | + '1.3.12.2.1011.7.3*' => 'decSignatureAlgorithm', |
|
1106 | + '1.3.12.2.1011.7.3.1*' => 'decMD2withRSA', |
|
1107 | + '1.3.12.2.1011.7.3.2*' => 'decMD4withRSA', |
|
1108 | + '1.3.12.2.1011.7.3.3*' => 'decDEAMAC', |
|
1109 | + '1.3.14.2.26.5*' => 'sha', |
|
1110 | + '1.3.14.3.2.1.1*' => 'rsa', |
|
1111 | + '1.3.14.3.2.2*' => 'md4WitRSA', |
|
1112 | + '1.3.14.3.2.3*' => 'md5WithRSA', |
|
1113 | + '1.3.14.3.2.4*' => 'md4WithRSAEncryption', |
|
1114 | + '1.3.14.3.2.2.1*' => 'sqmod-N', |
|
1115 | + '1.3.14.3.2.3.1*' => 'sqmod-NwithRSA', |
|
1116 | + '1.3.14.3.2.6*' => 'desECB', |
|
1117 | + '1.3.14.3.2.7*' => 'desCBC', |
|
1118 | + '1.3.14.3.2.8*' => 'desOFB', |
|
1119 | + '1.3.14.3.2.9*' => 'desCFB', |
|
1120 | + '1.3.14.3.2.10*' => 'desMAC', |
|
1121 | + '1.3.14.3.2.11*' => 'rsaSignature', |
|
1122 | + '1.3.14.3.2.12*' => 'dsa', |
|
1123 | + '1.3.14.3.2.13*' => 'dsaWithSHA', |
|
1124 | + '1.3.14.3.2.14*' => 'mdc2WithRSASignature', |
|
1125 | + '1.3.14.3.2.15*' => 'shaWithRSASignature', |
|
1126 | + '1.3.14.3.2.16*' => 'dhWithCommonModulus', |
|
1127 | + '1.3.14.3.2.17*' => 'desEDE', |
|
1128 | + '1.3.14.3.2.18*' => 'sha', |
|
1129 | + '1.3.14.3.2.19*' => 'mdc-2', |
|
1130 | + '1.3.14.3.2.20*' => 'dsaCommon', |
|
1131 | + '1.3.14.3.2.21*' => 'dsaCommonWithSHA', |
|
1132 | + '1.3.14.3.2.22*' => 'rsaKeyTransport', |
|
1133 | + '1.3.14.3.2.23*' => 'keyed-hash-seal', |
|
1134 | + '1.3.14.3.2.24*' => 'md2WithRSASignature', |
|
1135 | + '1.3.14.3.2.25*' => 'md5WithRSASignature', |
|
1136 | + '1.3.14.3.2.26*' => 'sha1', |
|
1137 | + '1.3.14.3.2.27*' => 'dsaWithSHA1', |
|
1138 | + '1.3.14.3.2.28*' => 'dsaWithCommonSHA1', |
|
1139 | + # '1.3.14.3.2.29*' => 'sha-1WithRSAEncryption', |
|
1140 | + '1.3.14.3.2.29*' => 'sha1WithRSAEncryption', |
|
1141 | + '1.3.14.3.3.1*' => 'simple-strong-auth-mechanism', |
|
1142 | + '1.3.14.7.2.1.1*' => 'ElGamal', |
|
1143 | + '1.3.14.7.2.3.1*' => 'md2WithRSA', |
|
1144 | + '1.3.14.7.2.3.2*' => 'md2WithElGamal', |
|
1145 | + '1.3.36.1*' => 'document', |
|
1146 | + '1.3.36.1.1*' => 'finalVersion', |
|
1147 | + '1.3.36.1.2*' => 'draft', |
|
1148 | + '1.3.36.2*' => 'sio', |
|
1149 | + '1.3.36.2.1*' => 'sedu', |
|
1150 | + '1.3.36.3*' => 'algorithm', |
|
1151 | + '1.3.36.3.1*' => 'encryptionAlgorithm', |
|
1152 | + '1.3.36.3.1.1*' => 'des', |
|
1153 | + '1.3.36.3.1.1.1*' => 'desECB_pad', |
|
1154 | + '1.3.36.3.1.1.1.1*' => 'desECB_ISOpad', |
|
1155 | + '1.3.36.3.1.1.2.1*' => 'desCBC_pad', |
|
1156 | + '1.3.36.3.1.1.2.1.1*' => 'desCBC_ISOpad', |
|
1157 | + '1.3.36.3.1.3*' => 'des_3', |
|
1158 | + '1.3.36.3.1.3.1.1*' => 'des_3ECB_pad', |
|
1159 | + '1.3.36.3.1.3.1.1.1*' => 'des_3ECB_ISOpad', |
|
1160 | + '1.3.36.3.1.3.2.1*' => 'des_3CBC_pad', |
|
1161 | + '1.3.36.3.1.3.2.1.1*' => 'des_3CBC_ISOpad', |
|
1162 | + '1.3.36.3.1.2*' => 'idea', |
|
1163 | + '1.3.36.3.1.2.1*' => 'ideaECB', |
|
1164 | + '1.3.36.3.1.2.1.1*' => 'ideaECB_pad', |
|
1165 | + '1.3.36.3.1.2.1.1.1*' => 'ideaECB_ISOpad', |
|
1166 | + '1.3.36.3.1.2.2*' => 'ideaCBC', |
|
1167 | + '1.3.36.3.1.2.2.1*' => 'ideaCBC_pad', |
|
1168 | + '1.3.36.3.1.2.2.1.1*' => 'ideaCBC_ISOpad', |
|
1169 | + '1.3.36.3.1.2.3*' => 'ideaOFB', |
|
1170 | + '1.3.36.3.1.2.4*' => 'ideaCFB', |
|
1171 | + '1.3.36.3.1.4*' => 'rsaEncryption', |
|
1172 | + '1.3.36.3.1.4.512.17*' => 'rsaEncryptionWithlmod512expe17', |
|
1173 | + '1.3.36.3.1.5*' => 'bsi-1', |
|
1174 | + '1.3.36.3.1.5.1*' => 'bsi_1ECB_pad', |
|
1175 | + '1.3.36.3.1.5.2*' => 'bsi_1CBC_pad', |
|
1176 | + '1.3.36.3.1.5.2.1*' => 'bsi_1CBC_PEMpad', |
|
1177 | + '1.3.36.3.2*' => 'hashAlgorithm', |
|
1178 | + '1.3.36.3.2.1*' => 'ripemd160', |
|
1179 | + '1.3.36.3.2.2*' => 'ripemd128', |
|
1180 | + '1.3.36.3.2.3*' => 'ripemd256', |
|
1181 | + '1.3.36.3.2.4*' => 'mdc2singleLength', |
|
1182 | + '1.3.36.3.2.5*' => 'mdc2doubleLength', |
|
1183 | + '1.3.36.3.3*' => 'signatureAlgorithm', |
|
1184 | + '1.3.36.3.3.1*' => 'rsaSignature', |
|
1185 | + '1.3.36.3.3.1.1*' => 'rsaSignatureWithsha1', |
|
1186 | + '1.3.36.3.3.1.1.512.2*' => 'rsaSignatureWithsha1_l512_l2', |
|
1187 | + '1.3.36.3.3.1.1.640.2*' => 'rsaSignatureWithsha1_l640_l2', |
|
1188 | + '1.3.36.3.3.1.1.768.2*' => 'rsaSignatureWithsha1_l768_l2', |
|
1189 | + '1.3.36.3.3.1.1.896.2*' => 'rsaSignatureWithsha1_l896_l2', |
|
1190 | + '1.3.36.3.3.1.1.1024.2*' => 'rsaSignatureWithsha1_l1024_l2', |
|
1191 | + '1.3.36.3.3.1.1.512.3*' => 'rsaSignatureWithsha1_l512_l3', |
|
1192 | + '1.3.36.3.3.1.1.640.3*' => 'rsaSignatureWithsha1_l640_l3', |
|
1193 | + '1.3.36.3.3.1.1.768.3*' => 'rsaSignatureWithsha1_l768_l3', |
|
1194 | + '1.3.36.3.3.1.1.896.3*' => 'rsaSignatureWithsha1_l896_l3', |
|
1195 | + '1.3.36.3.3.1.1.1024.3*' => 'rsaSignatureWithsha1_l1024_l3', |
|
1196 | + '1.3.36.3.3.1.1.512.5*' => 'rsaSignatureWithsha1_l512_l5', |
|
1197 | + '1.3.36.3.3.1.1.640.5*' => 'rsaSignatureWithsha1_l640_l5', |
|
1198 | + '1.3.36.3.3.1.1.768.5*' => 'rsaSignatureWithsha1_l768_l5', |
|
1199 | + '1.3.36.3.3.1.1.896.5*' => 'rsaSignatureWithsha1_l896_l5', |
|
1200 | + '1.3.36.3.3.1.1.1024.5*' => 'rsaSignatureWithsha1_l1024_l5', |
|
1201 | + '1.3.36.3.3.1.1.512.9*' => 'rsaSignatureWithsha1_l512_l9', |
|
1202 | + '1.3.36.3.3.1.1.640.9*' => 'rsaSignatureWithsha1_l640_l9', |
|
1203 | + '1.3.36.3.3.1.1.768.9*' => 'rsaSignatureWithsha1_l768_l9', |
|
1204 | + '1.3.36.3.3.1.1.896.9*' => 'rsaSignatureWithsha1_l896_l9', |
|
1205 | + '1.3.36.3.3.1.1.1024.9*' => 'rsaSignatureWithsha1_l1024_l9', |
|
1206 | + '1.3.36.3.3.1.1.512.11*' => 'rsaSignatureWithsha1_l512_l11', |
|
1207 | + '1.3.36.3.3.1.1.640.11*' => 'rsaSignatureWithsha1_l640_l11', |
|
1208 | + '1.3.36.3.3.1.1.768.11*' => 'rsaSignatureWithsha1_l768_l11', |
|
1209 | + '1.3.36.3.3.1.1.896.11*' => 'rsaSignatureWithsha1_l896_l11', |
|
1210 | + '1.3.36.3.3.1.1.1024.11*' => 'rsaSignatureWithsha1_l1024_l11', |
|
1211 | + '1.3.36.3.3.1.2*' => 'rsaSignatureWithripemd160', |
|
1212 | + '1.3.36.3.3.1.2.512.2*' => 'rsaSignatureWithripemd160_l512_l2', |
|
1213 | + '1.3.36.3.3.1.2.640.2*' => 'rsaSignatureWithripemd160_l640_l2', |
|
1214 | + '1.3.36.3.3.1.2.768.2*' => 'rsaSignatureWithripemd160_l768_l2', |
|
1215 | + '1.3.36.3.3.1.2.896.2*' => 'rsaSignatureWithripemd160_l896_l2', |
|
1216 | + '1.3.36.3.3.1.2.1024.2*' => 'rsaSignatureWithripemd160_l1024_l2', |
|
1217 | + '1.3.36.3.3.1.2.512.3*' => 'rsaSignatureWithripemd160_l512_l3', |
|
1218 | + '1.3.36.3.3.1.2.640.3*' => 'rsaSignatureWithripemd160_l640_l3', |
|
1219 | + '1.3.36.3.3.1.2.768.3*' => 'rsaSignatureWithripemd160_l768_l3', |
|
1220 | + '1.3.36.3.3.1.2.896.3*' => 'rsaSignatureWithripemd160_l896_l3', |
|
1221 | + '1.3.36.3.3.1.2.1024.3*' => 'rsaSignatureWithripemd160_l1024_l3', |
|
1222 | + '1.3.36.3.3.1.2.512.5*' => 'rsaSignatureWithripemd160_l512_l5', |
|
1223 | + '1.3.36.3.3.1.2.640.5*' => 'rsaSignatureWithripemd160_l640_l5', |
|
1224 | + '1.3.36.3.3.1.2.768.5*' => 'rsaSignatureWithripemd160_l768_l5', |
|
1225 | + '1.3.36.3.3.1.2.896.5*' => 'rsaSignatureWithripemd160_l896_l5', |
|
1226 | + '1.3.36.3.3.1.2.1024.5*' => 'rsaSignatureWithripemd160_l1024_l5', |
|
1227 | + '1.3.36.3.3.1.2.512.9*' => 'rsaSignatureWithripemd160_l512_l9', |
|
1228 | + '1.3.36.3.3.1.2.640.9*' => 'rsaSignatureWithripemd160_l640_l9', |
|
1229 | + '1.3.36.3.3.1.2.768.9*' => 'rsaSignatureWithripemd160_l768_l9', |
|
1230 | + '1.3.36.3.3.1.2.896.9*' => 'rsaSignatureWithripemd160_l896_l9', |
|
1231 | + '1.3.36.3.3.1.2.1024.9*' => 'rsaSignatureWithripemd160_l1024_l9', |
|
1232 | + '1.3.36.3.3.1.2.512.11*' => 'rsaSignatureWithripemd160_l512_l11', |
|
1233 | + '1.3.36.3.3.1.2.640.11*' => 'rsaSignatureWithripemd160_l640_l11', |
|
1234 | + '1.3.36.3.3.1.2.768.11*' => 'rsaSignatureWithripemd160_l768_l11', |
|
1235 | + '1.3.36.3.3.1.2.896.11*' => 'rsaSignatureWithripemd160_l896_l11', |
|
1236 | + '1.3.36.3.3.1.2.1024.11*' => 'rsaSignatureWithripemd160_l1024_l11', |
|
1237 | + '1.3.36.3.3.1.3*' => 'rsaSignatureWithrimpemd128', |
|
1238 | + '1.3.36.3.3.1.4*' => 'rsaSignatureWithrimpemd256', |
|
1239 | + '1.3.36.3.3.2*' => 'ecsieSign', |
|
1240 | + '1.3.36.3.3.2.1*' => 'ecsieSignWithsha1', |
|
1241 | + '1.3.36.3.3.2.2*' => 'ecsieSignWithripemd160', |
|
1242 | + '1.3.36.3.3.2.3*' => 'ecsieSignWithmd2', |
|
1243 | + '1.3.36.3.3.2.4*' => 'ecsieSignWithmd5', |
|
1244 | + '1.3.36.3.3.2.8.1.1.1*' => 'brainpoolP160r1', |
|
1245 | + '1.3.36.3.3.2.8.1.1.2*' => 'brainpoolP160t1', |
|
1246 | + '1.3.36.3.3.2.8.1.1.3*' => 'brainpoolP192r1', |
|
1247 | + '1.3.36.3.3.2.8.1.1.4*' => 'brainpoolP192t1', |
|
1248 | + '1.3.36.3.3.2.8.1.1.5*' => 'brainpoolP224r1', |
|
1249 | + '1.3.36.3.3.2.8.1.1.6*' => 'brainpoolP224t1', |
|
1250 | + '1.3.36.3.3.2.8.1.1.7*' => 'brainpoolP256r1', |
|
1251 | + '1.3.36.3.3.2.8.1.1.8*' => 'brainpoolP256t1', |
|
1252 | + '1.3.36.3.3.2.8.1.1.9*' => 'brainpoolP320r1', |
|
1253 | + '1.3.36.3.3.2.8.1.1.10*' => 'brainpoolP320t1', |
|
1254 | + '1.3.36.3.3.2.8.1.1.11*' => 'brainpoolP384r1', |
|
1255 | + '1.3.36.3.3.2.8.1.1.12*' => 'brainpoolP384t1', |
|
1256 | + '1.3.36.3.3.2.8.1.1.13*' => 'brainpoolP512r1', |
|
1257 | + '1.3.36.3.3.2.8.1.1.14*' => 'brainpoolP512t1', |
|
1258 | + '1.3.36.3.4*' => 'signatureScheme', |
|
1259 | + '1.3.36.3.4.1*' => 'sigS_ISO9796-1', |
|
1260 | + '1.3.36.3.4.2*' => 'sigS_ISO9796-2', |
|
1261 | + '1.3.36.3.4.2.1*' => 'sigS_ISO9796-2Withred', |
|
1262 | + '1.3.36.3.4.2.2*' => 'sigS_ISO9796-2Withrsa', |
|
1263 | + '1.3.36.3.4.2.3*' => 'sigS_ISO9796-2Withrnd', |
|
1264 | + '1.3.36.4*' => 'attribute', |
|
1265 | + '1.3.36.5*' => 'policy', |
|
1266 | + '1.3.36.6*' => 'api', |
|
1267 | + '1.3.36.6.1*' => 'manufacturer-specific_api', |
|
1268 | + '1.3.36.6.1.1*' => 'utimaco-api', |
|
1269 | + '1.3.36.6.2*' => 'functionality-specific_api', |
|
1270 | + '1.3.36.7*' => 'keymgmnt', |
|
1271 | + '1.3.36.7.1*' => 'keyagree', |
|
1272 | + '1.3.36.7.1.1*' => 'bsiPKE', |
|
1273 | + '1.3.36.7.2*' => 'keytrans', |
|
1274 | + '1.3.36.7.2.1*' => 'encISO9796-2Withrsa', |
|
1275 | + '1.3.36.8.1.1*' => 'Teletrust SigGConform policyIdentifier', |
|
1276 | + '1.3.36.8.2.1*' => 'directoryService', |
|
1277 | + '1.3.36.8.3.1*' => 'dateOfCertGen', |
|
1278 | + '1.3.36.8.3.2*' => 'procuration', |
|
1279 | + '1.3.36.8.3.3*' => 'admission', |
|
1280 | + '1.3.36.8.3.4*' => 'monetaryLimit', |
|
1281 | + '1.3.36.8.3.5*' => 'declarationOfMajority', |
|
1282 | + '1.3.36.8.3.6*' => 'integratedCircuitCardSerialNumber', |
|
1283 | + '1.3.36.8.3.7*' => 'pKReference', |
|
1284 | + '1.3.36.8.3.8*' => 'restriction', |
|
1285 | + '1.3.36.8.3.9*' => 'retrieveIfAllowed', |
|
1286 | + '1.3.36.8.3.10*' => 'requestedCertificate', |
|
1287 | + '1.3.36.8.3.11*' => 'namingAuthorities', |
|
1288 | + '1.3.36.8.3.11.1*' => 'rechtWirtschaftSteuern', |
|
1289 | + '1.3.36.8.3.11.1.1*' => 'rechtsanwaeltin', |
|
1290 | + '1.3.36.8.3.11.1.2*' => 'rechtsanwalt', |
|
1291 | + '1.3.36.8.3.11.1.3*' => 'rechtsBeistand', |
|
1292 | + '1.3.36.8.3.11.1.4*' => 'steuerBeraterin', |
|
1293 | + '1.3.36.8.3.11.1.5*' => 'steuerBerater', |
|
1294 | + '1.3.36.8.3.11.1.6*' => 'steuerBevollmaechtigte', |
|
1295 | + '1.3.36.8.3.11.1.7*' => 'steuerBevollmaechtigter', |
|
1296 | + '1.3.36.8.3.11.1.8*' => 'notarin', |
|
1297 | + '1.3.36.8.3.11.1.9*' => 'notar', |
|
1298 | + '1.3.36.8.3.11.1.10*' => 'notarVertreterin', |
|
1299 | + '1.3.36.8.3.11.1.11*' => 'notarVertreter', |
|
1300 | + '1.3.36.8.3.11.1.12*' => 'notariatsVerwalterin', |
|
1301 | + '1.3.36.8.3.11.1.13*' => 'notariatsVerwalter', |
|
1302 | + '1.3.36.8.3.11.1.14*' => 'wirtschaftsPrueferin', |
|
1303 | + '1.3.36.8.3.11.1.15*' => 'wirtschaftsPruefer', |
|
1304 | + '1.3.36.8.3.11.1.16*' => 'vereidigteBuchprueferin', |
|
1305 | + '1.3.36.8.3.11.1.17*' => 'vereidigterBuchpruefer', |
|
1306 | + '1.3.36.8.3.11.1.18*' => 'patentAnwaeltin', |
|
1307 | + '1.3.36.8.3.11.1.19*' => 'patentAnwalt', |
|
1308 | + '1.3.36.8.3.12*' => 'certInDirSince', |
|
1309 | + '1.3.36.8.3.13*' => 'certHash', |
|
1310 | + '1.3.36.8.3.14*' => 'nameAtBirth', |
|
1311 | + '1.3.36.8.3.15*' => 'additionalInformation', |
|
1312 | + '1.3.36.8.4.1*' => 'personalData', |
|
1313 | + '1.3.36.8.4.8*' => 'restriction', |
|
1314 | + '1.3.36.8.5.1.1.1*' => 'rsaIndicateSHA1', |
|
1315 | + '1.3.36.8.5.1.1.2*' => 'rsaIndicateRIPEMD160', |
|
1316 | + '1.3.36.8.5.1.1.3*' => 'rsaWithSHA1', |
|
1317 | + '1.3.36.8.5.1.1.4*' => 'rsaWithRIPEMD160', |
|
1318 | + '1.3.36.8.5.1.2.1*' => 'dsaExtended', |
|
1319 | + '1.3.36.8.5.1.2.2*' => 'dsaWithRIPEMD160', |
|
1320 | + '1.3.36.8.6.1*' => 'cert', |
|
1321 | + '1.3.36.8.6.2*' => 'certRef', |
|
1322 | + '1.3.36.8.6.3*' => 'attrCert', |
|
1323 | + '1.3.36.8.6.4*' => 'attrRef', |
|
1324 | + '1.3.36.8.6.5*' => 'fileName', |
|
1325 | + '1.3.36.8.6.6*' => 'storageTime', |
|
1326 | + '1.3.36.8.6.7*' => 'fileSize', |
|
1327 | + '1.3.36.8.6.8*' => 'location', |
|
1328 | + '1.3.36.8.6.9*' => 'sigNumber', |
|
1329 | + '1.3.36.8.6.10*' => 'autoGen', |
|
1330 | + '1.3.36.8.7.1.1*' => 'ptAdobeILL', |
|
1331 | + '1.3.36.8.7.1.2*' => 'ptAmiPro', |
|
1332 | + '1.3.36.8.7.1.3*' => 'ptAutoCAD', |
|
1333 | + '1.3.36.8.7.1.4*' => 'ptBinary', |
|
1334 | + '1.3.36.8.7.1.5*' => 'ptBMP', |
|
1335 | + '1.3.36.8.7.1.6*' => 'ptCGM', |
|
1336 | + '1.3.36.8.7.1.7*' => 'ptCorelCRT', |
|
1337 | + '1.3.36.8.7.1.8*' => 'ptCorelDRW', |
|
1338 | + '1.3.36.8.7.1.9*' => 'ptCorelEXC', |
|
1339 | + '1.3.36.8.7.1.10*' => 'ptCorelPHT', |
|
1340 | + '1.3.36.8.7.1.11*' => 'ptDraw', |
|
1341 | + '1.3.36.8.7.1.12*' => 'ptDVI', |
|
1342 | + '1.3.36.8.7.1.13*' => 'ptEPS', |
|
1343 | + '1.3.36.8.7.1.14*' => 'ptExcel', |
|
1344 | + '1.3.36.8.7.1.15*' => 'ptGEM', |
|
1345 | + '1.3.36.8.7.1.16*' => 'ptGIF', |
|
1346 | + '1.3.36.8.7.1.17*' => 'ptHPGL', |
|
1347 | + '1.3.36.8.7.1.18*' => 'ptJPEG', |
|
1348 | + '1.3.36.8.7.1.19*' => 'ptKodak', |
|
1349 | + '1.3.36.8.7.1.20*' => 'ptLaTeX', |
|
1350 | + '1.3.36.8.7.1.21*' => 'ptLotus', |
|
1351 | + '1.3.36.8.7.1.22*' => 'ptLotusPIC', |
|
1352 | + '1.3.36.8.7.1.23*' => 'ptMacPICT', |
|
1353 | + '1.3.36.8.7.1.24*' => 'ptMacWord', |
|
1354 | + '1.3.36.8.7.1.25*' => 'ptMSWfD', |
|
1355 | + '1.3.36.8.7.1.26*' => 'ptMSWord', |
|
1356 | + '1.3.36.8.7.1.27*' => 'ptMSWord2', |
|
1357 | + '1.3.36.8.7.1.28*' => 'ptMSWord6', |
|
1358 | + '1.3.36.8.7.1.29*' => 'ptMSWord8', |
|
1359 | + '1.3.36.8.7.1.30*' => 'ptPDF', |
|
1360 | + '1.3.36.8.7.1.31*' => 'ptPIF', |
|
1361 | + '1.3.36.8.7.1.32*' => 'ptPostscript', |
|
1362 | + '1.3.36.8.7.1.33*' => 'ptRTF', |
|
1363 | + '1.3.36.8.7.1.34*' => 'ptSCITEX', |
|
1364 | + '1.3.36.8.7.1.35*' => 'ptTAR', |
|
1365 | + '1.3.36.8.7.1.36*' => 'ptTarga', |
|
1366 | + '1.3.36.8.7.1.37*' => 'ptTeX', |
|
1367 | + '1.3.36.8.7.1.38*' => 'ptText', |
|
1368 | + '1.3.36.8.7.1.39*' => 'ptTIFF', |
|
1369 | + '1.3.36.8.7.1.40*' => 'ptTIFF-FC', |
|
1370 | + '1.3.36.8.7.1.41*' => 'ptUID', |
|
1371 | + '1.3.36.8.7.1.42*' => 'ptUUEncode', |
|
1372 | + '1.3.36.8.7.1.43*' => 'ptWordPerfect x', |
|
1373 | + '1.3.36.8.7.1.45*' => 'ptWPGrph', |
|
1374 | + '1.3.101.1.4*' => 'thawte-ce', |
|
1375 | + '1.3.101.1.4.1*' => 'strongExtranet', |
|
1376 | + '1.3.132.0.1*' => 'sect163k1', |
|
1377 | + '1.3.132.0.2*' => 'sect163r1', |
|
1378 | + '1.3.132.0.3*' => 'sect239k1', |
|
1379 | + '1.3.132.0.4*' => 'sect113r1', |
|
1380 | + '1.3.132.0.5*' => 'sect113r2', |
|
1381 | + '1.3.132.0.6*' => 'secp112r1', |
|
1382 | + '1.3.132.0.7*' => 'secp112r2', |
|
1383 | + '1.3.132.0.8*' => 'secp160r1', |
|
1384 | + '1.3.132.0.9*' => 'secp160k1', |
|
1385 | + '1.3.132.0.10*' => 'secp256k1', |
|
1386 | + '1.3.132.0.15*' => 'sect163r2', |
|
1387 | + '1.3.132.0.16*' => 'sect283k1', |
|
1388 | + '1.3.132.0.17*' => 'sect283r1', |
|
1389 | + '1.3.132.0.22*' => 'sect131r1', |
|
1390 | + '1.3.132.0.23*' => 'sect131r2', |
|
1391 | + '1.3.132.0.24*' => 'sect193r1', |
|
1392 | + '1.3.132.0.25*' => 'sect193r2', |
|
1393 | + '1.3.132.0.26*' => 'sect233k1', |
|
1394 | + '1.3.132.0.27*' => 'sect233r1', |
|
1395 | + '1.3.132.0.28*' => 'secp128r1', |
|
1396 | + '1.3.132.0.29*' => 'secp128r2', |
|
1397 | + '1.3.132.0.30*' => 'secp160r2', |
|
1398 | + '1.3.132.0.31*' => 'secp192k1', |
|
1399 | + '1.3.132.0.32*' => 'secp224k1', |
|
1400 | + '1.3.132.0.33*' => 'secp224r1', |
|
1401 | + '1.3.132.0.34*' => 'secp384r1', |
|
1402 | + '1.3.132.0.35*' => 'secp521r1', |
|
1403 | + '1.3.132.0.36*' => 'sect409k1', |
|
1404 | + '1.3.132.0.37*' => 'sect409r1', |
|
1405 | + '1.3.132.0.38*' => 'sect571k1', |
|
1406 | + '1.3.132.0.39*' => 'sect571r1', |
|
1407 | + '2.5.4.0*' => 'objectClass', |
|
1408 | + '2.5.4.1*' => 'aliasedEntryName', |
|
1409 | + '2.5.4.2*' => 'knowledgeInformation', |
|
1410 | + '2.5.4.3*' => 'commonName', |
|
1411 | + '2.5.4.4*' => 'surname', |
|
1412 | + '2.5.4.5*' => 'serialNumber', |
|
1413 | + '2.5.4.6*' => 'countryName', |
|
1414 | + '2.5.4.7*' => 'localityName', |
|
1415 | + '2.5.4.7.1*' => 'collectiveLocalityName', |
|
1416 | + '2.5.4.8*' => 'stateOrProvinceName', |
|
1417 | + '2.5.4.8.1*' => 'collectiveStateOrProvinceName', |
|
1418 | + '2.5.4.9*' => 'streetAddress', |
|
1419 | + '2.5.4.9.1*' => 'collectiveStreetAddress', |
|
1420 | + '2.5.4.10*' => 'organizationName', |
|
1421 | + '2.5.4.10.1*' => 'collectiveOrganizationName', |
|
1422 | + '2.5.4.11*' => 'organizationalUnitName', |
|
1423 | + '2.5.4.11.1*' => 'collectiveOrganizationalUnitName', |
|
1424 | + '2.5.4.12*' => 'title', |
|
1425 | + '2.5.4.13*' => 'description', |
|
1426 | + '2.5.4.14*' => 'searchGuide', |
|
1427 | + '2.5.4.15*' => 'businessCategory', |
|
1428 | + '2.5.4.16*' => 'postalAddress', |
|
1429 | + '2.5.4.16.1*' => 'collectivePostalAddress', |
|
1430 | + '2.5.4.17*' => 'postalCode', |
|
1431 | + '2.5.4.17.1*' => 'collectivePostalCode', |
|
1432 | + '2.5.4.18*' => 'postOfficeBox', |
|
1433 | + '2.5.4.18.1*' => 'collectivePostOfficeBox', |
|
1434 | + '2.5.4.19*' => 'physicalDeliveryOfficeName', |
|
1435 | + '2.5.4.19.1*' => 'collectivePhysicalDeliveryOfficeName', |
|
1436 | + '2.5.4.20*' => 'telephoneNumber', |
|
1437 | + '2.5.4.20.1*' => 'collectiveTelephoneNumber', |
|
1438 | + '2.5.4.21*' => 'telexNumber', |
|
1439 | + '2.5.4.21.1*' => 'collectiveTelexNumber', |
|
1440 | + '2.5.4.22*' => 'teletexTerminalIdentifier', |
|
1441 | + '2.5.4.22.1*' => 'collectiveTeletexTerminalIdentifier', |
|
1442 | + '2.5.4.23*' => 'facsimileTelephoneNumber', |
|
1443 | + '2.5.4.23.1*' => 'collectiveFacsimileTelephoneNumber', |
|
1444 | + '2.5.4.24*' => 'x121Address', |
|
1445 | + '2.5.4.25*' => 'internationalISDNNumber', |
|
1446 | + '2.5.4.25.1*' => 'collectiveInternationalISDNNumber', |
|
1447 | + '2.5.4.26*' => 'registeredAddress', |
|
1448 | + '2.5.4.27*' => 'destinationIndicator', |
|
1449 | + '2.5.4.28*' => 'preferredDeliveryMehtod', |
|
1450 | + '2.5.4.29*' => 'presentationAddress', |
|
1451 | + '2.5.4.30*' => 'supportedApplicationContext', |
|
1452 | + '2.5.4.31*' => 'member', |
|
1453 | + '2.5.4.32*' => 'owner', |
|
1454 | + '2.5.4.33*' => 'roleOccupant', |
|
1455 | + '2.5.4.34*' => 'seeAlso', |
|
1456 | + '2.5.4.35*' => 'userPassword', |
|
1457 | + '2.5.4.36*' => 'userCertificate', |
|
1458 | + '2.5.4.37*' => 'caCertificate', |
|
1459 | + '2.5.4.38*' => 'authorityRevocationList', |
|
1460 | + '2.5.4.39*' => 'certificateRevocationList', |
|
1461 | + '2.5.4.40*' => 'crossCertificatePair', |
|
1462 | + '2.5.4.41*' => 'name', |
|
1463 | + '2.5.4.42*' => 'givenName', |
|
1464 | + '2.5.4.43*' => 'initials', |
|
1465 | + '2.5.4.44*' => 'generationQualifier', |
|
1466 | + '2.5.4.45*' => 'uniqueIdentifier', |
|
1467 | + '2.5.4.46*' => 'dnQualifier', |
|
1468 | + '2.5.4.47*' => 'enhancedSearchGuide', |
|
1469 | + '2.5.4.48*' => 'protocolInformation', |
|
1470 | + '2.5.4.49*' => 'distinguishedName', |
|
1471 | + '2.5.4.50*' => 'uniqueMember', |
|
1472 | + '2.5.4.51*' => 'houseIdentifier', |
|
1473 | + '2.5.4.52*' => 'supportedAlgorithms', |
|
1474 | + '2.5.4.53*' => 'deltaRevocationList', |
|
1475 | + '2.5.4.54*' => 'dmdName', |
|
1476 | + '2.5.4.55*' => 'clearance', |
|
1477 | + '2.5.4.56*' => 'defaultDirQop', |
|
1478 | + '2.5.4.57*' => 'attributeIntegrityInfo', |
|
1479 | + '2.5.4.58*' => 'attributeCertificate', |
|
1480 | + '2.5.4.59*' => 'attributeCertificateRevocationList', |
|
1481 | + '2.5.4.60*' => 'confKeyInfo', |
|
1482 | + '2.5.4.61*' => 'aACertificate', |
|
1483 | + '2.5.4.62*' => 'attributeDescriptorCertificate', |
|
1484 | + '2.5.4.63*' => 'attributeAuthorityRevocationList', |
|
1485 | + '2.5.4.64*' => 'familyInformation', |
|
1486 | + '2.5.4.65*' => 'pseudonym', |
|
1487 | + '2.5.4.66*' => 'communicationsService', |
|
1488 | + '2.5.4.67*' => 'communicationsNetwork', |
|
1489 | + '2.5.4.68*' => 'certificationPracticeStmt', |
|
1490 | + '2.5.4.69*' => 'certificatePolicy', |
|
1491 | + '2.5.4.70*' => 'pkiPath', |
|
1492 | + '2.5.4.71*' => 'privPolicy', |
|
1493 | + '2.5.4.72*' => 'role', |
|
1494 | + '2.5.4.73*' => 'delegationPath', |
|
1495 | + '2.5.4.74*' => 'protPrivPolicy', |
|
1496 | + '2.5.4.75*' => 'xMLPrivilegeInfo', |
|
1497 | + '2.5.4.76*' => 'xmlPrivPolicy', |
|
1498 | + '2.5.4.82*' => 'permission', |
|
1499 | + '2.5.6.0*' => 'top', |
|
1500 | + '2.5.6.1*' => 'alias', |
|
1501 | + '2.5.6.2*' => 'country', |
|
1502 | + '2.5.6.3*' => 'locality', |
|
1503 | + '2.5.6.4*' => 'organization', |
|
1504 | + '2.5.6.5*' => 'organizationalUnit', |
|
1505 | + '2.5.6.6*' => 'person', |
|
1506 | + '2.5.6.7*' => 'organizationalPerson', |
|
1507 | + '2.5.6.8*' => 'organizationalRole', |
|
1508 | + '2.5.6.9*' => 'groupOfNames', |
|
1509 | + '2.5.6.10*' => 'residentialPerson', |
|
1510 | + '2.5.6.11*' => 'applicationProcess', |
|
1511 | + '2.5.6.12*' => 'applicationEntity', |
|
1512 | + '2.5.6.13*' => 'dSA', |
|
1513 | + '2.5.6.14*' => 'device', |
|
1514 | + '2.5.6.15*' => 'strongAuthenticationUser', |
|
1515 | + '2.5.6.16*' => 'certificateAuthority', |
|
1516 | + '2.5.6.17*' => 'groupOfUniqueNames', |
|
1517 | + '2.5.6.21*' => 'pkiUser', |
|
1518 | + '2.5.6.22*' => 'pkiCA', |
|
1519 | + '2.5.8.1.1*' => 'rsa', |
|
1520 | + '2.5.29.1*' => 'authorityKeyIdentifier', |
|
1521 | + '2.5.29.2*' => 'keyAttributes', |
|
1522 | + '2.5.29.3*' => 'certificatePolicies', |
|
1523 | + '2.5.29.4*' => 'keyUsageRestriction', |
|
1524 | + '2.5.29.5*' => 'policyMapping', |
|
1525 | + '2.5.29.6*' => 'subtreesConstraint', |
|
1526 | + '2.5.29.7*' => 'subjectAltName', |
|
1527 | + '2.5.29.8*' => 'issuerAltName', |
|
1528 | + '2.5.29.9*' => 'subjectDirectoryAttributes', |
|
1529 | + '2.5.29.10*' => 'basicConstraints', |
|
1530 | + '2.5.29.11*' => 'nameConstraints', |
|
1531 | + '2.5.29.12*' => 'policyConstraints', |
|
1532 | + '2.5.29.13*' => 'basicConstraints', |
|
1533 | + '2.5.29.14*' => 'subjectKeyIdentifier', |
|
1534 | + '2.5.29.15*' => 'keyUsage', |
|
1535 | + '2.5.29.16*' => 'privateKeyUsagePeriod', |
|
1536 | + '2.5.29.17*' => 'subjectAltName', |
|
1537 | + '2.5.29.18*' => 'issuerAltName', |
|
1538 | + '2.5.29.19*' => 'basicConstraints', |
|
1539 | + '2.5.29.20*' => 'cRLNumber', |
|
1540 | + '2.5.29.21*' => 'cRLReason', |
|
1541 | + '2.5.29.22*' => 'expirationDate', |
|
1542 | + '2.5.29.23*' => 'instructionCode', |
|
1543 | + '2.5.29.24*' => 'invalidityDate', |
|
1544 | + '2.5.29.25*' => 'cRLDistributionPoints', |
|
1545 | + '2.5.29.26*' => 'issuingDistributionPoint', |
|
1546 | + '2.5.29.27*' => 'deltaCRLIndicator', |
|
1547 | + '2.5.29.28*' => 'issuingDistributionPoint', |
|
1548 | + '2.5.29.29*' => 'certificateIssuer', |
|
1549 | + '2.5.29.30*' => 'nameConstraints', |
|
1550 | + '2.5.29.31*' => 'cRLDistributionPoints', |
|
1551 | + '2.5.29.32*' => 'certificatePolicies', |
|
1552 | + '2.5.29.32.0*' => 'anyPolicy', |
|
1553 | + '2.5.29.33*' => 'policyMappings', |
|
1554 | + '2.5.29.34*' => 'policyConstraints', |
|
1555 | + '2.5.29.35*' => 'authorityKeyIdentifier', |
|
1556 | + '2.5.29.36*' => 'policyConstraints', |
|
1557 | + '2.5.29.37*' => 'extKeyUsage', |
|
1558 | + '2.5.29.37.0*' => 'anyExtendedKeyUsage', |
|
1559 | + '2.5.29.38*' => 'authorityAttributeIdentifier', |
|
1560 | + '2.5.29.39*' => 'roleSpecCertIdentifier', |
|
1561 | + '2.5.29.40*' => 'cRLStreamIdentifier', |
|
1562 | + '2.5.29.41*' => 'basicAttConstraints', |
|
1563 | + '2.5.29.42*' => 'delegatedNameConstraints', |
|
1564 | + '2.5.29.43*' => 'timeSpecification', |
|
1565 | + '2.5.29.44*' => 'cRLScope', |
|
1566 | + '2.5.29.45*' => 'statusReferrals', |
|
1567 | + '2.5.29.46*' => 'freshestCRL', |
|
1568 | + '2.5.29.47*' => 'orderedList', |
|
1569 | + '2.5.29.48*' => 'attributeDescriptor', |
|
1570 | + '2.5.29.49*' => 'userNotice', |
|
1571 | + '2.5.29.50*' => 'sOAIdentifier', |
|
1572 | + '2.5.29.51*' => 'baseUpdateTime', |
|
1573 | + '2.5.29.52*' => 'acceptableCertPolicies', |
|
1574 | + '2.5.29.53*' => 'deltaInfo', |
|
1575 | + '2.5.29.54*' => 'inhibitAnyPolicy', |
|
1576 | + '2.5.29.55*' => 'targetInformation', |
|
1577 | + '2.5.29.56*' => 'noRevAvail', |
|
1578 | + '2.5.29.57*' => 'acceptablePrivilegePolicies', |
|
1579 | + '2.5.29.58*' => 'toBeRevoked', |
|
1580 | + '2.5.29.59*' => 'revokedGroups', |
|
1581 | + '2.5.29.60*' => 'expiredCertsOnCRL', |
|
1582 | + '2.5.29.61*' => 'indirectIssuer', |
|
1583 | + '2.5.29.62*' => 'noAssertion', |
|
1584 | + '2.5.29.63*' => 'aAissuingDistributionPoint', |
|
1585 | + '2.5.29.64*' => 'issuedOnBehalfOf', |
|
1586 | + '2.5.29.65*' => 'singleUse', |
|
1587 | + '2.5.29.66*' => 'groupAC', |
|
1588 | + '2.5.29.67*' => 'allowedAttAss', |
|
1589 | + '2.5.29.68*' => 'attributeMappings', |
|
1590 | + '2.5.29.69*' => 'holderNameConstraints', |
|
1591 | + '2.16.840.1.101.2.1.1.1*' => 'sdnsSignatureAlgorithm', |
|
1592 | + '2.16.840.1.101.2.1.1.2*' => 'fortezzaSignatureAlgorithm', |
|
1593 | + '2.16.840.1.101.2.1.1.3*' => 'sdnsConfidentialityAlgorithm', |
|
1594 | + '2.16.840.1.101.2.1.1.4*' => 'fortezzaConfidentialityAlgorithm', |
|
1595 | + '2.16.840.1.101.2.1.1.5*' => 'sdnsIntegrityAlgorithm', |
|
1596 | + '2.16.840.1.101.2.1.1.6*' => 'fortezzaIntegrityAlgorithm', |
|
1597 | + '2.16.840.1.101.2.1.1.7*' => 'sdnsTokenProtectionAlgorithm', |
|
1598 | + '2.16.840.1.101.2.1.1.8*' => 'fortezzaTokenProtectionAlgorithm', |
|
1599 | + '2.16.840.1.101.2.1.1.9*' => 'sdnsKeyManagementAlgorithm', |
|
1600 | + '2.16.840.1.101.2.1.1.10*' => 'fortezzaKeyManagementAlgorithm', |
|
1601 | + '2.16.840.1.101.2.1.1.11*' => 'sdnsKMandSigAlgorithm', |
|
1602 | + '2.16.840.1.101.2.1.1.12*' => 'fortezzaKMandSigAlgorithm', |
|
1603 | + '2.16.840.1.101.2.1.1.13*' => 'suiteASignatureAlgorithm', |
|
1604 | + '2.16.840.1.101.2.1.1.14*' => 'suiteAConfidentialityAlgorithm', |
|
1605 | + '2.16.840.1.101.2.1.1.15*' => 'suiteAIntegrityAlgorithm', |
|
1606 | + '2.16.840.1.101.2.1.1.16*' => 'suiteATokenProtectionAlgorithm', |
|
1607 | + '2.16.840.1.101.2.1.1.17*' => 'suiteAKeyManagementAlgorithm', |
|
1608 | + '2.16.840.1.101.2.1.1.18*' => 'suiteAKMandSigAlgorithm', |
|
1609 | + '2.16.840.1.101.2.1.1.19*' => 'fortezzaUpdatedSigAlgorithm', |
|
1610 | + '2.16.840.1.101.2.1.1.20*' => 'fortezzaKMandUpdSigAlgorithms', |
|
1611 | + '2.16.840.1.101.2.1.1.21*' => 'fortezzaUpdatedIntegAlgorithm', |
|
1612 | + '2.16.840.1.101.2.1.1.22*' => 'keyExchangeAlgorithm', |
|
1613 | + '2.16.840.1.101.2.1.1.23*' => 'fortezzaWrap80Algorithm', |
|
1614 | + '2.16.840.1.101.2.1.1.24*' => 'kEAKeyEncryptionAlgorithm', |
|
1615 | + '2.16.840.1.101.2.1.2.1*' => 'rfc822MessageFormat', |
|
1616 | + '2.16.840.1.101.2.1.2.2*' => 'emptyContent', |
|
1617 | + '2.16.840.1.101.2.1.2.3*' => 'cspContentType', |
|
1618 | + '2.16.840.1.101.2.1.2.42*' => 'mspRev3ContentType', |
|
1619 | + '2.16.840.1.101.2.1.2.48*' => 'mspContentType', |
|
1620 | + '2.16.840.1.101.2.1.2.49*' => 'mspRekeyAgentProtocol', |
|
1621 | + '2.16.840.1.101.2.1.2.50*' => 'mspMMP', |
|
1622 | + '2.16.840.1.101.2.1.2.66*' => 'mspRev3-1ContentType', |
|
1623 | + '2.16.840.1.101.2.1.2.72*' => 'forwardedMSPMessageBodyPart', |
|
1624 | + '2.16.840.1.101.2.1.2.73*' => 'mspForwardedMessageParameters', |
|
1625 | + '2.16.840.1.101.2.1.2.74*' => 'forwardedCSPMsgBodyPart', |
|
1626 | + '2.16.840.1.101.2.1.2.75*' => 'cspForwardedMessageParameters', |
|
1627 | + '2.16.840.1.101.2.1.2.76*' => 'mspMMP2', |
|
1628 | + '2.16.840.1.101.2.1.3.1*' => 'sdnsSecurityPolicy', |
|
1629 | + '2.16.840.1.101.2.1.3.2*' => 'sdnsPRBAC', |
|
1630 | + '2.16.840.1.101.2.1.3.3*' => 'mosaicPRBAC', |
|
1631 | + '2.16.840.1.101.2.1.3.10*' => 'siSecurityPolicy', |
|
1632 | + '2.16.840.1.101.2.1.3.10.0*' => 'siNASP', |
|
1633 | + '2.16.840.1.101.2.1.3.10.1*' => 'siELCO', |
|
1634 | + '2.16.840.1.101.2.1.3.10.2*' => 'siTK', |
|
1635 | + '2.16.840.1.101.2.1.3.10.3*' => 'siDSAP', |
|
1636 | + '2.16.840.1.101.2.1.3.10.4*' => 'siSSSS', |
|
1637 | + '2.16.840.1.101.2.1.3.10.5*' => 'siDNASP', |
|
1638 | + '2.16.840.1.101.2.1.3.10.6*' => 'siBYEMAN', |
|
1639 | + '2.16.840.1.101.2.1.3.10.7*' => 'siREL-US', |
|
1640 | + '2.16.840.1.101.2.1.3.10.8*' => 'siREL-AUS', |
|
1641 | + '2.16.840.1.101.2.1.3.10.9*' => 'siREL-CAN', |
|
1642 | + '2.16.840.1.101.2.1.3.10.10*' => 'siREL_UK', |
|
1643 | + '2.16.840.1.101.2.1.3.10.11*' => 'siREL-NZ', |
|
1644 | + '2.16.840.1.101.2.1.3.10.12*' => 'siGeneric', |
|
1645 | + '2.16.840.1.101.2.1.3.11*' => 'genser', |
|
1646 | + '2.16.840.1.101.2.1.3.11.0*' => 'genserNations', |
|
1647 | + '2.16.840.1.101.2.1.3.11.1*' => 'genserComsec', |
|
1648 | + '2.16.840.1.101.2.1.3.11.2*' => 'genserAcquisition', |
|
1649 | + '2.16.840.1.101.2.1.3.11.3*' => 'genserSecurityCategories', |
|
1650 | + '2.16.840.1.101.2.1.3.11.3.0*' => 'genserTagSetName', |
|
1651 | + '2.16.840.1.101.2.1.3.12*' => 'defaultSecurityPolicy', |
|
1652 | + '2.16.840.1.101.2.1.3.13*' => 'capcoMarkings', |
|
1653 | + '2.16.840.1.101.2.1.3.13.0*' => 'capcoSecurityCategories', |
|
1654 | + '2.16.840.1.101.2.1.3.13.0.1*' => 'capcoTagSetName1', |
|
1655 | + '2.16.840.1.101.2.1.3.13.0.2*' => 'capcoTagSetName2', |
|
1656 | + '2.16.840.1.101.2.1.3.13.0.3*' => 'capcoTagSetName3', |
|
1657 | + '2.16.840.1.101.2.1.3.13.0.4*' => 'capcoTagSetName4', |
|
1658 | + '2.16.840.1.101.2.1.5.1*' => 'sdnsKeyManagementCertificate', |
|
1659 | + '2.16.840.1.101.2.1.5.2*' => 'sdnsUserSignatureCertificate', |
|
1660 | + '2.16.840.1.101.2.1.5.3*' => 'sdnsKMandSigCertificate', |
|
1661 | + '2.16.840.1.101.2.1.5.4*' => 'fortezzaKeyManagementCertificate', |
|
1662 | + '2.16.840.1.101.2.1.5.5*' => 'fortezzaKMandSigCertificate', |
|
1663 | + '2.16.840.1.101.2.1.5.6*' => 'fortezzaUserSignatureCertificate', |
|
1664 | + '2.16.840.1.101.2.1.5.7*' => 'fortezzaCASignatureCertificate', |
|
1665 | + '2.16.840.1.101.2.1.5.8*' => 'sdnsCASignatureCertificate', |
|
1666 | + '2.16.840.1.101.2.1.5.10*' => 'auxiliaryVector', |
|
1667 | + '2.16.840.1.101.2.1.5.11*' => 'mlReceiptPolicy', |
|
1668 | + '2.16.840.1.101.2.1.5.12*' => 'mlMembership', |
|
1669 | + '2.16.840.1.101.2.1.5.13*' => 'mlAdministrators', |
|
1670 | + '2.16.840.1.101.2.1.5.14*' => 'alid', |
|
1671 | + '2.16.840.1.101.2.1.5.20*' => 'janUKMs', |
|
1672 | + '2.16.840.1.101.2.1.5.21*' => 'febUKMs', |
|
1673 | + '2.16.840.1.101.2.1.5.22*' => 'marUKMs', |
|
1674 | + '2.16.840.1.101.2.1.5.23*' => 'aprUKMs', |
|
1675 | + '2.16.840.1.101.2.1.5.24*' => 'mayUKMs', |
|
1676 | + '2.16.840.1.101.2.1.5.25*' => 'junUKMs', |
|
1677 | + '2.16.840.1.101.2.1.5.26*' => 'julUKMs', |
|
1678 | + '2.16.840.1.101.2.1.5.27*' => 'augUKMs', |
|
1679 | + '2.16.840.1.101.2.1.5.28*' => 'sepUKMs', |
|
1680 | + '2.16.840.1.101.2.1.5.29*' => 'octUKMs', |
|
1681 | + '2.16.840.1.101.2.1.5.30*' => 'novUKMs', |
|
1682 | + '2.16.840.1.101.2.1.5.31*' => 'decUKMs', |
|
1683 | + '2.16.840.1.101.2.1.5.40*' => 'metaSDNSckl', |
|
1684 | + '2.16.840.1.101.2.1.5.41*' => 'sdnsCKL', |
|
1685 | + '2.16.840.1.101.2.1.5.42*' => 'metaSDNSsignatureCKL', |
|
1686 | + '2.16.840.1.101.2.1.5.43*' => 'sdnsSignatureCKL', |
|
1687 | + '2.16.840.1.101.2.1.5.44*' => 'sdnsCertificateRevocationList', |
|
1688 | + '2.16.840.1.101.2.1.5.45*' => 'fortezzaCertificateRevocationList', |
|
1689 | + '2.16.840.1.101.2.1.5.46*' => 'fortezzaCKL', |
|
1690 | + '2.16.840.1.101.2.1.5.47*' => 'alExemptedAddressProcessor', |
|
1691 | + '2.16.840.1.101.2.1.5.48*' => 'guard', |
|
1692 | + '2.16.840.1.101.2.1.5.49*' => 'algorithmsSupported', |
|
1693 | + '2.16.840.1.101.2.1.5.50*' => 'suiteAKeyManagementCertificate', |
|
1694 | + '2.16.840.1.101.2.1.5.51*' => 'suiteAKMandSigCertificate', |
|
1695 | + '2.16.840.1.101.2.1.5.52*' => 'suiteAUserSignatureCertificate', |
|
1696 | + '2.16.840.1.101.2.1.5.53*' => 'prbacInfo', |
|
1697 | + '2.16.840.1.101.2.1.5.54*' => 'prbacCAConstraints', |
|
1698 | + '2.16.840.1.101.2.1.5.55*' => 'sigOrKMPrivileges', |
|
1699 | + '2.16.840.1.101.2.1.5.56*' => 'commPrivileges', |
|
1700 | + '2.16.840.1.101.2.1.5.57*' => 'labeledAttribute', |
|
1701 | + '2.16.840.1.101.2.1.5.58*' => 'policyInformationFile', |
|
1702 | + '2.16.840.1.101.2.1.5.59*' => 'secPolicyInformationFile', |
|
1703 | + '2.16.840.1.101.2.1.5.60*' => 'cAClearanceConstraint', |
|
1704 | + '2.16.840.1.101.2.1.7.1*' => 'cspExtns', |
|
1705 | + '2.16.840.1.101.2.1.7.1.0*' => 'cspCsExtn', |
|
1706 | + '2.16.840.1.101.2.1.8.1*' => 'mISSISecurityCategories', |
|
1707 | + '2.16.840.1.101.2.1.8.2*' => 'standardSecurityLabelPrivileges', |
|
1708 | + '2.16.840.1.101.2.1.10.1*' => 'sigPrivileges', |
|
1709 | + '2.16.840.1.101.2.1.10.2*' => 'kmPrivileges', |
|
1710 | + '2.16.840.1.101.2.1.10.3*' => 'namedTagSetPrivilege', |
|
1711 | + '2.16.840.1.101.2.1.11.1*' => 'ukDemo', |
|
1712 | + '2.16.840.1.101.2.1.11.2*' => 'usDODClass2', |
|
1713 | + '2.16.840.1.101.2.1.11.3*' => 'usMediumPilot', |
|
1714 | + '2.16.840.1.101.2.1.11.4*' => 'usDODClass4', |
|
1715 | + '2.16.840.1.101.2.1.11.5*' => 'usDODClass3', |
|
1716 | + '2.16.840.1.101.2.1.11.6*' => 'usDODClass5', |
|
1717 | + '2.16.840.1.101.2.1.12.0*' => 'testSecurityPolicy', |
|
1718 | + '2.16.840.1.101.2.1.12.0.1*' => 'tsp1', |
|
1719 | + '2.16.840.1.101.2.1.12.0.1.0*' => 'tsp1SecurityCategories', |
|
1720 | + '2.16.840.1.101.2.1.12.0.1.0.0*' => 'tsp1TagSetZero', |
|
1721 | + '2.16.840.1.101.2.1.12.0.1.0.1*' => 'tsp1TagSetOne', |
|
1722 | + '2.16.840.1.101.2.1.12.0.1.0.2*' => 'tsp1TagSetTwo', |
|
1723 | + '2.16.840.1.101.2.1.12.0.2*' => 'tsp2', |
|
1724 | + '2.16.840.1.101.2.1.12.0.2.0*' => 'tsp2SecurityCategories', |
|
1725 | + '2.16.840.1.101.2.1.12.0.2.0.0*' => 'tsp2TagSetZero', |
|
1726 | + '2.16.840.1.101.2.1.12.0.2.0.1*' => 'tsp2TagSetOne', |
|
1727 | + '2.16.840.1.101.2.1.12.0.2.0.2*' => 'tsp2TagSetTwo', |
|
1728 | + '2.16.840.1.101.2.1.12.0.3*' => 'kafka', |
|
1729 | + '2.16.840.1.101.2.1.12.0.3.0*' => 'kafkaSecurityCategories', |
|
1730 | + '2.16.840.1.101.2.1.12.0.3.0.1*' => 'kafkaTagSetName1', |
|
1731 | + '2.16.840.1.101.2.1.12.0.3.0.2*' => 'kafkaTagSetName2', |
|
1732 | + '2.16.840.1.101.2.1.12.0.3.0.3*' => 'kafkaTagSetName3', |
|
1733 | + '2.16.840.1.101.2.1.12.1.1*' => 'tcp1', |
|
1734 | + '2.16.840.1.101.3.1*' => 'slabel', |
|
1735 | + '2.16.840.1.101.3.2*' => 'pki', |
|
1736 | + '2.16.840.1.101.3.2.1*' => 'NIST policyIdentifier', |
|
1737 | + '2.16.840.1.101.3.2.1.3.1*' => 'fbcaRudimentaryPolicy', |
|
1738 | + '2.16.840.1.101.3.2.1.3.2*' => 'fbcaBasicPolicy', |
|
1739 | + '2.16.840.1.101.3.2.1.3.3*' => 'fbcaMediumPolicy', |
|
1740 | + '2.16.840.1.101.3.2.1.3.4*' => 'fbcaHighPolicy', |
|
1741 | + '2.16.840.1.101.3.2.1.48.1*' => 'nistTestPolicy1', |
|
1742 | + '2.16.840.1.101.3.2.1.48.2*' => 'nistTestPolicy2', |
|
1743 | + '2.16.840.1.101.3.2.1.48.3*' => 'nistTestPolicy3', |
|
1744 | + '2.16.840.1.101.3.2.1.48.4*' => 'nistTestPolicy4', |
|
1745 | + '2.16.840.1.101.3.2.1.48.5*' => 'nistTestPolicy5', |
|
1746 | + '2.16.840.1.101.3.2.1.48.6*' => 'nistTestPolicy6', |
|
1747 | + '2.16.840.1.101.3.2.2*' => 'gak', |
|
1748 | + '2.16.840.1.101.3.2.2.1*' => 'kRAKey', |
|
1749 | + '2.16.840.1.101.3.2.3*' => 'extensions', |
|
1750 | + '2.16.840.1.101.3.2.3.1*' => 'kRTechnique', |
|
1751 | + '2.16.840.1.101.3.2.3.2*' => 'kRecoveryCapable', |
|
1752 | + '2.16.840.1.101.3.2.3.3*' => 'kR', |
|
1753 | + '2.16.840.1.101.3.2.4*' => 'keyRecoverySchemes', |
|
1754 | + '2.16.840.1.101.3.2.5*' => 'krapola', |
|
1755 | + '2.16.840.1.101.3.3*' => 'arpa', |
|
1756 | + '2.16.840.1.101.3.4*' => 'nistAlgorithm', |
|
1757 | + '2.16.840.1.101.3.4.1*' => 'aes', |
|
1758 | + '2.16.840.1.101.3.4.1.1*' => 'aes128-ECB', |
|
1759 | + '2.16.840.1.101.3.4.1.2*' => 'aes128-CBC', |
|
1760 | + '2.16.840.1.101.3.4.1.3*' => 'aes128-OFB', |
|
1761 | + '2.16.840.1.101.3.4.1.4*' => 'aes128-CFB', |
|
1762 | + '2.16.840.1.101.3.4.1.5*' => 'aes128-wrap', |
|
1763 | + '2.16.840.1.101.3.4.1.6*' => 'aes128-GCM', |
|
1764 | + '2.16.840.1.101.3.4.1.7*' => 'aes128-CCM', |
|
1765 | + '2.16.840.1.101.3.4.1.8*' => 'aes128-wrap-pad', |
|
1766 | + '2.16.840.1.101.3.4.1.21*' => 'aes192-ECB', |
|
1767 | + '2.16.840.1.101.3.4.1.22*' => 'aes192-CBC', |
|
1768 | + '2.16.840.1.101.3.4.1.23*' => 'aes192-OFB', |
|
1769 | + '2.16.840.1.101.3.4.1.24*' => 'aes192-CFB', |
|
1770 | + '2.16.840.1.101.3.4.1.25*' => 'aes192-wrap', |
|
1771 | + '2.16.840.1.101.3.4.1.26*' => 'aes192-GCM', |
|
1772 | + '2.16.840.1.101.3.4.1.27*' => 'aes192-CCM', |
|
1773 | + '2.16.840.1.101.3.4.1.28*' => 'aes192-wrap-pad', |
|
1774 | + '2.16.840.1.101.3.4.1.41*' => 'aes256-ECB', |
|
1775 | + '2.16.840.1.101.3.4.1.42*' => 'aes256-CBC', |
|
1776 | + '2.16.840.1.101.3.4.1.43*' => 'aes256-OFB', |
|
1777 | + '2.16.840.1.101.3.4.1.44*' => 'aes256-CFB', |
|
1778 | + '2.16.840.1.101.3.4.1.45*' => 'aes256-wrap', |
|
1779 | + '2.16.840.1.101.3.4.1.46*' => 'aes256-GCM', |
|
1780 | + '2.16.840.1.101.3.4.1.47*' => 'aes256-CCM', |
|
1781 | + '2.16.840.1.101.3.4.1.48*' => 'aes256-wrap-pad', |
|
1782 | + '2.16.840.1.101.3.4.2*' => 'hashAlgos', |
|
1783 | + '2.16.840.1.101.3.4.2.1*' => 'sha-256', |
|
1784 | + '2.16.840.1.101.3.4.2.2*' => 'sha-384', |
|
1785 | + '2.16.840.1.101.3.4.2.3*' => 'sha-512', |
|
1786 | + '2.16.840.1.101.3.4.2.4*' => 'sha-224', |
|
1787 | + '2.16.840.1.101.3.4.3.1*' => 'dsaWithSha224', |
|
1788 | + '2.16.840.1.101.3.4.3.2*' => 'dsaWithSha256', |
|
1789 | + '2.16.840.1.113719.1.2.8*' => 'novellAlgorithm', |
|
1790 | + '2.16.840.1.113719.1.2.8.22*' => 'desCbcIV8', |
|
1791 | + '2.16.840.1.113719.1.2.8.23*' => 'desCbcPadIV8', |
|
1792 | + '2.16.840.1.113719.1.2.8.24*' => 'desEDE2CbcIV8', |
|
1793 | + '2.16.840.1.113719.1.2.8.25*' => 'desEDE2CbcPadIV8', |
|
1794 | + '2.16.840.1.113719.1.2.8.26*' => 'desEDE3CbcIV8', |
|
1795 | + '2.16.840.1.113719.1.2.8.27*' => 'desEDE3CbcPadIV8', |
|
1796 | + '2.16.840.1.113719.1.2.8.28*' => 'rc5CbcPad', |
|
1797 | + '2.16.840.1.113719.1.2.8.29*' => 'md2WithRSAEncryptionBSafe1', |
|
1798 | + '2.16.840.1.113719.1.2.8.30*' => 'md5WithRSAEncryptionBSafe1', |
|
1799 | + '2.16.840.1.113719.1.2.8.31*' => 'sha1WithRSAEncryptionBSafe1', |
|
1800 | + '2.16.840.1.113719.1.2.8.32*' => 'lmDigest', |
|
1801 | + '2.16.840.1.113719.1.2.8.40*' => 'md2', |
|
1802 | + '2.16.840.1.113719.1.2.8.50*' => 'md5', |
|
1803 | + '2.16.840.1.113719.1.2.8.51*' => 'ikeHmacWithSHA1-RSA', |
|
1804 | + '2.16.840.1.113719.1.2.8.52*' => 'ikeHmacWithMD5-RSA', |
|
1805 | + '2.16.840.1.113719.1.2.8.69*' => 'rc2CbcPad', |
|
1806 | + '2.16.840.1.113719.1.2.8.82*' => 'sha-1', |
|
1807 | + '2.16.840.1.113719.1.2.8.92*' => 'rc2BSafe1Cbc', |
|
1808 | + '2.16.840.1.113719.1.2.8.95*' => 'md4', |
|
1809 | + '2.16.840.1.113719.1.2.8.130*' => 'md4Packet', |
|
1810 | + '2.16.840.1.113719.1.2.8.131*' => 'rsaEncryptionBsafe1', |
|
1811 | + '2.16.840.1.113719.1.2.8.132*' => 'nwPassword', |
|
1812 | + '2.16.840.1.113719.1.2.8.133*' => 'novellObfuscate-1', |
|
1813 | + '2.16.840.1.113719.1.9*' => 'pki', |
|
1814 | + '2.16.840.1.113719.1.9.4*' => 'pkiAttributeType', |
|
1815 | + '2.16.840.1.113719.1.9.4.1*' => 'securityAttributes', |
|
1816 | + '2.16.840.1.113719.1.9.4.2*' => 'relianceLimit', |
|
1817 | + '2.16.840.1.113730.1*' => 'cert-extension', |
|
1818 | + '2.16.840.1.113730.1.1*' => 'netscape-cert-type', |
|
1819 | + '2.16.840.1.113730.1.2*' => 'netscape-base-url', |
|
1820 | + '2.16.840.1.113730.1.3*' => 'netscape-revocation-url', |
|
1821 | + '2.16.840.1.113730.1.4*' => 'netscape-ca-revocation-url', |
|
1822 | + '2.16.840.1.113730.1.7*' => 'netscape-cert-renewal-url', |
|
1823 | + '2.16.840.1.113730.1.8*' => 'netscape-ca-policy-url', |
|
1824 | + '2.16.840.1.113730.1.9*' => 'HomePage-url', |
|
1825 | + '2.16.840.1.113730.1.10*' => 'EntityLogo', |
|
1826 | + '2.16.840.1.113730.1.11*' => 'UserPicture', |
|
1827 | + '2.16.840.1.113730.1.12*' => 'netscape-ssl-server-name', |
|
1828 | + '2.16.840.1.113730.1.13*' => 'netscape-comment', |
|
1829 | + '2.16.840.1.113730.2*' => 'data-type', |
|
1830 | + '2.16.840.1.113730.2.1*' => 'dataGIF', |
|
1831 | + '2.16.840.1.113730.2.2*' => 'dataJPEG', |
|
1832 | + '2.16.840.1.113730.2.3*' => 'dataURL', |
|
1833 | + '2.16.840.1.113730.2.4*' => 'dataHTML', |
|
1834 | + '2.16.840.1.113730.2.5*' => 'certSequence', |
|
1835 | + '2.16.840.1.113730.2.6*' => 'certURL', |
|
1836 | + '2.16.840.1.113730.3*' => 'directory', |
|
1837 | + '2.16.840.1.113730.3.1*' => 'ldapDefinitions', |
|
1838 | + '2.16.840.1.113730.3.1.1*' => 'carLicense', |
|
1839 | + '2.16.840.1.113730.3.1.2*' => 'departmentNumber', |
|
1840 | + '2.16.840.1.113730.3.1.3*' => 'employeeNumber', |
|
1841 | + '2.16.840.1.113730.3.1.4*' => 'employeeType', |
|
1842 | + '2.16.840.1.113730.3.2.2*' => 'inetOrgPerson', |
|
1843 | + '2.16.840.1.113730.4.1*' => 'serverGatedCrypto', |
|
1844 | + '2.16.840.1.113733.1.6.3*' => 'verisignCZAG', |
|
1845 | + '2.16.840.1.113733.1.6.6*' => 'verisignInBox', |
|
1846 | + '2.16.840.1.113733.1.6.11*' => 'verisignOnsiteJurisdictionHash', |
|
1847 | + '2.16.840.1.113733.1.6.13*' => 'Unknown Verisign VPN extension', |
|
1848 | + '2.16.840.1.113733.1.6.15*' => 'verisignServerID', |
|
1849 | + '2.16.840.1.113733.1.7.1.1*' => 'verisignCertPolicies95Qualifier1', |
|
1850 | + '2.16.840.1.113733.1.7.1.1.1*' => 'verisignCPSv1notice', |
|
1851 | + '2.16.840.1.113733.1.7.1.1.2*' => 'verisignCPSv1nsi', |
|
1852 | + '2.16.840.1.113733.1.7.23.6*' => 'VeriSign EV policy', |
|
1853 | + '2.16.840.1.113733.1.8.1*' => 'verisignISSStrongCrypto', |
|
1854 | + '2.16.840.1.113733.1*' => 'pki', |
|
1855 | + '2.16.840.1.113733.1.9*' => 'pkcs7Attribute', |
|
1856 | + '2.16.840.1.113733.1.9.2*' => 'messageType', |
|
1857 | + '2.16.840.1.113733.1.9.3*' => 'pkiStatus', |
|
1858 | + '2.16.840.1.113733.1.9.4*' => 'failInfo', |
|
1859 | + '2.16.840.1.113733.1.9.5*' => 'senderNonce', |
|
1860 | + '2.16.840.1.113733.1.9.6*' => 'recipientNonce', |
|
1861 | + '2.16.840.1.113733.1.9.7*' => 'transID', |
|
1862 | + '2.16.840.1.113733.1.9.8*' => 'extensionReq', |
|
1863 | + '2.16.840.1.114412.1.3.0.1*' => 'digiCertGlobalCAPolicy', |
|
1864 | + '2.16.840.1.114412.1.3.0.2*' => 'digiCertHighAssuranceEVCAPolicy', |
|
1865 | + '2.16.840.1.114412.1.3.0.3*' => 'digiCertGlobalRootCAPolicy', |
|
1866 | + '2.16.840.1.114412.1.3.0.4*' => 'digiCertAssuredIDRootCAPolicy', |
|
1867 | + '2.23.42.0*' => 'contentType', |
|
1868 | + '2.23.42.0.0*' => 'panData', |
|
1869 | + '2.23.42.0.1*' => 'panToken', |
|
1870 | + '2.23.42.0.2*' => 'panOnly', |
|
1871 | + '2.23.42.1*' => 'msgExt', |
|
1872 | + '2.23.42.2*' => 'field', |
|
1873 | + '2.23.42.2.0*' => 'fullName', |
|
1874 | + '2.23.42.2.1*' => 'givenName', |
|
1875 | + '2.23.42.2.2*' => 'familyName', |
|
1876 | + '2.23.42.2.3*' => 'birthFamilyName', |
|
1877 | + '2.23.42.2.4*' => 'placeName', |
|
1878 | + '2.23.42.2.5*' => 'identificationNumber', |
|
1879 | + '2.23.42.2.6*' => 'month', |
|
1880 | + '2.23.42.2.7*' => 'date', |
|
1881 | + '2.23.42.2.8*' => 'address', |
|
1882 | + '2.23.42.2.9*' => 'telephone', |
|
1883 | + '2.23.42.2.10*' => 'amount', |
|
1884 | + '2.23.42.2.11*' => 'accountNumber', |
|
1885 | + '2.23.42.2.12*' => 'passPhrase', |
|
1886 | + '2.23.42.3*' => 'attribute', |
|
1887 | + '2.23.42.3.0*' => 'cert', |
|
1888 | + '2.23.42.3.0.0*' => 'rootKeyThumb', |
|
1889 | + '2.23.42.3.0.1*' => 'additionalPolicy', |
|
1890 | + '2.23.42.4*' => 'algorithm', |
|
1891 | + '2.23.42.5*' => 'policy', |
|
1892 | + '2.23.42.5.0*' => 'root', |
|
1893 | + '2.23.42.6*' => 'module', |
|
1894 | + '2.23.42.7*' => 'certExt', |
|
1895 | + '2.23.42.7.0*' => 'hashedRootKey', |
|
1896 | + '2.23.42.7.1*' => 'certificateType', |
|
1897 | + '2.23.42.7.2*' => 'merchantData', |
|
1898 | + '2.23.42.7.3*' => 'cardCertRequired', |
|
1899 | + '2.23.42.7.4*' => 'tunneling', |
|
1900 | + '2.23.42.7.5*' => 'setExtensions', |
|
1901 | + '2.23.42.7.6*' => 'setQualifier', |
|
1902 | + '2.23.42.8*' => 'brand', |
|
1903 | + '2.23.42.8.1*' => 'IATA-ATA', |
|
1904 | + '2.23.42.8.4*' => 'VISA', |
|
1905 | + '2.23.42.8.5*' => 'MasterCard', |
|
1906 | + '2.23.42.8.30*' => 'Diners', |
|
1907 | + '2.23.42.8.34*' => 'AmericanExpress', |
|
1908 | + '2.23.42.8.6011*' => 'Novus', |
|
1909 | + '2.23.42.9*' => 'vendor', |
|
1910 | + '2.23.42.9.0*' => 'GlobeSet', |
|
1911 | + '2.23.42.9.1*' => 'IBM', |
|
1912 | + '2.23.42.9.2*' => 'CyberCash', |
|
1913 | + '2.23.42.9.3*' => 'Terisa', |
|
1914 | + '2.23.42.9.4*' => 'RSADSI', |
|
1915 | + '2.23.42.9.5*' => 'VeriFone', |
|
1916 | + '2.23.42.9.6*' => 'TrinTech', |
|
1917 | + '2.23.42.9.7*' => 'BankGate', |
|
1918 | + '2.23.42.9.8*' => 'GTE', |
|
1919 | + '2.23.42.9.9*' => 'CompuSource', |
|
1920 | + '2.23.42.9.10*' => 'Griffin', |
|
1921 | + '2.23.42.9.11*' => 'Certicom', |
|
1922 | + '2.23.42.9.12*' => 'OSS', |
|
1923 | + '2.23.42.9.13*' => 'TenthMountain', |
|
1924 | + '2.23.42.9.14*' => 'Antares', |
|
1925 | + '2.23.42.9.15*' => 'ECC', |
|
1926 | + '2.23.42.9.16*' => 'Maithean', |
|
1927 | + '2.23.42.9.17*' => 'Netscape', |
|
1928 | + '2.23.42.9.18*' => 'Verisign', |
|
1929 | + '2.23.42.9.19*' => 'BlueMoney', |
|
1930 | + '2.23.42.9.20*' => 'Lacerte', |
|
1931 | + '2.23.42.9.21*' => 'Fujitsu', |
|
1932 | + '2.23.42.9.22*' => 'eLab', |
|
1933 | + '2.23.42.9.23*' => 'Entrust', |
|
1934 | + '2.23.42.9.24*' => 'VIAnet', |
|
1935 | + '2.23.42.9.25*' => 'III', |
|
1936 | + '2.23.42.9.26*' => 'OpenMarket', |
|
1937 | + '2.23.42.9.27*' => 'Lexem', |
|
1938 | + '2.23.42.9.28*' => 'Intertrader', |
|
1939 | + '2.23.42.9.29*' => 'Persimmon', |
|
1940 | + '2.23.42.9.30*' => 'NABLE', |
|
1941 | + '2.23.42.9.31*' => 'espace-net', |
|
1942 | + '2.23.42.9.32*' => 'Hitachi', |
|
1943 | + '2.23.42.9.33*' => 'Microsoft', |
|
1944 | + '2.23.42.9.34*' => 'NEC', |
|
1945 | + '2.23.42.9.35*' => 'Mitsubishi', |
|
1946 | + '2.23.42.9.36*' => 'NCR', |
|
1947 | + '2.23.42.9.37*' => 'e-COMM', |
|
1948 | + '2.23.42.9.38*' => 'Gemplus', |
|
1949 | + '2.23.42.10*' => 'national', |
|
1950 | + '2.23.42.10.392*' => 'Japan', |
|
1951 | + '2.23.136.1.1.1*' => 'mRTDSignatureData', |
|
1952 | + '2.54.1775.2*' => 'hashedRootKey', |
|
1953 | + '2.54.1775.3*' => 'certificateType', |
|
1954 | + '2.54.1775.4*' => 'merchantData', |
|
1955 | + '2.54.1775.5*' => 'cardCertRequired', |
|
1956 | + '2.54.1775.6*' => 'tunneling', |
|
1957 | + '2.54.1775.7*' => 'setQualifier', |
|
1958 | + '2.54.1775.99*' => 'setData', |
|
1959 | + '1.3.6.1.4.1.6449.1.2.1.5.1*' => 'UTN-USERFirst EV policy', |
|
1960 | + '1.3.6.1.4.1.34697.2.1*' => 'AffirmTrust EV policy', |
|
1961 | + '1.3.6.1.4.1.34697.2.2*' => 'AffirmTrust EV policy', |
|
1962 | + '1.3.6.1.4.1.34697.2.3*' => 'AffirmTrust EV policy', |
|
1963 | + '1.3.6.1.4.1.34697.2.4*' => 'AffirmTrust EV policy', |
|
1964 | + '1.3.6.1.4.1.22234.2.5.2.3.1*' => 'CertPlus EV policy', |
|
1965 | + '1.3.6.1.4.1.6334.1.100.1*' => 'GTE CyberTrust EV policy', |
|
1966 | + '2.16.840.1.114412.2.1*' => 'DigiCert EV policy', |
|
1967 | + '2.16.528.1.1001.1.1.1.12.6.1.1.1*' => 'DigiNotar EV policy', |
|
1968 | + '2.16.840.1.114028.10.1.2*' => 'Entrust EV policy', |
|
1969 | + '1.3.6.1.4.1.14370.1.6*' => 'GeoTrust EV policy', |
|
1970 | + '1.3.6.1.4.1.4146.1.1*' => 'GlobalSign EV policy', |
|
1971 | + '2.16.840.1.114413.1.7.23.3*' => 'ValiCert EV policy', |
|
1972 | + '1.3.6.1.4.1.782.1.2.1.8.1*' => 'Network Solutions EV policy', |
|
1973 | + '1.3.6.1.4.1.8024.0.2.100.1.2*' => 'QuoVadis EV policy', |
|
1974 | + '2.16.840.1.114404.1.1.2.4.1*' => 'Secure Global EV policy', |
|
1975 | + '1.2.392.200091.100.721.1*' => 'Security Communication EV policy', |
|
1976 | + '1.3.6.1.4.1.23223.1.1.1*' => 'StartCom EV policy', |
|
1977 | + '2.16.840.1.114414.1.7.23.3*' => 'Starfield EV policy', |
|
1978 | + '2.16.756.1.89.1.2.1.1*' => 'SwissSign EV policy', |
|
1979 | + '2.16.840.1.113733.1.7.48.1*' => 'Thawte EV policy', |
|
1980 | + '2.16.840.1.114171.500.9*' => 'Wells Fargo EV policy', |
|
1981 | + ]; |
|
1982 | 1982 | } |
@@ -5,269 +5,269 @@ |
||
5 | 5 | require_once 'Oids.php'; |
6 | 6 | |
7 | 7 | class Der extends Oids { |
8 | - protected $tag; |
|
9 | - protected $len; |
|
10 | - protected $value; |
|
11 | - protected $class; |
|
12 | - protected $constructed; |
|
13 | - protected $buffer; |
|
14 | - protected $stack = []; |
|
15 | - protected $i; |
|
16 | - private $ignoredextensions = [ |
|
17 | - 'netscape-cert-type' => 1, |
|
18 | - ]; |
|
19 | - private $id; |
|
20 | - |
|
21 | - protected function init($der) { |
|
22 | - $this->buffer = $der; |
|
23 | - $this->i = 0; |
|
24 | - $this->id = uniqid(); |
|
25 | - } |
|
26 | - |
|
27 | - protected function dump($note = '') { |
|
28 | - $z = strlen($this->buffer) - $this->i; |
|
29 | - print_r("{$note}\n"); |
|
30 | - print_r("len: {$z}\n"); |
|
31 | - print_r(chunk_split(bin2hex(substr($this->buffer, $this->i)), 2, ':')); |
|
32 | - echo "\n"; |
|
33 | - } |
|
34 | - |
|
35 | - protected function pr($note = '') { |
|
36 | - $savei = $this->i; |
|
37 | - $byte = ord($this->buffer[$this->i++]); |
|
38 | - $tag = $byte & 0x1F; |
|
39 | - $class = $byte & 0xC0; |
|
40 | - $constructed = $byte & 0x20; |
|
41 | - $len = $this->vallen(); |
|
42 | - $this->i = $savei; |
|
43 | - print_r("{$note}\n"); |
|
44 | - print_r("i : {$this->i}\n"); |
|
45 | - print_r("len: {$len}\n"); |
|
46 | - print_r("class: {$class}\n"); |
|
47 | - print_r("tag : {$tag}\n"); |
|
48 | - print_r(chunk_split(bin2hex(substr($this->buffer, $this->i, min(32, strlen($this->buffer) - $this->i))) . "\n", 2, ':')); |
|
49 | - print_r("---\n"); |
|
50 | - } |
|
51 | - |
|
52 | - private function tlv($expectedtag = null) { |
|
53 | - $byte = ord($this->buffer[$this->i++]); |
|
54 | - $this->tag = $byte & 0x1F; |
|
55 | - if ($expectedtag < 0) { |
|
56 | - $this->tag = $expectedtag = -$expectedtag; |
|
57 | - } |
|
58 | - if ($expectedtag && $expectedtag != $this->tag) { |
|
59 | - trigger_error("expected tag == {$expectedtag}, got {$this->tag} {$this->id}\n", E_USER_ERROR); |
|
60 | - } |
|
61 | - $this->class = $byte & 0xC0; |
|
62 | - $this->constructed = $byte & 0x20; |
|
63 | - $this->len = $this->vallen(); |
|
64 | - } |
|
65 | - |
|
66 | - protected function next($expectedtag = null) { |
|
67 | - $this->tlv($expectedtag); |
|
68 | - if ($this->constructed) { |
|
69 | - return; |
|
70 | - } |
|
71 | - $value = substr($this->buffer, $this->i, $this->len); |
|
72 | - if ($this->class == 0 || $this->class == 0x80) { |
|
73 | - if ($this->tag == 2 || $this->tag == 10) { # ints and enums |
|
74 | - $int = 0; |
|
75 | - foreach (str_split($value) as $byte) { |
|
76 | - $int = bcmul($int, '256', 0); |
|
77 | - $int = bcadd($int, ord($byte), 0); |
|
78 | - } |
|
79 | - $this->value = $int; |
|
80 | - } |
|
81 | - elseif ($this->tag == 1) { # boolean |
|
82 | - $this->value = ord($value) != 0; |
|
83 | - } |
|
84 | - elseif ($this->tag == 3) { # bit string |
|
85 | - $this->value = $value; |
|
86 | - } |
|
87 | - elseif ($this->tag == 5) { # null |
|
88 | - $this->value = null; |
|
89 | - } |
|
90 | - else { |
|
91 | - $this->value = $value; |
|
92 | - } |
|
93 | - } |
|
94 | - $this->i += $this->len; |
|
95 | - |
|
96 | - return $this->value; |
|
97 | - } |
|
98 | - |
|
99 | - protected function der($expectedtag = null, $pass = false) { |
|
100 | - $oldi = $this->i; |
|
101 | - $this->tlv($expectedtag); |
|
102 | - $i = $this->i; |
|
103 | - if (!$pass) { |
|
104 | - $this->i = $oldi; |
|
105 | - } |
|
106 | - else { |
|
107 | - $this->i += $this->len; |
|
108 | - } |
|
109 | - |
|
110 | - return substr($this->buffer, $oldi, $this->len + $i - $oldi); |
|
111 | - } |
|
112 | - |
|
113 | - /* |
|
8 | + protected $tag; |
|
9 | + protected $len; |
|
10 | + protected $value; |
|
11 | + protected $class; |
|
12 | + protected $constructed; |
|
13 | + protected $buffer; |
|
14 | + protected $stack = []; |
|
15 | + protected $i; |
|
16 | + private $ignoredextensions = [ |
|
17 | + 'netscape-cert-type' => 1, |
|
18 | + ]; |
|
19 | + private $id; |
|
20 | + |
|
21 | + protected function init($der) { |
|
22 | + $this->buffer = $der; |
|
23 | + $this->i = 0; |
|
24 | + $this->id = uniqid(); |
|
25 | + } |
|
26 | + |
|
27 | + protected function dump($note = '') { |
|
28 | + $z = strlen($this->buffer) - $this->i; |
|
29 | + print_r("{$note}\n"); |
|
30 | + print_r("len: {$z}\n"); |
|
31 | + print_r(chunk_split(bin2hex(substr($this->buffer, $this->i)), 2, ':')); |
|
32 | + echo "\n"; |
|
33 | + } |
|
34 | + |
|
35 | + protected function pr($note = '') { |
|
36 | + $savei = $this->i; |
|
37 | + $byte = ord($this->buffer[$this->i++]); |
|
38 | + $tag = $byte & 0x1F; |
|
39 | + $class = $byte & 0xC0; |
|
40 | + $constructed = $byte & 0x20; |
|
41 | + $len = $this->vallen(); |
|
42 | + $this->i = $savei; |
|
43 | + print_r("{$note}\n"); |
|
44 | + print_r("i : {$this->i}\n"); |
|
45 | + print_r("len: {$len}\n"); |
|
46 | + print_r("class: {$class}\n"); |
|
47 | + print_r("tag : {$tag}\n"); |
|
48 | + print_r(chunk_split(bin2hex(substr($this->buffer, $this->i, min(32, strlen($this->buffer) - $this->i))) . "\n", 2, ':')); |
|
49 | + print_r("---\n"); |
|
50 | + } |
|
51 | + |
|
52 | + private function tlv($expectedtag = null) { |
|
53 | + $byte = ord($this->buffer[$this->i++]); |
|
54 | + $this->tag = $byte & 0x1F; |
|
55 | + if ($expectedtag < 0) { |
|
56 | + $this->tag = $expectedtag = -$expectedtag; |
|
57 | + } |
|
58 | + if ($expectedtag && $expectedtag != $this->tag) { |
|
59 | + trigger_error("expected tag == {$expectedtag}, got {$this->tag} {$this->id}\n", E_USER_ERROR); |
|
60 | + } |
|
61 | + $this->class = $byte & 0xC0; |
|
62 | + $this->constructed = $byte & 0x20; |
|
63 | + $this->len = $this->vallen(); |
|
64 | + } |
|
65 | + |
|
66 | + protected function next($expectedtag = null) { |
|
67 | + $this->tlv($expectedtag); |
|
68 | + if ($this->constructed) { |
|
69 | + return; |
|
70 | + } |
|
71 | + $value = substr($this->buffer, $this->i, $this->len); |
|
72 | + if ($this->class == 0 || $this->class == 0x80) { |
|
73 | + if ($this->tag == 2 || $this->tag == 10) { # ints and enums |
|
74 | + $int = 0; |
|
75 | + foreach (str_split($value) as $byte) { |
|
76 | + $int = bcmul($int, '256', 0); |
|
77 | + $int = bcadd($int, ord($byte), 0); |
|
78 | + } |
|
79 | + $this->value = $int; |
|
80 | + } |
|
81 | + elseif ($this->tag == 1) { # boolean |
|
82 | + $this->value = ord($value) != 0; |
|
83 | + } |
|
84 | + elseif ($this->tag == 3) { # bit string |
|
85 | + $this->value = $value; |
|
86 | + } |
|
87 | + elseif ($this->tag == 5) { # null |
|
88 | + $this->value = null; |
|
89 | + } |
|
90 | + else { |
|
91 | + $this->value = $value; |
|
92 | + } |
|
93 | + } |
|
94 | + $this->i += $this->len; |
|
95 | + |
|
96 | + return $this->value; |
|
97 | + } |
|
98 | + |
|
99 | + protected function der($expectedtag = null, $pass = false) { |
|
100 | + $oldi = $this->i; |
|
101 | + $this->tlv($expectedtag); |
|
102 | + $i = $this->i; |
|
103 | + if (!$pass) { |
|
104 | + $this->i = $oldi; |
|
105 | + } |
|
106 | + else { |
|
107 | + $this->i += $this->len; |
|
108 | + } |
|
109 | + |
|
110 | + return substr($this->buffer, $oldi, $this->len + $i - $oldi); |
|
111 | + } |
|
112 | + |
|
113 | + /* |
|
114 | 114 | * if provided with a tag and the tag is equal to the current tag |
115 | 115 | * peek considers it EXPLICIT, consumes it and return true |
116 | 116 | */ |
117 | - protected function peek($tag = null) { |
|
118 | - $t = null; |
|
119 | - if ($this->i < end($this->stack)) { |
|
120 | - $t = ord($this->buffer[$this->i]) & 0x1F; |
|
121 | - } |
|
122 | - if ($tag !== null) { |
|
123 | - if ($t === $tag) { |
|
124 | - $this->next($tag); |
|
125 | - |
|
126 | - return true; |
|
127 | - } |
|
128 | - |
|
129 | - return false; |
|
130 | - } |
|
131 | - |
|
132 | - return $t; |
|
133 | - } |
|
134 | - |
|
135 | - protected function vallen() { |
|
136 | - $byte = ord($this->buffer[$this->i++]); |
|
137 | - $res = $len = $byte & 0x7F; |
|
138 | - if ($byte >= 0x80) { |
|
139 | - $res = 0; |
|
140 | - for ($c = 0; $c < $len; ++$c) { |
|
141 | - $res = $res * 256 + ord($this->buffer[$this->i++]); |
|
142 | - } |
|
143 | - } |
|
144 | - |
|
145 | - return $res; |
|
146 | - } |
|
147 | - |
|
148 | - protected function beginsequence($tag = 16) { |
|
149 | - $this->begin($tag); |
|
150 | - } |
|
151 | - |
|
152 | - protected function beginset($tag = 17) { |
|
153 | - $this->begin($tag); |
|
154 | - } |
|
155 | - |
|
156 | - protected function begin($tag) { |
|
157 | - $this->next($tag); |
|
158 | - array_push($this->stack, $this->i + $this->len); |
|
159 | - } |
|
160 | - |
|
161 | - protected function in() { |
|
162 | - return $this->i < end($this->stack); |
|
163 | - } |
|
164 | - |
|
165 | - protected function end() { |
|
166 | - $end = array_pop($this->stack); |
|
167 | - if ($end != $this->i) { |
|
168 | - trigger_error("sequence or set length does not match: {$end} != {$this->i}", E_USER_ERROR); |
|
169 | - } |
|
170 | - } |
|
171 | - |
|
172 | - protected function extensions() { |
|
173 | - $this->beginsequence(); |
|
174 | - $extns = []; |
|
175 | - while ($this->in()) { |
|
176 | - $this->beginsequence(); |
|
177 | - $extnID = $this->oid(); |
|
178 | - $theext['critical'] = $this->peek(1); |
|
179 | - $theext['extnValue'] = $this->next(4); |
|
180 | - |
|
181 | - try { |
|
182 | - if (method_exists($this, $extnID)) { |
|
183 | - $theext['extnValue'] = call_user_func([$this, $extnID], $theext['extnValue']); |
|
184 | - } |
|
185 | - elseif (!empty($ignoredextensions['$extnID'])) { |
|
186 | - trigger_error("Unknown extension {$extnID}", E_USER_ERROR); |
|
187 | - } |
|
188 | - else { |
|
189 | - $theext['extnValue'] = chunk_split(bin2hex($theext['extnValue']), 2, ':'); |
|
190 | - } |
|
191 | - } |
|
192 | - catch (\Exception $e) { |
|
193 | - $theext['extnValue'] = chunk_split(bin2hex($theext['extnValue']), 2, ':'); |
|
194 | - } |
|
195 | - $this->end(); |
|
196 | - $extns[$extnID] = $theext; |
|
197 | - } |
|
198 | - $this->end(); |
|
199 | - |
|
200 | - return $extns; |
|
201 | - } |
|
202 | - |
|
203 | - protected function signatureAlgorithm() { |
|
204 | - $this->beginsequence(); |
|
205 | - $salg = $this->oid(); |
|
206 | - if ($this->in()) { |
|
207 | - $this->next(); # alg param - ignore for now |
|
208 | - } |
|
209 | - $this->end(); |
|
210 | - |
|
211 | - return $salg; |
|
212 | - } |
|
213 | - |
|
214 | - protected function name($tag = null) { |
|
215 | - $this->beginsequence($tag); # seq of RDN |
|
216 | - $res = []; |
|
217 | - while ($this->in()) { |
|
218 | - $parts = []; |
|
219 | - $this->beginset(); # set of AttributeTypeAndValue |
|
220 | - while ($this->in()) { |
|
221 | - $this->beginsequence(); |
|
222 | - $parts[$this->oid()] = $this->next(); # AttributeValue |
|
223 | - $this->end(); |
|
224 | - } |
|
225 | - $this->end(); |
|
226 | - $res[] = $parts; |
|
227 | - } |
|
228 | - $this->end(); |
|
229 | - |
|
230 | - return $res; |
|
231 | - } |
|
232 | - |
|
233 | - protected function oid($tag = 6) { |
|
234 | - $v = $this->oid_($this->next($tag)); |
|
235 | - if (isset($this->oids[$v])) { |
|
236 | - return $this->oids[$v]; |
|
237 | - } |
|
238 | - |
|
239 | - return $v; |
|
240 | - } |
|
241 | - |
|
242 | - protected function oid_($oid) { |
|
243 | - $len = strlen($oid); |
|
244 | - $v = ""; |
|
245 | - $n = 0; |
|
246 | - for ($c = 0; $c < $len; ++$c) { |
|
247 | - $x = ord($oid[$c]); |
|
248 | - $n = $n * 128 + ($x & 0x7F); |
|
249 | - if ($x <= 127) { |
|
250 | - $v .= $v ? '.' . $n : ((int) ($n / 40) . '.' . ($n % 40)); |
|
251 | - $n = 0; |
|
252 | - } |
|
253 | - } |
|
254 | - |
|
255 | - return $v . '*'; |
|
256 | - } |
|
257 | - |
|
258 | - protected function time($tag = null) { |
|
259 | - $time = $this->next($tag); |
|
260 | - if ($this->tag == 23) { |
|
261 | - $time = (substr($time, 0, 2) < 50 ? '20' : '19') . $time; |
|
262 | - } |
|
263 | - elseif ($this->tag != 24) { |
|
264 | - trigger_error('expected der utc or generalized time', E_USER_ERROR); |
|
265 | - } |
|
266 | - |
|
267 | - return $time; |
|
268 | - } |
|
269 | - |
|
270 | - protected function keyident($tag = 4) { |
|
271 | - return chunk_split(bin2hex($this->next($tag)), 2, ':'); |
|
272 | - } |
|
117 | + protected function peek($tag = null) { |
|
118 | + $t = null; |
|
119 | + if ($this->i < end($this->stack)) { |
|
120 | + $t = ord($this->buffer[$this->i]) & 0x1F; |
|
121 | + } |
|
122 | + if ($tag !== null) { |
|
123 | + if ($t === $tag) { |
|
124 | + $this->next($tag); |
|
125 | + |
|
126 | + return true; |
|
127 | + } |
|
128 | + |
|
129 | + return false; |
|
130 | + } |
|
131 | + |
|
132 | + return $t; |
|
133 | + } |
|
134 | + |
|
135 | + protected function vallen() { |
|
136 | + $byte = ord($this->buffer[$this->i++]); |
|
137 | + $res = $len = $byte & 0x7F; |
|
138 | + if ($byte >= 0x80) { |
|
139 | + $res = 0; |
|
140 | + for ($c = 0; $c < $len; ++$c) { |
|
141 | + $res = $res * 256 + ord($this->buffer[$this->i++]); |
|
142 | + } |
|
143 | + } |
|
144 | + |
|
145 | + return $res; |
|
146 | + } |
|
147 | + |
|
148 | + protected function beginsequence($tag = 16) { |
|
149 | + $this->begin($tag); |
|
150 | + } |
|
151 | + |
|
152 | + protected function beginset($tag = 17) { |
|
153 | + $this->begin($tag); |
|
154 | + } |
|
155 | + |
|
156 | + protected function begin($tag) { |
|
157 | + $this->next($tag); |
|
158 | + array_push($this->stack, $this->i + $this->len); |
|
159 | + } |
|
160 | + |
|
161 | + protected function in() { |
|
162 | + return $this->i < end($this->stack); |
|
163 | + } |
|
164 | + |
|
165 | + protected function end() { |
|
166 | + $end = array_pop($this->stack); |
|
167 | + if ($end != $this->i) { |
|
168 | + trigger_error("sequence or set length does not match: {$end} != {$this->i}", E_USER_ERROR); |
|
169 | + } |
|
170 | + } |
|
171 | + |
|
172 | + protected function extensions() { |
|
173 | + $this->beginsequence(); |
|
174 | + $extns = []; |
|
175 | + while ($this->in()) { |
|
176 | + $this->beginsequence(); |
|
177 | + $extnID = $this->oid(); |
|
178 | + $theext['critical'] = $this->peek(1); |
|
179 | + $theext['extnValue'] = $this->next(4); |
|
180 | + |
|
181 | + try { |
|
182 | + if (method_exists($this, $extnID)) { |
|
183 | + $theext['extnValue'] = call_user_func([$this, $extnID], $theext['extnValue']); |
|
184 | + } |
|
185 | + elseif (!empty($ignoredextensions['$extnID'])) { |
|
186 | + trigger_error("Unknown extension {$extnID}", E_USER_ERROR); |
|
187 | + } |
|
188 | + else { |
|
189 | + $theext['extnValue'] = chunk_split(bin2hex($theext['extnValue']), 2, ':'); |
|
190 | + } |
|
191 | + } |
|
192 | + catch (\Exception $e) { |
|
193 | + $theext['extnValue'] = chunk_split(bin2hex($theext['extnValue']), 2, ':'); |
|
194 | + } |
|
195 | + $this->end(); |
|
196 | + $extns[$extnID] = $theext; |
|
197 | + } |
|
198 | + $this->end(); |
|
199 | + |
|
200 | + return $extns; |
|
201 | + } |
|
202 | + |
|
203 | + protected function signatureAlgorithm() { |
|
204 | + $this->beginsequence(); |
|
205 | + $salg = $this->oid(); |
|
206 | + if ($this->in()) { |
|
207 | + $this->next(); # alg param - ignore for now |
|
208 | + } |
|
209 | + $this->end(); |
|
210 | + |
|
211 | + return $salg; |
|
212 | + } |
|
213 | + |
|
214 | + protected function name($tag = null) { |
|
215 | + $this->beginsequence($tag); # seq of RDN |
|
216 | + $res = []; |
|
217 | + while ($this->in()) { |
|
218 | + $parts = []; |
|
219 | + $this->beginset(); # set of AttributeTypeAndValue |
|
220 | + while ($this->in()) { |
|
221 | + $this->beginsequence(); |
|
222 | + $parts[$this->oid()] = $this->next(); # AttributeValue |
|
223 | + $this->end(); |
|
224 | + } |
|
225 | + $this->end(); |
|
226 | + $res[] = $parts; |
|
227 | + } |
|
228 | + $this->end(); |
|
229 | + |
|
230 | + return $res; |
|
231 | + } |
|
232 | + |
|
233 | + protected function oid($tag = 6) { |
|
234 | + $v = $this->oid_($this->next($tag)); |
|
235 | + if (isset($this->oids[$v])) { |
|
236 | + return $this->oids[$v]; |
|
237 | + } |
|
238 | + |
|
239 | + return $v; |
|
240 | + } |
|
241 | + |
|
242 | + protected function oid_($oid) { |
|
243 | + $len = strlen($oid); |
|
244 | + $v = ""; |
|
245 | + $n = 0; |
|
246 | + for ($c = 0; $c < $len; ++$c) { |
|
247 | + $x = ord($oid[$c]); |
|
248 | + $n = $n * 128 + ($x & 0x7F); |
|
249 | + if ($x <= 127) { |
|
250 | + $v .= $v ? '.' . $n : ((int) ($n / 40) . '.' . ($n % 40)); |
|
251 | + $n = 0; |
|
252 | + } |
|
253 | + } |
|
254 | + |
|
255 | + return $v . '*'; |
|
256 | + } |
|
257 | + |
|
258 | + protected function time($tag = null) { |
|
259 | + $time = $this->next($tag); |
|
260 | + if ($this->tag == 23) { |
|
261 | + $time = (substr($time, 0, 2) < 50 ? '20' : '19') . $time; |
|
262 | + } |
|
263 | + elseif ($this->tag != 24) { |
|
264 | + trigger_error('expected der utc or generalized time', E_USER_ERROR); |
|
265 | + } |
|
266 | + |
|
267 | + return $time; |
|
268 | + } |
|
269 | + |
|
270 | + protected function keyident($tag = 4) { |
|
271 | + return chunk_split(bin2hex($this->next($tag)), 2, ':'); |
|
272 | + } |
|
273 | 273 | } |
@@ -212,7 +212,7 @@ |
||
212 | 212 | } |
213 | 213 | |
214 | 214 | protected function name($tag = null) { |
215 | - $this->beginsequence($tag); # seq of RDN |
|
215 | + $this->beginsequence($tag); # seq of RDN |
|
216 | 216 | $res = []; |
217 | 217 | while ($this->in()) { |
218 | 218 | $parts = []; |
@@ -77,17 +77,13 @@ discard block |
||
77 | 77 | $int = bcadd($int, ord($byte), 0); |
78 | 78 | } |
79 | 79 | $this->value = $int; |
80 | - } |
|
81 | - elseif ($this->tag == 1) { # boolean |
|
80 | + } elseif ($this->tag == 1) { # boolean |
|
82 | 81 | $this->value = ord($value) != 0; |
83 | - } |
|
84 | - elseif ($this->tag == 3) { # bit string |
|
82 | + } elseif ($this->tag == 3) { # bit string |
|
85 | 83 | $this->value = $value; |
86 | - } |
|
87 | - elseif ($this->tag == 5) { # null |
|
84 | + } elseif ($this->tag == 5) { # null |
|
88 | 85 | $this->value = null; |
89 | - } |
|
90 | - else { |
|
86 | + } else { |
|
91 | 87 | $this->value = $value; |
92 | 88 | } |
93 | 89 | } |
@@ -102,8 +98,7 @@ discard block |
||
102 | 98 | $i = $this->i; |
103 | 99 | if (!$pass) { |
104 | 100 | $this->i = $oldi; |
105 | - } |
|
106 | - else { |
|
101 | + } else { |
|
107 | 102 | $this->i += $this->len; |
108 | 103 | } |
109 | 104 | |
@@ -181,15 +176,12 @@ discard block |
||
181 | 176 | try { |
182 | 177 | if (method_exists($this, $extnID)) { |
183 | 178 | $theext['extnValue'] = call_user_func([$this, $extnID], $theext['extnValue']); |
184 | - } |
|
185 | - elseif (!empty($ignoredextensions['$extnID'])) { |
|
179 | + } elseif (!empty($ignoredextensions['$extnID'])) { |
|
186 | 180 | trigger_error("Unknown extension {$extnID}", E_USER_ERROR); |
187 | - } |
|
188 | - else { |
|
181 | + } else { |
|
189 | 182 | $theext['extnValue'] = chunk_split(bin2hex($theext['extnValue']), 2, ':'); |
190 | 183 | } |
191 | - } |
|
192 | - catch (\Exception $e) { |
|
184 | + } catch (\Exception $e) { |
|
193 | 185 | $theext['extnValue'] = chunk_split(bin2hex($theext['extnValue']), 2, ':'); |
194 | 186 | } |
195 | 187 | $this->end(); |
@@ -259,8 +251,7 @@ discard block |
||
259 | 251 | $time = $this->next($tag); |
260 | 252 | if ($this->tag == 23) { |
261 | 253 | $time = (substr($time, 0, 2) < 50 ? '20' : '19') . $time; |
262 | - } |
|
263 | - elseif ($this->tag != 24) { |
|
254 | + } elseif ($this->tag != 24) { |
|
264 | 255 | trigger_error('expected der utc or generalized time', E_USER_ERROR); |
265 | 256 | } |
266 | 257 |
@@ -7,289 +7,289 @@ |
||
7 | 7 | define('CHANGE_PASSPHRASE_WRONG', 3); |
8 | 8 | |
9 | 9 | class PluginSmimeModule extends Module { |
10 | - /** |
|
11 | - * Constructor. |
|
12 | - * |
|
13 | - * @param int $id unique id |
|
14 | - * @param string $folderentryid Entryid of the folder. Data will be selected from this folder. |
|
15 | - * @param array $data list of all actions |
|
16 | - */ |
|
17 | - public function __construct($id, $data) { |
|
18 | - $this->store = $GLOBALS['mapisession']->getDefaultMessageStore(); |
|
19 | - parent::__construct($id, $data); |
|
20 | - } |
|
10 | + /** |
|
11 | + * Constructor. |
|
12 | + * |
|
13 | + * @param int $id unique id |
|
14 | + * @param string $folderentryid Entryid of the folder. Data will be selected from this folder. |
|
15 | + * @param array $data list of all actions |
|
16 | + */ |
|
17 | + public function __construct($id, $data) { |
|
18 | + $this->store = $GLOBALS['mapisession']->getDefaultMessageStore(); |
|
19 | + parent::__construct($id, $data); |
|
20 | + } |
|
21 | 21 | |
22 | - /** |
|
23 | - * Executes all the actions in the $data variable. |
|
24 | - * |
|
25 | - * @return bool true on success or false on failure |
|
26 | - */ |
|
27 | - public function execute() { |
|
28 | - foreach ($this->data as $actionType => $actionData) { |
|
29 | - if (isset($actionType)) { |
|
30 | - try { |
|
31 | - switch ($actionType) { |
|
32 | - case 'certificate': |
|
33 | - $data = $this->verifyCertificate($actionData); |
|
34 | - $response = [ |
|
35 | - 'type' => 3, |
|
36 | - 'status' => $data['status'], |
|
37 | - 'message' => $data['message'], |
|
38 | - 'data' => $data['data'], |
|
39 | - ]; |
|
40 | - $this->addActionData('certificate', $response); |
|
41 | - $GLOBALS['bus']->addData($this->getResponseData()); |
|
42 | - break; |
|
22 | + /** |
|
23 | + * Executes all the actions in the $data variable. |
|
24 | + * |
|
25 | + * @return bool true on success or false on failure |
|
26 | + */ |
|
27 | + public function execute() { |
|
28 | + foreach ($this->data as $actionType => $actionData) { |
|
29 | + if (isset($actionType)) { |
|
30 | + try { |
|
31 | + switch ($actionType) { |
|
32 | + case 'certificate': |
|
33 | + $data = $this->verifyCertificate($actionData); |
|
34 | + $response = [ |
|
35 | + 'type' => 3, |
|
36 | + 'status' => $data['status'], |
|
37 | + 'message' => $data['message'], |
|
38 | + 'data' => $data['data'], |
|
39 | + ]; |
|
40 | + $this->addActionData('certificate', $response); |
|
41 | + $GLOBALS['bus']->addData($this->getResponseData()); |
|
42 | + break; |
|
43 | 43 | |
44 | - case 'passphrase': |
|
45 | - $data = $this->verifyPassphrase($actionData); |
|
46 | - $response = [ |
|
47 | - 'type' => 3, |
|
48 | - 'status' => $data['status'], |
|
49 | - ]; |
|
50 | - $this->addActionData('passphrase', $response); |
|
51 | - $GLOBALS['bus']->addData($this->getResponseData()); |
|
52 | - break; |
|
44 | + case 'passphrase': |
|
45 | + $data = $this->verifyPassphrase($actionData); |
|
46 | + $response = [ |
|
47 | + 'type' => 3, |
|
48 | + 'status' => $data['status'], |
|
49 | + ]; |
|
50 | + $this->addActionData('passphrase', $response); |
|
51 | + $GLOBALS['bus']->addData($this->getResponseData()); |
|
52 | + break; |
|
53 | 53 | |
54 | - case 'changepassphrase': |
|
55 | - $data = $this->changePassphrase($actionData); |
|
56 | - if ($data === CHANGE_PASSPHRASE_SUCCESS) { |
|
57 | - // Reset cached passphrase. |
|
58 | - $encryptionStore = EncryptionStore::getInstance(); |
|
59 | - withPHPSession(function () use ($encryptionStore) { |
|
60 | - $encryptionStore->add('smime', ''); |
|
61 | - }); |
|
62 | - } |
|
63 | - $response = [ |
|
64 | - 'type' => 3, |
|
65 | - 'code' => $data, |
|
66 | - ]; |
|
67 | - $this->addActionData('changepassphrase', $response); |
|
68 | - $GLOBALS['bus']->addData($this->getResponseData()); |
|
69 | - break; |
|
54 | + case 'changepassphrase': |
|
55 | + $data = $this->changePassphrase($actionData); |
|
56 | + if ($data === CHANGE_PASSPHRASE_SUCCESS) { |
|
57 | + // Reset cached passphrase. |
|
58 | + $encryptionStore = EncryptionStore::getInstance(); |
|
59 | + withPHPSession(function () use ($encryptionStore) { |
|
60 | + $encryptionStore->add('smime', ''); |
|
61 | + }); |
|
62 | + } |
|
63 | + $response = [ |
|
64 | + 'type' => 3, |
|
65 | + 'code' => $data, |
|
66 | + ]; |
|
67 | + $this->addActionData('changepassphrase', $response); |
|
68 | + $GLOBALS['bus']->addData($this->getResponseData()); |
|
69 | + break; |
|
70 | 70 | |
71 | - case 'list': |
|
72 | - $data = $this->getPublicCertificates(); |
|
73 | - $this->addActionData('list', $data); |
|
74 | - $GLOBALS['bus']->addData($this->getResponseData()); |
|
75 | - break; |
|
71 | + case 'list': |
|
72 | + $data = $this->getPublicCertificates(); |
|
73 | + $this->addActionData('list', $data); |
|
74 | + $GLOBALS['bus']->addData($this->getResponseData()); |
|
75 | + break; |
|
76 | 76 | |
77 | - case 'delete': |
|
78 | - // FIXME: handle multiple deletes? Separate function? |
|
79 | - $entryid = $actionData['entryid']; |
|
80 | - $root = mapi_msgstore_openentry($this->store, null); |
|
81 | - mapi_folder_deletemessages($root, [hex2bin($entryid)]); |
|
77 | + case 'delete': |
|
78 | + // FIXME: handle multiple deletes? Separate function? |
|
79 | + $entryid = $actionData['entryid']; |
|
80 | + $root = mapi_msgstore_openentry($this->store, null); |
|
81 | + mapi_folder_deletemessages($root, [hex2bin($entryid)]); |
|
82 | 82 | |
83 | - $this->sendFeedback(true); |
|
84 | - break; |
|
83 | + $this->sendFeedback(true); |
|
84 | + break; |
|
85 | 85 | |
86 | - default: |
|
87 | - $this->handleUnknownActionType($actionType); |
|
88 | - } |
|
89 | - } |
|
90 | - catch (Exception $e) { |
|
91 | - $this->sendFeedback(false, parent::errorDetailsFromException($e)); |
|
92 | - } |
|
93 | - } |
|
94 | - } |
|
95 | - } |
|
86 | + default: |
|
87 | + $this->handleUnknownActionType($actionType); |
|
88 | + } |
|
89 | + } |
|
90 | + catch (Exception $e) { |
|
91 | + $this->sendFeedback(false, parent::errorDetailsFromException($e)); |
|
92 | + } |
|
93 | + } |
|
94 | + } |
|
95 | + } |
|
96 | 96 | |
97 | - /** |
|
98 | - * Verifies the users private certificate, |
|
99 | - * returns array with three statuses and a message key containing a message for the user. |
|
100 | - * 1. There is a certificate and valid |
|
101 | - * 2. There is a certificate and not valid |
|
102 | - * 3. No certificate |
|
103 | - * FIXME: in the future we might support multiple private certs. |
|
104 | - * |
|
105 | - * @param array $data which contains the data send from JavaScript |
|
106 | - * |
|
107 | - * @return array $data which returns two keys containing the certificate |
|
108 | - */ |
|
109 | - public function verifyCertificate($data) { |
|
110 | - $message = ''; |
|
111 | - $status = false; |
|
97 | + /** |
|
98 | + * Verifies the users private certificate, |
|
99 | + * returns array with three statuses and a message key containing a message for the user. |
|
100 | + * 1. There is a certificate and valid |
|
101 | + * 2. There is a certificate and not valid |
|
102 | + * 3. No certificate |
|
103 | + * FIXME: in the future we might support multiple private certs. |
|
104 | + * |
|
105 | + * @param array $data which contains the data send from JavaScript |
|
106 | + * |
|
107 | + * @return array $data which returns two keys containing the certificate |
|
108 | + */ |
|
109 | + public function verifyCertificate($data) { |
|
110 | + $message = ''; |
|
111 | + $status = false; |
|
112 | 112 | |
113 | - $privateCerts = getMAPICert($this->store); |
|
114 | - $certIdx = -1; |
|
113 | + $privateCerts = getMAPICert($this->store); |
|
114 | + $certIdx = -1; |
|
115 | 115 | |
116 | - // No certificates |
|
117 | - if (!$privateCerts || count($privateCerts) === 0) { |
|
118 | - $message = _('No certificate avaliable'); |
|
119 | - } |
|
120 | - else { |
|
121 | - // For each certificate in MAPI store |
|
122 | - $smtpAddress = $GLOBALS['mapisession']->getSMTPAddress(); |
|
123 | - for ($i = 0, $cnt = count($privateCerts); $i < $cnt; ++$i) { |
|
124 | - // Check if certificate is still valid |
|
125 | - // TODO: create a more generic function which verifyies if the certificate is valid |
|
126 | - // And remove possible duplication from plugin.smime.php->onUploadCertificate |
|
127 | - if ($privateCerts[$i][PR_MESSAGE_DELIVERY_TIME] < time()) { // validTo |
|
128 | - $message = _('Private certificate is not valid yet, unable to sign email'); |
|
129 | - } |
|
130 | - elseif ($privateCerts[$i][PR_CLIENT_SUBMIT_TIME] >= time()) { // validFrom |
|
131 | - $message = _('Private certificate has been expired, unable to sign email'); |
|
132 | - } |
|
133 | - elseif (strcasecmp($privateCerts[$i][PR_SUBJECT], $smtpAddress) !== 0) { |
|
134 | - $message = _('Private certificate does not match email address'); |
|
135 | - } |
|
136 | - else { |
|
137 | - $status = true; |
|
138 | - $message = ''; |
|
139 | - $certIdx = $i; |
|
140 | - } |
|
141 | - } |
|
142 | - } |
|
116 | + // No certificates |
|
117 | + if (!$privateCerts || count($privateCerts) === 0) { |
|
118 | + $message = _('No certificate avaliable'); |
|
119 | + } |
|
120 | + else { |
|
121 | + // For each certificate in MAPI store |
|
122 | + $smtpAddress = $GLOBALS['mapisession']->getSMTPAddress(); |
|
123 | + for ($i = 0, $cnt = count($privateCerts); $i < $cnt; ++$i) { |
|
124 | + // Check if certificate is still valid |
|
125 | + // TODO: create a more generic function which verifyies if the certificate is valid |
|
126 | + // And remove possible duplication from plugin.smime.php->onUploadCertificate |
|
127 | + if ($privateCerts[$i][PR_MESSAGE_DELIVERY_TIME] < time()) { // validTo |
|
128 | + $message = _('Private certificate is not valid yet, unable to sign email'); |
|
129 | + } |
|
130 | + elseif ($privateCerts[$i][PR_CLIENT_SUBMIT_TIME] >= time()) { // validFrom |
|
131 | + $message = _('Private certificate has been expired, unable to sign email'); |
|
132 | + } |
|
133 | + elseif (strcasecmp($privateCerts[$i][PR_SUBJECT], $smtpAddress) !== 0) { |
|
134 | + $message = _('Private certificate does not match email address'); |
|
135 | + } |
|
136 | + else { |
|
137 | + $status = true; |
|
138 | + $message = ''; |
|
139 | + $certIdx = $i; |
|
140 | + } |
|
141 | + } |
|
142 | + } |
|
143 | 143 | |
144 | - return [ |
|
145 | - 'message' => $message, |
|
146 | - 'status' => $status, |
|
147 | - 'data' => [ |
|
148 | - 'validto' => $privateCerts[$certIdx][PR_MESSAGE_DELIVERY_TIME] ?? '', |
|
149 | - 'validFrom' => $privateCerts[$certIdx][PR_CLIENT_SUBMIT_TIME] ?? '', |
|
150 | - 'subject' => $privateCerts[$certIdx][PR_SUBJECT] ?? 'Unknown', |
|
151 | - ], |
|
152 | - ]; |
|
153 | - } |
|
144 | + return [ |
|
145 | + 'message' => $message, |
|
146 | + 'status' => $status, |
|
147 | + 'data' => [ |
|
148 | + 'validto' => $privateCerts[$certIdx][PR_MESSAGE_DELIVERY_TIME] ?? '', |
|
149 | + 'validFrom' => $privateCerts[$certIdx][PR_CLIENT_SUBMIT_TIME] ?? '', |
|
150 | + 'subject' => $privateCerts[$certIdx][PR_SUBJECT] ?? 'Unknown', |
|
151 | + ], |
|
152 | + ]; |
|
153 | + } |
|
154 | 154 | |
155 | - /** |
|
156 | - * Verify if the supplied passphrase unlocks the private certificate stored in the mapi |
|
157 | - * userstore. |
|
158 | - * |
|
159 | - * @param array $data which contains the data send from JavaScript |
|
160 | - * |
|
161 | - * @return array $data which contains a key 'stats' |
|
162 | - */ |
|
163 | - public function verifyPassphrase($data) { |
|
164 | - $result = readPrivateCert($this->store, $data['passphrase']); |
|
155 | + /** |
|
156 | + * Verify if the supplied passphrase unlocks the private certificate stored in the mapi |
|
157 | + * userstore. |
|
158 | + * |
|
159 | + * @param array $data which contains the data send from JavaScript |
|
160 | + * |
|
161 | + * @return array $data which contains a key 'stats' |
|
162 | + */ |
|
163 | + public function verifyPassphrase($data) { |
|
164 | + $result = readPrivateCert($this->store, $data['passphrase']); |
|
165 | 165 | |
166 | - if ($result) { |
|
167 | - $encryptionStore = EncryptionStore::getInstance(); |
|
168 | - if (encryptionStoreExpirationSupport()) { |
|
169 | - $encryptionStore->add('smime', $data['passphrase'], time() + (5 * 60)); |
|
170 | - } |
|
171 | - else { |
|
172 | - withPHPSession(function () use ($encryptionStore, $data) { |
|
173 | - $encryptionStore->add('smime', $data['passphrase']); |
|
174 | - }); |
|
175 | - } |
|
176 | - $result = true; |
|
177 | - } |
|
178 | - else { |
|
179 | - $result = false; |
|
180 | - } |
|
166 | + if ($result) { |
|
167 | + $encryptionStore = EncryptionStore::getInstance(); |
|
168 | + if (encryptionStoreExpirationSupport()) { |
|
169 | + $encryptionStore->add('smime', $data['passphrase'], time() + (5 * 60)); |
|
170 | + } |
|
171 | + else { |
|
172 | + withPHPSession(function () use ($encryptionStore, $data) { |
|
173 | + $encryptionStore->add('smime', $data['passphrase']); |
|
174 | + }); |
|
175 | + } |
|
176 | + $result = true; |
|
177 | + } |
|
178 | + else { |
|
179 | + $result = false; |
|
180 | + } |
|
181 | 181 | |
182 | - return [ |
|
183 | - 'status' => $result, |
|
184 | - ]; |
|
185 | - } |
|
182 | + return [ |
|
183 | + 'status' => $result, |
|
184 | + ]; |
|
185 | + } |
|
186 | 186 | |
187 | - /** |
|
188 | - * Returns data for the JavaScript CertificateStore 'list' call. |
|
189 | - * |
|
190 | - * @return array $data which contains a list of public certificates |
|
191 | - */ |
|
192 | - public function getPublicCertificates() { |
|
193 | - $items = []; |
|
194 | - $data['page'] = []; |
|
187 | + /** |
|
188 | + * Returns data for the JavaScript CertificateStore 'list' call. |
|
189 | + * |
|
190 | + * @return array $data which contains a list of public certificates |
|
191 | + */ |
|
192 | + public function getPublicCertificates() { |
|
193 | + $items = []; |
|
194 | + $data['page'] = []; |
|
195 | 195 | |
196 | - $root = mapi_msgstore_openentry($this->store, null); |
|
197 | - $table = mapi_folder_getcontentstable($root, MAPI_ASSOCIATED); |
|
196 | + $root = mapi_msgstore_openentry($this->store, null); |
|
197 | + $table = mapi_folder_getcontentstable($root, MAPI_ASSOCIATED); |
|
198 | 198 | |
199 | - // restriction for public/private certificates which are stored in the root associated folder |
|
200 | - $restrict = [RES_OR, [ |
|
201 | - [RES_PROPERTY, |
|
202 | - [ |
|
203 | - RELOP => RELOP_EQ, |
|
204 | - ULPROPTAG => PR_MESSAGE_CLASS, |
|
205 | - VALUE => [PR_MESSAGE_CLASS => "WebApp.Security.Public"], |
|
206 | - ], |
|
207 | - ], |
|
208 | - [RES_PROPERTY, |
|
209 | - [ |
|
210 | - RELOP => RELOP_EQ, |
|
211 | - ULPROPTAG => PR_MESSAGE_CLASS, |
|
212 | - VALUE => [PR_MESSAGE_CLASS => "WebApp.Security.Private"], |
|
213 | - ], |
|
214 | - ], ], |
|
215 | - ]; |
|
216 | - mapi_table_restrict($table, $restrict, TBL_BATCH); |
|
217 | - mapi_table_sort($table, [PR_MESSAGE_DELIVERY_TIME => TABLE_SORT_DESCEND], TBL_BATCH); |
|
218 | - $certs = mapi_table_queryallrows($table, [PR_SUBJECT, PR_ENTRYID, PR_MESSAGE_DELIVERY_TIME, PR_CLIENT_SUBMIT_TIME, PR_MESSAGE_CLASS, PR_SENDER_NAME, PR_SENDER_EMAIL_ADDRESS, PR_SUBJECT_PREFIX, PR_RECEIVED_BY_NAME, PR_INTERNET_MESSAGE_ID], $restrict); |
|
219 | - foreach ($certs as $cert) { |
|
220 | - $item = []; |
|
221 | - $item['entryid'] = bin2hex($cert[PR_ENTRYID]); |
|
222 | - $item['email'] = $cert[PR_SUBJECT]; |
|
223 | - $item['validto'] = $cert[PR_MESSAGE_DELIVERY_TIME]; |
|
224 | - $item['validfrom'] = $cert[PR_CLIENT_SUBMIT_TIME]; |
|
225 | - $item['serial'] = $cert[PR_SENDER_NAME]; |
|
226 | - $item['issued_by'] = $cert[PR_SENDER_EMAIL_ADDRESS]; |
|
227 | - $item['issued_to'] = $cert[PR_SUBJECT_PREFIX]; |
|
228 | - $item['fingerprint_sha1'] = $cert[PR_RECEIVED_BY_NAME]; |
|
229 | - $item['fingerprint_md5'] = $cert[PR_INTERNET_MESSAGE_ID]; |
|
230 | - $item['type'] = strtolower($cert[PR_MESSAGE_CLASS]) == 'webapp.security.public' ? 'public' : 'private'; |
|
231 | - array_push($items, ['props' => $item]); |
|
232 | - } |
|
233 | - $data['page']['start'] = 0; |
|
234 | - $data['page']['rowcount'] = mapi_table_getrowcount($table); |
|
235 | - $data['page']['totalrowcount'] = $data['page']['rowcount']; |
|
199 | + // restriction for public/private certificates which are stored in the root associated folder |
|
200 | + $restrict = [RES_OR, [ |
|
201 | + [RES_PROPERTY, |
|
202 | + [ |
|
203 | + RELOP => RELOP_EQ, |
|
204 | + ULPROPTAG => PR_MESSAGE_CLASS, |
|
205 | + VALUE => [PR_MESSAGE_CLASS => "WebApp.Security.Public"], |
|
206 | + ], |
|
207 | + ], |
|
208 | + [RES_PROPERTY, |
|
209 | + [ |
|
210 | + RELOP => RELOP_EQ, |
|
211 | + ULPROPTAG => PR_MESSAGE_CLASS, |
|
212 | + VALUE => [PR_MESSAGE_CLASS => "WebApp.Security.Private"], |
|
213 | + ], |
|
214 | + ], ], |
|
215 | + ]; |
|
216 | + mapi_table_restrict($table, $restrict, TBL_BATCH); |
|
217 | + mapi_table_sort($table, [PR_MESSAGE_DELIVERY_TIME => TABLE_SORT_DESCEND], TBL_BATCH); |
|
218 | + $certs = mapi_table_queryallrows($table, [PR_SUBJECT, PR_ENTRYID, PR_MESSAGE_DELIVERY_TIME, PR_CLIENT_SUBMIT_TIME, PR_MESSAGE_CLASS, PR_SENDER_NAME, PR_SENDER_EMAIL_ADDRESS, PR_SUBJECT_PREFIX, PR_RECEIVED_BY_NAME, PR_INTERNET_MESSAGE_ID], $restrict); |
|
219 | + foreach ($certs as $cert) { |
|
220 | + $item = []; |
|
221 | + $item['entryid'] = bin2hex($cert[PR_ENTRYID]); |
|
222 | + $item['email'] = $cert[PR_SUBJECT]; |
|
223 | + $item['validto'] = $cert[PR_MESSAGE_DELIVERY_TIME]; |
|
224 | + $item['validfrom'] = $cert[PR_CLIENT_SUBMIT_TIME]; |
|
225 | + $item['serial'] = $cert[PR_SENDER_NAME]; |
|
226 | + $item['issued_by'] = $cert[PR_SENDER_EMAIL_ADDRESS]; |
|
227 | + $item['issued_to'] = $cert[PR_SUBJECT_PREFIX]; |
|
228 | + $item['fingerprint_sha1'] = $cert[PR_RECEIVED_BY_NAME]; |
|
229 | + $item['fingerprint_md5'] = $cert[PR_INTERNET_MESSAGE_ID]; |
|
230 | + $item['type'] = strtolower($cert[PR_MESSAGE_CLASS]) == 'webapp.security.public' ? 'public' : 'private'; |
|
231 | + array_push($items, ['props' => $item]); |
|
232 | + } |
|
233 | + $data['page']['start'] = 0; |
|
234 | + $data['page']['rowcount'] = mapi_table_getrowcount($table); |
|
235 | + $data['page']['totalrowcount'] = $data['page']['rowcount']; |
|
236 | 236 | |
237 | - return array_merge($data, ['item' => $items]); |
|
238 | - } |
|
237 | + return array_merge($data, ['item' => $items]); |
|
238 | + } |
|
239 | 239 | |
240 | - /* |
|
240 | + /* |
|
241 | 241 | * Changes the passphrase of an already stored certificatem by generating |
242 | 242 | * a new PKCS12 container. |
243 | 243 | * |
244 | 244 | * @param Array $actionData contains the passphrase and new passphrase |
245 | 245 | * return Number error number |
246 | 246 | */ |
247 | - public function changePassphrase($actionData) { |
|
248 | - $certs = readPrivateCert($this->store, $actionData['passphrase']); |
|
247 | + public function changePassphrase($actionData) { |
|
248 | + $certs = readPrivateCert($this->store, $actionData['passphrase']); |
|
249 | 249 | |
250 | - if (empty($certs)) { |
|
251 | - return CHANGE_PASSPHRASE_WRONG; |
|
252 | - } |
|
250 | + if (empty($certs)) { |
|
251 | + return CHANGE_PASSPHRASE_WRONG; |
|
252 | + } |
|
253 | 253 | |
254 | - $cert = $this->pkcs12_change_passphrase($certs, $actionData['new_passphrase']); |
|
254 | + $cert = $this->pkcs12_change_passphrase($certs, $actionData['new_passphrase']); |
|
255 | 255 | |
256 | - if ($cert === false) { |
|
257 | - return CHANGE_PASSPHRASE_ERROR; |
|
258 | - } |
|
256 | + if ($cert === false) { |
|
257 | + return CHANGE_PASSPHRASE_ERROR; |
|
258 | + } |
|
259 | 259 | |
260 | - $mapiCerts = getMAPICert($this->store); |
|
261 | - $mapiCert = $mapiCerts[0] ?? []; |
|
262 | - if (!$mapiCert || empty($mapiCert)) { |
|
263 | - return CHANGE_PASSPHRASE_ERROR; |
|
264 | - } |
|
265 | - $privateCert = mapi_msgstore_openentry($this->store, $mapiCert[PR_ENTRYID]); |
|
260 | + $mapiCerts = getMAPICert($this->store); |
|
261 | + $mapiCert = $mapiCerts[0] ?? []; |
|
262 | + if (!$mapiCert || empty($mapiCert)) { |
|
263 | + return CHANGE_PASSPHRASE_ERROR; |
|
264 | + } |
|
265 | + $privateCert = mapi_msgstore_openentry($this->store, $mapiCert[PR_ENTRYID]); |
|
266 | 266 | |
267 | - $msgBody = base64_encode($cert); |
|
268 | - $stream = mapi_openproperty($privateCert, PR_BODY, IID_IStream, 0, MAPI_CREATE | MAPI_MODIFY); |
|
269 | - mapi_stream_setsize($stream, strlen($msgBody)); |
|
270 | - mapi_stream_write($stream, $msgBody); |
|
271 | - mapi_stream_commit($stream); |
|
272 | - mapi_message_savechanges($privateCert); |
|
267 | + $msgBody = base64_encode($cert); |
|
268 | + $stream = mapi_openproperty($privateCert, PR_BODY, IID_IStream, 0, MAPI_CREATE | MAPI_MODIFY); |
|
269 | + mapi_stream_setsize($stream, strlen($msgBody)); |
|
270 | + mapi_stream_write($stream, $msgBody); |
|
271 | + mapi_stream_commit($stream); |
|
272 | + mapi_message_savechanges($privateCert); |
|
273 | 273 | |
274 | - return CHANGE_PASSPHRASE_SUCCESS; |
|
275 | - } |
|
274 | + return CHANGE_PASSPHRASE_SUCCESS; |
|
275 | + } |
|
276 | 276 | |
277 | - /** |
|
278 | - * Generate a new PKCS#12 certificate store file with a new passphrase. |
|
279 | - * |
|
280 | - * @param array $certs the original certificate |
|
281 | - * @param string $passphrase the passphrase |
|
282 | - * @param mixed $new_passphrase |
|
283 | - * |
|
284 | - * @return mixed boolean or string certificate |
|
285 | - */ |
|
286 | - public function pkcs12_change_passphrase($certs, $new_passphrase) { |
|
287 | - $cert = ""; |
|
288 | - $extracerts = isset($certs['extracerts']) ? $certs['extracerts'] : []; |
|
289 | - if (openssl_pkcs12_export($certs['cert'], $cert, $certs['pkey'], $new_passphrase, ['extracerts' => $extracerts])) { |
|
290 | - return $cert; |
|
291 | - } |
|
277 | + /** |
|
278 | + * Generate a new PKCS#12 certificate store file with a new passphrase. |
|
279 | + * |
|
280 | + * @param array $certs the original certificate |
|
281 | + * @param string $passphrase the passphrase |
|
282 | + * @param mixed $new_passphrase |
|
283 | + * |
|
284 | + * @return mixed boolean or string certificate |
|
285 | + */ |
|
286 | + public function pkcs12_change_passphrase($certs, $new_passphrase) { |
|
287 | + $cert = ""; |
|
288 | + $extracerts = isset($certs['extracerts']) ? $certs['extracerts'] : []; |
|
289 | + if (openssl_pkcs12_export($certs['cert'], $cert, $certs['pkey'], $new_passphrase, ['extracerts' => $extracerts])) { |
|
290 | + return $cert; |
|
291 | + } |
|
292 | 292 | |
293 | - return false; |
|
294 | - } |
|
293 | + return false; |
|
294 | + } |
|
295 | 295 | } |
@@ -56,7 +56,7 @@ discard block |
||
56 | 56 | if ($data === CHANGE_PASSPHRASE_SUCCESS) { |
57 | 57 | // Reset cached passphrase. |
58 | 58 | $encryptionStore = EncryptionStore::getInstance(); |
59 | - withPHPSession(function () use ($encryptionStore) { |
|
59 | + withPHPSession(function() use ($encryptionStore) { |
|
60 | 60 | $encryptionStore->add('smime', ''); |
61 | 61 | }); |
62 | 62 | } |
@@ -169,7 +169,7 @@ discard block |
||
169 | 169 | $encryptionStore->add('smime', $data['passphrase'], time() + (5 * 60)); |
170 | 170 | } |
171 | 171 | else { |
172 | - withPHPSession(function () use ($encryptionStore, $data) { |
|
172 | + withPHPSession(function() use ($encryptionStore, $data) { |
|
173 | 173 | $encryptionStore->add('smime', $data['passphrase']); |
174 | 174 | }); |
175 | 175 | } |
@@ -86,8 +86,7 @@ discard block |
||
86 | 86 | default: |
87 | 87 | $this->handleUnknownActionType($actionType); |
88 | 88 | } |
89 | - } |
|
90 | - catch (Exception $e) { |
|
89 | + } catch (Exception $e) { |
|
91 | 90 | $this->sendFeedback(false, parent::errorDetailsFromException($e)); |
92 | 91 | } |
93 | 92 | } |
@@ -116,8 +115,7 @@ discard block |
||
116 | 115 | // No certificates |
117 | 116 | if (!$privateCerts || count($privateCerts) === 0) { |
118 | 117 | $message = _('No certificate avaliable'); |
119 | - } |
|
120 | - else { |
|
118 | + } else { |
|
121 | 119 | // For each certificate in MAPI store |
122 | 120 | $smtpAddress = $GLOBALS['mapisession']->getSMTPAddress(); |
123 | 121 | for ($i = 0, $cnt = count($privateCerts); $i < $cnt; ++$i) { |
@@ -126,14 +124,11 @@ discard block |
||
126 | 124 | // And remove possible duplication from plugin.smime.php->onUploadCertificate |
127 | 125 | if ($privateCerts[$i][PR_MESSAGE_DELIVERY_TIME] < time()) { // validTo |
128 | 126 | $message = _('Private certificate is not valid yet, unable to sign email'); |
129 | - } |
|
130 | - elseif ($privateCerts[$i][PR_CLIENT_SUBMIT_TIME] >= time()) { // validFrom |
|
127 | + } elseif ($privateCerts[$i][PR_CLIENT_SUBMIT_TIME] >= time()) { // validFrom |
|
131 | 128 | $message = _('Private certificate has been expired, unable to sign email'); |
132 | - } |
|
133 | - elseif (strcasecmp($privateCerts[$i][PR_SUBJECT], $smtpAddress) !== 0) { |
|
129 | + } elseif (strcasecmp($privateCerts[$i][PR_SUBJECT], $smtpAddress) !== 0) { |
|
134 | 130 | $message = _('Private certificate does not match email address'); |
135 | - } |
|
136 | - else { |
|
131 | + } else { |
|
137 | 132 | $status = true; |
138 | 133 | $message = ''; |
139 | 134 | $certIdx = $i; |
@@ -167,15 +162,13 @@ discard block |
||
167 | 162 | $encryptionStore = EncryptionStore::getInstance(); |
168 | 163 | if (encryptionStoreExpirationSupport()) { |
169 | 164 | $encryptionStore->add('smime', $data['passphrase'], time() + (5 * 60)); |
170 | - } |
|
171 | - else { |
|
165 | + } else { |
|
172 | 166 | withPHPSession(function () use ($encryptionStore, $data) { |
173 | 167 | $encryptionStore->add('smime', $data['passphrase']); |
174 | 168 | }); |
175 | 169 | } |
176 | 170 | $result = true; |
177 | - } |
|
178 | - else { |
|
171 | + } else { |
|
179 | 172 | $result = false; |
180 | 173 | } |
181 | 174 |
@@ -34,520 +34,520 @@ discard block |
||
34 | 34 | define('OPENSSL_RECIPIENT_CERTIFICATE_MISMATCH', '21070073'); |
35 | 35 | |
36 | 36 | class Pluginsmime extends Plugin { |
37 | - /** |
|
38 | - * decrypted/verified message. |
|
39 | - */ |
|
40 | - private $message = []; |
|
41 | - |
|
42 | - /** |
|
43 | - * Default MAPI Message Store. |
|
44 | - */ |
|
45 | - private $store; |
|
46 | - |
|
47 | - /** |
|
48 | - * Last openssl error string. |
|
49 | - */ |
|
50 | - private $openssl_error = ""; |
|
51 | - |
|
52 | - /** |
|
53 | - * Called to initialize the plugin and register for hooks. |
|
54 | - */ |
|
55 | - public function init() { |
|
56 | - $this->registerHook('server.core.settings.init.before'); |
|
57 | - $this->registerHook('server.util.parse_smime.signed'); |
|
58 | - $this->registerHook('server.util.parse_smime.encrypted'); |
|
59 | - $this->registerHook('server.module.itemmodule.open.after'); |
|
60 | - $this->registerHook('server.core.operations.submitmessage'); |
|
61 | - $this->registerHook('server.upload_attachment.upload'); |
|
62 | - $this->registerHook('server.module.createmailitemmodule.beforesend'); |
|
63 | - $this->registerHook('server.index.load.custom'); |
|
64 | - |
|
65 | - if (version_compare(phpversion(), '5.4', '<')) { |
|
66 | - $this->cipher = OPENSSL_CIPHER_3DES; |
|
67 | - } |
|
68 | - else { |
|
69 | - $this->cipher = PLUGIN_SMIME_CIPHER; |
|
70 | - } |
|
71 | - } |
|
72 | - |
|
73 | - /** |
|
74 | - * Default message store. |
|
75 | - * |
|
76 | - * @return object MAPI Message store |
|
77 | - */ |
|
78 | - public function getStore() { |
|
79 | - if (!$this->store) { |
|
80 | - $this->store = $GLOBALS['mapisession']->getDefaultMessageStore(); |
|
81 | - } |
|
82 | - |
|
83 | - return $this->store; |
|
84 | - } |
|
85 | - |
|
86 | - /** |
|
87 | - * Process the incoming events that where fired by the client. |
|
88 | - * |
|
89 | - * @param string $eventID Identifier of the hook |
|
90 | - * @param array $data Reference to the data of the triggered hook |
|
91 | - */ |
|
92 | - public function execute($eventID, &$data) { |
|
93 | - switch ($eventID) { |
|
94 | - // Register plugin |
|
95 | - case 'server.core.settings.init.before': |
|
96 | - $this->onBeforeSettingsInit($data); |
|
97 | - break; |
|
98 | - // Verify a signed or encrypted message when an email is opened |
|
99 | - case 'server.util.parse_smime.signed': |
|
100 | - $this->onSignedMessage($data); |
|
101 | - break; |
|
102 | - |
|
103 | - case 'server.util.parse_smime.encrypted': |
|
104 | - $this->onEncrypted($data); |
|
105 | - break; |
|
106 | - // Add S/MIME property, which is send to the client |
|
107 | - case 'server.module.itemmodule.open.after': |
|
108 | - $this->onAfterOpen($data); |
|
109 | - break; |
|
110 | - // Catch uploaded certificate |
|
111 | - case 'server.upload_attachment.upload': |
|
112 | - $this->onUploadCertificate($data); |
|
113 | - break; |
|
114 | - // Sign email before sending |
|
115 | - case 'server.core.operations.submitmessage': |
|
116 | - $this->onBeforeSend($data); |
|
117 | - break; |
|
118 | - // Verify that we have public certificates for all recipients |
|
119 | - case 'server.module.createmailitemmodule.beforesend': |
|
120 | - $this->onCertificateCheck($data); |
|
121 | - break; |
|
122 | - |
|
123 | - case 'server.index.load.custom': |
|
124 | - if ($data['name'] === 'smime_passphrase') { |
|
125 | - include 'templates/passphrase.tpl.php'; |
|
126 | - |
|
127 | - exit(); |
|
128 | - } |
|
129 | - if ($data['name'] === 'smime_passphrasecheck') { |
|
130 | - // No need to do anything, this is just used to trigger |
|
131 | - // the browser's autofill save password dialog. |
|
132 | - exit(); |
|
133 | - } |
|
134 | - break; |
|
135 | - } |
|
136 | - } |
|
137 | - |
|
138 | - /** |
|
139 | - * Function checks if public certificate exists for all recipients and creates an error |
|
140 | - * message for the frontend which includes the email address of the missing public |
|
141 | - * certificates. |
|
142 | - * |
|
143 | - * If my own certificate is missing, a different error message is shown which informs the |
|
144 | - * user that his own public certificate is missing and required for reading encrypted emails |
|
145 | - * in the 'Sent items' folder. |
|
146 | - * |
|
147 | - * @param array $data Reference to the data of the triggered hook |
|
148 | - */ |
|
149 | - public function onCertificateCheck($data) { |
|
150 | - $entryid = $data['entryid']; |
|
151 | - // FIXME: unittests, save trigger will pass $entryid is 0 (which will open the root folder and not the message we want) |
|
152 | - if ($entryid === false) { |
|
153 | - return; |
|
154 | - } |
|
155 | - |
|
156 | - if (!isset($data['action']['props']['smime']) || empty($data['action']['props']['smime'])) { |
|
157 | - return; |
|
158 | - } |
|
159 | - |
|
160 | - $message = mapi_msgstore_openentry($data['store'], $entryid); |
|
161 | - $module = $data['moduleObject']; |
|
162 | - $data['success'] = true; |
|
163 | - |
|
164 | - $messageClass = mapi_getprops($message, [PR_MESSAGE_CLASS]); |
|
165 | - $messageClass = $messageClass[PR_MESSAGE_CLASS]; |
|
166 | - if ($messageClass !== 'IPM.Note.SMIME' && $messageClass !== 'IPM.Note.SMIME.SignedEncrypt') { |
|
167 | - return; |
|
168 | - } |
|
169 | - |
|
170 | - $recipients = $data['action']['props']['smime']; |
|
171 | - $missingCerts = []; |
|
172 | - |
|
173 | - foreach ($recipients as $recipient) { |
|
174 | - $email = $recipient['email']; |
|
175 | - |
|
176 | - if (!$this->pubcertExists($email, $recipient['internal'])) { |
|
177 | - array_push($missingCerts, $email); |
|
178 | - } |
|
179 | - } |
|
180 | - |
|
181 | - if (empty($missingCerts)) { |
|
182 | - return; |
|
183 | - } |
|
184 | - |
|
185 | - function missingMyself($email) { |
|
186 | - return $GLOBALS['mapisession']->getSMTPAddress() === $email; |
|
187 | - } |
|
188 | - |
|
189 | - if (array_filter($missingCerts, "missingMyself") === []) { |
|
190 | - $errorMsg = _('Missing public certificates for the following recipients: ') . implode(', ', $missingCerts) . _('. Please contact your system administrator for details'); |
|
191 | - } |
|
192 | - else { |
|
193 | - $errorMsg = _("Your public certificate is not installed. Without this certificate, you will not be able to read encrypted messages you have sent to others."); |
|
194 | - } |
|
195 | - |
|
196 | - $module->sendFeedback(false, ["type" => ERROR_GENERAL, "info" => ['display_message' => $errorMsg]]); |
|
197 | - $data['success'] = false; |
|
198 | - } |
|
199 | - |
|
200 | - /** |
|
201 | - * Function which verifies a message. |
|
202 | - * |
|
203 | - * TODO: Clean up flow |
|
204 | - * |
|
205 | - * @param mixed $message |
|
206 | - * @param mixed $eml |
|
207 | - */ |
|
208 | - public function verifyMessage($message, $eml) { |
|
209 | - $userCert = ''; |
|
210 | - $tmpUserCert = tempnam(sys_get_temp_dir(), true); |
|
211 | - $importMessageCert = true; |
|
212 | - $fromGAB = false; |
|
213 | - |
|
214 | - // TODO: worth to split fetching public certificate in a separate function? |
|
215 | - |
|
216 | - // If user entry exists in GAB, try to retrieve public cert |
|
217 | - // Public certificate from GAB in combination with LDAP saved in PR_EMS_AB_TAGGED_X509_CERT |
|
218 | - $userProps = mapi_getprops($message, [PR_SENT_REPRESENTING_ENTRYID, PR_SENT_REPRESENTING_NAME]); |
|
219 | - if (isset($userProps[PR_SENT_REPRESENTING_ENTRYID])) { |
|
220 | - try { |
|
221 | - $user = mapi_ab_openentry($GLOBALS['mapisession']->getAddressbook(), $userProps[PR_SENT_REPRESENTING_ENTRYID]); |
|
222 | - $gabCert = $this->getGABCert($user); |
|
223 | - if (!empty($gabCert)) { |
|
224 | - $fromGAB = true; |
|
225 | - // Put empty string into file? dafuq? |
|
226 | - file_put_contents($tmpUserCert, $userCert); |
|
227 | - } |
|
228 | - } |
|
229 | - catch (MAPIException $e) { |
|
230 | - $msg = "[smime] Unable to open PR_SENT_REPRESENTING_ENTRYID. Maybe %s was does not exists or deleted from server."; |
|
231 | - Log::write(LOGLEVEL_ERROR, sprintf($msg, $userProps[PR_SENT_REPRESENTING_NAME])); |
|
232 | - error_log("[smime] Unable to open PR_SENT_REPRESENTING_NAME: " . print_r($userProps[PR_SENT_REPRESENTING_NAME], true)); |
|
233 | - $this->message['success'] = SMIME_NOPUB; |
|
234 | - $this->message['info'] = SMIME_USER_DETECT_FAILURE; |
|
235 | - } |
|
236 | - } |
|
237 | - |
|
238 | - // When downloading an email as eml, $GLOBALS['operations'] isn't set, so add a check so that downloading works |
|
239 | - // If the certificate is already fetch from the GAB, skip checking the userStore. |
|
240 | - if (!$fromGAB && isset($GLOBALS['operations'])) { |
|
241 | - $senderAddressArray = $this->getSenderAddress($message); |
|
242 | - $senderAddressArray = $senderAddressArray['props']; |
|
243 | - if ($senderAddressArray['address_type'] === 'SMTP') { |
|
244 | - $emailAddr = $senderAddressArray['email_address']; |
|
245 | - } |
|
246 | - else { |
|
247 | - $emailAddr = $senderAddressArray['smtp_address']; |
|
248 | - } |
|
249 | - |
|
250 | - // User not in AB, |
|
251 | - // so get email address from either PR_SENT_REPRESENTING_NAME, PR_SEARCH_KEY or PR_SENT_REPRESENTING_SEARCH_KEY |
|
252 | - // of the message |
|
253 | - if (!$emailAddr) { |
|
254 | - if (!empty($userProps[PR_SENT_REPRESENTING_NAME])) { |
|
255 | - $emailAddr = $userProps[PR_SENT_REPRESENTING_NAME]; |
|
256 | - } |
|
257 | - else { |
|
258 | - $searchKeys = mapi_getprops($message, [PR_SEARCH_KEY, PR_SENT_REPRESENTING_SEARCH_KEY]); |
|
259 | - $searchKey = $searchKeys[PR_SEARCH_KEY] ?? $searchKeys[PR_SENT_REPRESENTING_SEARCH_KEY]; |
|
260 | - if ($searchKey) { |
|
261 | - $emailAddr = $trim(strtolower(explode(':', $searchKey)[1])); |
|
262 | - } |
|
263 | - } |
|
264 | - } |
|
265 | - |
|
266 | - if ($emailAddr) { |
|
267 | - // Get all public certificates of $emailAddr stored on the server |
|
268 | - $userCerts = $this->getPublicKey($emailAddr, true); |
|
269 | - } |
|
270 | - } |
|
271 | - |
|
272 | - // Save signed message in a random file |
|
273 | - $tmpfname = tempnam(sys_get_temp_dir(), true); |
|
274 | - file_put_contents($tmpfname, $eml); |
|
275 | - |
|
276 | - // Create random file for saving the signed message |
|
277 | - $outcert = tempnam(sys_get_temp_dir(), true); |
|
278 | - |
|
279 | - // Verify signed message |
|
280 | - // Returns True if verified, False if tampered or signing certificate invalid OR -1 on error |
|
281 | - if (count($userCerts) > 0) { |
|
282 | - // Try to verify a certificate in the MAPI store |
|
283 | - foreach ($userCerts as $userCert) { |
|
284 | - $userCert = base64_decode($userCert); |
|
285 | - // Save signed message in a random file |
|
286 | - $tmpfname = tempnam(sys_get_temp_dir(), true); |
|
287 | - file_put_contents($tmpfname, $eml); |
|
288 | - |
|
289 | - // Create random file for saving the signed message |
|
290 | - $outcert = tempnam(sys_get_temp_dir(), true); |
|
291 | - |
|
292 | - if (!empty($userCert)) { // Check MAPI UserStore |
|
293 | - file_put_contents($tmpUserCert, $userCert); |
|
294 | - } |
|
295 | - $signed_ok = openssl_pkcs7_verify($tmpfname, PKCS7_NOINTERN, $outcert, explode(';', PLUGIN_SMIME_CACERTS), $tmpUserCert); |
|
296 | - $openssl_error_code = $this->extract_openssl_error(); |
|
297 | - $this->validateSignedMessage($signed_ok, $openssl_error_code); |
|
298 | - // Check if we need to import a newer certificate |
|
299 | - $importCert = file_get_contents($outcert); |
|
300 | - $parsedImportCert = openssl_x509_parse($importCert); |
|
301 | - $parsedUserCert = openssl_x509_parse($userCert); |
|
302 | - if ($signed_ok && $openssl_error_code !== OPENSSL_CA_VERIFY_FAIL) { // CA Checks out |
|
303 | - $caCerts = $this->extractCAs($tmpfname); |
|
304 | - // If validTo and validFrom are more in the future, emailAddress matches and OCSP check is valid, import newer certificate |
|
305 | - if ($parsedImportCert['validTo'] > $parsedUserCert['validTo'] && $parsedImportCert['validFrom'] > $parsedUserCert['validFrom'] && |
|
306 | - getCertEmail($parsedImportCert) === getCertEmail($parsedUserCert) && verifyOCSP($importCert, $caCerts, $this->message) && |
|
307 | - $importMessageCert !== false) { |
|
308 | - // Redundant |
|
309 | - $importMessageCert = true; |
|
310 | - } |
|
311 | - else { |
|
312 | - $importMessageCert = false; |
|
313 | - verifyOCSP($userCert, $caCerts, $this->message); |
|
314 | - break; |
|
315 | - } |
|
316 | - } |
|
317 | - } |
|
318 | - } |
|
319 | - else { |
|
320 | - // Works. Just leave it. |
|
321 | - $signed_ok = openssl_pkcs7_verify($tmpfname, PKCS7_NOSIGS, $outcert, explode(';', PLUGIN_SMIME_CACERTS)); |
|
322 | - $openssl_error_code = $this->extract_openssl_error(); |
|
323 | - $this->validateSignedMessage($signed_ok, $openssl_error_code); |
|
324 | - |
|
325 | - // OCSP check |
|
326 | - if ($signed_ok && $openssl_error_code !== OPENSSL_CA_VERIFY_FAIL) { // CA Checks out |
|
327 | - $userCert = file_get_contents($outcert); |
|
328 | - $parsedImportCert = openssl_x509_parse($userCert); |
|
329 | - |
|
330 | - $caCerts = $this->extractCAs($tmpfname); |
|
331 | - if (!is_array($parsedImportCert) || !verifyOCSP($userCert, $caCerts, $this->message)) { |
|
332 | - $importMessageCert = false; |
|
333 | - } |
|
334 | - // We don't have a certificate from the MAPI UserStore or LDAP, so we will set $userCert to $importCert |
|
335 | - // so that we can verify the message according to the be imported certificate. |
|
336 | - } |
|
337 | - else { // No pubkey |
|
338 | - $importMessageCert = false; |
|
339 | - Log::write(LOGLEVEL_INFO, sprintf("[smime] Unable to verify message without public key, openssl error: '%s'", $this->openssl_error)); |
|
340 | - $this->message['success'] = SMIME_STATUS_FAIL; |
|
341 | - $this->message['info'] = SMIME_CA; |
|
342 | - } |
|
343 | - } |
|
344 | - // Certificate is newer or not yet imported to the user store and not revoked |
|
345 | - // If certificate is from the GAB, then don't import it. |
|
346 | - if ($importMessageCert && !$fromGAB) { |
|
347 | - $signed_ok = openssl_pkcs7_verify($tmpfname, PKCS7_NOSIGS, $outcert, explode(';', PLUGIN_SMIME_CACERTS)); |
|
348 | - $openssl_error_code = $this->extract_openssl_error(); |
|
349 | - $this->validateSignedMessage($signed_ok, $openssl_error_code); |
|
350 | - $userCert = file_get_contents($outcert); |
|
351 | - $parsedImportCert = openssl_x509_parse($userCert); |
|
352 | - // FIXME: doing this in importPublicKey too... |
|
353 | - $certEmail = getCertEmail($parsedImportCert); |
|
354 | - if (!empty($certEmail)) { |
|
355 | - $this->importCertificate($userCert, $parsedImportCert, 'public', true); |
|
356 | - } |
|
357 | - } |
|
358 | - |
|
359 | - // Remove extracted certificate from openssl_pkcs7_verify |
|
360 | - unlink($outcert); |
|
361 | - |
|
362 | - // remove the temporary file |
|
363 | - unlink($tmpfname); |
|
364 | - |
|
365 | - // Clean up temp cert |
|
366 | - unlink($tmpUserCert); |
|
367 | - } |
|
368 | - |
|
369 | - /** |
|
370 | - * Function which decrypts an encrypted message. |
|
371 | - * The key should be unlocked and stored in the EncryptionStore for a successful decrypt |
|
372 | - * If the key isn't in the session, we give the user a message to unlock his certificate. |
|
373 | - * |
|
374 | - * @param {mixed} $data array of data from hook |
|
375 | - */ |
|
376 | - public function onEncrypted($data) { |
|
377 | - // Cert unlocked, decode message |
|
378 | - $this->message['success'] = SMIME_STATUS_INFO; |
|
379 | - $this->message['info'] = SMIME_DECRYPT_FAILURE; |
|
380 | - |
|
381 | - $this->message['type'] = 'encrypted'; |
|
382 | - $encryptionStore = EncryptionStore::getInstance(); |
|
383 | - $pass = $encryptionStore->get('smime'); |
|
384 | - if (isset($pass) && !empty($pass)) { |
|
385 | - $certs = readPrivateCert($this->getStore(), $pass, false); |
|
386 | - // create random file for saving the encrypted and body message |
|
387 | - $tmpFile = tempnam(sys_get_temp_dir(), true); |
|
388 | - $tmpDecrypted = tempnam(sys_get_temp_dir(), true); |
|
389 | - |
|
390 | - // Write mime header. Because it's not provided in the attachment, otherwise openssl won't parse it |
|
391 | - $fp = fopen($tmpFile, 'w'); |
|
392 | - fwrite($fp, "Content-Type: application/pkcs7-mime; name=\"smime.p7m\"; smime-type=enveloped-data\n"); |
|
393 | - fwrite($fp, "Content-Transfer-Encoding: base64\nContent-Disposition: attachment; filename=\"smime.p7m\"\n"); |
|
394 | - fwrite($fp, "Content-Description: S/MIME Encrypted Message\n\n"); |
|
395 | - fwrite($fp, chunk_split(base64_encode($data['data']), 72) . "\n"); |
|
396 | - fclose($fp); |
|
397 | - |
|
398 | - $decryptStatus = false; |
|
399 | - // If multiple private certs were decrypted with supplied password |
|
400 | - if (!$certs['cert'] && count($certs) > 0) { |
|
401 | - foreach ($certs as $cert) { |
|
402 | - $decryptStatus = openssl_pkcs7_decrypt($tmpFile, $tmpDecrypted, $cert['cert'], [$cert['pkey'], $pass]); |
|
403 | - if ($decryptStatus !== false) { |
|
404 | - break; |
|
405 | - } |
|
406 | - } |
|
407 | - } |
|
408 | - else { |
|
409 | - $decryptStatus = openssl_pkcs7_decrypt($tmpFile, $tmpDecrypted, $certs['cert'], [$certs['pkey'], $pass]); |
|
410 | - } |
|
411 | - |
|
412 | - $content = file_get_contents($tmpDecrypted); |
|
413 | - // Handle OL empty body Outlook Signed & Encrypted mails. |
|
414 | - // The S/MIME plugin has to extract the body from the signed message. |
|
415 | - if (strpos($content, 'signed-data') !== false) { |
|
416 | - $this->message['type'] = 'encryptsigned'; |
|
417 | - $olcert = tempnam(sys_get_temp_dir(), true); |
|
418 | - $olmsg = tempnam(sys_get_temp_dir(), true); |
|
419 | - openssl_pkcs7_verify($tmpDecrypted, PKCS7_NOVERIFY, $olcert); |
|
420 | - openssl_pkcs7_verify($tmpDecrypted, PKCS7_NOVERIFY, $olcert, [], $olcert, $olmsg); |
|
421 | - $content = file_get_contents($olmsg); |
|
422 | - unlink($olmsg); |
|
423 | - unlink($olcert); |
|
424 | - } |
|
425 | - |
|
426 | - $copyProps = mapi_getprops($data['message'], [PR_MESSAGE_DELIVERY_TIME, PR_SENDER_ENTRYID, PR_SENT_REPRESENTING_ENTRYID]); |
|
427 | - mapi_inetmapi_imtomapi($GLOBALS['mapisession']->getSession(), $data['store'], $GLOBALS['mapisession']->getAddressbook(), $data['message'], $content, ['parse_smime_signed' => true]); |
|
428 | - // Manually set time back to the received time, since mapi_inetmapi_imtomapi overwrites this |
|
429 | - mapi_setprops($data['message'], $copyProps); |
|
430 | - |
|
431 | - // remove temporary files |
|
432 | - unlink($tmpFile); |
|
433 | - unlink($tmpDecrypted); |
|
434 | - |
|
435 | - // mapi_inetmapi_imtomapi removes the PR_MESSAGE_CLASS = 'IPM.Note.SMIME.MultipartSigned' |
|
436 | - // So we need to check if the message was also signed by looking at the MIME_TAG in the eml |
|
437 | - if (strpos($content, 'multipart/signed') !== false || strpos($content, 'signed-data') !== false) { |
|
438 | - $this->message['type'] = 'encryptsigned'; |
|
439 | - $this->verifyMessage($data['message'], $content); |
|
440 | - } |
|
441 | - elseif ($decryptStatus) { |
|
442 | - $this->message['info'] = SMIME_DECRYPT_SUCCESS; |
|
443 | - $this->message['success'] = SMIME_STATUS_SUCCESS; |
|
444 | - } |
|
445 | - elseif ($this->extract_openssl_error() === OPENSSL_RECIPIENT_CERTIFICATE_MISMATCH) { |
|
446 | - error_log("[smime] Error when decrypting email, openssl error: " . print_r($this->openssl_error, true)); |
|
447 | - Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Error when decrypting email, openssl error: '%s'", $this->openssl_error)); |
|
448 | - $this->message['info'] = SMIME_DECRYPT_CERT_MISMATCH; |
|
449 | - $this->message['success'] = SMIME_STATUS_FAIL; |
|
450 | - } |
|
451 | - } |
|
452 | - else { |
|
453 | - $this->message['info'] = SMIME_UNLOCK_CERT; |
|
454 | - } |
|
455 | - |
|
456 | - if (!encryptionStoreExpirationSupport()) { |
|
457 | - withPHPSession(function () use ($encryptionStore) { |
|
458 | - $encryptionStore->add('smime', ''); |
|
459 | - }); |
|
460 | - } |
|
461 | - } |
|
462 | - |
|
463 | - /** |
|
464 | - * Function which calls verifyMessage to verify if the message isn't malformed during transport. |
|
465 | - * |
|
466 | - * @param {mixed} $data array of data from hook |
|
467 | - */ |
|
468 | - public function onSignedMessage($data) { |
|
469 | - $this->message['type'] = 'signed'; |
|
470 | - $this->verifyMessage($data['message'], $data['data']); |
|
471 | - } |
|
472 | - |
|
473 | - /** |
|
474 | - * General function which parses the openssl_pkcs7_verify return value and the errors generated by |
|
475 | - * openssl_error_string(). |
|
476 | - * |
|
477 | - * @param mixed $openssl_return |
|
478 | - * @param mixed $openssl_errors |
|
479 | - */ |
|
480 | - public function validateSignedMessage($openssl_return, $openssl_errors) { |
|
481 | - if ($openssl_return === -1) { |
|
482 | - $this->message['info'] = SMIME_ERROR; |
|
483 | - $this->message['success'] = SMIME_STATUS_FAIL; |
|
484 | - // Verification was successful |
|
485 | - } |
|
486 | - elseif ($openssl_return) { |
|
487 | - $this->message['info'] = SMIME_SUCCESS; |
|
488 | - $this->message['success'] = SMIME_STATUS_SUCCESS; |
|
489 | - // Verification was not successful, display extra information. |
|
490 | - } |
|
491 | - else { |
|
492 | - $this->message['success'] = SMIME_STATUS_FAIL; |
|
493 | - if ($openssl_errors === OPENSSL_CA_VERIFY_FAIL) { |
|
494 | - $this->message['info'] = SMIME_CA; |
|
495 | - } |
|
496 | - else { // Catch general errors |
|
497 | - $this->message['info'] = SMIME_ERROR; |
|
498 | - } |
|
499 | - } |
|
500 | - } |
|
501 | - |
|
502 | - /** |
|
503 | - * Set smime key in $data array, which is send back to client |
|
504 | - * Since we can't create this array key in the hooks: |
|
505 | - * 'server.util.parse_smime.signed' |
|
506 | - * 'server.util.parse_smime.encrypted'. |
|
507 | - * |
|
508 | - * TODO: investigate if we can move away from this hook |
|
509 | - * |
|
510 | - * @param {mixed} $data |
|
511 | - */ |
|
512 | - public function onAfterOpen($data) { |
|
513 | - if (isset($this->message) && !empty($this->message)) { |
|
514 | - $data['data']['item']['props']['smime'] = $this->message; |
|
515 | - } |
|
516 | - } |
|
517 | - |
|
518 | - /** |
|
519 | - * Handles the uploaded certificate in the settingsmenu in grommunio Web |
|
520 | - * - Opens the certificate with provided passphrase |
|
521 | - * - Checks if it can be used for signing/decrypting |
|
522 | - * - Verifies that the email address is equal to the |
|
523 | - * - Verifies that the certificate isn't expired and inform user. |
|
524 | - * |
|
525 | - * @param {mixed} $data |
|
526 | - */ |
|
527 | - public function onUploadCertificate($data) { |
|
528 | - if ($data['sourcetype'] === 'certificate') { |
|
529 | - $passphrase = $_POST['passphrase']; |
|
530 | - $saveCert = false; |
|
531 | - $tmpname = $data['tmpname']; |
|
532 | - $message = ''; |
|
533 | - |
|
534 | - $certificate = file_get_contents($tmpname); |
|
535 | - $emailAddress = $GLOBALS['mapisession']->getSMTPAddress(); |
|
536 | - list($message, $publickey, $publickeyData) = validateUploadedPKCS($certificate, $passphrase, $emailAddress); |
|
537 | - |
|
538 | - // All checks completed successful |
|
539 | - // Store private cert in users associated store (check for duplicates) |
|
540 | - if (empty($message)) { |
|
541 | - $certMessage = getMAPICert($this->getStore()); |
|
542 | - // TODO: update to serialNumber check |
|
543 | - if ($certMessage && $certMessage[0][PR_MESSAGE_DELIVERY_TIME] == $publickeyData['validTo_time_t']) { |
|
544 | - $message = _('Certificate is already stored on the server'); |
|
545 | - } |
|
546 | - else { |
|
547 | - $saveCert = true; |
|
548 | - $root = mapi_msgstore_openentry($this->getStore(), null); |
|
549 | - // Remove old certificate |
|
550 | - /* |
|
37 | + /** |
|
38 | + * decrypted/verified message. |
|
39 | + */ |
|
40 | + private $message = []; |
|
41 | + |
|
42 | + /** |
|
43 | + * Default MAPI Message Store. |
|
44 | + */ |
|
45 | + private $store; |
|
46 | + |
|
47 | + /** |
|
48 | + * Last openssl error string. |
|
49 | + */ |
|
50 | + private $openssl_error = ""; |
|
51 | + |
|
52 | + /** |
|
53 | + * Called to initialize the plugin and register for hooks. |
|
54 | + */ |
|
55 | + public function init() { |
|
56 | + $this->registerHook('server.core.settings.init.before'); |
|
57 | + $this->registerHook('server.util.parse_smime.signed'); |
|
58 | + $this->registerHook('server.util.parse_smime.encrypted'); |
|
59 | + $this->registerHook('server.module.itemmodule.open.after'); |
|
60 | + $this->registerHook('server.core.operations.submitmessage'); |
|
61 | + $this->registerHook('server.upload_attachment.upload'); |
|
62 | + $this->registerHook('server.module.createmailitemmodule.beforesend'); |
|
63 | + $this->registerHook('server.index.load.custom'); |
|
64 | + |
|
65 | + if (version_compare(phpversion(), '5.4', '<')) { |
|
66 | + $this->cipher = OPENSSL_CIPHER_3DES; |
|
67 | + } |
|
68 | + else { |
|
69 | + $this->cipher = PLUGIN_SMIME_CIPHER; |
|
70 | + } |
|
71 | + } |
|
72 | + |
|
73 | + /** |
|
74 | + * Default message store. |
|
75 | + * |
|
76 | + * @return object MAPI Message store |
|
77 | + */ |
|
78 | + public function getStore() { |
|
79 | + if (!$this->store) { |
|
80 | + $this->store = $GLOBALS['mapisession']->getDefaultMessageStore(); |
|
81 | + } |
|
82 | + |
|
83 | + return $this->store; |
|
84 | + } |
|
85 | + |
|
86 | + /** |
|
87 | + * Process the incoming events that where fired by the client. |
|
88 | + * |
|
89 | + * @param string $eventID Identifier of the hook |
|
90 | + * @param array $data Reference to the data of the triggered hook |
|
91 | + */ |
|
92 | + public function execute($eventID, &$data) { |
|
93 | + switch ($eventID) { |
|
94 | + // Register plugin |
|
95 | + case 'server.core.settings.init.before': |
|
96 | + $this->onBeforeSettingsInit($data); |
|
97 | + break; |
|
98 | + // Verify a signed or encrypted message when an email is opened |
|
99 | + case 'server.util.parse_smime.signed': |
|
100 | + $this->onSignedMessage($data); |
|
101 | + break; |
|
102 | + |
|
103 | + case 'server.util.parse_smime.encrypted': |
|
104 | + $this->onEncrypted($data); |
|
105 | + break; |
|
106 | + // Add S/MIME property, which is send to the client |
|
107 | + case 'server.module.itemmodule.open.after': |
|
108 | + $this->onAfterOpen($data); |
|
109 | + break; |
|
110 | + // Catch uploaded certificate |
|
111 | + case 'server.upload_attachment.upload': |
|
112 | + $this->onUploadCertificate($data); |
|
113 | + break; |
|
114 | + // Sign email before sending |
|
115 | + case 'server.core.operations.submitmessage': |
|
116 | + $this->onBeforeSend($data); |
|
117 | + break; |
|
118 | + // Verify that we have public certificates for all recipients |
|
119 | + case 'server.module.createmailitemmodule.beforesend': |
|
120 | + $this->onCertificateCheck($data); |
|
121 | + break; |
|
122 | + |
|
123 | + case 'server.index.load.custom': |
|
124 | + if ($data['name'] === 'smime_passphrase') { |
|
125 | + include 'templates/passphrase.tpl.php'; |
|
126 | + |
|
127 | + exit(); |
|
128 | + } |
|
129 | + if ($data['name'] === 'smime_passphrasecheck') { |
|
130 | + // No need to do anything, this is just used to trigger |
|
131 | + // the browser's autofill save password dialog. |
|
132 | + exit(); |
|
133 | + } |
|
134 | + break; |
|
135 | + } |
|
136 | + } |
|
137 | + |
|
138 | + /** |
|
139 | + * Function checks if public certificate exists for all recipients and creates an error |
|
140 | + * message for the frontend which includes the email address of the missing public |
|
141 | + * certificates. |
|
142 | + * |
|
143 | + * If my own certificate is missing, a different error message is shown which informs the |
|
144 | + * user that his own public certificate is missing and required for reading encrypted emails |
|
145 | + * in the 'Sent items' folder. |
|
146 | + * |
|
147 | + * @param array $data Reference to the data of the triggered hook |
|
148 | + */ |
|
149 | + public function onCertificateCheck($data) { |
|
150 | + $entryid = $data['entryid']; |
|
151 | + // FIXME: unittests, save trigger will pass $entryid is 0 (which will open the root folder and not the message we want) |
|
152 | + if ($entryid === false) { |
|
153 | + return; |
|
154 | + } |
|
155 | + |
|
156 | + if (!isset($data['action']['props']['smime']) || empty($data['action']['props']['smime'])) { |
|
157 | + return; |
|
158 | + } |
|
159 | + |
|
160 | + $message = mapi_msgstore_openentry($data['store'], $entryid); |
|
161 | + $module = $data['moduleObject']; |
|
162 | + $data['success'] = true; |
|
163 | + |
|
164 | + $messageClass = mapi_getprops($message, [PR_MESSAGE_CLASS]); |
|
165 | + $messageClass = $messageClass[PR_MESSAGE_CLASS]; |
|
166 | + if ($messageClass !== 'IPM.Note.SMIME' && $messageClass !== 'IPM.Note.SMIME.SignedEncrypt') { |
|
167 | + return; |
|
168 | + } |
|
169 | + |
|
170 | + $recipients = $data['action']['props']['smime']; |
|
171 | + $missingCerts = []; |
|
172 | + |
|
173 | + foreach ($recipients as $recipient) { |
|
174 | + $email = $recipient['email']; |
|
175 | + |
|
176 | + if (!$this->pubcertExists($email, $recipient['internal'])) { |
|
177 | + array_push($missingCerts, $email); |
|
178 | + } |
|
179 | + } |
|
180 | + |
|
181 | + if (empty($missingCerts)) { |
|
182 | + return; |
|
183 | + } |
|
184 | + |
|
185 | + function missingMyself($email) { |
|
186 | + return $GLOBALS['mapisession']->getSMTPAddress() === $email; |
|
187 | + } |
|
188 | + |
|
189 | + if (array_filter($missingCerts, "missingMyself") === []) { |
|
190 | + $errorMsg = _('Missing public certificates for the following recipients: ') . implode(', ', $missingCerts) . _('. Please contact your system administrator for details'); |
|
191 | + } |
|
192 | + else { |
|
193 | + $errorMsg = _("Your public certificate is not installed. Without this certificate, you will not be able to read encrypted messages you have sent to others."); |
|
194 | + } |
|
195 | + |
|
196 | + $module->sendFeedback(false, ["type" => ERROR_GENERAL, "info" => ['display_message' => $errorMsg]]); |
|
197 | + $data['success'] = false; |
|
198 | + } |
|
199 | + |
|
200 | + /** |
|
201 | + * Function which verifies a message. |
|
202 | + * |
|
203 | + * TODO: Clean up flow |
|
204 | + * |
|
205 | + * @param mixed $message |
|
206 | + * @param mixed $eml |
|
207 | + */ |
|
208 | + public function verifyMessage($message, $eml) { |
|
209 | + $userCert = ''; |
|
210 | + $tmpUserCert = tempnam(sys_get_temp_dir(), true); |
|
211 | + $importMessageCert = true; |
|
212 | + $fromGAB = false; |
|
213 | + |
|
214 | + // TODO: worth to split fetching public certificate in a separate function? |
|
215 | + |
|
216 | + // If user entry exists in GAB, try to retrieve public cert |
|
217 | + // Public certificate from GAB in combination with LDAP saved in PR_EMS_AB_TAGGED_X509_CERT |
|
218 | + $userProps = mapi_getprops($message, [PR_SENT_REPRESENTING_ENTRYID, PR_SENT_REPRESENTING_NAME]); |
|
219 | + if (isset($userProps[PR_SENT_REPRESENTING_ENTRYID])) { |
|
220 | + try { |
|
221 | + $user = mapi_ab_openentry($GLOBALS['mapisession']->getAddressbook(), $userProps[PR_SENT_REPRESENTING_ENTRYID]); |
|
222 | + $gabCert = $this->getGABCert($user); |
|
223 | + if (!empty($gabCert)) { |
|
224 | + $fromGAB = true; |
|
225 | + // Put empty string into file? dafuq? |
|
226 | + file_put_contents($tmpUserCert, $userCert); |
|
227 | + } |
|
228 | + } |
|
229 | + catch (MAPIException $e) { |
|
230 | + $msg = "[smime] Unable to open PR_SENT_REPRESENTING_ENTRYID. Maybe %s was does not exists or deleted from server."; |
|
231 | + Log::write(LOGLEVEL_ERROR, sprintf($msg, $userProps[PR_SENT_REPRESENTING_NAME])); |
|
232 | + error_log("[smime] Unable to open PR_SENT_REPRESENTING_NAME: " . print_r($userProps[PR_SENT_REPRESENTING_NAME], true)); |
|
233 | + $this->message['success'] = SMIME_NOPUB; |
|
234 | + $this->message['info'] = SMIME_USER_DETECT_FAILURE; |
|
235 | + } |
|
236 | + } |
|
237 | + |
|
238 | + // When downloading an email as eml, $GLOBALS['operations'] isn't set, so add a check so that downloading works |
|
239 | + // If the certificate is already fetch from the GAB, skip checking the userStore. |
|
240 | + if (!$fromGAB && isset($GLOBALS['operations'])) { |
|
241 | + $senderAddressArray = $this->getSenderAddress($message); |
|
242 | + $senderAddressArray = $senderAddressArray['props']; |
|
243 | + if ($senderAddressArray['address_type'] === 'SMTP') { |
|
244 | + $emailAddr = $senderAddressArray['email_address']; |
|
245 | + } |
|
246 | + else { |
|
247 | + $emailAddr = $senderAddressArray['smtp_address']; |
|
248 | + } |
|
249 | + |
|
250 | + // User not in AB, |
|
251 | + // so get email address from either PR_SENT_REPRESENTING_NAME, PR_SEARCH_KEY or PR_SENT_REPRESENTING_SEARCH_KEY |
|
252 | + // of the message |
|
253 | + if (!$emailAddr) { |
|
254 | + if (!empty($userProps[PR_SENT_REPRESENTING_NAME])) { |
|
255 | + $emailAddr = $userProps[PR_SENT_REPRESENTING_NAME]; |
|
256 | + } |
|
257 | + else { |
|
258 | + $searchKeys = mapi_getprops($message, [PR_SEARCH_KEY, PR_SENT_REPRESENTING_SEARCH_KEY]); |
|
259 | + $searchKey = $searchKeys[PR_SEARCH_KEY] ?? $searchKeys[PR_SENT_REPRESENTING_SEARCH_KEY]; |
|
260 | + if ($searchKey) { |
|
261 | + $emailAddr = $trim(strtolower(explode(':', $searchKey)[1])); |
|
262 | + } |
|
263 | + } |
|
264 | + } |
|
265 | + |
|
266 | + if ($emailAddr) { |
|
267 | + // Get all public certificates of $emailAddr stored on the server |
|
268 | + $userCerts = $this->getPublicKey($emailAddr, true); |
|
269 | + } |
|
270 | + } |
|
271 | + |
|
272 | + // Save signed message in a random file |
|
273 | + $tmpfname = tempnam(sys_get_temp_dir(), true); |
|
274 | + file_put_contents($tmpfname, $eml); |
|
275 | + |
|
276 | + // Create random file for saving the signed message |
|
277 | + $outcert = tempnam(sys_get_temp_dir(), true); |
|
278 | + |
|
279 | + // Verify signed message |
|
280 | + // Returns True if verified, False if tampered or signing certificate invalid OR -1 on error |
|
281 | + if (count($userCerts) > 0) { |
|
282 | + // Try to verify a certificate in the MAPI store |
|
283 | + foreach ($userCerts as $userCert) { |
|
284 | + $userCert = base64_decode($userCert); |
|
285 | + // Save signed message in a random file |
|
286 | + $tmpfname = tempnam(sys_get_temp_dir(), true); |
|
287 | + file_put_contents($tmpfname, $eml); |
|
288 | + |
|
289 | + // Create random file for saving the signed message |
|
290 | + $outcert = tempnam(sys_get_temp_dir(), true); |
|
291 | + |
|
292 | + if (!empty($userCert)) { // Check MAPI UserStore |
|
293 | + file_put_contents($tmpUserCert, $userCert); |
|
294 | + } |
|
295 | + $signed_ok = openssl_pkcs7_verify($tmpfname, PKCS7_NOINTERN, $outcert, explode(';', PLUGIN_SMIME_CACERTS), $tmpUserCert); |
|
296 | + $openssl_error_code = $this->extract_openssl_error(); |
|
297 | + $this->validateSignedMessage($signed_ok, $openssl_error_code); |
|
298 | + // Check if we need to import a newer certificate |
|
299 | + $importCert = file_get_contents($outcert); |
|
300 | + $parsedImportCert = openssl_x509_parse($importCert); |
|
301 | + $parsedUserCert = openssl_x509_parse($userCert); |
|
302 | + if ($signed_ok && $openssl_error_code !== OPENSSL_CA_VERIFY_FAIL) { // CA Checks out |
|
303 | + $caCerts = $this->extractCAs($tmpfname); |
|
304 | + // If validTo and validFrom are more in the future, emailAddress matches and OCSP check is valid, import newer certificate |
|
305 | + if ($parsedImportCert['validTo'] > $parsedUserCert['validTo'] && $parsedImportCert['validFrom'] > $parsedUserCert['validFrom'] && |
|
306 | + getCertEmail($parsedImportCert) === getCertEmail($parsedUserCert) && verifyOCSP($importCert, $caCerts, $this->message) && |
|
307 | + $importMessageCert !== false) { |
|
308 | + // Redundant |
|
309 | + $importMessageCert = true; |
|
310 | + } |
|
311 | + else { |
|
312 | + $importMessageCert = false; |
|
313 | + verifyOCSP($userCert, $caCerts, $this->message); |
|
314 | + break; |
|
315 | + } |
|
316 | + } |
|
317 | + } |
|
318 | + } |
|
319 | + else { |
|
320 | + // Works. Just leave it. |
|
321 | + $signed_ok = openssl_pkcs7_verify($tmpfname, PKCS7_NOSIGS, $outcert, explode(';', PLUGIN_SMIME_CACERTS)); |
|
322 | + $openssl_error_code = $this->extract_openssl_error(); |
|
323 | + $this->validateSignedMessage($signed_ok, $openssl_error_code); |
|
324 | + |
|
325 | + // OCSP check |
|
326 | + if ($signed_ok && $openssl_error_code !== OPENSSL_CA_VERIFY_FAIL) { // CA Checks out |
|
327 | + $userCert = file_get_contents($outcert); |
|
328 | + $parsedImportCert = openssl_x509_parse($userCert); |
|
329 | + |
|
330 | + $caCerts = $this->extractCAs($tmpfname); |
|
331 | + if (!is_array($parsedImportCert) || !verifyOCSP($userCert, $caCerts, $this->message)) { |
|
332 | + $importMessageCert = false; |
|
333 | + } |
|
334 | + // We don't have a certificate from the MAPI UserStore or LDAP, so we will set $userCert to $importCert |
|
335 | + // so that we can verify the message according to the be imported certificate. |
|
336 | + } |
|
337 | + else { // No pubkey |
|
338 | + $importMessageCert = false; |
|
339 | + Log::write(LOGLEVEL_INFO, sprintf("[smime] Unable to verify message without public key, openssl error: '%s'", $this->openssl_error)); |
|
340 | + $this->message['success'] = SMIME_STATUS_FAIL; |
|
341 | + $this->message['info'] = SMIME_CA; |
|
342 | + } |
|
343 | + } |
|
344 | + // Certificate is newer or not yet imported to the user store and not revoked |
|
345 | + // If certificate is from the GAB, then don't import it. |
|
346 | + if ($importMessageCert && !$fromGAB) { |
|
347 | + $signed_ok = openssl_pkcs7_verify($tmpfname, PKCS7_NOSIGS, $outcert, explode(';', PLUGIN_SMIME_CACERTS)); |
|
348 | + $openssl_error_code = $this->extract_openssl_error(); |
|
349 | + $this->validateSignedMessage($signed_ok, $openssl_error_code); |
|
350 | + $userCert = file_get_contents($outcert); |
|
351 | + $parsedImportCert = openssl_x509_parse($userCert); |
|
352 | + // FIXME: doing this in importPublicKey too... |
|
353 | + $certEmail = getCertEmail($parsedImportCert); |
|
354 | + if (!empty($certEmail)) { |
|
355 | + $this->importCertificate($userCert, $parsedImportCert, 'public', true); |
|
356 | + } |
|
357 | + } |
|
358 | + |
|
359 | + // Remove extracted certificate from openssl_pkcs7_verify |
|
360 | + unlink($outcert); |
|
361 | + |
|
362 | + // remove the temporary file |
|
363 | + unlink($tmpfname); |
|
364 | + |
|
365 | + // Clean up temp cert |
|
366 | + unlink($tmpUserCert); |
|
367 | + } |
|
368 | + |
|
369 | + /** |
|
370 | + * Function which decrypts an encrypted message. |
|
371 | + * The key should be unlocked and stored in the EncryptionStore for a successful decrypt |
|
372 | + * If the key isn't in the session, we give the user a message to unlock his certificate. |
|
373 | + * |
|
374 | + * @param {mixed} $data array of data from hook |
|
375 | + */ |
|
376 | + public function onEncrypted($data) { |
|
377 | + // Cert unlocked, decode message |
|
378 | + $this->message['success'] = SMIME_STATUS_INFO; |
|
379 | + $this->message['info'] = SMIME_DECRYPT_FAILURE; |
|
380 | + |
|
381 | + $this->message['type'] = 'encrypted'; |
|
382 | + $encryptionStore = EncryptionStore::getInstance(); |
|
383 | + $pass = $encryptionStore->get('smime'); |
|
384 | + if (isset($pass) && !empty($pass)) { |
|
385 | + $certs = readPrivateCert($this->getStore(), $pass, false); |
|
386 | + // create random file for saving the encrypted and body message |
|
387 | + $tmpFile = tempnam(sys_get_temp_dir(), true); |
|
388 | + $tmpDecrypted = tempnam(sys_get_temp_dir(), true); |
|
389 | + |
|
390 | + // Write mime header. Because it's not provided in the attachment, otherwise openssl won't parse it |
|
391 | + $fp = fopen($tmpFile, 'w'); |
|
392 | + fwrite($fp, "Content-Type: application/pkcs7-mime; name=\"smime.p7m\"; smime-type=enveloped-data\n"); |
|
393 | + fwrite($fp, "Content-Transfer-Encoding: base64\nContent-Disposition: attachment; filename=\"smime.p7m\"\n"); |
|
394 | + fwrite($fp, "Content-Description: S/MIME Encrypted Message\n\n"); |
|
395 | + fwrite($fp, chunk_split(base64_encode($data['data']), 72) . "\n"); |
|
396 | + fclose($fp); |
|
397 | + |
|
398 | + $decryptStatus = false; |
|
399 | + // If multiple private certs were decrypted with supplied password |
|
400 | + if (!$certs['cert'] && count($certs) > 0) { |
|
401 | + foreach ($certs as $cert) { |
|
402 | + $decryptStatus = openssl_pkcs7_decrypt($tmpFile, $tmpDecrypted, $cert['cert'], [$cert['pkey'], $pass]); |
|
403 | + if ($decryptStatus !== false) { |
|
404 | + break; |
|
405 | + } |
|
406 | + } |
|
407 | + } |
|
408 | + else { |
|
409 | + $decryptStatus = openssl_pkcs7_decrypt($tmpFile, $tmpDecrypted, $certs['cert'], [$certs['pkey'], $pass]); |
|
410 | + } |
|
411 | + |
|
412 | + $content = file_get_contents($tmpDecrypted); |
|
413 | + // Handle OL empty body Outlook Signed & Encrypted mails. |
|
414 | + // The S/MIME plugin has to extract the body from the signed message. |
|
415 | + if (strpos($content, 'signed-data') !== false) { |
|
416 | + $this->message['type'] = 'encryptsigned'; |
|
417 | + $olcert = tempnam(sys_get_temp_dir(), true); |
|
418 | + $olmsg = tempnam(sys_get_temp_dir(), true); |
|
419 | + openssl_pkcs7_verify($tmpDecrypted, PKCS7_NOVERIFY, $olcert); |
|
420 | + openssl_pkcs7_verify($tmpDecrypted, PKCS7_NOVERIFY, $olcert, [], $olcert, $olmsg); |
|
421 | + $content = file_get_contents($olmsg); |
|
422 | + unlink($olmsg); |
|
423 | + unlink($olcert); |
|
424 | + } |
|
425 | + |
|
426 | + $copyProps = mapi_getprops($data['message'], [PR_MESSAGE_DELIVERY_TIME, PR_SENDER_ENTRYID, PR_SENT_REPRESENTING_ENTRYID]); |
|
427 | + mapi_inetmapi_imtomapi($GLOBALS['mapisession']->getSession(), $data['store'], $GLOBALS['mapisession']->getAddressbook(), $data['message'], $content, ['parse_smime_signed' => true]); |
|
428 | + // Manually set time back to the received time, since mapi_inetmapi_imtomapi overwrites this |
|
429 | + mapi_setprops($data['message'], $copyProps); |
|
430 | + |
|
431 | + // remove temporary files |
|
432 | + unlink($tmpFile); |
|
433 | + unlink($tmpDecrypted); |
|
434 | + |
|
435 | + // mapi_inetmapi_imtomapi removes the PR_MESSAGE_CLASS = 'IPM.Note.SMIME.MultipartSigned' |
|
436 | + // So we need to check if the message was also signed by looking at the MIME_TAG in the eml |
|
437 | + if (strpos($content, 'multipart/signed') !== false || strpos($content, 'signed-data') !== false) { |
|
438 | + $this->message['type'] = 'encryptsigned'; |
|
439 | + $this->verifyMessage($data['message'], $content); |
|
440 | + } |
|
441 | + elseif ($decryptStatus) { |
|
442 | + $this->message['info'] = SMIME_DECRYPT_SUCCESS; |
|
443 | + $this->message['success'] = SMIME_STATUS_SUCCESS; |
|
444 | + } |
|
445 | + elseif ($this->extract_openssl_error() === OPENSSL_RECIPIENT_CERTIFICATE_MISMATCH) { |
|
446 | + error_log("[smime] Error when decrypting email, openssl error: " . print_r($this->openssl_error, true)); |
|
447 | + Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Error when decrypting email, openssl error: '%s'", $this->openssl_error)); |
|
448 | + $this->message['info'] = SMIME_DECRYPT_CERT_MISMATCH; |
|
449 | + $this->message['success'] = SMIME_STATUS_FAIL; |
|
450 | + } |
|
451 | + } |
|
452 | + else { |
|
453 | + $this->message['info'] = SMIME_UNLOCK_CERT; |
|
454 | + } |
|
455 | + |
|
456 | + if (!encryptionStoreExpirationSupport()) { |
|
457 | + withPHPSession(function () use ($encryptionStore) { |
|
458 | + $encryptionStore->add('smime', ''); |
|
459 | + }); |
|
460 | + } |
|
461 | + } |
|
462 | + |
|
463 | + /** |
|
464 | + * Function which calls verifyMessage to verify if the message isn't malformed during transport. |
|
465 | + * |
|
466 | + * @param {mixed} $data array of data from hook |
|
467 | + */ |
|
468 | + public function onSignedMessage($data) { |
|
469 | + $this->message['type'] = 'signed'; |
|
470 | + $this->verifyMessage($data['message'], $data['data']); |
|
471 | + } |
|
472 | + |
|
473 | + /** |
|
474 | + * General function which parses the openssl_pkcs7_verify return value and the errors generated by |
|
475 | + * openssl_error_string(). |
|
476 | + * |
|
477 | + * @param mixed $openssl_return |
|
478 | + * @param mixed $openssl_errors |
|
479 | + */ |
|
480 | + public function validateSignedMessage($openssl_return, $openssl_errors) { |
|
481 | + if ($openssl_return === -1) { |
|
482 | + $this->message['info'] = SMIME_ERROR; |
|
483 | + $this->message['success'] = SMIME_STATUS_FAIL; |
|
484 | + // Verification was successful |
|
485 | + } |
|
486 | + elseif ($openssl_return) { |
|
487 | + $this->message['info'] = SMIME_SUCCESS; |
|
488 | + $this->message['success'] = SMIME_STATUS_SUCCESS; |
|
489 | + // Verification was not successful, display extra information. |
|
490 | + } |
|
491 | + else { |
|
492 | + $this->message['success'] = SMIME_STATUS_FAIL; |
|
493 | + if ($openssl_errors === OPENSSL_CA_VERIFY_FAIL) { |
|
494 | + $this->message['info'] = SMIME_CA; |
|
495 | + } |
|
496 | + else { // Catch general errors |
|
497 | + $this->message['info'] = SMIME_ERROR; |
|
498 | + } |
|
499 | + } |
|
500 | + } |
|
501 | + |
|
502 | + /** |
|
503 | + * Set smime key in $data array, which is send back to client |
|
504 | + * Since we can't create this array key in the hooks: |
|
505 | + * 'server.util.parse_smime.signed' |
|
506 | + * 'server.util.parse_smime.encrypted'. |
|
507 | + * |
|
508 | + * TODO: investigate if we can move away from this hook |
|
509 | + * |
|
510 | + * @param {mixed} $data |
|
511 | + */ |
|
512 | + public function onAfterOpen($data) { |
|
513 | + if (isset($this->message) && !empty($this->message)) { |
|
514 | + $data['data']['item']['props']['smime'] = $this->message; |
|
515 | + } |
|
516 | + } |
|
517 | + |
|
518 | + /** |
|
519 | + * Handles the uploaded certificate in the settingsmenu in grommunio Web |
|
520 | + * - Opens the certificate with provided passphrase |
|
521 | + * - Checks if it can be used for signing/decrypting |
|
522 | + * - Verifies that the email address is equal to the |
|
523 | + * - Verifies that the certificate isn't expired and inform user. |
|
524 | + * |
|
525 | + * @param {mixed} $data |
|
526 | + */ |
|
527 | + public function onUploadCertificate($data) { |
|
528 | + if ($data['sourcetype'] === 'certificate') { |
|
529 | + $passphrase = $_POST['passphrase']; |
|
530 | + $saveCert = false; |
|
531 | + $tmpname = $data['tmpname']; |
|
532 | + $message = ''; |
|
533 | + |
|
534 | + $certificate = file_get_contents($tmpname); |
|
535 | + $emailAddress = $GLOBALS['mapisession']->getSMTPAddress(); |
|
536 | + list($message, $publickey, $publickeyData) = validateUploadedPKCS($certificate, $passphrase, $emailAddress); |
|
537 | + |
|
538 | + // All checks completed successful |
|
539 | + // Store private cert in users associated store (check for duplicates) |
|
540 | + if (empty($message)) { |
|
541 | + $certMessage = getMAPICert($this->getStore()); |
|
542 | + // TODO: update to serialNumber check |
|
543 | + if ($certMessage && $certMessage[0][PR_MESSAGE_DELIVERY_TIME] == $publickeyData['validTo_time_t']) { |
|
544 | + $message = _('Certificate is already stored on the server'); |
|
545 | + } |
|
546 | + else { |
|
547 | + $saveCert = true; |
|
548 | + $root = mapi_msgstore_openentry($this->getStore(), null); |
|
549 | + // Remove old certificate |
|
550 | + /* |
|
551 | 551 | if($certMessage) { |
552 | 552 | // Delete private key |
553 | 553 | mapi_folder_deletemessages($root, array($certMessage[PR_ENTRYID])); |
@@ -562,597 +562,597 @@ discard block |
||
562 | 562 | $message = _('Certificate uploaded'); |
563 | 563 | }*/ |
564 | 564 | |
565 | - $this->importCertificate($certificate, $publickeyData, 'private'); |
|
566 | - |
|
567 | - // Check if the user has a public key in the GAB. |
|
568 | - $store_props = mapi_getprops($this->getStore(), [PR_USER_ENTRYID]); |
|
569 | - $user = mapi_ab_openentry($GLOBALS['mapisession']->getAddressbook(), $store_props[PR_USER_ENTRYID]); |
|
570 | - |
|
571 | - $this->importCertificate($publickey, $publickeyData, 'public', true); |
|
572 | - } |
|
573 | - } |
|
574 | - |
|
575 | - $returnfiles = []; |
|
576 | - $returnfiles[] = [ |
|
577 | - 'props' => [ |
|
578 | - 'attach_num' => -1, |
|
579 | - 'size' => $data['size'], |
|
580 | - 'name' => $data['name'], |
|
581 | - 'cert' => $saveCert, |
|
582 | - 'cert_warning' => $message, |
|
583 | - ], |
|
584 | - ]; |
|
585 | - $data['returnfiles'] = $returnfiles; |
|
586 | - } |
|
587 | - } |
|
588 | - |
|
589 | - /** |
|
590 | - * This function handles the 'beforesend' hook which is triggered before sending the email. |
|
591 | - * If the PR_MESSAGE_CLASS is set to a signed email (IPM.Note.SMIME.Multipartsigned), this function |
|
592 | - * will convert the mapi message to RFC822, sign the eml and attach the signed email to the mapi message. |
|
593 | - * |
|
594 | - * @param {mixed} $data from php hook |
|
595 | - */ |
|
596 | - public function onBeforeSend(&$data) { |
|
597 | - $store = $data['store']; |
|
598 | - $message = $data['message']; |
|
599 | - |
|
600 | - // Retrieve message class |
|
601 | - $props = mapi_getprops($message, [PR_MESSAGE_CLASS, PR_EC_IMAP_EMAIL]); |
|
602 | - $messageClass = $props[PR_MESSAGE_CLASS]; |
|
603 | - |
|
604 | - if (isset($messageClass) && (stripos($messageClass, 'IPM.Note.SMIME') !== false)) { |
|
605 | - // FIXME: for now return when we are going to sign but we don't have the passphrase set |
|
606 | - // This should never happen sign |
|
607 | - $encryptionStore = \EncryptionStore::getInstance(); |
|
608 | - if (($messageClass === 'IPM.Note.SMIME.SignedEncrypt' || $messageClass === 'IPM.Note.SMIME.MultipartSigned') && |
|
609 | - !$encryptionStore->get('smime')) { |
|
610 | - return; |
|
611 | - } |
|
612 | - // NOTE: setting message class to IPM.Note, so that mapi_inetmapi_imtoinet converts the message to plain email |
|
613 | - // and doesn't fail when handling the attachments. |
|
614 | - mapi_setprops($message, [PR_MESSAGE_CLASS => 'IPM.Note']); |
|
615 | - mapi_savechanges($message); |
|
616 | - |
|
617 | - // If RFC822-formatted stream is already available in PR_EC_IMAP_EMAIL property |
|
618 | - // than directly use it, generate otherwise. |
|
619 | - if (isset($props[PR_EC_IMAP_EMAIL]) || propIsError(PR_EC_IMAP_EMAIL, $props) == MAPI_E_NOT_ENOUGH_MEMORY) { |
|
620 | - // Stream the message to properly get the PR_EC_IMAP_EMAIL property |
|
621 | - $emlMessageStream = mapi_openproperty($message, PR_EC_IMAP_EMAIL, IID_IStream, 0, 0); |
|
622 | - } |
|
623 | - else { |
|
624 | - // Read the message as RFC822-formatted e-mail stream. |
|
625 | - $emlMessageStream = mapi_inetmapi_imtoinet($GLOBALS['mapisession']->getSession(), $GLOBALS['mapisession']->getAddressbook(), $message, []); |
|
626 | - } |
|
627 | - |
|
628 | - // Remove all attachments, since they are stored in the attached signed message |
|
629 | - $atable = mapi_message_getattachmenttable($message); |
|
630 | - $rows = mapi_table_queryallrows($atable, [PR_ATTACH_MIME_TAG, PR_ATTACH_NUM]); |
|
631 | - foreach ($rows as $row) { |
|
632 | - $attnum = $row[PR_ATTACH_NUM]; |
|
633 | - mapi_message_deleteattach($message, $attnum); |
|
634 | - } |
|
635 | - |
|
636 | - // create temporary files |
|
637 | - $tmpSendEmail = tempnam(sys_get_temp_dir(), true); |
|
638 | - $tmpSendSmimeEmail = tempnam(sys_get_temp_dir(), true); |
|
639 | - |
|
640 | - // Save message stream to a file |
|
641 | - $stat = mapi_stream_stat($emlMessageStream); |
|
642 | - |
|
643 | - $fhandle = fopen($tmpSendEmail, 'w'); |
|
644 | - $buffer = null; |
|
645 | - for ($i = 0; $i < $stat["cb"]; $i += BLOCK_SIZE) { |
|
646 | - // Write stream |
|
647 | - $buffer = mapi_stream_read($emlMessageStream, BLOCK_SIZE); |
|
648 | - fwrite($fhandle, $buffer, strlen($buffer)); |
|
649 | - } |
|
650 | - fclose($fhandle); |
|
651 | - |
|
652 | - // Create attachment for S/MIME message |
|
653 | - $signedAttach = mapi_message_createattach($message); |
|
654 | - $smimeProps = [ |
|
655 | - PR_ATTACH_LONG_FILENAME => 'smime.p7m', |
|
656 | - PR_DISPLAY_NAME => 'smime.p7m', |
|
657 | - PR_ATTACH_METHOD => ATTACH_BY_VALUE, |
|
658 | - PR_ATTACH_MIME_TAG => 'multipart/signed', |
|
659 | - PR_ATTACHMENT_HIDDEN => true, |
|
660 | - ]; |
|
661 | - |
|
662 | - // Sign then Encrypt email |
|
663 | - switch ($messageClass) { |
|
664 | - case 'IPM.Note.SMIME.SignedEncrypt': |
|
665 | - $tmpFile = tempnam(sys_get_temp_dir(), true); |
|
666 | - $this->sign($tmpSendEmail, $tmpFile, $message, $signedAttach, $smimeProps); |
|
667 | - $this->encrypt($tmpFile, $tmpSendSmimeEmail, $message, $signedAttach, $smimeProps); |
|
668 | - unlink($tmpFile); |
|
669 | - break; |
|
670 | - |
|
671 | - case 'IPM.Note.SMIME.MultipartSigned': |
|
672 | - $this->sign($tmpSendEmail, $tmpSendSmimeEmail, $message, $signedAttach, $smimeProps); |
|
673 | - break; |
|
674 | - |
|
675 | - case 'IPM.Note.SMIME': |
|
676 | - $this->encrypt($tmpSendEmail, $tmpSendSmimeEmail, $message, $signedAttach, $smimeProps); |
|
677 | - break; |
|
678 | - } |
|
679 | - |
|
680 | - // Save the signed message as attachment of the send email |
|
681 | - $stream = mapi_openproperty($signedAttach, PR_ATTACH_DATA_BIN, IID_IStream, 0, MAPI_CREATE | MAPI_MODIFY); |
|
682 | - $handle = fopen($tmpSendSmimeEmail, 'r'); |
|
683 | - while (!feof($handle)) { |
|
684 | - $contents = fread($handle, BLOCK_SIZE); |
|
685 | - mapi_stream_write($stream, $contents); |
|
686 | - } |
|
687 | - fclose($handle); |
|
688 | - |
|
689 | - mapi_stream_commit($stream); |
|
690 | - |
|
691 | - // remove tmp files |
|
692 | - unlink($tmpSendSmimeEmail); |
|
693 | - unlink($tmpSendEmail); |
|
694 | - |
|
695 | - mapi_savechanges($signedAttach); |
|
696 | - mapi_savechanges($message); |
|
697 | - } |
|
698 | - } |
|
699 | - |
|
700 | - /** |
|
701 | - * Function to sign an email. |
|
702 | - * |
|
703 | - * @param object $infile File eml to be encrypted |
|
704 | - * @param object $outfile File |
|
705 | - * @param object $message Mapi Message Object |
|
706 | - * @param object $signedAttach |
|
707 | - * @param array $smimeProps |
|
708 | - */ |
|
709 | - public function sign(&$infile, &$outfile, &$message, &$signedAttach, $smimeProps) { |
|
710 | - // Set mesageclass back to IPM.Note.SMIME.MultipartSigned |
|
711 | - mapi_setprops($message, [PR_MESSAGE_CLASS => 'IPM.Note.SMIME.MultipartSigned']); |
|
712 | - mapi_setprops($signedAttach, $smimeProps); |
|
713 | - |
|
714 | - // Obtain private certificate |
|
715 | - $encryptionStore = EncryptionStore::getInstance(); |
|
716 | - // Only the newest one is returned |
|
717 | - $certs = readPrivateCert($this->getStore(), $encryptionStore->get('smime')); |
|
718 | - |
|
719 | - // Retrieve intermediate CA's for verification, if available |
|
720 | - if (isset($certs['extracerts'])) { |
|
721 | - $tmpFile = tempnam(sys_get_temp_dir(), true); |
|
722 | - file_put_contents($tmpFile, implode('', $certs['extracerts'])); |
|
723 | - $ok = openssl_pkcs7_sign($infile, $outfile, $certs['cert'], [$certs['pkey'], ''], [], PKCS7_DETACHED, $tmpFile); |
|
724 | - if (!$ok) { |
|
725 | - Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Unable to sign message with intermediate certificates, openssl error: '%s'", @openssl_error_string())); |
|
726 | - } |
|
727 | - unlink($tmpFile); |
|
728 | - } |
|
729 | - else { |
|
730 | - $ok = openssl_pkcs7_sign($infile, $outfile, $certs['cert'], [$certs['pkey'], ''], [], PKCS7_DETACHED); |
|
731 | - if (!$ok) { |
|
732 | - Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Unable to sign message, openssl error: '%s'", @openssl_error_string())); |
|
733 | - } |
|
734 | - } |
|
735 | - } |
|
736 | - |
|
737 | - /** |
|
738 | - * Function to encrypt an email. |
|
739 | - * |
|
740 | - * @param object $infile File eml to be encrypted |
|
741 | - * @param object $outfile File |
|
742 | - * @param object $message Mapi Message Object |
|
743 | - * @param object $signedAttach |
|
744 | - * @param array $smimeProps |
|
745 | - */ |
|
746 | - public function encrypt(&$infile, &$outfile, &$message, &$signedAttach, $smimeProps) { |
|
747 | - mapi_setprops($message, [PR_MESSAGE_CLASS => 'IPM.Note.SMIME']); |
|
748 | - $smimeProps[PR_ATTACH_MIME_TAG] = "application/pkcs7-mime"; |
|
749 | - mapi_setprops($signedAttach, $smimeProps); |
|
750 | - |
|
751 | - $publicCerts = $this->getPublicKeyForMessage($message); |
|
752 | - // Always append our own certificate, so that the mail can be decrypted in 'Sent items' |
|
753 | - // Prefer GAB public certificate above MAPI Store certificate. |
|
754 | - $email = $GLOBALS['mapisession']->getSMTPAddress(); |
|
755 | - $user = $this->getGABUser($email); |
|
756 | - $cert = $this->getGABCert($user); |
|
757 | - if (empty($cert)) { |
|
758 | - $cert = base64_decode($this->getPublicKey($email)); |
|
759 | - } |
|
760 | - |
|
761 | - if (!empty($cert)) { |
|
762 | - array_push($publicCerts, $cert); |
|
763 | - } |
|
764 | - |
|
765 | - $ok = openssl_pkcs7_encrypt($infile, $outfile, $publicCerts, [], 0, $this->cipher); |
|
766 | - if (!$ok) { |
|
767 | - error_log("[smime] unable to encrypt message, openssl error: " . print_r(@openssl_error_string(), true)); |
|
768 | - Log::Write(LOGLEVEL_ERROR, sprintf("[smime] unable to encrypt message, openssl error: '%s'", @openssl_error_string())); |
|
769 | - } |
|
770 | - $tmpEml = file_get_contents($outfile); |
|
771 | - |
|
772 | - // Grab the base64 data, since MAPI requires it saved as decoded base64 string. |
|
773 | - // FIXME: we can do better here |
|
774 | - $matches = explode("\n\n", $tmpEml); |
|
775 | - $base64 = str_replace("\n", "", $matches[1]); |
|
776 | - file_put_contents($outfile, base64_decode($base64)); |
|
777 | - |
|
778 | - // Empty the body |
|
779 | - mapi_setprops($message, [PR_BODY => ""]); |
|
780 | - } |
|
781 | - |
|
782 | - /** |
|
783 | - * Function which fetches the public certificates for all recipients (TO/CC/BCC) of a message |
|
784 | - * Always get the certificate of an address which expires last. |
|
785 | - * |
|
786 | - * @param object $message Mapi Message Object |
|
787 | - * |
|
788 | - * @return array of public certificates |
|
789 | - */ |
|
790 | - public function getPublicKeyForMessage($message) { |
|
791 | - $recipientTable = mapi_message_getrecipienttable($message); |
|
792 | - $recips = mapi_table_queryallrows($recipientTable, [PR_SMTP_ADDRESS, PR_RECIPIENT_TYPE, PR_ADDRTYPE], [RES_OR, [ |
|
793 | - [RES_PROPERTY, |
|
794 | - [ |
|
795 | - RELOP => RELOP_EQ, |
|
796 | - ULPROPTAG => PR_RECIPIENT_TYPE, |
|
797 | - VALUE => MAPI_BCC, |
|
798 | - ], |
|
799 | - ], |
|
800 | - [RES_PROPERTY, |
|
801 | - [ |
|
802 | - RELOP => RELOP_EQ, |
|
803 | - ULPROPTAG => PR_RECIPIENT_TYPE, |
|
804 | - VALUE => MAPI_CC, |
|
805 | - ], |
|
806 | - ], |
|
807 | - [RES_PROPERTY, |
|
808 | - [ |
|
809 | - RELOP => RELOP_EQ, |
|
810 | - ULPROPTAG => PR_RECIPIENT_TYPE, |
|
811 | - VALUE => MAPI_TO, |
|
812 | - ], |
|
813 | - ], |
|
814 | - ]]); |
|
815 | - |
|
816 | - $publicCerts = []; |
|
817 | - $storeCert = ''; |
|
818 | - $gabCert = ''; |
|
819 | - |
|
820 | - foreach ($recips as $recip) { |
|
821 | - $emailAddr = $recip[PR_SMTP_ADDRESS]; |
|
822 | - $addrType = $recip[PR_ADDRTYPE]; |
|
823 | - |
|
824 | - if ($addrType === "ZARAFA" || $addrType === "EX") { |
|
825 | - $user = $this->getGABUser($emailAddr); |
|
826 | - $gabCert = $this->getGABCert($user); |
|
827 | - } |
|
828 | - |
|
829 | - $storeCert = $this->getPublicKey($emailAddr); |
|
830 | - |
|
831 | - if (!empty($gabCert)) { |
|
832 | - array_push($publicCerts, $gabCert); |
|
833 | - } |
|
834 | - elseif (!empty($storeCert)) { |
|
835 | - array_push($publicCerts, base64_decode($storeCert)); |
|
836 | - } |
|
837 | - } |
|
838 | - |
|
839 | - return $publicCerts; |
|
840 | - } |
|
841 | - |
|
842 | - /** |
|
843 | - * Retrieves the public certificates stored in the MAPI UserStore and belonging to the |
|
844 | - * emailAdddress, returns "" if there is no certificate for that user. |
|
845 | - * |
|
846 | - * @param {String} emailAddress |
|
847 | - * @param mixed $emailAddress |
|
848 | - * @param mixed $multiple |
|
849 | - * |
|
850 | - * @return {String} $certificate |
|
851 | - */ |
|
852 | - public function getPublicKey($emailAddress, $multiple = false) { |
|
853 | - $certificates = []; |
|
854 | - |
|
855 | - $certs = getMAPICert($this->getStore(), 'WebApp.Security.Public', $emailAddress); |
|
856 | - |
|
857 | - if ($certs && count($certs) > 0) { |
|
858 | - foreach ($certs as $cert) { |
|
859 | - $pubkey = mapi_msgstore_openentry($this->getStore(), $cert[PR_ENTRYID]); |
|
860 | - $certificate = ""; |
|
861 | - if ($pubkey != false) { |
|
862 | - // retrieve pkcs#11 certificate from body |
|
863 | - $stream = mapi_openproperty($pubkey, PR_BODY, IID_IStream, 0, 0); |
|
864 | - $stat = mapi_stream_stat($stream); |
|
865 | - mapi_stream_seek($stream, 0, STREAM_SEEK_SET); |
|
866 | - for ($i = 0; $i < $stat['cb']; $i += 1024) { |
|
867 | - $certificate .= mapi_stream_read($stream, 1024); |
|
868 | - } |
|
869 | - array_push($certificates, $certificate); |
|
870 | - } |
|
871 | - } |
|
872 | - } |
|
873 | - |
|
874 | - return $multiple ? $certificates : ($certificates[0] ?? ''); |
|
875 | - } |
|
876 | - |
|
877 | - /** |
|
878 | - * Function which is used to check if there is a public certificate for the provided emailAddress. |
|
879 | - * |
|
880 | - * @param {String} emailAddress emailAddres of recipient |
|
881 | - * @param {Boolean} gabUser is the user of PR_ADDRTYPE == ZARAFA |
|
882 | - * @param mixed $emailAddress |
|
883 | - * @param mixed $gabUser |
|
884 | - * |
|
885 | - * @return {Boolean} true if public certificate exists |
|
886 | - */ |
|
887 | - public function pubcertExists($emailAddress, $gabUser = false) { |
|
888 | - if ($gabUser) { |
|
889 | - $user = $this->getGABUser($emailAddress); |
|
890 | - $gabCert = $this->getGABCert($user); |
|
891 | - if ($user && !empty($gabCert)) { |
|
892 | - return true; |
|
893 | - } |
|
894 | - } |
|
895 | - |
|
896 | - $root = mapi_msgstore_openentry($this->getStore(), null); |
|
897 | - $table = mapi_folder_getcontentstable($root, MAPI_ASSOCIATED); |
|
898 | - |
|
899 | - // Restriction for public certificates which are from the recipient of the email, are active and have the correct message_class |
|
900 | - $restrict = [RES_AND, [ |
|
901 | - [RES_PROPERTY, |
|
902 | - [ |
|
903 | - RELOP => RELOP_EQ, |
|
904 | - ULPROPTAG => PR_MESSAGE_CLASS, |
|
905 | - VALUE => [PR_MESSAGE_CLASS => "WebApp.Security.Public"], |
|
906 | - ], |
|
907 | - ], |
|
908 | - [RES_PROPERTY, |
|
909 | - [ |
|
910 | - RELOP => RELOP_EQ, |
|
911 | - ULPROPTAG => PR_SUBJECT, |
|
912 | - VALUE => [PR_SUBJECT => $emailAddress], |
|
913 | - ], |
|
914 | - ], |
|
915 | - ]]; |
|
916 | - mapi_table_restrict($table, $restrict, TBL_BATCH); |
|
917 | - mapi_table_sort($table, [PR_MESSAGE_DELIVERY_TIME => TABLE_SORT_DESCEND], TBL_BATCH); |
|
918 | - |
|
919 | - $rows = mapi_table_queryallrows($table, [PR_SUBJECT, PR_ENTRYID, PR_MESSAGE_DELIVERY_TIME, PR_CLIENT_SUBMIT_TIME], $restrict); |
|
920 | - |
|
921 | - return !empty($rows); |
|
922 | - } |
|
923 | - |
|
924 | - /** |
|
925 | - * Helper functions which extracts the errors from openssl_error_string() |
|
926 | - * Example error from openssl_error_string(): error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error |
|
927 | - * Note that openssl_error_string() returns an error when verifying is successful, this is a bug in PHP https://bugs.php.net/bug.php?id=50713. |
|
928 | - * |
|
929 | - * @return {String} |
|
930 | - */ |
|
931 | - public function extract_openssl_error() { |
|
932 | - // TODO: should catch more errors by using while($error = @openssl_error_string()) |
|
933 | - $this->openssl_error = @openssl_error_string(); |
|
934 | - $openssl_error_code = 0; |
|
935 | - if ($this->openssl_error) { |
|
936 | - $openssl_error_list = explode(":", $this->openssl_error); |
|
937 | - $openssl_error_code = $openssl_error_list[1]; |
|
938 | - } |
|
939 | - |
|
940 | - return $openssl_error_code; |
|
941 | - } |
|
942 | - |
|
943 | - /** |
|
944 | - * Extract the intermediate certificates from the signed email. Uses kopano_smime's |
|
945 | - * two functions, to extract the PKCS#7 blob and then converts the PKCS#7 blob to |
|
946 | - * X509 certificates using kopano_pkcs7_read. |
|
947 | - * |
|
948 | - * @param string $emlfile - the s/mime message |
|
949 | - * |
|
950 | - * @return array a list of extracted intermediate certificates |
|
951 | - */ |
|
952 | - public function extractCAs($emlfile) { |
|
953 | - $php72 = version_compare(phpversion(), "7.2.0") >= 0; |
|
954 | - $phpcompat = function_exists('kopano_pkcs7_verify') && function_exists('kopano_pkcs7_read'); |
|
955 | - if (!$phpcompat && !$php72) { |
|
956 | - return []; |
|
957 | - } |
|
958 | - |
|
959 | - $certfile = tempnam(sys_get_temp_dir(), true); |
|
960 | - $outfile = tempnam(sys_get_temp_dir(), true); |
|
961 | - $p7bfile = tempnam(sys_get_temp_dir(), true); |
|
962 | - |
|
963 | - if ($php72) { |
|
964 | - openssl_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile); |
|
965 | - openssl_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile, [], $certfile, $outfile, $p7bfile); |
|
966 | - } |
|
967 | - else { |
|
968 | - kopano_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile); |
|
969 | - kopano_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile, [], $certfile, $outfile, $p7bfile); |
|
970 | - } |
|
971 | - |
|
972 | - $cas = []; |
|
973 | - $p7b = file_get_contents($p7bfile); |
|
974 | - if ($php72) { |
|
975 | - openssl_pkcs7_read($p7b, $cas); |
|
976 | - } |
|
977 | - else { |
|
978 | - // FIXME: Without the error_log, kopano_pkcs7_verify does not work (wtf). |
|
979 | - error_log($p7b); |
|
980 | - kopano_pkcs7_read($p7b, $cas); |
|
981 | - } |
|
982 | - unlink($certfile); |
|
983 | - unlink($outfile); |
|
984 | - unlink($p7bfile); |
|
985 | - |
|
986 | - return $cas; |
|
987 | - } |
|
988 | - |
|
989 | - /** |
|
990 | - * Imports certificate in the MAPI Root Associated Folder. |
|
991 | - * |
|
992 | - * Private key, always insert certificate |
|
993 | - * Public key, check if we already have one stored |
|
994 | - * |
|
995 | - * @param string $cert certificate body as a string |
|
996 | - * @param mixed $certData an array with the parsed certificate data |
|
997 | - * @param string $type certificate type, default 'public' |
|
998 | - * @param bool $force force import the certificate even though we have one already stored in the MAPI Store. |
|
999 | - * FIXME: remove $force in the future and move the check for newer certificate in this function. |
|
1000 | - */ |
|
1001 | - public function importCertificate($cert, $certData, $type = 'public', $force = false) { |
|
1002 | - $certEmail = getCertEmail($certData); |
|
1003 | - if (!$this->pubcertExists($certEmail) || $force || $type === 'private') { |
|
1004 | - $issued_by = ""; |
|
1005 | - foreach (array_keys($certData['issuer']) as $key) { |
|
1006 | - $issued_by .= $key . '=' . $certData['issuer'][$key] . "\n"; |
|
1007 | - } |
|
1008 | - |
|
1009 | - $root = mapi_msgstore_openentry($this->getStore(), null); |
|
1010 | - $assocMessage = mapi_folder_createmessage($root, MAPI_ASSOCIATED); |
|
1011 | - // TODO: write these properties down. |
|
1012 | - mapi_setprops($assocMessage, [ |
|
1013 | - PR_SUBJECT => $certEmail, |
|
1014 | - PR_MESSAGE_CLASS => $type == 'public' ? 'WebApp.Security.Public' : 'WebApp.Security.Private', |
|
1015 | - PR_MESSAGE_DELIVERY_TIME => $certData['validTo_time_t'], |
|
1016 | - PR_CLIENT_SUBMIT_TIME => $certData['validFrom_time_t'], |
|
1017 | - PR_SENDER_NAME => $certData['serialNumber'], // serial |
|
1018 | - PR_SENDER_EMAIL_ADDRESS => $issued_by, // Issuer To |
|
1019 | - PR_SUBJECT_PREFIX => '', |
|
1020 | - PR_RECEIVED_BY_NAME => $this->fingerprint_cert($cert, 'sha1'), // SHA1 Fingerprint |
|
1021 | - PR_INTERNET_MESSAGE_ID => $this->fingerprint_cert($cert), // MD5 FingerPrint |
|
1022 | - ]); |
|
1023 | - // Save attachment |
|
1024 | - $msgBody = base64_encode($cert); |
|
1025 | - $stream = mapi_openproperty($assocMessage, PR_BODY, IID_IStream, 0, MAPI_CREATE | MAPI_MODIFY); |
|
1026 | - mapi_stream_setsize($stream, strlen($msgBody)); |
|
1027 | - mapi_stream_write($stream, $msgBody); |
|
1028 | - mapi_stream_commit($stream); |
|
1029 | - mapi_message_savechanges($assocMessage); |
|
1030 | - } |
|
1031 | - } |
|
1032 | - |
|
1033 | - /** |
|
1034 | - * Function which returns the fingerprint (hash) of the certificate. |
|
1035 | - * |
|
1036 | - * @param {string} $cert certificate body as a string |
|
1037 | - * @param {string} $hash optional hash algorithm |
|
1038 | - * @param mixed $body |
|
1039 | - */ |
|
1040 | - public function fingerprint_cert($body, $hash = 'md5') { |
|
1041 | - // TODO: Note for PHP > 5.6 we can use openssl_x509_fingerprint |
|
1042 | - $body = str_replace('-----BEGIN CERTIFICATE-----', '', $body); |
|
1043 | - $body = str_replace('-----END CERTIFICATE-----', '', $body); |
|
1044 | - $body = base64_decode($body); |
|
1045 | - |
|
1046 | - if ($hash === 'sha1') { |
|
1047 | - $fingerprint = sha1($body); |
|
1048 | - } |
|
1049 | - else { |
|
1050 | - $fingerprint = md5($body); |
|
1051 | - } |
|
1052 | - |
|
1053 | - // Format 1000AB as 10:00:AB |
|
1054 | - return strtoupper(implode(':', str_split($fingerprint, 2))); |
|
1055 | - } |
|
1056 | - |
|
1057 | - /** |
|
1058 | - * Retrieve the GAB User. |
|
1059 | - * |
|
1060 | - * FIXME: ideally this would be a public function in grommunio Web. |
|
1061 | - * |
|
1062 | - * @param string $email the email address of the user |
|
1063 | - * |
|
1064 | - * @return mixed $user boolean if false else MAPIObject |
|
1065 | - */ |
|
1066 | - public function getGABUser($email) { |
|
1067 | - $addrbook = $GLOBALS["mapisession"]->getAddressbook(); |
|
1068 | - $userArr = [[PR_DISPLAY_NAME => $email]]; |
|
1069 | - $user = false; |
|
1070 | - |
|
1071 | - try { |
|
1072 | - $user = mapi_ab_resolvename($addrbook, $userArr, EMS_AB_ADDRESS_LOOKUP); |
|
1073 | - $user = mapi_ab_openentry($addrbook, $user[0][PR_ENTRYID]); |
|
1074 | - } |
|
1075 | - catch (MAPIException $e) { |
|
1076 | - $e->setHandled(); |
|
1077 | - } |
|
1078 | - |
|
1079 | - return $user; |
|
1080 | - } |
|
1081 | - |
|
1082 | - /** |
|
1083 | - * Retrieve the PR_EMS_AB_TAGGED_X509_CERT. |
|
1084 | - * |
|
1085 | - * @param MAPIObject $user the GAB user |
|
1086 | - * |
|
1087 | - * @return string $cert the certificate, empty if not found |
|
1088 | - */ |
|
1089 | - public function getGABCert($user) { |
|
1090 | - $cert = ''; |
|
1091 | - $userCertArray = mapi_getprops($user, [PR_EMS_AB_TAGGED_X509_CERT]); |
|
1092 | - if (isset($userCertArray[PR_EMS_AB_TAGGED_X509_CERT])) { |
|
1093 | - $cert = der2pem($userCertArray[PR_EMS_AB_TAGGED_X509_CERT][0]); |
|
1094 | - } |
|
1095 | - |
|
1096 | - return $cert; |
|
1097 | - } |
|
1098 | - |
|
1099 | - /** |
|
1100 | - * Called when the core Settings class is initialized and ready to accept sysadmin default |
|
1101 | - * settings. Registers the sysadmin defaults for the example plugin. |
|
1102 | - * |
|
1103 | - * @param {mixed} $data Reference to the data of the triggered hook |
|
1104 | - */ |
|
1105 | - public function onBeforeSettingsInit(&$data) { |
|
1106 | - $data['settingsObj']->addSysAdminDefaults([ |
|
1107 | - 'zarafa' => [ |
|
1108 | - 'v1' => [ |
|
1109 | - 'plugins' => [ |
|
1110 | - 'smime' => [ |
|
1111 | - 'enable' => defined('PLUGIN_SMIME_USER_DEFAULT_ENABLE_SMIME') && PLUGIN_SMIME_USER_DEFAULT_ENABLE_SMIME, |
|
1112 | - 'passphrase_cache' => defined('PLUGIN_SMIME_PASSPHRASE_REMEMBER_BROWSER') && PLUGIN_SMIME_PASSPHRASE_REMEMBER_BROWSER, |
|
1113 | - ], |
|
1114 | - ], |
|
1115 | - ], |
|
1116 | - ], |
|
1117 | - ]); |
|
1118 | - } |
|
1119 | - |
|
1120 | - /** |
|
1121 | - * Get sender structure of the MAPI Message. |
|
1122 | - * |
|
1123 | - * @param mapimessage $mapiMessage MAPI Message resource from which we need to get the sender |
|
1124 | - * |
|
1125 | - * @return array with properties |
|
1126 | - */ |
|
1127 | - public function getSenderAddress($mapiMessage) { |
|
1128 | - if (!method_exists($GLOBALS['operations'], 'getSenderAddress')) { |
|
1129 | - $messageProps = mapi_getprops($mapiMessage, [PR_SENT_REPRESENTING_ENTRYID, PR_SENDER_ENTRYID]); |
|
1130 | - $senderEntryID = isset($messageProps[PR_SENT_REPRESENTING_ENTRYID]) ? $messageProps[PR_SENT_REPRESENTING_ENTRYID] : $messageProps[PR_SENDER_ENTRYID]; |
|
1131 | - |
|
1132 | - try { |
|
1133 | - $senderUser = mapi_ab_openentry($GLOBALS["mapisession"]->getAddressbook(), $senderEntryID); |
|
1134 | - if ($senderUser) { |
|
1135 | - $userprops = mapi_getprops($senderUser, [PR_ADDRTYPE, PR_DISPLAY_NAME, PR_EMAIL_ADDRESS, PR_SMTP_ADDRESS, PR_OBJECT_TYPE, PR_RECIPIENT_TYPE, PR_DISPLAY_TYPE, PR_DISPLAY_TYPE_EX, PR_ENTRYID]); |
|
1136 | - |
|
1137 | - $senderStructure = []; |
|
1138 | - $senderStructure["props"]['entryid'] = bin2hex($userprops[PR_ENTRYID]); |
|
1139 | - $senderStructure["props"]['display_name'] = isset($userprops[PR_DISPLAY_NAME]) ? $userprops[PR_DISPLAY_NAME] : ''; |
|
1140 | - $senderStructure["props"]['email_address'] = isset($userprops[PR_EMAIL_ADDRESS]) ? $userprops[PR_EMAIL_ADDRESS] : ''; |
|
1141 | - $senderStructure["props"]['smtp_address'] = isset($userprops[PR_SMTP_ADDRESS]) ? $userprops[PR_SMTP_ADDRESS] : ''; |
|
1142 | - $senderStructure["props"]['address_type'] = isset($userprops[PR_ADDRTYPE]) ? $userprops[PR_ADDRTYPE] : ''; |
|
1143 | - $senderStructure["props"]['object_type'] = $userprops[PR_OBJECT_TYPE]; |
|
1144 | - $senderStructure["props"]['recipient_type'] = MAPI_TO; |
|
1145 | - $senderStructure["props"]['display_type'] = isset($userprops[PR_DISPLAY_TYPE]) ? $userprops[PR_DISPLAY_TYPE] : MAPI_MAILUSER; |
|
1146 | - $senderStructure["props"]['display_type_ex'] = isset($userprops[PR_DISPLAY_TYPE_EX]) ? $userprops[PR_DISPLAY_TYPE_EX] : MAPI_MAILUSER; |
|
1147 | - } |
|
1148 | - } |
|
1149 | - catch (MAPIException $e) { |
|
1150 | - Log::write(LOGLEVEL_ERROR, sprintf("%s %s", $e, $userProps[PR_SENT_REPRESENTING_NAME])); |
|
1151 | - } |
|
1152 | - |
|
1153 | - return $senderStructure; |
|
1154 | - } |
|
1155 | - |
|
1156 | - return $GLOBALS["operations"]->getSenderAddress($mapiMessage); |
|
1157 | - } |
|
565 | + $this->importCertificate($certificate, $publickeyData, 'private'); |
|
566 | + |
|
567 | + // Check if the user has a public key in the GAB. |
|
568 | + $store_props = mapi_getprops($this->getStore(), [PR_USER_ENTRYID]); |
|
569 | + $user = mapi_ab_openentry($GLOBALS['mapisession']->getAddressbook(), $store_props[PR_USER_ENTRYID]); |
|
570 | + |
|
571 | + $this->importCertificate($publickey, $publickeyData, 'public', true); |
|
572 | + } |
|
573 | + } |
|
574 | + |
|
575 | + $returnfiles = []; |
|
576 | + $returnfiles[] = [ |
|
577 | + 'props' => [ |
|
578 | + 'attach_num' => -1, |
|
579 | + 'size' => $data['size'], |
|
580 | + 'name' => $data['name'], |
|
581 | + 'cert' => $saveCert, |
|
582 | + 'cert_warning' => $message, |
|
583 | + ], |
|
584 | + ]; |
|
585 | + $data['returnfiles'] = $returnfiles; |
|
586 | + } |
|
587 | + } |
|
588 | + |
|
589 | + /** |
|
590 | + * This function handles the 'beforesend' hook which is triggered before sending the email. |
|
591 | + * If the PR_MESSAGE_CLASS is set to a signed email (IPM.Note.SMIME.Multipartsigned), this function |
|
592 | + * will convert the mapi message to RFC822, sign the eml and attach the signed email to the mapi message. |
|
593 | + * |
|
594 | + * @param {mixed} $data from php hook |
|
595 | + */ |
|
596 | + public function onBeforeSend(&$data) { |
|
597 | + $store = $data['store']; |
|
598 | + $message = $data['message']; |
|
599 | + |
|
600 | + // Retrieve message class |
|
601 | + $props = mapi_getprops($message, [PR_MESSAGE_CLASS, PR_EC_IMAP_EMAIL]); |
|
602 | + $messageClass = $props[PR_MESSAGE_CLASS]; |
|
603 | + |
|
604 | + if (isset($messageClass) && (stripos($messageClass, 'IPM.Note.SMIME') !== false)) { |
|
605 | + // FIXME: for now return when we are going to sign but we don't have the passphrase set |
|
606 | + // This should never happen sign |
|
607 | + $encryptionStore = \EncryptionStore::getInstance(); |
|
608 | + if (($messageClass === 'IPM.Note.SMIME.SignedEncrypt' || $messageClass === 'IPM.Note.SMIME.MultipartSigned') && |
|
609 | + !$encryptionStore->get('smime')) { |
|
610 | + return; |
|
611 | + } |
|
612 | + // NOTE: setting message class to IPM.Note, so that mapi_inetmapi_imtoinet converts the message to plain email |
|
613 | + // and doesn't fail when handling the attachments. |
|
614 | + mapi_setprops($message, [PR_MESSAGE_CLASS => 'IPM.Note']); |
|
615 | + mapi_savechanges($message); |
|
616 | + |
|
617 | + // If RFC822-formatted stream is already available in PR_EC_IMAP_EMAIL property |
|
618 | + // than directly use it, generate otherwise. |
|
619 | + if (isset($props[PR_EC_IMAP_EMAIL]) || propIsError(PR_EC_IMAP_EMAIL, $props) == MAPI_E_NOT_ENOUGH_MEMORY) { |
|
620 | + // Stream the message to properly get the PR_EC_IMAP_EMAIL property |
|
621 | + $emlMessageStream = mapi_openproperty($message, PR_EC_IMAP_EMAIL, IID_IStream, 0, 0); |
|
622 | + } |
|
623 | + else { |
|
624 | + // Read the message as RFC822-formatted e-mail stream. |
|
625 | + $emlMessageStream = mapi_inetmapi_imtoinet($GLOBALS['mapisession']->getSession(), $GLOBALS['mapisession']->getAddressbook(), $message, []); |
|
626 | + } |
|
627 | + |
|
628 | + // Remove all attachments, since they are stored in the attached signed message |
|
629 | + $atable = mapi_message_getattachmenttable($message); |
|
630 | + $rows = mapi_table_queryallrows($atable, [PR_ATTACH_MIME_TAG, PR_ATTACH_NUM]); |
|
631 | + foreach ($rows as $row) { |
|
632 | + $attnum = $row[PR_ATTACH_NUM]; |
|
633 | + mapi_message_deleteattach($message, $attnum); |
|
634 | + } |
|
635 | + |
|
636 | + // create temporary files |
|
637 | + $tmpSendEmail = tempnam(sys_get_temp_dir(), true); |
|
638 | + $tmpSendSmimeEmail = tempnam(sys_get_temp_dir(), true); |
|
639 | + |
|
640 | + // Save message stream to a file |
|
641 | + $stat = mapi_stream_stat($emlMessageStream); |
|
642 | + |
|
643 | + $fhandle = fopen($tmpSendEmail, 'w'); |
|
644 | + $buffer = null; |
|
645 | + for ($i = 0; $i < $stat["cb"]; $i += BLOCK_SIZE) { |
|
646 | + // Write stream |
|
647 | + $buffer = mapi_stream_read($emlMessageStream, BLOCK_SIZE); |
|
648 | + fwrite($fhandle, $buffer, strlen($buffer)); |
|
649 | + } |
|
650 | + fclose($fhandle); |
|
651 | + |
|
652 | + // Create attachment for S/MIME message |
|
653 | + $signedAttach = mapi_message_createattach($message); |
|
654 | + $smimeProps = [ |
|
655 | + PR_ATTACH_LONG_FILENAME => 'smime.p7m', |
|
656 | + PR_DISPLAY_NAME => 'smime.p7m', |
|
657 | + PR_ATTACH_METHOD => ATTACH_BY_VALUE, |
|
658 | + PR_ATTACH_MIME_TAG => 'multipart/signed', |
|
659 | + PR_ATTACHMENT_HIDDEN => true, |
|
660 | + ]; |
|
661 | + |
|
662 | + // Sign then Encrypt email |
|
663 | + switch ($messageClass) { |
|
664 | + case 'IPM.Note.SMIME.SignedEncrypt': |
|
665 | + $tmpFile = tempnam(sys_get_temp_dir(), true); |
|
666 | + $this->sign($tmpSendEmail, $tmpFile, $message, $signedAttach, $smimeProps); |
|
667 | + $this->encrypt($tmpFile, $tmpSendSmimeEmail, $message, $signedAttach, $smimeProps); |
|
668 | + unlink($tmpFile); |
|
669 | + break; |
|
670 | + |
|
671 | + case 'IPM.Note.SMIME.MultipartSigned': |
|
672 | + $this->sign($tmpSendEmail, $tmpSendSmimeEmail, $message, $signedAttach, $smimeProps); |
|
673 | + break; |
|
674 | + |
|
675 | + case 'IPM.Note.SMIME': |
|
676 | + $this->encrypt($tmpSendEmail, $tmpSendSmimeEmail, $message, $signedAttach, $smimeProps); |
|
677 | + break; |
|
678 | + } |
|
679 | + |
|
680 | + // Save the signed message as attachment of the send email |
|
681 | + $stream = mapi_openproperty($signedAttach, PR_ATTACH_DATA_BIN, IID_IStream, 0, MAPI_CREATE | MAPI_MODIFY); |
|
682 | + $handle = fopen($tmpSendSmimeEmail, 'r'); |
|
683 | + while (!feof($handle)) { |
|
684 | + $contents = fread($handle, BLOCK_SIZE); |
|
685 | + mapi_stream_write($stream, $contents); |
|
686 | + } |
|
687 | + fclose($handle); |
|
688 | + |
|
689 | + mapi_stream_commit($stream); |
|
690 | + |
|
691 | + // remove tmp files |
|
692 | + unlink($tmpSendSmimeEmail); |
|
693 | + unlink($tmpSendEmail); |
|
694 | + |
|
695 | + mapi_savechanges($signedAttach); |
|
696 | + mapi_savechanges($message); |
|
697 | + } |
|
698 | + } |
|
699 | + |
|
700 | + /** |
|
701 | + * Function to sign an email. |
|
702 | + * |
|
703 | + * @param object $infile File eml to be encrypted |
|
704 | + * @param object $outfile File |
|
705 | + * @param object $message Mapi Message Object |
|
706 | + * @param object $signedAttach |
|
707 | + * @param array $smimeProps |
|
708 | + */ |
|
709 | + public function sign(&$infile, &$outfile, &$message, &$signedAttach, $smimeProps) { |
|
710 | + // Set mesageclass back to IPM.Note.SMIME.MultipartSigned |
|
711 | + mapi_setprops($message, [PR_MESSAGE_CLASS => 'IPM.Note.SMIME.MultipartSigned']); |
|
712 | + mapi_setprops($signedAttach, $smimeProps); |
|
713 | + |
|
714 | + // Obtain private certificate |
|
715 | + $encryptionStore = EncryptionStore::getInstance(); |
|
716 | + // Only the newest one is returned |
|
717 | + $certs = readPrivateCert($this->getStore(), $encryptionStore->get('smime')); |
|
718 | + |
|
719 | + // Retrieve intermediate CA's for verification, if available |
|
720 | + if (isset($certs['extracerts'])) { |
|
721 | + $tmpFile = tempnam(sys_get_temp_dir(), true); |
|
722 | + file_put_contents($tmpFile, implode('', $certs['extracerts'])); |
|
723 | + $ok = openssl_pkcs7_sign($infile, $outfile, $certs['cert'], [$certs['pkey'], ''], [], PKCS7_DETACHED, $tmpFile); |
|
724 | + if (!$ok) { |
|
725 | + Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Unable to sign message with intermediate certificates, openssl error: '%s'", @openssl_error_string())); |
|
726 | + } |
|
727 | + unlink($tmpFile); |
|
728 | + } |
|
729 | + else { |
|
730 | + $ok = openssl_pkcs7_sign($infile, $outfile, $certs['cert'], [$certs['pkey'], ''], [], PKCS7_DETACHED); |
|
731 | + if (!$ok) { |
|
732 | + Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Unable to sign message, openssl error: '%s'", @openssl_error_string())); |
|
733 | + } |
|
734 | + } |
|
735 | + } |
|
736 | + |
|
737 | + /** |
|
738 | + * Function to encrypt an email. |
|
739 | + * |
|
740 | + * @param object $infile File eml to be encrypted |
|
741 | + * @param object $outfile File |
|
742 | + * @param object $message Mapi Message Object |
|
743 | + * @param object $signedAttach |
|
744 | + * @param array $smimeProps |
|
745 | + */ |
|
746 | + public function encrypt(&$infile, &$outfile, &$message, &$signedAttach, $smimeProps) { |
|
747 | + mapi_setprops($message, [PR_MESSAGE_CLASS => 'IPM.Note.SMIME']); |
|
748 | + $smimeProps[PR_ATTACH_MIME_TAG] = "application/pkcs7-mime"; |
|
749 | + mapi_setprops($signedAttach, $smimeProps); |
|
750 | + |
|
751 | + $publicCerts = $this->getPublicKeyForMessage($message); |
|
752 | + // Always append our own certificate, so that the mail can be decrypted in 'Sent items' |
|
753 | + // Prefer GAB public certificate above MAPI Store certificate. |
|
754 | + $email = $GLOBALS['mapisession']->getSMTPAddress(); |
|
755 | + $user = $this->getGABUser($email); |
|
756 | + $cert = $this->getGABCert($user); |
|
757 | + if (empty($cert)) { |
|
758 | + $cert = base64_decode($this->getPublicKey($email)); |
|
759 | + } |
|
760 | + |
|
761 | + if (!empty($cert)) { |
|
762 | + array_push($publicCerts, $cert); |
|
763 | + } |
|
764 | + |
|
765 | + $ok = openssl_pkcs7_encrypt($infile, $outfile, $publicCerts, [], 0, $this->cipher); |
|
766 | + if (!$ok) { |
|
767 | + error_log("[smime] unable to encrypt message, openssl error: " . print_r(@openssl_error_string(), true)); |
|
768 | + Log::Write(LOGLEVEL_ERROR, sprintf("[smime] unable to encrypt message, openssl error: '%s'", @openssl_error_string())); |
|
769 | + } |
|
770 | + $tmpEml = file_get_contents($outfile); |
|
771 | + |
|
772 | + // Grab the base64 data, since MAPI requires it saved as decoded base64 string. |
|
773 | + // FIXME: we can do better here |
|
774 | + $matches = explode("\n\n", $tmpEml); |
|
775 | + $base64 = str_replace("\n", "", $matches[1]); |
|
776 | + file_put_contents($outfile, base64_decode($base64)); |
|
777 | + |
|
778 | + // Empty the body |
|
779 | + mapi_setprops($message, [PR_BODY => ""]); |
|
780 | + } |
|
781 | + |
|
782 | + /** |
|
783 | + * Function which fetches the public certificates for all recipients (TO/CC/BCC) of a message |
|
784 | + * Always get the certificate of an address which expires last. |
|
785 | + * |
|
786 | + * @param object $message Mapi Message Object |
|
787 | + * |
|
788 | + * @return array of public certificates |
|
789 | + */ |
|
790 | + public function getPublicKeyForMessage($message) { |
|
791 | + $recipientTable = mapi_message_getrecipienttable($message); |
|
792 | + $recips = mapi_table_queryallrows($recipientTable, [PR_SMTP_ADDRESS, PR_RECIPIENT_TYPE, PR_ADDRTYPE], [RES_OR, [ |
|
793 | + [RES_PROPERTY, |
|
794 | + [ |
|
795 | + RELOP => RELOP_EQ, |
|
796 | + ULPROPTAG => PR_RECIPIENT_TYPE, |
|
797 | + VALUE => MAPI_BCC, |
|
798 | + ], |
|
799 | + ], |
|
800 | + [RES_PROPERTY, |
|
801 | + [ |
|
802 | + RELOP => RELOP_EQ, |
|
803 | + ULPROPTAG => PR_RECIPIENT_TYPE, |
|
804 | + VALUE => MAPI_CC, |
|
805 | + ], |
|
806 | + ], |
|
807 | + [RES_PROPERTY, |
|
808 | + [ |
|
809 | + RELOP => RELOP_EQ, |
|
810 | + ULPROPTAG => PR_RECIPIENT_TYPE, |
|
811 | + VALUE => MAPI_TO, |
|
812 | + ], |
|
813 | + ], |
|
814 | + ]]); |
|
815 | + |
|
816 | + $publicCerts = []; |
|
817 | + $storeCert = ''; |
|
818 | + $gabCert = ''; |
|
819 | + |
|
820 | + foreach ($recips as $recip) { |
|
821 | + $emailAddr = $recip[PR_SMTP_ADDRESS]; |
|
822 | + $addrType = $recip[PR_ADDRTYPE]; |
|
823 | + |
|
824 | + if ($addrType === "ZARAFA" || $addrType === "EX") { |
|
825 | + $user = $this->getGABUser($emailAddr); |
|
826 | + $gabCert = $this->getGABCert($user); |
|
827 | + } |
|
828 | + |
|
829 | + $storeCert = $this->getPublicKey($emailAddr); |
|
830 | + |
|
831 | + if (!empty($gabCert)) { |
|
832 | + array_push($publicCerts, $gabCert); |
|
833 | + } |
|
834 | + elseif (!empty($storeCert)) { |
|
835 | + array_push($publicCerts, base64_decode($storeCert)); |
|
836 | + } |
|
837 | + } |
|
838 | + |
|
839 | + return $publicCerts; |
|
840 | + } |
|
841 | + |
|
842 | + /** |
|
843 | + * Retrieves the public certificates stored in the MAPI UserStore and belonging to the |
|
844 | + * emailAdddress, returns "" if there is no certificate for that user. |
|
845 | + * |
|
846 | + * @param {String} emailAddress |
|
847 | + * @param mixed $emailAddress |
|
848 | + * @param mixed $multiple |
|
849 | + * |
|
850 | + * @return {String} $certificate |
|
851 | + */ |
|
852 | + public function getPublicKey($emailAddress, $multiple = false) { |
|
853 | + $certificates = []; |
|
854 | + |
|
855 | + $certs = getMAPICert($this->getStore(), 'WebApp.Security.Public', $emailAddress); |
|
856 | + |
|
857 | + if ($certs && count($certs) > 0) { |
|
858 | + foreach ($certs as $cert) { |
|
859 | + $pubkey = mapi_msgstore_openentry($this->getStore(), $cert[PR_ENTRYID]); |
|
860 | + $certificate = ""; |
|
861 | + if ($pubkey != false) { |
|
862 | + // retrieve pkcs#11 certificate from body |
|
863 | + $stream = mapi_openproperty($pubkey, PR_BODY, IID_IStream, 0, 0); |
|
864 | + $stat = mapi_stream_stat($stream); |
|
865 | + mapi_stream_seek($stream, 0, STREAM_SEEK_SET); |
|
866 | + for ($i = 0; $i < $stat['cb']; $i += 1024) { |
|
867 | + $certificate .= mapi_stream_read($stream, 1024); |
|
868 | + } |
|
869 | + array_push($certificates, $certificate); |
|
870 | + } |
|
871 | + } |
|
872 | + } |
|
873 | + |
|
874 | + return $multiple ? $certificates : ($certificates[0] ?? ''); |
|
875 | + } |
|
876 | + |
|
877 | + /** |
|
878 | + * Function which is used to check if there is a public certificate for the provided emailAddress. |
|
879 | + * |
|
880 | + * @param {String} emailAddress emailAddres of recipient |
|
881 | + * @param {Boolean} gabUser is the user of PR_ADDRTYPE == ZARAFA |
|
882 | + * @param mixed $emailAddress |
|
883 | + * @param mixed $gabUser |
|
884 | + * |
|
885 | + * @return {Boolean} true if public certificate exists |
|
886 | + */ |
|
887 | + public function pubcertExists($emailAddress, $gabUser = false) { |
|
888 | + if ($gabUser) { |
|
889 | + $user = $this->getGABUser($emailAddress); |
|
890 | + $gabCert = $this->getGABCert($user); |
|
891 | + if ($user && !empty($gabCert)) { |
|
892 | + return true; |
|
893 | + } |
|
894 | + } |
|
895 | + |
|
896 | + $root = mapi_msgstore_openentry($this->getStore(), null); |
|
897 | + $table = mapi_folder_getcontentstable($root, MAPI_ASSOCIATED); |
|
898 | + |
|
899 | + // Restriction for public certificates which are from the recipient of the email, are active and have the correct message_class |
|
900 | + $restrict = [RES_AND, [ |
|
901 | + [RES_PROPERTY, |
|
902 | + [ |
|
903 | + RELOP => RELOP_EQ, |
|
904 | + ULPROPTAG => PR_MESSAGE_CLASS, |
|
905 | + VALUE => [PR_MESSAGE_CLASS => "WebApp.Security.Public"], |
|
906 | + ], |
|
907 | + ], |
|
908 | + [RES_PROPERTY, |
|
909 | + [ |
|
910 | + RELOP => RELOP_EQ, |
|
911 | + ULPROPTAG => PR_SUBJECT, |
|
912 | + VALUE => [PR_SUBJECT => $emailAddress], |
|
913 | + ], |
|
914 | + ], |
|
915 | + ]]; |
|
916 | + mapi_table_restrict($table, $restrict, TBL_BATCH); |
|
917 | + mapi_table_sort($table, [PR_MESSAGE_DELIVERY_TIME => TABLE_SORT_DESCEND], TBL_BATCH); |
|
918 | + |
|
919 | + $rows = mapi_table_queryallrows($table, [PR_SUBJECT, PR_ENTRYID, PR_MESSAGE_DELIVERY_TIME, PR_CLIENT_SUBMIT_TIME], $restrict); |
|
920 | + |
|
921 | + return !empty($rows); |
|
922 | + } |
|
923 | + |
|
924 | + /** |
|
925 | + * Helper functions which extracts the errors from openssl_error_string() |
|
926 | + * Example error from openssl_error_string(): error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error |
|
927 | + * Note that openssl_error_string() returns an error when verifying is successful, this is a bug in PHP https://bugs.php.net/bug.php?id=50713. |
|
928 | + * |
|
929 | + * @return {String} |
|
930 | + */ |
|
931 | + public function extract_openssl_error() { |
|
932 | + // TODO: should catch more errors by using while($error = @openssl_error_string()) |
|
933 | + $this->openssl_error = @openssl_error_string(); |
|
934 | + $openssl_error_code = 0; |
|
935 | + if ($this->openssl_error) { |
|
936 | + $openssl_error_list = explode(":", $this->openssl_error); |
|
937 | + $openssl_error_code = $openssl_error_list[1]; |
|
938 | + } |
|
939 | + |
|
940 | + return $openssl_error_code; |
|
941 | + } |
|
942 | + |
|
943 | + /** |
|
944 | + * Extract the intermediate certificates from the signed email. Uses kopano_smime's |
|
945 | + * two functions, to extract the PKCS#7 blob and then converts the PKCS#7 blob to |
|
946 | + * X509 certificates using kopano_pkcs7_read. |
|
947 | + * |
|
948 | + * @param string $emlfile - the s/mime message |
|
949 | + * |
|
950 | + * @return array a list of extracted intermediate certificates |
|
951 | + */ |
|
952 | + public function extractCAs($emlfile) { |
|
953 | + $php72 = version_compare(phpversion(), "7.2.0") >= 0; |
|
954 | + $phpcompat = function_exists('kopano_pkcs7_verify') && function_exists('kopano_pkcs7_read'); |
|
955 | + if (!$phpcompat && !$php72) { |
|
956 | + return []; |
|
957 | + } |
|
958 | + |
|
959 | + $certfile = tempnam(sys_get_temp_dir(), true); |
|
960 | + $outfile = tempnam(sys_get_temp_dir(), true); |
|
961 | + $p7bfile = tempnam(sys_get_temp_dir(), true); |
|
962 | + |
|
963 | + if ($php72) { |
|
964 | + openssl_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile); |
|
965 | + openssl_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile, [], $certfile, $outfile, $p7bfile); |
|
966 | + } |
|
967 | + else { |
|
968 | + kopano_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile); |
|
969 | + kopano_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile, [], $certfile, $outfile, $p7bfile); |
|
970 | + } |
|
971 | + |
|
972 | + $cas = []; |
|
973 | + $p7b = file_get_contents($p7bfile); |
|
974 | + if ($php72) { |
|
975 | + openssl_pkcs7_read($p7b, $cas); |
|
976 | + } |
|
977 | + else { |
|
978 | + // FIXME: Without the error_log, kopano_pkcs7_verify does not work (wtf). |
|
979 | + error_log($p7b); |
|
980 | + kopano_pkcs7_read($p7b, $cas); |
|
981 | + } |
|
982 | + unlink($certfile); |
|
983 | + unlink($outfile); |
|
984 | + unlink($p7bfile); |
|
985 | + |
|
986 | + return $cas; |
|
987 | + } |
|
988 | + |
|
989 | + /** |
|
990 | + * Imports certificate in the MAPI Root Associated Folder. |
|
991 | + * |
|
992 | + * Private key, always insert certificate |
|
993 | + * Public key, check if we already have one stored |
|
994 | + * |
|
995 | + * @param string $cert certificate body as a string |
|
996 | + * @param mixed $certData an array with the parsed certificate data |
|
997 | + * @param string $type certificate type, default 'public' |
|
998 | + * @param bool $force force import the certificate even though we have one already stored in the MAPI Store. |
|
999 | + * FIXME: remove $force in the future and move the check for newer certificate in this function. |
|
1000 | + */ |
|
1001 | + public function importCertificate($cert, $certData, $type = 'public', $force = false) { |
|
1002 | + $certEmail = getCertEmail($certData); |
|
1003 | + if (!$this->pubcertExists($certEmail) || $force || $type === 'private') { |
|
1004 | + $issued_by = ""; |
|
1005 | + foreach (array_keys($certData['issuer']) as $key) { |
|
1006 | + $issued_by .= $key . '=' . $certData['issuer'][$key] . "\n"; |
|
1007 | + } |
|
1008 | + |
|
1009 | + $root = mapi_msgstore_openentry($this->getStore(), null); |
|
1010 | + $assocMessage = mapi_folder_createmessage($root, MAPI_ASSOCIATED); |
|
1011 | + // TODO: write these properties down. |
|
1012 | + mapi_setprops($assocMessage, [ |
|
1013 | + PR_SUBJECT => $certEmail, |
|
1014 | + PR_MESSAGE_CLASS => $type == 'public' ? 'WebApp.Security.Public' : 'WebApp.Security.Private', |
|
1015 | + PR_MESSAGE_DELIVERY_TIME => $certData['validTo_time_t'], |
|
1016 | + PR_CLIENT_SUBMIT_TIME => $certData['validFrom_time_t'], |
|
1017 | + PR_SENDER_NAME => $certData['serialNumber'], // serial |
|
1018 | + PR_SENDER_EMAIL_ADDRESS => $issued_by, // Issuer To |
|
1019 | + PR_SUBJECT_PREFIX => '', |
|
1020 | + PR_RECEIVED_BY_NAME => $this->fingerprint_cert($cert, 'sha1'), // SHA1 Fingerprint |
|
1021 | + PR_INTERNET_MESSAGE_ID => $this->fingerprint_cert($cert), // MD5 FingerPrint |
|
1022 | + ]); |
|
1023 | + // Save attachment |
|
1024 | + $msgBody = base64_encode($cert); |
|
1025 | + $stream = mapi_openproperty($assocMessage, PR_BODY, IID_IStream, 0, MAPI_CREATE | MAPI_MODIFY); |
|
1026 | + mapi_stream_setsize($stream, strlen($msgBody)); |
|
1027 | + mapi_stream_write($stream, $msgBody); |
|
1028 | + mapi_stream_commit($stream); |
|
1029 | + mapi_message_savechanges($assocMessage); |
|
1030 | + } |
|
1031 | + } |
|
1032 | + |
|
1033 | + /** |
|
1034 | + * Function which returns the fingerprint (hash) of the certificate. |
|
1035 | + * |
|
1036 | + * @param {string} $cert certificate body as a string |
|
1037 | + * @param {string} $hash optional hash algorithm |
|
1038 | + * @param mixed $body |
|
1039 | + */ |
|
1040 | + public function fingerprint_cert($body, $hash = 'md5') { |
|
1041 | + // TODO: Note for PHP > 5.6 we can use openssl_x509_fingerprint |
|
1042 | + $body = str_replace('-----BEGIN CERTIFICATE-----', '', $body); |
|
1043 | + $body = str_replace('-----END CERTIFICATE-----', '', $body); |
|
1044 | + $body = base64_decode($body); |
|
1045 | + |
|
1046 | + if ($hash === 'sha1') { |
|
1047 | + $fingerprint = sha1($body); |
|
1048 | + } |
|
1049 | + else { |
|
1050 | + $fingerprint = md5($body); |
|
1051 | + } |
|
1052 | + |
|
1053 | + // Format 1000AB as 10:00:AB |
|
1054 | + return strtoupper(implode(':', str_split($fingerprint, 2))); |
|
1055 | + } |
|
1056 | + |
|
1057 | + /** |
|
1058 | + * Retrieve the GAB User. |
|
1059 | + * |
|
1060 | + * FIXME: ideally this would be a public function in grommunio Web. |
|
1061 | + * |
|
1062 | + * @param string $email the email address of the user |
|
1063 | + * |
|
1064 | + * @return mixed $user boolean if false else MAPIObject |
|
1065 | + */ |
|
1066 | + public function getGABUser($email) { |
|
1067 | + $addrbook = $GLOBALS["mapisession"]->getAddressbook(); |
|
1068 | + $userArr = [[PR_DISPLAY_NAME => $email]]; |
|
1069 | + $user = false; |
|
1070 | + |
|
1071 | + try { |
|
1072 | + $user = mapi_ab_resolvename($addrbook, $userArr, EMS_AB_ADDRESS_LOOKUP); |
|
1073 | + $user = mapi_ab_openentry($addrbook, $user[0][PR_ENTRYID]); |
|
1074 | + } |
|
1075 | + catch (MAPIException $e) { |
|
1076 | + $e->setHandled(); |
|
1077 | + } |
|
1078 | + |
|
1079 | + return $user; |
|
1080 | + } |
|
1081 | + |
|
1082 | + /** |
|
1083 | + * Retrieve the PR_EMS_AB_TAGGED_X509_CERT. |
|
1084 | + * |
|
1085 | + * @param MAPIObject $user the GAB user |
|
1086 | + * |
|
1087 | + * @return string $cert the certificate, empty if not found |
|
1088 | + */ |
|
1089 | + public function getGABCert($user) { |
|
1090 | + $cert = ''; |
|
1091 | + $userCertArray = mapi_getprops($user, [PR_EMS_AB_TAGGED_X509_CERT]); |
|
1092 | + if (isset($userCertArray[PR_EMS_AB_TAGGED_X509_CERT])) { |
|
1093 | + $cert = der2pem($userCertArray[PR_EMS_AB_TAGGED_X509_CERT][0]); |
|
1094 | + } |
|
1095 | + |
|
1096 | + return $cert; |
|
1097 | + } |
|
1098 | + |
|
1099 | + /** |
|
1100 | + * Called when the core Settings class is initialized and ready to accept sysadmin default |
|
1101 | + * settings. Registers the sysadmin defaults for the example plugin. |
|
1102 | + * |
|
1103 | + * @param {mixed} $data Reference to the data of the triggered hook |
|
1104 | + */ |
|
1105 | + public function onBeforeSettingsInit(&$data) { |
|
1106 | + $data['settingsObj']->addSysAdminDefaults([ |
|
1107 | + 'zarafa' => [ |
|
1108 | + 'v1' => [ |
|
1109 | + 'plugins' => [ |
|
1110 | + 'smime' => [ |
|
1111 | + 'enable' => defined('PLUGIN_SMIME_USER_DEFAULT_ENABLE_SMIME') && PLUGIN_SMIME_USER_DEFAULT_ENABLE_SMIME, |
|
1112 | + 'passphrase_cache' => defined('PLUGIN_SMIME_PASSPHRASE_REMEMBER_BROWSER') && PLUGIN_SMIME_PASSPHRASE_REMEMBER_BROWSER, |
|
1113 | + ], |
|
1114 | + ], |
|
1115 | + ], |
|
1116 | + ], |
|
1117 | + ]); |
|
1118 | + } |
|
1119 | + |
|
1120 | + /** |
|
1121 | + * Get sender structure of the MAPI Message. |
|
1122 | + * |
|
1123 | + * @param mapimessage $mapiMessage MAPI Message resource from which we need to get the sender |
|
1124 | + * |
|
1125 | + * @return array with properties |
|
1126 | + */ |
|
1127 | + public function getSenderAddress($mapiMessage) { |
|
1128 | + if (!method_exists($GLOBALS['operations'], 'getSenderAddress')) { |
|
1129 | + $messageProps = mapi_getprops($mapiMessage, [PR_SENT_REPRESENTING_ENTRYID, PR_SENDER_ENTRYID]); |
|
1130 | + $senderEntryID = isset($messageProps[PR_SENT_REPRESENTING_ENTRYID]) ? $messageProps[PR_SENT_REPRESENTING_ENTRYID] : $messageProps[PR_SENDER_ENTRYID]; |
|
1131 | + |
|
1132 | + try { |
|
1133 | + $senderUser = mapi_ab_openentry($GLOBALS["mapisession"]->getAddressbook(), $senderEntryID); |
|
1134 | + if ($senderUser) { |
|
1135 | + $userprops = mapi_getprops($senderUser, [PR_ADDRTYPE, PR_DISPLAY_NAME, PR_EMAIL_ADDRESS, PR_SMTP_ADDRESS, PR_OBJECT_TYPE, PR_RECIPIENT_TYPE, PR_DISPLAY_TYPE, PR_DISPLAY_TYPE_EX, PR_ENTRYID]); |
|
1136 | + |
|
1137 | + $senderStructure = []; |
|
1138 | + $senderStructure["props"]['entryid'] = bin2hex($userprops[PR_ENTRYID]); |
|
1139 | + $senderStructure["props"]['display_name'] = isset($userprops[PR_DISPLAY_NAME]) ? $userprops[PR_DISPLAY_NAME] : ''; |
|
1140 | + $senderStructure["props"]['email_address'] = isset($userprops[PR_EMAIL_ADDRESS]) ? $userprops[PR_EMAIL_ADDRESS] : ''; |
|
1141 | + $senderStructure["props"]['smtp_address'] = isset($userprops[PR_SMTP_ADDRESS]) ? $userprops[PR_SMTP_ADDRESS] : ''; |
|
1142 | + $senderStructure["props"]['address_type'] = isset($userprops[PR_ADDRTYPE]) ? $userprops[PR_ADDRTYPE] : ''; |
|
1143 | + $senderStructure["props"]['object_type'] = $userprops[PR_OBJECT_TYPE]; |
|
1144 | + $senderStructure["props"]['recipient_type'] = MAPI_TO; |
|
1145 | + $senderStructure["props"]['display_type'] = isset($userprops[PR_DISPLAY_TYPE]) ? $userprops[PR_DISPLAY_TYPE] : MAPI_MAILUSER; |
|
1146 | + $senderStructure["props"]['display_type_ex'] = isset($userprops[PR_DISPLAY_TYPE_EX]) ? $userprops[PR_DISPLAY_TYPE_EX] : MAPI_MAILUSER; |
|
1147 | + } |
|
1148 | + } |
|
1149 | + catch (MAPIException $e) { |
|
1150 | + Log::write(LOGLEVEL_ERROR, sprintf("%s %s", $e, $userProps[PR_SENT_REPRESENTING_NAME])); |
|
1151 | + } |
|
1152 | + |
|
1153 | + return $senderStructure; |
|
1154 | + } |
|
1155 | + |
|
1156 | + return $GLOBALS["operations"]->getSenderAddress($mapiMessage); |
|
1157 | + } |
|
1158 | 1158 | } |
@@ -454,7 +454,7 @@ |
||
454 | 454 | } |
455 | 455 | |
456 | 456 | if (!encryptionStoreExpirationSupport()) { |
457 | - withPHPSession(function () use ($encryptionStore) { |
|
457 | + withPHPSession(function() use ($encryptionStore) { |
|
458 | 458 | $encryptionStore->add('smime', ''); |
459 | 459 | }); |
460 | 460 | } |
@@ -64,8 +64,7 @@ discard block |
||
64 | 64 | |
65 | 65 | if (version_compare(phpversion(), '5.4', '<')) { |
66 | 66 | $this->cipher = OPENSSL_CIPHER_3DES; |
67 | - } |
|
68 | - else { |
|
67 | + } else { |
|
69 | 68 | $this->cipher = PLUGIN_SMIME_CIPHER; |
70 | 69 | } |
71 | 70 | } |
@@ -188,8 +187,7 @@ discard block |
||
188 | 187 | |
189 | 188 | if (array_filter($missingCerts, "missingMyself") === []) { |
190 | 189 | $errorMsg = _('Missing public certificates for the following recipients: ') . implode(', ', $missingCerts) . _('. Please contact your system administrator for details'); |
191 | - } |
|
192 | - else { |
|
190 | + } else { |
|
193 | 191 | $errorMsg = _("Your public certificate is not installed. Without this certificate, you will not be able to read encrypted messages you have sent to others."); |
194 | 192 | } |
195 | 193 | |
@@ -225,8 +223,7 @@ discard block |
||
225 | 223 | // Put empty string into file? dafuq? |
226 | 224 | file_put_contents($tmpUserCert, $userCert); |
227 | 225 | } |
228 | - } |
|
229 | - catch (MAPIException $e) { |
|
226 | + } catch (MAPIException $e) { |
|
230 | 227 | $msg = "[smime] Unable to open PR_SENT_REPRESENTING_ENTRYID. Maybe %s was does not exists or deleted from server."; |
231 | 228 | Log::write(LOGLEVEL_ERROR, sprintf($msg, $userProps[PR_SENT_REPRESENTING_NAME])); |
232 | 229 | error_log("[smime] Unable to open PR_SENT_REPRESENTING_NAME: " . print_r($userProps[PR_SENT_REPRESENTING_NAME], true)); |
@@ -242,8 +239,7 @@ discard block |
||
242 | 239 | $senderAddressArray = $senderAddressArray['props']; |
243 | 240 | if ($senderAddressArray['address_type'] === 'SMTP') { |
244 | 241 | $emailAddr = $senderAddressArray['email_address']; |
245 | - } |
|
246 | - else { |
|
242 | + } else { |
|
247 | 243 | $emailAddr = $senderAddressArray['smtp_address']; |
248 | 244 | } |
249 | 245 | |
@@ -253,8 +249,7 @@ discard block |
||
253 | 249 | if (!$emailAddr) { |
254 | 250 | if (!empty($userProps[PR_SENT_REPRESENTING_NAME])) { |
255 | 251 | $emailAddr = $userProps[PR_SENT_REPRESENTING_NAME]; |
256 | - } |
|
257 | - else { |
|
252 | + } else { |
|
258 | 253 | $searchKeys = mapi_getprops($message, [PR_SEARCH_KEY, PR_SENT_REPRESENTING_SEARCH_KEY]); |
259 | 254 | $searchKey = $searchKeys[PR_SEARCH_KEY] ?? $searchKeys[PR_SENT_REPRESENTING_SEARCH_KEY]; |
260 | 255 | if ($searchKey) { |
@@ -307,16 +302,14 @@ discard block |
||
307 | 302 | $importMessageCert !== false) { |
308 | 303 | // Redundant |
309 | 304 | $importMessageCert = true; |
310 | - } |
|
311 | - else { |
|
305 | + } else { |
|
312 | 306 | $importMessageCert = false; |
313 | 307 | verifyOCSP($userCert, $caCerts, $this->message); |
314 | 308 | break; |
315 | 309 | } |
316 | 310 | } |
317 | 311 | } |
318 | - } |
|
319 | - else { |
|
312 | + } else { |
|
320 | 313 | // Works. Just leave it. |
321 | 314 | $signed_ok = openssl_pkcs7_verify($tmpfname, PKCS7_NOSIGS, $outcert, explode(';', PLUGIN_SMIME_CACERTS)); |
322 | 315 | $openssl_error_code = $this->extract_openssl_error(); |
@@ -333,8 +326,7 @@ discard block |
||
333 | 326 | } |
334 | 327 | // We don't have a certificate from the MAPI UserStore or LDAP, so we will set $userCert to $importCert |
335 | 328 | // so that we can verify the message according to the be imported certificate. |
336 | - } |
|
337 | - else { // No pubkey |
|
329 | + } else { // No pubkey |
|
338 | 330 | $importMessageCert = false; |
339 | 331 | Log::write(LOGLEVEL_INFO, sprintf("[smime] Unable to verify message without public key, openssl error: '%s'", $this->openssl_error)); |
340 | 332 | $this->message['success'] = SMIME_STATUS_FAIL; |
@@ -404,8 +396,7 @@ discard block |
||
404 | 396 | break; |
405 | 397 | } |
406 | 398 | } |
407 | - } |
|
408 | - else { |
|
399 | + } else { |
|
409 | 400 | $decryptStatus = openssl_pkcs7_decrypt($tmpFile, $tmpDecrypted, $certs['cert'], [$certs['pkey'], $pass]); |
410 | 401 | } |
411 | 402 | |
@@ -437,19 +428,16 @@ discard block |
||
437 | 428 | if (strpos($content, 'multipart/signed') !== false || strpos($content, 'signed-data') !== false) { |
438 | 429 | $this->message['type'] = 'encryptsigned'; |
439 | 430 | $this->verifyMessage($data['message'], $content); |
440 | - } |
|
441 | - elseif ($decryptStatus) { |
|
431 | + } elseif ($decryptStatus) { |
|
442 | 432 | $this->message['info'] = SMIME_DECRYPT_SUCCESS; |
443 | 433 | $this->message['success'] = SMIME_STATUS_SUCCESS; |
444 | - } |
|
445 | - elseif ($this->extract_openssl_error() === OPENSSL_RECIPIENT_CERTIFICATE_MISMATCH) { |
|
434 | + } elseif ($this->extract_openssl_error() === OPENSSL_RECIPIENT_CERTIFICATE_MISMATCH) { |
|
446 | 435 | error_log("[smime] Error when decrypting email, openssl error: " . print_r($this->openssl_error, true)); |
447 | 436 | Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Error when decrypting email, openssl error: '%s'", $this->openssl_error)); |
448 | 437 | $this->message['info'] = SMIME_DECRYPT_CERT_MISMATCH; |
449 | 438 | $this->message['success'] = SMIME_STATUS_FAIL; |
450 | 439 | } |
451 | - } |
|
452 | - else { |
|
440 | + } else { |
|
453 | 441 | $this->message['info'] = SMIME_UNLOCK_CERT; |
454 | 442 | } |
455 | 443 | |
@@ -482,18 +470,15 @@ discard block |
||
482 | 470 | $this->message['info'] = SMIME_ERROR; |
483 | 471 | $this->message['success'] = SMIME_STATUS_FAIL; |
484 | 472 | // Verification was successful |
485 | - } |
|
486 | - elseif ($openssl_return) { |
|
473 | + } elseif ($openssl_return) { |
|
487 | 474 | $this->message['info'] = SMIME_SUCCESS; |
488 | 475 | $this->message['success'] = SMIME_STATUS_SUCCESS; |
489 | 476 | // Verification was not successful, display extra information. |
490 | - } |
|
491 | - else { |
|
477 | + } else { |
|
492 | 478 | $this->message['success'] = SMIME_STATUS_FAIL; |
493 | 479 | if ($openssl_errors === OPENSSL_CA_VERIFY_FAIL) { |
494 | 480 | $this->message['info'] = SMIME_CA; |
495 | - } |
|
496 | - else { // Catch general errors |
|
481 | + } else { // Catch general errors |
|
497 | 482 | $this->message['info'] = SMIME_ERROR; |
498 | 483 | } |
499 | 484 | } |
@@ -542,8 +527,7 @@ discard block |
||
542 | 527 | // TODO: update to serialNumber check |
543 | 528 | if ($certMessage && $certMessage[0][PR_MESSAGE_DELIVERY_TIME] == $publickeyData['validTo_time_t']) { |
544 | 529 | $message = _('Certificate is already stored on the server'); |
545 | - } |
|
546 | - else { |
|
530 | + } else { |
|
547 | 531 | $saveCert = true; |
548 | 532 | $root = mapi_msgstore_openentry($this->getStore(), null); |
549 | 533 | // Remove old certificate |
@@ -619,8 +603,7 @@ discard block |
||
619 | 603 | if (isset($props[PR_EC_IMAP_EMAIL]) || propIsError(PR_EC_IMAP_EMAIL, $props) == MAPI_E_NOT_ENOUGH_MEMORY) { |
620 | 604 | // Stream the message to properly get the PR_EC_IMAP_EMAIL property |
621 | 605 | $emlMessageStream = mapi_openproperty($message, PR_EC_IMAP_EMAIL, IID_IStream, 0, 0); |
622 | - } |
|
623 | - else { |
|
606 | + } else { |
|
624 | 607 | // Read the message as RFC822-formatted e-mail stream. |
625 | 608 | $emlMessageStream = mapi_inetmapi_imtoinet($GLOBALS['mapisession']->getSession(), $GLOBALS['mapisession']->getAddressbook(), $message, []); |
626 | 609 | } |
@@ -725,8 +708,7 @@ discard block |
||
725 | 708 | Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Unable to sign message with intermediate certificates, openssl error: '%s'", @openssl_error_string())); |
726 | 709 | } |
727 | 710 | unlink($tmpFile); |
728 | - } |
|
729 | - else { |
|
711 | + } else { |
|
730 | 712 | $ok = openssl_pkcs7_sign($infile, $outfile, $certs['cert'], [$certs['pkey'], ''], [], PKCS7_DETACHED); |
731 | 713 | if (!$ok) { |
732 | 714 | Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Unable to sign message, openssl error: '%s'", @openssl_error_string())); |
@@ -830,8 +812,7 @@ discard block |
||
830 | 812 | |
831 | 813 | if (!empty($gabCert)) { |
832 | 814 | array_push($publicCerts, $gabCert); |
833 | - } |
|
834 | - elseif (!empty($storeCert)) { |
|
815 | + } elseif (!empty($storeCert)) { |
|
835 | 816 | array_push($publicCerts, base64_decode($storeCert)); |
836 | 817 | } |
837 | 818 | } |
@@ -963,8 +944,7 @@ discard block |
||
963 | 944 | if ($php72) { |
964 | 945 | openssl_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile); |
965 | 946 | openssl_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile, [], $certfile, $outfile, $p7bfile); |
966 | - } |
|
967 | - else { |
|
947 | + } else { |
|
968 | 948 | kopano_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile); |
969 | 949 | kopano_pkcs7_verify($emlfile, PKCS7_NOVERIFY, $certfile, [], $certfile, $outfile, $p7bfile); |
970 | 950 | } |
@@ -973,8 +953,7 @@ discard block |
||
973 | 953 | $p7b = file_get_contents($p7bfile); |
974 | 954 | if ($php72) { |
975 | 955 | openssl_pkcs7_read($p7b, $cas); |
976 | - } |
|
977 | - else { |
|
956 | + } else { |
|
978 | 957 | // FIXME: Without the error_log, kopano_pkcs7_verify does not work (wtf). |
979 | 958 | error_log($p7b); |
980 | 959 | kopano_pkcs7_read($p7b, $cas); |
@@ -1045,8 +1024,7 @@ discard block |
||
1045 | 1024 | |
1046 | 1025 | if ($hash === 'sha1') { |
1047 | 1026 | $fingerprint = sha1($body); |
1048 | - } |
|
1049 | - else { |
|
1027 | + } else { |
|
1050 | 1028 | $fingerprint = md5($body); |
1051 | 1029 | } |
1052 | 1030 | |
@@ -1071,8 +1049,7 @@ discard block |
||
1071 | 1049 | try { |
1072 | 1050 | $user = mapi_ab_resolvename($addrbook, $userArr, EMS_AB_ADDRESS_LOOKUP); |
1073 | 1051 | $user = mapi_ab_openentry($addrbook, $user[0][PR_ENTRYID]); |
1074 | - } |
|
1075 | - catch (MAPIException $e) { |
|
1052 | + } catch (MAPIException $e) { |
|
1076 | 1053 | $e->setHandled(); |
1077 | 1054 | } |
1078 | 1055 | |
@@ -1145,8 +1122,7 @@ discard block |
||
1145 | 1122 | $senderStructure["props"]['display_type'] = isset($userprops[PR_DISPLAY_TYPE]) ? $userprops[PR_DISPLAY_TYPE] : MAPI_MAILUSER; |
1146 | 1123 | $senderStructure["props"]['display_type_ex'] = isset($userprops[PR_DISPLAY_TYPE_EX]) ? $userprops[PR_DISPLAY_TYPE_EX] : MAPI_MAILUSER; |
1147 | 1124 | } |
1148 | - } |
|
1149 | - catch (MAPIException $e) { |
|
1125 | + } catch (MAPIException $e) { |
|
1150 | 1126 | Log::write(LOGLEVEL_ERROR, sprintf("%s %s", $e, $userProps[PR_SENT_REPRESENTING_NAME])); |
1151 | 1127 | } |
1152 | 1128 |
@@ -17,405 +17,405 @@ |
||
17 | 17 | define('OCSP_CERT_STATUS_UNKOWN', 3); |
18 | 18 | |
19 | 19 | class OCSPException extends Exception { |
20 | - private $status; |
|
20 | + private $status; |
|
21 | 21 | |
22 | - public function setCertStatus($status) { |
|
23 | - $this->status = $status; |
|
24 | - } |
|
22 | + public function setCertStatus($status) { |
|
23 | + $this->status = $status; |
|
24 | + } |
|
25 | 25 | |
26 | - public function getCertStatus() { |
|
27 | - if (!$this->status) { |
|
28 | - return; |
|
29 | - } |
|
26 | + public function getCertStatus() { |
|
27 | + if (!$this->status) { |
|
28 | + return; |
|
29 | + } |
|
30 | 30 | |
31 | - if ($this->code !== OCSP_CERT_STATUS) { |
|
32 | - return; |
|
33 | - } |
|
31 | + if ($this->code !== OCSP_CERT_STATUS) { |
|
32 | + return; |
|
33 | + } |
|
34 | 34 | |
35 | - switch ($this->status) { |
|
36 | - case 'good': |
|
37 | - return OCSP_CERT_STATUS_GOOD; |
|
35 | + switch ($this->status) { |
|
36 | + case 'good': |
|
37 | + return OCSP_CERT_STATUS_GOOD; |
|
38 | 38 | |
39 | - case 'revoked': |
|
40 | - return OCSP_CERT_STATUS_REVOKED; |
|
39 | + case 'revoked': |
|
40 | + return OCSP_CERT_STATUS_REVOKED; |
|
41 | 41 | |
42 | - default: |
|
43 | - return OCSP_CERT_STATUS_UNKOWN; |
|
44 | - } |
|
45 | - } |
|
42 | + default: |
|
43 | + return OCSP_CERT_STATUS_UNKOWN; |
|
44 | + } |
|
45 | + } |
|
46 | 46 | } |
47 | 47 | |
48 | 48 | function tempErrorHandler($errno, $errstr, $errfile, $errline) { |
49 | - return true; |
|
49 | + return true; |
|
50 | 50 | } |
51 | 51 | |
52 | 52 | class Certificate { |
53 | - private $cert; |
|
54 | - private $data; |
|
55 | - |
|
56 | - public function __construct($cert, $issuer = '') { |
|
57 | - // XXX: error handling |
|
58 | - $this->data = openssl_x509_parse($cert); |
|
59 | - $this->cert = $cert; |
|
60 | - $this->issuer = $issuer; |
|
61 | - } |
|
62 | - |
|
63 | - /** |
|
64 | - * The name of the certificate in DN notation. |
|
65 | - * |
|
66 | - * @return {string} the name of the certificate |
|
67 | - */ |
|
68 | - public function getName() { |
|
69 | - return $this->data['name']; |
|
70 | - } |
|
71 | - |
|
72 | - /** |
|
73 | - * Issuer of the certificate. |
|
74 | - * |
|
75 | - * @return string The issuer of the certificate in DN notation |
|
76 | - */ |
|
77 | - public function getIssuerName() { |
|
78 | - $issuer = ''; |
|
79 | - foreach ($this->data['issuer'] as $key => $value) { |
|
80 | - $issuer .= "/{$key}={$value}"; |
|
81 | - } |
|
82 | - |
|
83 | - return $issuer; |
|
84 | - } |
|
85 | - |
|
86 | - /** |
|
87 | - * Converts X509 DER format string to PEM format. |
|
88 | - * |
|
89 | - * @param {string} X509 Certificate in DER format |
|
90 | - * @param mixed $cert |
|
91 | - * |
|
92 | - * @return {string} X509 Certificate in PEM format |
|
93 | - */ |
|
94 | - protected function der2pem($cert) { |
|
95 | - return "-----BEGIN CERTIFICATE-----\n" . chunk_split(base64_encode($cert), 64, "\n") . "-----END CERTIFICATE-----\n"; |
|
96 | - } |
|
97 | - |
|
98 | - /** |
|
99 | - * Converts X509 PEM format string to DER format. |
|
100 | - * |
|
101 | - * @param {string} X509 Certificate in PEM format |
|
102 | - * @param mixed $pem_data |
|
103 | - * |
|
104 | - * @return {string} X509 Certificate in DER format |
|
105 | - */ |
|
106 | - protected function pem2der($pem_data) { |
|
107 | - $begin = "CERTIFICATE-----"; |
|
108 | - $end = "-----END"; |
|
109 | - $pem_data = substr($pem_data, strpos($pem_data, $begin) + strlen($begin)); |
|
110 | - $pem_data = substr($pem_data, 0, strpos($pem_data, $end)); |
|
111 | - |
|
112 | - return base64_decode($pem_data); |
|
113 | - } |
|
114 | - |
|
115 | - /** |
|
116 | - * The subject/emailAddress or subjectAltName. |
|
117 | - * |
|
118 | - * @return string The email address belonging to the certificate |
|
119 | - */ |
|
120 | - public function emailAddress() { |
|
121 | - $certEmailAddress = ""; |
|
122 | - // If subject/emailAddress is not set, try subjectAltName |
|
123 | - if (isset($this->data['subject']['emailAddress'])) { |
|
124 | - $certEmailAddress = $this->data['subject']['emailAddress']; |
|
125 | - } |
|
126 | - elseif (isset($this->data['extensions'], $this->data['extensions']['subjectAltName']) |
|
127 | - ) { |
|
128 | - // Example [subjectAltName] => email:[email protected] |
|
129 | - $tmp = explode('email:', $this->data['extensions']['subjectAltName']); |
|
130 | - // Only get the first match |
|
131 | - if (isset($tmp[1]) && !empty($tmp[1])) { |
|
132 | - $certEmailAddress = $tmp[1]; |
|
133 | - } |
|
134 | - } |
|
135 | - |
|
136 | - return $certEmailAddress; |
|
137 | - } |
|
138 | - |
|
139 | - /** |
|
140 | - * Return the certificate in DER format. |
|
141 | - * |
|
142 | - * @return string certificate in DER format |
|
143 | - */ |
|
144 | - public function der() { |
|
145 | - return $this->pem2der($this->cert); |
|
146 | - } |
|
147 | - |
|
148 | - /** |
|
149 | - * Return the certificate in PEM format. |
|
150 | - * |
|
151 | - * @return string certificate in PEM format |
|
152 | - */ |
|
153 | - public function pem() { |
|
154 | - return $this->cert; |
|
155 | - } |
|
156 | - |
|
157 | - /** |
|
158 | - * The beginning of the valid period of the certificate. |
|
159 | - * |
|
160 | - * @return int timestamp from which the certificate is valid |
|
161 | - */ |
|
162 | - public function validFrom() { |
|
163 | - return $this->data['validFrom_time_t']; |
|
164 | - } |
|
165 | - |
|
166 | - /** |
|
167 | - * The end of the valid period of the certificate. |
|
168 | - * |
|
169 | - * @return int timestamp from which the certificate is invalid |
|
170 | - */ |
|
171 | - public function validTo() { |
|
172 | - return $this->data['validTo_time_t']; |
|
173 | - } |
|
174 | - |
|
175 | - /** |
|
176 | - * Determines if the certificate is valid. |
|
177 | - * |
|
178 | - * @return bool the valid status |
|
179 | - */ |
|
180 | - public function valid() { |
|
181 | - $time = time(); |
|
182 | - |
|
183 | - return $time > $this->validFrom() && $time < $this->validTo(); |
|
184 | - } |
|
185 | - |
|
186 | - /** |
|
187 | - * The caURL of the certififcate. |
|
188 | - * |
|
189 | - * @return string return an empty string or the CA URL |
|
190 | - */ |
|
191 | - public function caURL() { |
|
192 | - $authorityInfoAccess = $this->authorityInfoAccess(); |
|
193 | - if (preg_match("/CA Issuers - URI:(.*)/", $authorityInfoAccess, $matches)) { |
|
194 | - return array_pop($matches); |
|
195 | - } |
|
196 | - |
|
197 | - return ''; |
|
198 | - } |
|
199 | - |
|
200 | - /** |
|
201 | - * The OCSP URL of the certificate. |
|
202 | - * |
|
203 | - * @return string return an empty string or the OCSP URL |
|
204 | - */ |
|
205 | - public function ocspURL() { |
|
206 | - $authorityInfoAccess = $this->authorityInfoAccess(); |
|
207 | - if (preg_match("/OCSP - URI:(.*)/", $authorityInfoAccess, $matches)) { |
|
208 | - return array_pop($matches); |
|
209 | - } |
|
210 | - |
|
211 | - return ''; |
|
212 | - } |
|
213 | - |
|
214 | - /** |
|
215 | - * Internal helper to obtain the authorityInfoAccess information. |
|
216 | - * |
|
217 | - * @return string authorityInfoAccess if set |
|
218 | - */ |
|
219 | - protected function authorityInfoAccess() { |
|
220 | - if (!isset($this->data['extensions'])) { |
|
221 | - return ''; |
|
222 | - } |
|
223 | - |
|
224 | - if (!isset($this->data['extensions']['authorityInfoAccess'])) { |
|
225 | - return ''; |
|
226 | - } |
|
227 | - |
|
228 | - return $this->data['extensions']['authorityInfoAccess']; |
|
229 | - } |
|
230 | - |
|
231 | - /** |
|
232 | - * The fingerprint (hash) of the certificate body. |
|
233 | - * |
|
234 | - * @param string hash_algorithm either sha1 or md5 |
|
235 | - * @param mixed $hash_algorithm |
|
236 | - * |
|
237 | - * @return string the hash of the certificate's body |
|
238 | - */ |
|
239 | - public function fingerprint($hash_algorithm = "md5") { |
|
240 | - $body = str_replace('-----BEGIN CERTIFICATE-----', '', $this->cert); |
|
241 | - $body = str_replace('-----END CERTIFICATE-----', '', $body); |
|
242 | - $body = base64_decode($body); |
|
243 | - if ($hash_algorithm === 'sha1') { |
|
244 | - $fingerprint = sha1($body); |
|
245 | - } |
|
246 | - else { |
|
247 | - $fingerprint = md5($body); |
|
248 | - } |
|
249 | - // Format 1000AB as 10:00:AB |
|
250 | - return strtoupper(implode(':', str_split($fingerprint, 2))); |
|
251 | - } |
|
252 | - |
|
253 | - /** |
|
254 | - * The issuer of this certificate. |
|
255 | - * |
|
256 | - * @return Certificate the issuer certificate |
|
257 | - */ |
|
258 | - public function issuer() { |
|
259 | - if (!empty($this->issuer)) { |
|
260 | - return $this->issuer; |
|
261 | - } |
|
262 | - $cert = ''; |
|
263 | - $ch = curl_init(); |
|
264 | - curl_setopt($ch, CURLOPT_URL, $this->caURL()); |
|
265 | - curl_setopt($ch, CURLOPT_FAILONERROR, true); |
|
266 | - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
|
267 | - |
|
268 | - // HTTP Proxy settings |
|
269 | - if (defined('PLUGIN_SMIME_PROXY') && PLUGIN_SMIME_PROXY != '') { |
|
270 | - curl_setopt($ch, CURLOPT_PROXY, PLUGIN_SMIME_PROXY); |
|
271 | - } |
|
272 | - if (defined('PLUGIN_SMIME_PROXY_PORT') && PLUGIN_SMIME_PROXY_PORT != '') { |
|
273 | - curl_setopt($ch, CURLOPT_PROXYPORT, PLUGIN_SMIME_PROXY_PORT); |
|
274 | - } |
|
275 | - if (defined('PLUGIN_SMIME_PROXY_USERPWD') && PLUGIN_SMIME_PROXY_USERPWD != '') { |
|
276 | - curl_setopt($ch, CURLOPT_PROXYUSERPWD, PLUGIN_SMIME_PROXY_USERPWD); |
|
277 | - } |
|
278 | - |
|
279 | - $output = curl_exec($ch); |
|
280 | - $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); |
|
281 | - $curl_error = curl_error($ch); |
|
282 | - if (!$curl_error && $http_status === 200) { |
|
283 | - $cert = $this->der2pem($output); |
|
284 | - } |
|
285 | - else { |
|
286 | - Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Error when downloading internmediate certificate '%s', http status: '%s'", $curl_error, $http_status)); |
|
287 | - } |
|
288 | - curl_close($ch); |
|
289 | - |
|
290 | - return new Certificate($cert); |
|
291 | - } |
|
292 | - |
|
293 | - /** |
|
294 | - * Set the issuer of a certificate. |
|
295 | - * |
|
296 | - * @param string the issuer certificate |
|
297 | - * @param mixed $issuer |
|
298 | - */ |
|
299 | - public function setIssuer($issuer) { |
|
300 | - if (is_object($issuer)) { |
|
301 | - $this->issuer = $issuer; |
|
302 | - } |
|
303 | - } |
|
304 | - |
|
305 | - /** |
|
306 | - * Verify the certificate status using OCSP. |
|
307 | - * |
|
308 | - * @return bool verification succeeded or failed |
|
309 | - */ |
|
310 | - public function verify() { |
|
311 | - $message = []; |
|
312 | - |
|
313 | - if (!$this->valid()) { |
|
314 | - throw new OCSPException('Certificate expired', OCSP_CERT_EXPIRED); |
|
315 | - } |
|
316 | - |
|
317 | - $issuer = $this->issuer(); |
|
318 | - if (!is_object($issuer)) { |
|
319 | - throw new OCSPException('No issuer', OCSP_NO_ISSUER); |
|
320 | - } |
|
321 | - |
|
322 | - /* Set custom error handler since the nemid ocsp library uses |
|
53 | + private $cert; |
|
54 | + private $data; |
|
55 | + |
|
56 | + public function __construct($cert, $issuer = '') { |
|
57 | + // XXX: error handling |
|
58 | + $this->data = openssl_x509_parse($cert); |
|
59 | + $this->cert = $cert; |
|
60 | + $this->issuer = $issuer; |
|
61 | + } |
|
62 | + |
|
63 | + /** |
|
64 | + * The name of the certificate in DN notation. |
|
65 | + * |
|
66 | + * @return {string} the name of the certificate |
|
67 | + */ |
|
68 | + public function getName() { |
|
69 | + return $this->data['name']; |
|
70 | + } |
|
71 | + |
|
72 | + /** |
|
73 | + * Issuer of the certificate. |
|
74 | + * |
|
75 | + * @return string The issuer of the certificate in DN notation |
|
76 | + */ |
|
77 | + public function getIssuerName() { |
|
78 | + $issuer = ''; |
|
79 | + foreach ($this->data['issuer'] as $key => $value) { |
|
80 | + $issuer .= "/{$key}={$value}"; |
|
81 | + } |
|
82 | + |
|
83 | + return $issuer; |
|
84 | + } |
|
85 | + |
|
86 | + /** |
|
87 | + * Converts X509 DER format string to PEM format. |
|
88 | + * |
|
89 | + * @param {string} X509 Certificate in DER format |
|
90 | + * @param mixed $cert |
|
91 | + * |
|
92 | + * @return {string} X509 Certificate in PEM format |
|
93 | + */ |
|
94 | + protected function der2pem($cert) { |
|
95 | + return "-----BEGIN CERTIFICATE-----\n" . chunk_split(base64_encode($cert), 64, "\n") . "-----END CERTIFICATE-----\n"; |
|
96 | + } |
|
97 | + |
|
98 | + /** |
|
99 | + * Converts X509 PEM format string to DER format. |
|
100 | + * |
|
101 | + * @param {string} X509 Certificate in PEM format |
|
102 | + * @param mixed $pem_data |
|
103 | + * |
|
104 | + * @return {string} X509 Certificate in DER format |
|
105 | + */ |
|
106 | + protected function pem2der($pem_data) { |
|
107 | + $begin = "CERTIFICATE-----"; |
|
108 | + $end = "-----END"; |
|
109 | + $pem_data = substr($pem_data, strpos($pem_data, $begin) + strlen($begin)); |
|
110 | + $pem_data = substr($pem_data, 0, strpos($pem_data, $end)); |
|
111 | + |
|
112 | + return base64_decode($pem_data); |
|
113 | + } |
|
114 | + |
|
115 | + /** |
|
116 | + * The subject/emailAddress or subjectAltName. |
|
117 | + * |
|
118 | + * @return string The email address belonging to the certificate |
|
119 | + */ |
|
120 | + public function emailAddress() { |
|
121 | + $certEmailAddress = ""; |
|
122 | + // If subject/emailAddress is not set, try subjectAltName |
|
123 | + if (isset($this->data['subject']['emailAddress'])) { |
|
124 | + $certEmailAddress = $this->data['subject']['emailAddress']; |
|
125 | + } |
|
126 | + elseif (isset($this->data['extensions'], $this->data['extensions']['subjectAltName']) |
|
127 | + ) { |
|
128 | + // Example [subjectAltName] => email:[email protected] |
|
129 | + $tmp = explode('email:', $this->data['extensions']['subjectAltName']); |
|
130 | + // Only get the first match |
|
131 | + if (isset($tmp[1]) && !empty($tmp[1])) { |
|
132 | + $certEmailAddress = $tmp[1]; |
|
133 | + } |
|
134 | + } |
|
135 | + |
|
136 | + return $certEmailAddress; |
|
137 | + } |
|
138 | + |
|
139 | + /** |
|
140 | + * Return the certificate in DER format. |
|
141 | + * |
|
142 | + * @return string certificate in DER format |
|
143 | + */ |
|
144 | + public function der() { |
|
145 | + return $this->pem2der($this->cert); |
|
146 | + } |
|
147 | + |
|
148 | + /** |
|
149 | + * Return the certificate in PEM format. |
|
150 | + * |
|
151 | + * @return string certificate in PEM format |
|
152 | + */ |
|
153 | + public function pem() { |
|
154 | + return $this->cert; |
|
155 | + } |
|
156 | + |
|
157 | + /** |
|
158 | + * The beginning of the valid period of the certificate. |
|
159 | + * |
|
160 | + * @return int timestamp from which the certificate is valid |
|
161 | + */ |
|
162 | + public function validFrom() { |
|
163 | + return $this->data['validFrom_time_t']; |
|
164 | + } |
|
165 | + |
|
166 | + /** |
|
167 | + * The end of the valid period of the certificate. |
|
168 | + * |
|
169 | + * @return int timestamp from which the certificate is invalid |
|
170 | + */ |
|
171 | + public function validTo() { |
|
172 | + return $this->data['validTo_time_t']; |
|
173 | + } |
|
174 | + |
|
175 | + /** |
|
176 | + * Determines if the certificate is valid. |
|
177 | + * |
|
178 | + * @return bool the valid status |
|
179 | + */ |
|
180 | + public function valid() { |
|
181 | + $time = time(); |
|
182 | + |
|
183 | + return $time > $this->validFrom() && $time < $this->validTo(); |
|
184 | + } |
|
185 | + |
|
186 | + /** |
|
187 | + * The caURL of the certififcate. |
|
188 | + * |
|
189 | + * @return string return an empty string or the CA URL |
|
190 | + */ |
|
191 | + public function caURL() { |
|
192 | + $authorityInfoAccess = $this->authorityInfoAccess(); |
|
193 | + if (preg_match("/CA Issuers - URI:(.*)/", $authorityInfoAccess, $matches)) { |
|
194 | + return array_pop($matches); |
|
195 | + } |
|
196 | + |
|
197 | + return ''; |
|
198 | + } |
|
199 | + |
|
200 | + /** |
|
201 | + * The OCSP URL of the certificate. |
|
202 | + * |
|
203 | + * @return string return an empty string or the OCSP URL |
|
204 | + */ |
|
205 | + public function ocspURL() { |
|
206 | + $authorityInfoAccess = $this->authorityInfoAccess(); |
|
207 | + if (preg_match("/OCSP - URI:(.*)/", $authorityInfoAccess, $matches)) { |
|
208 | + return array_pop($matches); |
|
209 | + } |
|
210 | + |
|
211 | + return ''; |
|
212 | + } |
|
213 | + |
|
214 | + /** |
|
215 | + * Internal helper to obtain the authorityInfoAccess information. |
|
216 | + * |
|
217 | + * @return string authorityInfoAccess if set |
|
218 | + */ |
|
219 | + protected function authorityInfoAccess() { |
|
220 | + if (!isset($this->data['extensions'])) { |
|
221 | + return ''; |
|
222 | + } |
|
223 | + |
|
224 | + if (!isset($this->data['extensions']['authorityInfoAccess'])) { |
|
225 | + return ''; |
|
226 | + } |
|
227 | + |
|
228 | + return $this->data['extensions']['authorityInfoAccess']; |
|
229 | + } |
|
230 | + |
|
231 | + /** |
|
232 | + * The fingerprint (hash) of the certificate body. |
|
233 | + * |
|
234 | + * @param string hash_algorithm either sha1 or md5 |
|
235 | + * @param mixed $hash_algorithm |
|
236 | + * |
|
237 | + * @return string the hash of the certificate's body |
|
238 | + */ |
|
239 | + public function fingerprint($hash_algorithm = "md5") { |
|
240 | + $body = str_replace('-----BEGIN CERTIFICATE-----', '', $this->cert); |
|
241 | + $body = str_replace('-----END CERTIFICATE-----', '', $body); |
|
242 | + $body = base64_decode($body); |
|
243 | + if ($hash_algorithm === 'sha1') { |
|
244 | + $fingerprint = sha1($body); |
|
245 | + } |
|
246 | + else { |
|
247 | + $fingerprint = md5($body); |
|
248 | + } |
|
249 | + // Format 1000AB as 10:00:AB |
|
250 | + return strtoupper(implode(':', str_split($fingerprint, 2))); |
|
251 | + } |
|
252 | + |
|
253 | + /** |
|
254 | + * The issuer of this certificate. |
|
255 | + * |
|
256 | + * @return Certificate the issuer certificate |
|
257 | + */ |
|
258 | + public function issuer() { |
|
259 | + if (!empty($this->issuer)) { |
|
260 | + return $this->issuer; |
|
261 | + } |
|
262 | + $cert = ''; |
|
263 | + $ch = curl_init(); |
|
264 | + curl_setopt($ch, CURLOPT_URL, $this->caURL()); |
|
265 | + curl_setopt($ch, CURLOPT_FAILONERROR, true); |
|
266 | + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
|
267 | + |
|
268 | + // HTTP Proxy settings |
|
269 | + if (defined('PLUGIN_SMIME_PROXY') && PLUGIN_SMIME_PROXY != '') { |
|
270 | + curl_setopt($ch, CURLOPT_PROXY, PLUGIN_SMIME_PROXY); |
|
271 | + } |
|
272 | + if (defined('PLUGIN_SMIME_PROXY_PORT') && PLUGIN_SMIME_PROXY_PORT != '') { |
|
273 | + curl_setopt($ch, CURLOPT_PROXYPORT, PLUGIN_SMIME_PROXY_PORT); |
|
274 | + } |
|
275 | + if (defined('PLUGIN_SMIME_PROXY_USERPWD') && PLUGIN_SMIME_PROXY_USERPWD != '') { |
|
276 | + curl_setopt($ch, CURLOPT_PROXYUSERPWD, PLUGIN_SMIME_PROXY_USERPWD); |
|
277 | + } |
|
278 | + |
|
279 | + $output = curl_exec($ch); |
|
280 | + $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); |
|
281 | + $curl_error = curl_error($ch); |
|
282 | + if (!$curl_error && $http_status === 200) { |
|
283 | + $cert = $this->der2pem($output); |
|
284 | + } |
|
285 | + else { |
|
286 | + Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Error when downloading internmediate certificate '%s', http status: '%s'", $curl_error, $http_status)); |
|
287 | + } |
|
288 | + curl_close($ch); |
|
289 | + |
|
290 | + return new Certificate($cert); |
|
291 | + } |
|
292 | + |
|
293 | + /** |
|
294 | + * Set the issuer of a certificate. |
|
295 | + * |
|
296 | + * @param string the issuer certificate |
|
297 | + * @param mixed $issuer |
|
298 | + */ |
|
299 | + public function setIssuer($issuer) { |
|
300 | + if (is_object($issuer)) { |
|
301 | + $this->issuer = $issuer; |
|
302 | + } |
|
303 | + } |
|
304 | + |
|
305 | + /** |
|
306 | + * Verify the certificate status using OCSP. |
|
307 | + * |
|
308 | + * @return bool verification succeeded or failed |
|
309 | + */ |
|
310 | + public function verify() { |
|
311 | + $message = []; |
|
312 | + |
|
313 | + if (!$this->valid()) { |
|
314 | + throw new OCSPException('Certificate expired', OCSP_CERT_EXPIRED); |
|
315 | + } |
|
316 | + |
|
317 | + $issuer = $this->issuer(); |
|
318 | + if (!is_object($issuer)) { |
|
319 | + throw new OCSPException('No issuer', OCSP_NO_ISSUER); |
|
320 | + } |
|
321 | + |
|
322 | + /* Set custom error handler since the nemid ocsp library uses |
|
323 | 323 | * trigger_error() to throw errors when it cannot parse certain |
324 | 324 | * x509 fields which are not required for the OCSP Request. |
325 | 325 | * Also when receiving the OCSP request, the OCSP library |
326 | 326 | * triggers errors when the request does not adhere to the |
327 | 327 | * standard. |
328 | 328 | */ |
329 | - set_error_handler("tempErrorHandler"); |
|
330 | - |
|
331 | - $x509 = new \WAYF\X509(); |
|
332 | - $issuer = $x509->certificate($issuer->der()); |
|
333 | - $certificate = $x509->certificate($this->der()); |
|
334 | - |
|
335 | - $ocspclient = new \WAYF\OCSP(); |
|
336 | - $certID = $ocspclient->certOcspID( |
|
337 | - [ |
|
338 | - 'issuerName' => $issuer['tbsCertificate']['subject_der'], |
|
339 | - // remember to skip the first byte it is the number of |
|
340 | - // unused bits and it is always 0 for keys and certificates |
|
341 | - 'issuerKey' => substr($issuer['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], 1), |
|
342 | - 'serialNumber_der' => $certificate['tbsCertificate']['serialNumber_der'], |
|
343 | - ], |
|
344 | - 'sha1' |
|
345 | - ); |
|
346 | - |
|
347 | - $ocspreq = $ocspclient->request([$certID]); |
|
348 | - |
|
349 | - $stream_options = [ |
|
350 | - 'http' => [ |
|
351 | - 'ignore_errors' => false, |
|
352 | - 'method' => 'POST', |
|
353 | - 'header' => 'Content-type: application/ocsp-request' . "\r\n", |
|
354 | - 'content' => $ocspreq, |
|
355 | - 'timeout' => 1, |
|
356 | - ], |
|
357 | - ]; |
|
358 | - |
|
359 | - // Do the OCSP request |
|
360 | - $context = stream_context_create($stream_options); |
|
361 | - $derresponse = file_get_contents($this->ocspURL(), null, $context); |
|
362 | - // OCSP service not available, import certificate, but show a warning. |
|
363 | - if ($derresponse === false) { |
|
364 | - throw new OCSPException('No response', OCSP_NO_RESPONSE); |
|
365 | - } |
|
366 | - $ocspresponse = $ocspclient->response($derresponse); |
|
367 | - |
|
368 | - // Restore the previous error handler |
|
369 | - restore_error_handler(); |
|
370 | - |
|
371 | - // responseStatuses: successful, malformedRequest, |
|
372 | - // internalError, tryLater, sigRequired, unauthorized. |
|
373 | - if (isset($ocspresponse['responseStatus']) && |
|
374 | - $ocspresponse['responseStatus'] !== 'successful') { |
|
375 | - throw new OCSPException('Response status' . $ocspresponse['responseStatus'], OCSP_RESPONSE_STATUS); |
|
376 | - } |
|
377 | - |
|
378 | - $resp = $ocspresponse['responseBytes']['BasicOCSPResponse']['tbsResponseData']['responses'][0]; |
|
379 | - /* |
|
329 | + set_error_handler("tempErrorHandler"); |
|
330 | + |
|
331 | + $x509 = new \WAYF\X509(); |
|
332 | + $issuer = $x509->certificate($issuer->der()); |
|
333 | + $certificate = $x509->certificate($this->der()); |
|
334 | + |
|
335 | + $ocspclient = new \WAYF\OCSP(); |
|
336 | + $certID = $ocspclient->certOcspID( |
|
337 | + [ |
|
338 | + 'issuerName' => $issuer['tbsCertificate']['subject_der'], |
|
339 | + // remember to skip the first byte it is the number of |
|
340 | + // unused bits and it is always 0 for keys and certificates |
|
341 | + 'issuerKey' => substr($issuer['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], 1), |
|
342 | + 'serialNumber_der' => $certificate['tbsCertificate']['serialNumber_der'], |
|
343 | + ], |
|
344 | + 'sha1' |
|
345 | + ); |
|
346 | + |
|
347 | + $ocspreq = $ocspclient->request([$certID]); |
|
348 | + |
|
349 | + $stream_options = [ |
|
350 | + 'http' => [ |
|
351 | + 'ignore_errors' => false, |
|
352 | + 'method' => 'POST', |
|
353 | + 'header' => 'Content-type: application/ocsp-request' . "\r\n", |
|
354 | + 'content' => $ocspreq, |
|
355 | + 'timeout' => 1, |
|
356 | + ], |
|
357 | + ]; |
|
358 | + |
|
359 | + // Do the OCSP request |
|
360 | + $context = stream_context_create($stream_options); |
|
361 | + $derresponse = file_get_contents($this->ocspURL(), null, $context); |
|
362 | + // OCSP service not available, import certificate, but show a warning. |
|
363 | + if ($derresponse === false) { |
|
364 | + throw new OCSPException('No response', OCSP_NO_RESPONSE); |
|
365 | + } |
|
366 | + $ocspresponse = $ocspclient->response($derresponse); |
|
367 | + |
|
368 | + // Restore the previous error handler |
|
369 | + restore_error_handler(); |
|
370 | + |
|
371 | + // responseStatuses: successful, malformedRequest, |
|
372 | + // internalError, tryLater, sigRequired, unauthorized. |
|
373 | + if (isset($ocspresponse['responseStatus']) && |
|
374 | + $ocspresponse['responseStatus'] !== 'successful') { |
|
375 | + throw new OCSPException('Response status' . $ocspresponse['responseStatus'], OCSP_RESPONSE_STATUS); |
|
376 | + } |
|
377 | + |
|
378 | + $resp = $ocspresponse['responseBytes']['BasicOCSPResponse']['tbsResponseData']['responses'][0]; |
|
379 | + /* |
|
380 | 380 | * OCSP response status, possible values are: good, revoked, |
381 | 381 | * unknown according to the RFC |
382 | 382 | * https://www.ietf.org/rfc/rfc2560.txt |
383 | 383 | */ |
384 | - if ($resp['certStatus'] !== 'good') { |
|
385 | - // Certificate status is not good, revoked or unknown |
|
386 | - $exception = new OCSPException('Certificate status ' . $resp['certStatus'], OCSP_CERT_STATUS); |
|
387 | - $exception->setCertStatus($resp['certStatus']); |
|
384 | + if ($resp['certStatus'] !== 'good') { |
|
385 | + // Certificate status is not good, revoked or unknown |
|
386 | + $exception = new OCSPException('Certificate status ' . $resp['certStatus'], OCSP_CERT_STATUS); |
|
387 | + $exception->setCertStatus($resp['certStatus']); |
|
388 | 388 | |
389 | - throw $exception; |
|
390 | - } |
|
389 | + throw $exception; |
|
390 | + } |
|
391 | 391 | |
392 | - /* Check if: |
|
392 | + /* Check if: |
|
393 | 393 | * - hash algorithm is equal |
394 | 394 | * - check if issuerNamehash is the same from response |
395 | 395 | * - check if issuerKeyHash is the same from response |
396 | 396 | * - check if serialNumber is the same from response |
397 | 397 | */ |
398 | - if ($resp['certID']['hashAlgorithm'] !== 'sha1' && |
|
399 | - $resp['certID']['issuerNameHash'] !== $certID['issuerNameHash'] && |
|
400 | - $resp['certID']['issuerKeyHash'] !== $certID['issuerKeyHash'] && |
|
401 | - $resp['certID']['serialNumber'] !== $certID['serialNumber']) { |
|
402 | - // OCSP Revocation, mismatch between original and checked certificate |
|
403 | - throw new OCSPException('Certificate mismatch', OCSP_CERT_MISMATCH); |
|
404 | - } |
|
405 | - |
|
406 | - // check if OCSP revocation update is recent |
|
407 | - $now = new DateTime(gmdate('YmdHis\Z')); |
|
408 | - $thisUpdate = new DateTime($resp['thisUpdate']); |
|
409 | - |
|
410 | - // Check if update time is earlier then our own time |
|
411 | - if (!isset($resp['nextupdate']) && $thisUpdate > $now) { |
|
412 | - throw new OCSPException('Update time earlier then our own time', OCSP_RESPONSE_TIME_EARLY); |
|
413 | - } |
|
414 | - |
|
415 | - // Current time should be between thisUpdate and nextUpdate. |
|
416 | - if ($thisUpdate > $now && $now > new DateTime($resp['nextUpdate'])) { |
|
417 | - // OCSP Revocation status not current |
|
418 | - throw new OCSPException('Current time not between thisUpdate and nextUpdate', OCSP_RESPONSE_TIME_INVALID); |
|
419 | - } |
|
420 | - } |
|
398 | + if ($resp['certID']['hashAlgorithm'] !== 'sha1' && |
|
399 | + $resp['certID']['issuerNameHash'] !== $certID['issuerNameHash'] && |
|
400 | + $resp['certID']['issuerKeyHash'] !== $certID['issuerKeyHash'] && |
|
401 | + $resp['certID']['serialNumber'] !== $certID['serialNumber']) { |
|
402 | + // OCSP Revocation, mismatch between original and checked certificate |
|
403 | + throw new OCSPException('Certificate mismatch', OCSP_CERT_MISMATCH); |
|
404 | + } |
|
405 | + |
|
406 | + // check if OCSP revocation update is recent |
|
407 | + $now = new DateTime(gmdate('YmdHis\Z')); |
|
408 | + $thisUpdate = new DateTime($resp['thisUpdate']); |
|
409 | + |
|
410 | + // Check if update time is earlier then our own time |
|
411 | + if (!isset($resp['nextupdate']) && $thisUpdate > $now) { |
|
412 | + throw new OCSPException('Update time earlier then our own time', OCSP_RESPONSE_TIME_EARLY); |
|
413 | + } |
|
414 | + |
|
415 | + // Current time should be between thisUpdate and nextUpdate. |
|
416 | + if ($thisUpdate > $now && $now > new DateTime($resp['nextUpdate'])) { |
|
417 | + // OCSP Revocation status not current |
|
418 | + throw new OCSPException('Current time not between thisUpdate and nextUpdate', OCSP_RESPONSE_TIME_INVALID); |
|
419 | + } |
|
420 | + } |
|
421 | 421 | } |
@@ -122,8 +122,7 @@ discard block |
||
122 | 122 | // If subject/emailAddress is not set, try subjectAltName |
123 | 123 | if (isset($this->data['subject']['emailAddress'])) { |
124 | 124 | $certEmailAddress = $this->data['subject']['emailAddress']; |
125 | - } |
|
126 | - elseif (isset($this->data['extensions'], $this->data['extensions']['subjectAltName']) |
|
125 | + } elseif (isset($this->data['extensions'], $this->data['extensions']['subjectAltName']) |
|
127 | 126 | ) { |
128 | 127 | // Example [subjectAltName] => email:[email protected] |
129 | 128 | $tmp = explode('email:', $this->data['extensions']['subjectAltName']); |
@@ -242,8 +241,7 @@ discard block |
||
242 | 241 | $body = base64_decode($body); |
243 | 242 | if ($hash_algorithm === 'sha1') { |
244 | 243 | $fingerprint = sha1($body); |
245 | - } |
|
246 | - else { |
|
244 | + } else { |
|
247 | 245 | $fingerprint = md5($body); |
248 | 246 | } |
249 | 247 | // Format 1000AB as 10:00:AB |
@@ -281,8 +279,7 @@ discard block |
||
281 | 279 | $curl_error = curl_error($ch); |
282 | 280 | if (!$curl_error && $http_status === 200) { |
283 | 281 | $cert = $this->der2pem($output); |
284 | - } |
|
285 | - else { |
|
282 | + } else { |
|
286 | 283 | Log::Write(LOGLEVEL_ERROR, sprintf("[smime] Error when downloading internmediate certificate '%s', http status: '%s'", $curl_error, $http_status)); |
287 | 284 | } |
288 | 285 | curl_close($ch); |
@@ -13,21 +13,21 @@ discard block |
||
13 | 13 | * @param {Mixed} $certificate certificate data |
14 | 14 | */ |
15 | 15 | function getCertEmail($certificate) { |
16 | - $certEmailAddress = ""; |
|
17 | - // If subject/emailAddress is not set, try subjectAltName |
|
18 | - if (isset($certificate['subject']['emailAddress'])) { |
|
19 | - $certEmailAddress = $certificate['subject']['emailAddress']; |
|
20 | - } |
|
21 | - elseif (isset($certificate['extensions'], $certificate['extensions']['subjectAltName'])) { |
|
22 | - // Example [subjectAltName] => email:[email protected] |
|
23 | - $tmp = explode('email:', $certificate['extensions']['subjectAltName']); |
|
24 | - // Only get the first match |
|
25 | - if (isset($tmp[1]) && !empty($tmp[1])) { |
|
26 | - $certEmailAddress = $tmp[1]; |
|
27 | - } |
|
28 | - } |
|
29 | - |
|
30 | - return $certEmailAddress; |
|
16 | + $certEmailAddress = ""; |
|
17 | + // If subject/emailAddress is not set, try subjectAltName |
|
18 | + if (isset($certificate['subject']['emailAddress'])) { |
|
19 | + $certEmailAddress = $certificate['subject']['emailAddress']; |
|
20 | + } |
|
21 | + elseif (isset($certificate['extensions'], $certificate['extensions']['subjectAltName'])) { |
|
22 | + // Example [subjectAltName] => email:[email protected] |
|
23 | + $tmp = explode('email:', $certificate['extensions']['subjectAltName']); |
|
24 | + // Only get the first match |
|
25 | + if (isset($tmp[1]) && !empty($tmp[1])) { |
|
26 | + $certEmailAddress = $tmp[1]; |
|
27 | + } |
|
28 | + } |
|
29 | + |
|
30 | + return $certEmailAddress; |
|
31 | 31 | } |
32 | 32 | |
33 | 33 | /** |
@@ -40,40 +40,40 @@ discard block |
||
40 | 40 | * @return {MAPIObject} the mapi message containing the private certificate, returns false if no certificate is found |
41 | 41 | */ |
42 | 42 | function getMAPICert($store, $type = 'WebApp.Security.Private', $emailAddress = '') { |
43 | - $root = mapi_msgstore_openentry($store, null); |
|
44 | - $table = mapi_folder_getcontentstable($root, MAPI_ASSOCIATED); |
|
45 | - |
|
46 | - $restrict = [RES_PROPERTY, |
|
47 | - [ |
|
48 | - RELOP => RELOP_EQ, |
|
49 | - ULPROPTAG => PR_MESSAGE_CLASS, |
|
50 | - VALUE => [PR_MESSAGE_CLASS => $type], |
|
51 | - ], |
|
52 | - ]; |
|
53 | - if ($type == 'WebApp.Security.Public' && !empty($emailAddress)) { |
|
54 | - $restrict = [RES_AND, [ |
|
55 | - $restrict, |
|
56 | - [RES_CONTENT, |
|
57 | - [ |
|
58 | - FUZZYLEVEL => FL_FULLSTRING | FL_IGNORECASE, |
|
59 | - ULPROPTAG => PR_SUBJECT, |
|
60 | - VALUE => [PR_SUBJECT => $emailAddress], |
|
61 | - ], |
|
62 | - ], |
|
63 | - ]]; |
|
64 | - } |
|
65 | - |
|
66 | - // PR_MESSAGE_DELIVERY_TIME validTo / PR_CLIENT_SUBMIT_TIME validFrom |
|
67 | - mapi_table_restrict($table, $restrict, TBL_BATCH); |
|
68 | - mapi_table_sort($table, [PR_MESSAGE_DELIVERY_TIME => TABLE_SORT_DESCEND], TBL_BATCH); |
|
69 | - |
|
70 | - $privateCerts = mapi_table_queryallrows($table, [PR_ENTRYID, PR_SUBJECT, PR_MESSAGE_DELIVERY_TIME, PR_CLIENT_SUBMIT_TIME], $restrict); |
|
71 | - |
|
72 | - if ($privateCerts && count($privateCerts) > 0) { |
|
73 | - return $privateCerts; |
|
74 | - } |
|
75 | - |
|
76 | - return false; |
|
43 | + $root = mapi_msgstore_openentry($store, null); |
|
44 | + $table = mapi_folder_getcontentstable($root, MAPI_ASSOCIATED); |
|
45 | + |
|
46 | + $restrict = [RES_PROPERTY, |
|
47 | + [ |
|
48 | + RELOP => RELOP_EQ, |
|
49 | + ULPROPTAG => PR_MESSAGE_CLASS, |
|
50 | + VALUE => [PR_MESSAGE_CLASS => $type], |
|
51 | + ], |
|
52 | + ]; |
|
53 | + if ($type == 'WebApp.Security.Public' && !empty($emailAddress)) { |
|
54 | + $restrict = [RES_AND, [ |
|
55 | + $restrict, |
|
56 | + [RES_CONTENT, |
|
57 | + [ |
|
58 | + FUZZYLEVEL => FL_FULLSTRING | FL_IGNORECASE, |
|
59 | + ULPROPTAG => PR_SUBJECT, |
|
60 | + VALUE => [PR_SUBJECT => $emailAddress], |
|
61 | + ], |
|
62 | + ], |
|
63 | + ]]; |
|
64 | + } |
|
65 | + |
|
66 | + // PR_MESSAGE_DELIVERY_TIME validTo / PR_CLIENT_SUBMIT_TIME validFrom |
|
67 | + mapi_table_restrict($table, $restrict, TBL_BATCH); |
|
68 | + mapi_table_sort($table, [PR_MESSAGE_DELIVERY_TIME => TABLE_SORT_DESCEND], TBL_BATCH); |
|
69 | + |
|
70 | + $privateCerts = mapi_table_queryallrows($table, [PR_ENTRYID, PR_SUBJECT, PR_MESSAGE_DELIVERY_TIME, PR_CLIENT_SUBMIT_TIME], $restrict); |
|
71 | + |
|
72 | + if ($privateCerts && count($privateCerts) > 0) { |
|
73 | + return $privateCerts; |
|
74 | + } |
|
75 | + |
|
76 | + return false; |
|
77 | 77 | } |
78 | 78 | |
79 | 79 | /** |
@@ -88,34 +88,34 @@ discard block |
||
88 | 88 | * @return {Mixed} collection of certificates, empty if none if decrypting fails or stored private certificate isn't found |
89 | 89 | */ |
90 | 90 | function readPrivateCert($store, $passphrase, $singleCert = true) { |
91 | - $unlockedCerts = []; |
|
92 | - // Get all private certificates saved in the store |
|
93 | - $privateCerts = getMAPICert($store); |
|
94 | - if ($singleCert) { |
|
95 | - $privateCerts = [$privateCerts[0]]; |
|
96 | - } |
|
97 | - |
|
98 | - // Get messages from certificates |
|
99 | - foreach ($privateCerts as $privateCert) { |
|
100 | - $privateCertMessage = mapi_msgstore_openentry($store, $privateCert[PR_ENTRYID]); |
|
101 | - if ($privateCertMessage !== false) { |
|
102 | - $pkcs12 = ""; |
|
103 | - $certs = []; |
|
104 | - // Read pkcs12 cert from message |
|
105 | - $stream = mapi_openproperty($privateCertMessage, PR_BODY, IID_IStream, 0, 0); |
|
106 | - $stat = mapi_stream_stat($stream); |
|
107 | - mapi_stream_seek($stream, 0, STREAM_SEEK_SET); |
|
108 | - for ($i = 0; $i < $stat['cb']; $i += 1024) { |
|
109 | - $pkcs12 .= mapi_stream_read($stream, 1024); |
|
110 | - } |
|
111 | - $ok = openssl_pkcs12_read(base64_decode($pkcs12), $certs, $passphrase); |
|
112 | - if ($ok !== false) { |
|
113 | - array_push($unlockedCerts, $certs); |
|
114 | - } |
|
115 | - } |
|
116 | - } |
|
117 | - |
|
118 | - return ($singleCert !== false && count($unlockedCerts) > 0) ? $unlockedCerts[0] : $unlockedCerts; |
|
91 | + $unlockedCerts = []; |
|
92 | + // Get all private certificates saved in the store |
|
93 | + $privateCerts = getMAPICert($store); |
|
94 | + if ($singleCert) { |
|
95 | + $privateCerts = [$privateCerts[0]]; |
|
96 | + } |
|
97 | + |
|
98 | + // Get messages from certificates |
|
99 | + foreach ($privateCerts as $privateCert) { |
|
100 | + $privateCertMessage = mapi_msgstore_openentry($store, $privateCert[PR_ENTRYID]); |
|
101 | + if ($privateCertMessage !== false) { |
|
102 | + $pkcs12 = ""; |
|
103 | + $certs = []; |
|
104 | + // Read pkcs12 cert from message |
|
105 | + $stream = mapi_openproperty($privateCertMessage, PR_BODY, IID_IStream, 0, 0); |
|
106 | + $stat = mapi_stream_stat($stream); |
|
107 | + mapi_stream_seek($stream, 0, STREAM_SEEK_SET); |
|
108 | + for ($i = 0; $i < $stat['cb']; $i += 1024) { |
|
109 | + $pkcs12 .= mapi_stream_read($stream, 1024); |
|
110 | + } |
|
111 | + $ok = openssl_pkcs12_read(base64_decode($pkcs12), $certs, $passphrase); |
|
112 | + if ($ok !== false) { |
|
113 | + array_push($unlockedCerts, $certs); |
|
114 | + } |
|
115 | + } |
|
116 | + } |
|
117 | + |
|
118 | + return ($singleCert !== false && count($unlockedCerts) > 0) ? $unlockedCerts[0] : $unlockedCerts; |
|
119 | 119 | } |
120 | 120 | |
121 | 121 | /** |
@@ -127,7 +127,7 @@ discard block |
||
127 | 127 | * @return {string} X509 Certificate in PEM format |
128 | 128 | */ |
129 | 129 | function der2pem($certificate) { |
130 | - return "-----BEGIN CERTIFICATE-----\n" . chunk_split(base64_encode($certificate), 64, "\n") . "-----END CERTIFICATE-----\n"; |
|
130 | + return "-----BEGIN CERTIFICATE-----\n" . chunk_split(base64_encode($certificate), 64, "\n") . "-----END CERTIFICATE-----\n"; |
|
131 | 131 | } |
132 | 132 | |
133 | 133 | /** |
@@ -150,55 +150,55 @@ discard block |
||
150 | 150 | * @return {Boolean} true is OCSP verification has succeeded or when there is no OCSP support, false if it hasn't |
151 | 151 | */ |
152 | 152 | function verifyOCSP($certificate, $extracerts = [], &$message) { |
153 | - if (!PLUGIN_SMIME_ENABLE_OCSP) { |
|
154 | - $message['success'] = SMIME_STATUS_SUCCESS; |
|
155 | - $message['info'] = SMIME_OCSP_DISABLED; |
|
153 | + if (!PLUGIN_SMIME_ENABLE_OCSP) { |
|
154 | + $message['success'] = SMIME_STATUS_SUCCESS; |
|
155 | + $message['info'] = SMIME_OCSP_DISABLED; |
|
156 | 156 | |
157 | - return true; |
|
158 | - } |
|
157 | + return true; |
|
158 | + } |
|
159 | 159 | |
160 | - $pubcert = new Certificate($certificate); |
|
160 | + $pubcert = new Certificate($certificate); |
|
161 | 161 | |
162 | - /* |
|
162 | + /* |
|
163 | 163 | * Walk over the provided extra intermediate certificates and setup the issuer |
164 | 164 | * chain. |
165 | 165 | */ |
166 | - $parent = $pubcert; |
|
167 | - while ($cert = array_shift($extracerts)) { |
|
168 | - $cert = new Certificate($cert); |
|
169 | - |
|
170 | - if ($cert->getName() === $pubcert->getName()) { |
|
171 | - continue; |
|
172 | - } |
|
173 | - |
|
174 | - if ($cert->getName() === $parent->getIssuerName()) { |
|
175 | - $parent->setIssuer($cert); |
|
176 | - $parent = $cert; |
|
177 | - } |
|
178 | - } |
|
179 | - |
|
180 | - try { |
|
181 | - $pubcert->verify(); |
|
182 | - $issuer = $pubcert->issuer(); |
|
183 | - if ($issuer->issuer()) { |
|
184 | - $issuer->verify(); |
|
185 | - } |
|
186 | - } |
|
187 | - catch (OCSPException $e) { |
|
188 | - if ($e->getCode() === OCSP_CERT_STATUS && $e->getCertStatus() == OCSP_CERT_STATUS_REVOKED) { |
|
189 | - $message['info'] = SMIME_REVOKED; |
|
190 | - $message['success'] = SMIME_STATUS_PARTIAL; |
|
191 | - |
|
192 | - return false; |
|
193 | - } |
|
194 | - error_log(sprintf("[SMIME] OCSP verification warning: '%s'", $e->getMessage())); |
|
195 | - } |
|
196 | - |
|
197 | - // Certificate does not support OCSP |
|
198 | - $message['info'] = SMIME_SUCCESS; |
|
199 | - $message['success'] = SMIME_STATUS_SUCCESS; |
|
200 | - |
|
201 | - return true; |
|
166 | + $parent = $pubcert; |
|
167 | + while ($cert = array_shift($extracerts)) { |
|
168 | + $cert = new Certificate($cert); |
|
169 | + |
|
170 | + if ($cert->getName() === $pubcert->getName()) { |
|
171 | + continue; |
|
172 | + } |
|
173 | + |
|
174 | + if ($cert->getName() === $parent->getIssuerName()) { |
|
175 | + $parent->setIssuer($cert); |
|
176 | + $parent = $cert; |
|
177 | + } |
|
178 | + } |
|
179 | + |
|
180 | + try { |
|
181 | + $pubcert->verify(); |
|
182 | + $issuer = $pubcert->issuer(); |
|
183 | + if ($issuer->issuer()) { |
|
184 | + $issuer->verify(); |
|
185 | + } |
|
186 | + } |
|
187 | + catch (OCSPException $e) { |
|
188 | + if ($e->getCode() === OCSP_CERT_STATUS && $e->getCertStatus() == OCSP_CERT_STATUS_REVOKED) { |
|
189 | + $message['info'] = SMIME_REVOKED; |
|
190 | + $message['success'] = SMIME_STATUS_PARTIAL; |
|
191 | + |
|
192 | + return false; |
|
193 | + } |
|
194 | + error_log(sprintf("[SMIME] OCSP verification warning: '%s'", $e->getMessage())); |
|
195 | + } |
|
196 | + |
|
197 | + // Certificate does not support OCSP |
|
198 | + $message['info'] = SMIME_SUCCESS; |
|
199 | + $message['success'] = SMIME_STATUS_SUCCESS; |
|
200 | + |
|
201 | + return true; |
|
202 | 202 | } |
203 | 203 | |
204 | 204 | /* Validate the certificate of a user, set an error message. |
@@ -208,48 +208,48 @@ discard block |
||
208 | 208 | * @param string $emailAddres the users email address (must match certificate email) |
209 | 209 | */ |
210 | 210 | function validateUploadedPKCS($certificate, $passphrase, $emailAddress) { |
211 | - if (!openssl_pkcs12_read($certificate, $certs, $passphrase)) { |
|
212 | - return [_('Unable to decrypt certificate'), '', '']; |
|
213 | - } |
|
214 | - |
|
215 | - $message = ''; |
|
216 | - $data = []; |
|
217 | - $privatekey = $certs['pkey']; |
|
218 | - $publickey = $certs['cert']; |
|
219 | - $extracerts = isset($certs['extracerts']) ? $certs['extracerts'] : []; |
|
220 | - $publickeyData = openssl_x509_parse($publickey); |
|
221 | - |
|
222 | - if ($publickeyData) { |
|
223 | - $certEmailAddress = getCertEmail($publickeyData); |
|
224 | - $validFrom = $publickeyData['validFrom_time_t']; |
|
225 | - $validTo = $publickeyData['validTo_time_t']; |
|
226 | - |
|
227 | - // Check priv key for signing capabilities |
|
228 | - if (!openssl_x509_checkpurpose($privatekey, X509_PURPOSE_SMIME_SIGN)) { |
|
229 | - $message = _('Private key can\'t be used to sign email'); |
|
230 | - } |
|
231 | - // Check if the certificate owner matches the grommunio Web users email address |
|
232 | - elseif (strcasecmp($certEmailAddress, $emailAddress) !== 0) { |
|
233 | - $message = _('Certificate email address doesn\'t match grommunio Web account ') . $certEmailAddress; |
|
234 | - } |
|
235 | - // Check if certificate is not expired, still import the certificate since a user wants to decrypt his old email |
|
236 | - elseif ($validTo < time()) { |
|
237 | - $message = _('Certificate was expired on ') . date('Y-m-d', $validTo) . '. ' . _('Certificate has not been imported'); |
|
238 | - } |
|
239 | - // Check if the certificate is validFrom date is not in the future |
|
240 | - elseif ($validFrom > time()) { |
|
241 | - $message = _('Certificate is not yet valid ') . date('Y-m-d', $validFrom) . '. ' . _('Certificate has not been imported'); |
|
242 | - } |
|
243 | - // We allow users to import private certificate which have no OCSP support |
|
244 | - elseif (!verifyOCSP($certs['cert'], $extracerts, $data)) { |
|
245 | - $message = _('Certificate is revoked'); |
|
246 | - } |
|
247 | - } |
|
248 | - else { // Can't parse public certificate pkcs#12 file might be corrupt |
|
249 | - $message = _('Unable to read public certificate'); |
|
250 | - } |
|
251 | - |
|
252 | - return [$message, $publickey, $publickeyData]; |
|
211 | + if (!openssl_pkcs12_read($certificate, $certs, $passphrase)) { |
|
212 | + return [_('Unable to decrypt certificate'), '', '']; |
|
213 | + } |
|
214 | + |
|
215 | + $message = ''; |
|
216 | + $data = []; |
|
217 | + $privatekey = $certs['pkey']; |
|
218 | + $publickey = $certs['cert']; |
|
219 | + $extracerts = isset($certs['extracerts']) ? $certs['extracerts'] : []; |
|
220 | + $publickeyData = openssl_x509_parse($publickey); |
|
221 | + |
|
222 | + if ($publickeyData) { |
|
223 | + $certEmailAddress = getCertEmail($publickeyData); |
|
224 | + $validFrom = $publickeyData['validFrom_time_t']; |
|
225 | + $validTo = $publickeyData['validTo_time_t']; |
|
226 | + |
|
227 | + // Check priv key for signing capabilities |
|
228 | + if (!openssl_x509_checkpurpose($privatekey, X509_PURPOSE_SMIME_SIGN)) { |
|
229 | + $message = _('Private key can\'t be used to sign email'); |
|
230 | + } |
|
231 | + // Check if the certificate owner matches the grommunio Web users email address |
|
232 | + elseif (strcasecmp($certEmailAddress, $emailAddress) !== 0) { |
|
233 | + $message = _('Certificate email address doesn\'t match grommunio Web account ') . $certEmailAddress; |
|
234 | + } |
|
235 | + // Check if certificate is not expired, still import the certificate since a user wants to decrypt his old email |
|
236 | + elseif ($validTo < time()) { |
|
237 | + $message = _('Certificate was expired on ') . date('Y-m-d', $validTo) . '. ' . _('Certificate has not been imported'); |
|
238 | + } |
|
239 | + // Check if the certificate is validFrom date is not in the future |
|
240 | + elseif ($validFrom > time()) { |
|
241 | + $message = _('Certificate is not yet valid ') . date('Y-m-d', $validFrom) . '. ' . _('Certificate has not been imported'); |
|
242 | + } |
|
243 | + // We allow users to import private certificate which have no OCSP support |
|
244 | + elseif (!verifyOCSP($certs['cert'], $extracerts, $data)) { |
|
245 | + $message = _('Certificate is revoked'); |
|
246 | + } |
|
247 | + } |
|
248 | + else { // Can't parse public certificate pkcs#12 file might be corrupt |
|
249 | + $message = _('Unable to read public certificate'); |
|
250 | + } |
|
251 | + |
|
252 | + return [$message, $publickey, $publickeyData]; |
|
253 | 253 | } |
254 | 254 | |
255 | 255 | /** |
@@ -258,9 +258,9 @@ discard block |
||
258 | 258 | * @return {boolean} true is expiration is supported |
259 | 259 | */ |
260 | 260 | function encryptionStoreExpirationSupport() { |
261 | - $refClass = new ReflectionClass('EncryptionStore'); |
|
261 | + $refClass = new ReflectionClass('EncryptionStore'); |
|
262 | 262 | |
263 | - return count($refClass->getMethod('add')->getParameters()) === 3; |
|
263 | + return count($refClass->getMethod('add')->getParameters()) === 3; |
|
264 | 264 | } |
265 | 265 | |
266 | 266 | /** |
@@ -270,14 +270,14 @@ discard block |
||
270 | 270 | * @param mixed $sessionOpened |
271 | 271 | */ |
272 | 272 | function withPHPSession($func, $sessionOpened = false) { |
273 | - if (session_status() === PHP_SESSION_NONE) { |
|
274 | - session_start(); |
|
275 | - $sessionOpened = true; |
|
276 | - } |
|
273 | + if (session_status() === PHP_SESSION_NONE) { |
|
274 | + session_start(); |
|
275 | + $sessionOpened = true; |
|
276 | + } |
|
277 | 277 | |
278 | - $func(); |
|
278 | + $func(); |
|
279 | 279 | |
280 | - if ($sessionOpened) { |
|
281 | - session_write_close(); |
|
282 | - } |
|
280 | + if ($sessionOpened) { |
|
281 | + session_write_close(); |
|
282 | + } |
|
283 | 283 | } |
@@ -17,8 +17,7 @@ discard block |
||
17 | 17 | // If subject/emailAddress is not set, try subjectAltName |
18 | 18 | if (isset($certificate['subject']['emailAddress'])) { |
19 | 19 | $certEmailAddress = $certificate['subject']['emailAddress']; |
20 | - } |
|
21 | - elseif (isset($certificate['extensions'], $certificate['extensions']['subjectAltName'])) { |
|
20 | + } elseif (isset($certificate['extensions'], $certificate['extensions']['subjectAltName'])) { |
|
22 | 21 | // Example [subjectAltName] => email:[email protected] |
23 | 22 | $tmp = explode('email:', $certificate['extensions']['subjectAltName']); |
24 | 23 | // Only get the first match |
@@ -183,8 +182,7 @@ discard block |
||
183 | 182 | if ($issuer->issuer()) { |
184 | 183 | $issuer->verify(); |
185 | 184 | } |
186 | - } |
|
187 | - catch (OCSPException $e) { |
|
185 | + } catch (OCSPException $e) { |
|
188 | 186 | if ($e->getCode() === OCSP_CERT_STATUS && $e->getCertStatus() == OCSP_CERT_STATUS_REVOKED) { |
189 | 187 | $message['info'] = SMIME_REVOKED; |
190 | 188 | $message['success'] = SMIME_STATUS_PARTIAL; |
@@ -244,8 +242,7 @@ discard block |
||
244 | 242 | elseif (!verifyOCSP($certs['cert'], $extracerts, $data)) { |
245 | 243 | $message = _('Certificate is revoked'); |
246 | 244 | } |
247 | - } |
|
248 | - else { // Can't parse public certificate pkcs#12 file might be corrupt |
|
245 | + } else { // Can't parse public certificate pkcs#12 file might be corrupt |
|
249 | 246 | $message = _('Unable to read public certificate'); |
250 | 247 | } |
251 | 248 |
@@ -12,167 +12,167 @@ |
||
12 | 12 | * It extends the DownloadBase class. |
13 | 13 | */ |
14 | 14 | class DownloadMessage extends DownloadBase { |
15 | - /** |
|
16 | - * Function get message-stream using respective mapi function. |
|
17 | - * It also sends the eml file to the client. |
|
18 | - */ |
|
19 | - public function downloadMessageAsFile() { |
|
20 | - if ($this->message && $this->store) { |
|
21 | - // get message properties. |
|
22 | - $messageProps = mapi_getprops($this->message, [PR_SUBJECT, PR_EC_IMAP_EMAIL, PR_MESSAGE_CLASS]); |
|
23 | - |
|
24 | - $stream = $this->getEmlStream($messageProps); |
|
25 | - |
|
26 | - $filename = (!empty($messageProps[PR_SUBJECT])) ? $messageProps[PR_SUBJECT] : _('Untitled'); |
|
27 | - $filename .= '.eml'; |
|
28 | - |
|
29 | - // Set the file length |
|
30 | - $stat = mapi_stream_stat($stream); |
|
31 | - |
|
32 | - $this->setNecessaryHeaders($filename, $stat['cb']); |
|
33 | - |
|
34 | - // Read whole message and echo it. |
|
35 | - for ($i = 0; $i < $stat['cb']; $i += BLOCK_SIZE) { |
|
36 | - // Print stream |
|
37 | - echo mapi_stream_read($stream, BLOCK_SIZE); |
|
38 | - |
|
39 | - // Need to discard the buffer contents to prevent memory |
|
40 | - // exhaustion while echoing large content. |
|
41 | - ob_flush(); |
|
42 | - } |
|
43 | - } |
|
44 | - } |
|
45 | - |
|
46 | - /** |
|
47 | - * Function will create a ZIP archive and add eml files into the same. |
|
48 | - * It also configures necessary header information which required to send the ZIP file to client. |
|
49 | - * Send ZIP to the client if all the requested eml files included successfully into the same. |
|
50 | - */ |
|
51 | - public function downloadMessageAsZipFile() { |
|
52 | - if ($this->store) { |
|
53 | - // Generate random ZIP file name at default temporary path of PHP |
|
54 | - $randomZipName = tempnam(sys_get_temp_dir(), 'zip'); |
|
55 | - |
|
56 | - // Create an open zip archive. |
|
57 | - $zip = new ZipArchive(); |
|
58 | - $result = $zip->open($randomZipName, ZipArchive::CREATE); |
|
59 | - |
|
60 | - if ($result === true) { |
|
61 | - for ($index = 0, $count = count($this->entryIds); $index < $count; ++$index) { |
|
62 | - $this->message = mapi_msgstore_openentry($this->store, hex2bin($this->entryIds[$index])); |
|
63 | - |
|
64 | - // get message properties. |
|
65 | - $messageProps = mapi_getprops($this->message, [PR_SUBJECT, PR_EC_IMAP_EMAIL, PR_MESSAGE_CLASS]); |
|
66 | - |
|
67 | - $stream = $this->getEmlStream($messageProps); |
|
68 | - $stat = mapi_stream_stat($stream); |
|
69 | - |
|
70 | - // Get the stream |
|
71 | - $datastring = ''; |
|
72 | - for ($i = 0; $i < $stat['cb']; $i += BLOCK_SIZE) { |
|
73 | - $datastring .= mapi_stream_read($stream, BLOCK_SIZE); |
|
74 | - // Need to discard the buffer contents to prevent memory |
|
75 | - // exhaustion. |
|
76 | - ob_flush(); |
|
77 | - } |
|
78 | - |
|
79 | - $filename = (!empty($messageProps[PR_SUBJECT])) ? $messageProps[PR_SUBJECT] : _('Untitled'); |
|
80 | - $filename .= '.eml'; |
|
81 | - |
|
82 | - $filename = $this->handleDuplicateFileNames($filename); |
|
83 | - // Remove slashes to prevent unwanted directories to be created in the zip file. |
|
84 | - $filename = str_replace('\\', '_', $filename); |
|
85 | - $filename = str_replace('/', '_', $filename); |
|
86 | - |
|
87 | - // Add file into zip by stream |
|
88 | - $zip->addFromString($filename, $datastring); |
|
89 | - } |
|
90 | - } |
|
91 | - else { |
|
92 | - $zip->close(); |
|
93 | - // Remove the zip file to avoid unnecessary disk-space consumption |
|
94 | - unlink($randomZipName); |
|
95 | - |
|
96 | - // Throw exception if ZIP is not created successfully |
|
97 | - throw new ZarafaException(_("ZIP is not created successfully")); |
|
98 | - } |
|
99 | - |
|
100 | - $zip->close(); |
|
101 | - |
|
102 | - // Set the headers |
|
103 | - header('Pragma: public'); |
|
104 | - header('Expires: 0'); // set expiration time |
|
105 | - header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); |
|
106 | - header('Content-Disposition: attachment; filename="' . addslashes(browserDependingHTTPHeaderEncode(_("Messages") . date(" d-m-Y") . ".zip")) . '"'); |
|
107 | - header('Content-Transfer-Encoding: binary'); |
|
108 | - header('Content-Type: application/zip'); |
|
109 | - header('Content-Length: ' . filesize($randomZipName)); |
|
110 | - |
|
111 | - // Send the actual response as ZIP file |
|
112 | - readfile($randomZipName); |
|
113 | - |
|
114 | - // Remove the zip file to avoid unnecessary disk-space consumption |
|
115 | - unlink($randomZipName); |
|
116 | - } |
|
117 | - } |
|
118 | - |
|
119 | - /** |
|
120 | - * Function will obtain stream from the message, For email messages it will open email as |
|
121 | - * inet object and get the stream content as eml format, when user has IMAP enabled. |
|
122 | - * The below mentioned properties are configured with the whole message as a stream in it, while IMAP is enabled: |
|
123 | - * PR_EC_IMAP_EMAIL |
|
124 | - * PR_EC_IMAP_EMAIL_SIZE |
|
125 | - * PR_EC_IMAP_BODY |
|
126 | - * PR_EC_IMAP_BODYSTRUCTURE. |
|
127 | - * |
|
128 | - * @param array $messageProps properties of this particular message |
|
129 | - * |
|
130 | - * @return Stream $stream the eml stream obtained from message |
|
131 | - */ |
|
132 | - public function getEmlStream($messageProps) { |
|
133 | - // If RFC822-formatted stream is already available in PR_EC_IMAP_EMAIL property |
|
134 | - // than directly use it, generate otherwise. |
|
135 | - if (isset($messageProps[PR_EC_IMAP_EMAIL]) || propIsError(PR_EC_IMAP_EMAIL, $messageProps) == MAPI_E_NOT_ENOUGH_MEMORY) { |
|
136 | - // Stream the message to properly get the PR_EC_IMAP_EMAIL property |
|
137 | - $stream = mapi_openproperty($this->message, PR_EC_IMAP_EMAIL, IID_IStream, 0, 0); |
|
138 | - } |
|
139 | - else { |
|
140 | - // Get addressbook for current session |
|
141 | - $addrBook = $GLOBALS['mapisession']->getAddressbook(); |
|
142 | - |
|
143 | - // Read the message as RFC822-formatted e-mail stream. |
|
144 | - $stream = mapi_inetmapi_imtoinet($GLOBALS['mapisession']->getSession(), $addrBook, $this->message, []); |
|
145 | - } |
|
146 | - |
|
147 | - return $stream; |
|
148 | - } |
|
149 | - |
|
150 | - /** |
|
151 | - * Check received data and decide either the eml file or |
|
152 | - * ZIP file is requested to be downloaded. |
|
153 | - */ |
|
154 | - public function download() { |
|
155 | - if ($this->allAsZip) { |
|
156 | - // download multiple eml messages in a ZIP file |
|
157 | - $this->downloadMessageAsZipFile(); |
|
158 | - } |
|
159 | - else { |
|
160 | - // download message as file |
|
161 | - $this->downloadMessageAsFile(); |
|
162 | - } |
|
163 | - } |
|
15 | + /** |
|
16 | + * Function get message-stream using respective mapi function. |
|
17 | + * It also sends the eml file to the client. |
|
18 | + */ |
|
19 | + public function downloadMessageAsFile() { |
|
20 | + if ($this->message && $this->store) { |
|
21 | + // get message properties. |
|
22 | + $messageProps = mapi_getprops($this->message, [PR_SUBJECT, PR_EC_IMAP_EMAIL, PR_MESSAGE_CLASS]); |
|
23 | + |
|
24 | + $stream = $this->getEmlStream($messageProps); |
|
25 | + |
|
26 | + $filename = (!empty($messageProps[PR_SUBJECT])) ? $messageProps[PR_SUBJECT] : _('Untitled'); |
|
27 | + $filename .= '.eml'; |
|
28 | + |
|
29 | + // Set the file length |
|
30 | + $stat = mapi_stream_stat($stream); |
|
31 | + |
|
32 | + $this->setNecessaryHeaders($filename, $stat['cb']); |
|
33 | + |
|
34 | + // Read whole message and echo it. |
|
35 | + for ($i = 0; $i < $stat['cb']; $i += BLOCK_SIZE) { |
|
36 | + // Print stream |
|
37 | + echo mapi_stream_read($stream, BLOCK_SIZE); |
|
38 | + |
|
39 | + // Need to discard the buffer contents to prevent memory |
|
40 | + // exhaustion while echoing large content. |
|
41 | + ob_flush(); |
|
42 | + } |
|
43 | + } |
|
44 | + } |
|
45 | + |
|
46 | + /** |
|
47 | + * Function will create a ZIP archive and add eml files into the same. |
|
48 | + * It also configures necessary header information which required to send the ZIP file to client. |
|
49 | + * Send ZIP to the client if all the requested eml files included successfully into the same. |
|
50 | + */ |
|
51 | + public function downloadMessageAsZipFile() { |
|
52 | + if ($this->store) { |
|
53 | + // Generate random ZIP file name at default temporary path of PHP |
|
54 | + $randomZipName = tempnam(sys_get_temp_dir(), 'zip'); |
|
55 | + |
|
56 | + // Create an open zip archive. |
|
57 | + $zip = new ZipArchive(); |
|
58 | + $result = $zip->open($randomZipName, ZipArchive::CREATE); |
|
59 | + |
|
60 | + if ($result === true) { |
|
61 | + for ($index = 0, $count = count($this->entryIds); $index < $count; ++$index) { |
|
62 | + $this->message = mapi_msgstore_openentry($this->store, hex2bin($this->entryIds[$index])); |
|
63 | + |
|
64 | + // get message properties. |
|
65 | + $messageProps = mapi_getprops($this->message, [PR_SUBJECT, PR_EC_IMAP_EMAIL, PR_MESSAGE_CLASS]); |
|
66 | + |
|
67 | + $stream = $this->getEmlStream($messageProps); |
|
68 | + $stat = mapi_stream_stat($stream); |
|
69 | + |
|
70 | + // Get the stream |
|
71 | + $datastring = ''; |
|
72 | + for ($i = 0; $i < $stat['cb']; $i += BLOCK_SIZE) { |
|
73 | + $datastring .= mapi_stream_read($stream, BLOCK_SIZE); |
|
74 | + // Need to discard the buffer contents to prevent memory |
|
75 | + // exhaustion. |
|
76 | + ob_flush(); |
|
77 | + } |
|
78 | + |
|
79 | + $filename = (!empty($messageProps[PR_SUBJECT])) ? $messageProps[PR_SUBJECT] : _('Untitled'); |
|
80 | + $filename .= '.eml'; |
|
81 | + |
|
82 | + $filename = $this->handleDuplicateFileNames($filename); |
|
83 | + // Remove slashes to prevent unwanted directories to be created in the zip file. |
|
84 | + $filename = str_replace('\\', '_', $filename); |
|
85 | + $filename = str_replace('/', '_', $filename); |
|
86 | + |
|
87 | + // Add file into zip by stream |
|
88 | + $zip->addFromString($filename, $datastring); |
|
89 | + } |
|
90 | + } |
|
91 | + else { |
|
92 | + $zip->close(); |
|
93 | + // Remove the zip file to avoid unnecessary disk-space consumption |
|
94 | + unlink($randomZipName); |
|
95 | + |
|
96 | + // Throw exception if ZIP is not created successfully |
|
97 | + throw new ZarafaException(_("ZIP is not created successfully")); |
|
98 | + } |
|
99 | + |
|
100 | + $zip->close(); |
|
101 | + |
|
102 | + // Set the headers |
|
103 | + header('Pragma: public'); |
|
104 | + header('Expires: 0'); // set expiration time |
|
105 | + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); |
|
106 | + header('Content-Disposition: attachment; filename="' . addslashes(browserDependingHTTPHeaderEncode(_("Messages") . date(" d-m-Y") . ".zip")) . '"'); |
|
107 | + header('Content-Transfer-Encoding: binary'); |
|
108 | + header('Content-Type: application/zip'); |
|
109 | + header('Content-Length: ' . filesize($randomZipName)); |
|
110 | + |
|
111 | + // Send the actual response as ZIP file |
|
112 | + readfile($randomZipName); |
|
113 | + |
|
114 | + // Remove the zip file to avoid unnecessary disk-space consumption |
|
115 | + unlink($randomZipName); |
|
116 | + } |
|
117 | + } |
|
118 | + |
|
119 | + /** |
|
120 | + * Function will obtain stream from the message, For email messages it will open email as |
|
121 | + * inet object and get the stream content as eml format, when user has IMAP enabled. |
|
122 | + * The below mentioned properties are configured with the whole message as a stream in it, while IMAP is enabled: |
|
123 | + * PR_EC_IMAP_EMAIL |
|
124 | + * PR_EC_IMAP_EMAIL_SIZE |
|
125 | + * PR_EC_IMAP_BODY |
|
126 | + * PR_EC_IMAP_BODYSTRUCTURE. |
|
127 | + * |
|
128 | + * @param array $messageProps properties of this particular message |
|
129 | + * |
|
130 | + * @return Stream $stream the eml stream obtained from message |
|
131 | + */ |
|
132 | + public function getEmlStream($messageProps) { |
|
133 | + // If RFC822-formatted stream is already available in PR_EC_IMAP_EMAIL property |
|
134 | + // than directly use it, generate otherwise. |
|
135 | + if (isset($messageProps[PR_EC_IMAP_EMAIL]) || propIsError(PR_EC_IMAP_EMAIL, $messageProps) == MAPI_E_NOT_ENOUGH_MEMORY) { |
|
136 | + // Stream the message to properly get the PR_EC_IMAP_EMAIL property |
|
137 | + $stream = mapi_openproperty($this->message, PR_EC_IMAP_EMAIL, IID_IStream, 0, 0); |
|
138 | + } |
|
139 | + else { |
|
140 | + // Get addressbook for current session |
|
141 | + $addrBook = $GLOBALS['mapisession']->getAddressbook(); |
|
142 | + |
|
143 | + // Read the message as RFC822-formatted e-mail stream. |
|
144 | + $stream = mapi_inetmapi_imtoinet($GLOBALS['mapisession']->getSession(), $addrBook, $this->message, []); |
|
145 | + } |
|
146 | + |
|
147 | + return $stream; |
|
148 | + } |
|
149 | + |
|
150 | + /** |
|
151 | + * Check received data and decide either the eml file or |
|
152 | + * ZIP file is requested to be downloaded. |
|
153 | + */ |
|
154 | + public function download() { |
|
155 | + if ($this->allAsZip) { |
|
156 | + // download multiple eml messages in a ZIP file |
|
157 | + $this->downloadMessageAsZipFile(); |
|
158 | + } |
|
159 | + else { |
|
160 | + // download message as file |
|
161 | + $this->downloadMessageAsFile(); |
|
162 | + } |
|
163 | + } |
|
164 | 164 | } |
165 | 165 | |
166 | 166 | // create instance of class to download message as file |
167 | 167 | $messageInstance = new DownloadMessage(); |
168 | 168 | |
169 | 169 | try { |
170 | - // initialize variables |
|
171 | - $messageInstance->init($_GET); |
|
170 | + // initialize variables |
|
171 | + $messageInstance->init($_GET); |
|
172 | 172 | |
173 | - // download message |
|
174 | - $messageInstance->download(); |
|
173 | + // download message |
|
174 | + $messageInstance->download(); |
|
175 | 175 | } |
176 | 176 | catch (Exception $e) { |
177 | - $messageInstance->handleSaveMessageException($e); |
|
177 | + $messageInstance->handleSaveMessageException($e); |
|
178 | 178 | } |
@@ -87,8 +87,7 @@ discard block |
||
87 | 87 | // Add file into zip by stream |
88 | 88 | $zip->addFromString($filename, $datastring); |
89 | 89 | } |
90 | - } |
|
91 | - else { |
|
90 | + } else { |
|
92 | 91 | $zip->close(); |
93 | 92 | // Remove the zip file to avoid unnecessary disk-space consumption |
94 | 93 | unlink($randomZipName); |
@@ -135,8 +134,7 @@ discard block |
||
135 | 134 | if (isset($messageProps[PR_EC_IMAP_EMAIL]) || propIsError(PR_EC_IMAP_EMAIL, $messageProps) == MAPI_E_NOT_ENOUGH_MEMORY) { |
136 | 135 | // Stream the message to properly get the PR_EC_IMAP_EMAIL property |
137 | 136 | $stream = mapi_openproperty($this->message, PR_EC_IMAP_EMAIL, IID_IStream, 0, 0); |
138 | - } |
|
139 | - else { |
|
137 | + } else { |
|
140 | 138 | // Get addressbook for current session |
141 | 139 | $addrBook = $GLOBALS['mapisession']->getAddressbook(); |
142 | 140 | |
@@ -155,8 +153,7 @@ discard block |
||
155 | 153 | if ($this->allAsZip) { |
156 | 154 | // download multiple eml messages in a ZIP file |
157 | 155 | $this->downloadMessageAsZipFile(); |
158 | - } |
|
159 | - else { |
|
156 | + } else { |
|
160 | 157 | // download message as file |
161 | 158 | $this->downloadMessageAsFile(); |
162 | 159 | } |
@@ -172,7 +169,6 @@ discard block |
||
172 | 169 | |
173 | 170 | // download message |
174 | 171 | $messageInstance->download(); |
175 | -} |
|
176 | -catch (Exception $e) { |
|
172 | +} catch (Exception $e) { |
|
177 | 173 | $messageInstance->handleSaveMessageException($e); |
178 | 174 | } |
@@ -1,89 +1,89 @@ |
||
1 | 1 | <?php |
2 | 2 | |
3 | - class FileLog extends Logger { |
|
4 | - /** |
|
5 | - * @var string |
|
6 | - */ |
|
7 | - private $logToUserFile = ""; |
|
3 | + class FileLog extends Logger { |
|
4 | + /** |
|
5 | + * @var string |
|
6 | + */ |
|
7 | + private $logToUserFile = ""; |
|
8 | 8 | |
9 | - /** |
|
10 | - * Writes a log message to the general log. |
|
11 | - * |
|
12 | - * @param {Number} $loglevel one of the defined LOGLEVELS |
|
13 | - * @param {string} $message The log message which we want to log in user specific log file |
|
14 | - * @param {boolean|array} $detailMessage (optional) The detailed log message. it can be Error/Exception array. |
|
15 | - * @param {boolean|array} $request (optional) The request log the the request data which sent by the user |
|
16 | - * @param mixed $logLevel |
|
17 | - */ |
|
18 | - protected function Write($logLevel, $message, $detailMessage, $request) { |
|
19 | - $dir = LOG_FILE_DIR; |
|
20 | - if (substr(LOG_FILE_DIR, -1) != "/") { |
|
21 | - $dir .= "/"; |
|
22 | - } |
|
9 | + /** |
|
10 | + * Writes a log message to the general log. |
|
11 | + * |
|
12 | + * @param {Number} $loglevel one of the defined LOGLEVELS |
|
13 | + * @param {string} $message The log message which we want to log in user specific log file |
|
14 | + * @param {boolean|array} $detailMessage (optional) The detailed log message. it can be Error/Exception array. |
|
15 | + * @param {boolean|array} $request (optional) The request log the the request data which sent by the user |
|
16 | + * @param mixed $logLevel |
|
17 | + */ |
|
18 | + protected function Write($logLevel, $message, $detailMessage, $request) { |
|
19 | + $dir = LOG_FILE_DIR; |
|
20 | + if (substr(LOG_FILE_DIR, -1) != "/") { |
|
21 | + $dir .= "/"; |
|
22 | + } |
|
23 | 23 | |
24 | - // If users directory not created then create it first. |
|
25 | - if (!is_dir($dir)) { |
|
26 | - if (empty($dir)) { |
|
27 | - error_log("Log directory has not configured. provide valid directory path."); |
|
24 | + // If users directory not created then create it first. |
|
25 | + if (!is_dir($dir)) { |
|
26 | + if (empty($dir)) { |
|
27 | + error_log("Log directory has not configured. provide valid directory path."); |
|
28 | 28 | |
29 | - return; |
|
30 | - } |
|
31 | - if (mkdir($dir, 0777, true) === false) { |
|
32 | - error_log("Problem in creating log folder " . $dir); |
|
29 | + return; |
|
30 | + } |
|
31 | + if (mkdir($dir, 0777, true) === false) { |
|
32 | + error_log("Problem in creating log folder " . $dir); |
|
33 | 33 | |
34 | - return; |
|
35 | - } |
|
36 | - } |
|
37 | - $data = $this->BuildLogString($logLevel, $message, $detailMessage, $request) . PHP_EOL; |
|
38 | - file_put_contents($dir . $this->getLogToUserFile(), $data, FILE_APPEND); |
|
39 | - } |
|
34 | + return; |
|
35 | + } |
|
36 | + } |
|
37 | + $data = $this->BuildLogString($logLevel, $message, $detailMessage, $request) . PHP_EOL; |
|
38 | + file_put_contents($dir . $this->getLogToUserFile(), $data, FILE_APPEND); |
|
39 | + } |
|
40 | 40 | |
41 | - /** |
|
42 | - * Get the log user file. |
|
43 | - * |
|
44 | - * @return string |
|
45 | - */ |
|
46 | - private function getLogToUserFile() { |
|
47 | - if (strlen($this->logToUserFile) == 0) { |
|
48 | - $this->setLogToUserFile($this->getUser() . ".log"); |
|
49 | - } |
|
41 | + /** |
|
42 | + * Get the log user file. |
|
43 | + * |
|
44 | + * @return string |
|
45 | + */ |
|
46 | + private function getLogToUserFile() { |
|
47 | + if (strlen($this->logToUserFile) == 0) { |
|
48 | + $this->setLogToUserFile($this->getUser() . ".log"); |
|
49 | + } |
|
50 | 50 | |
51 | - return $this->logToUserFile; |
|
52 | - } |
|
51 | + return $this->logToUserFile; |
|
52 | + } |
|
53 | 53 | |
54 | - /** |
|
55 | - * Set user log-file relative to log directory. |
|
56 | - * |
|
57 | - * @param string $value |
|
58 | - */ |
|
59 | - private function setLogToUserFile($value) { |
|
60 | - $this->logToUserFile = $value; |
|
61 | - } |
|
54 | + /** |
|
55 | + * Set user log-file relative to log directory. |
|
56 | + * |
|
57 | + * @param string $value |
|
58 | + */ |
|
59 | + private function setLogToUserFile($value) { |
|
60 | + $this->logToUserFile = $value; |
|
61 | + } |
|
62 | 62 | |
63 | - /** |
|
64 | - * Returns the string to be logged. |
|
65 | - * |
|
66 | - * @param {Number} $loglevel one of the defined LOGLEVELS |
|
67 | - * @param {string} $message The log message which we want to log in user specific log file |
|
68 | - * @param {boolean|array} $detailMessage (optional) The detailed log message. it can be Error/Exception array. |
|
69 | - * @param {boolean|array} $request (optional) The request log the the request data which sent by the user |
|
70 | - * |
|
71 | - * @return string |
|
72 | - */ |
|
73 | - public function BuildLogString($loglevel, $message, $detailMessage = false, $request = false) { |
|
74 | - $dateTime = strftime("%d-%b-%Y %H:%M:%S"); |
|
75 | - $log = "[" . $dateTime . "] "; |
|
76 | - $log .= $this->GetLogLevelString($loglevel); |
|
77 | - $log .= ' ' . $message; |
|
63 | + /** |
|
64 | + * Returns the string to be logged. |
|
65 | + * |
|
66 | + * @param {Number} $loglevel one of the defined LOGLEVELS |
|
67 | + * @param {string} $message The log message which we want to log in user specific log file |
|
68 | + * @param {boolean|array} $detailMessage (optional) The detailed log message. it can be Error/Exception array. |
|
69 | + * @param {boolean|array} $request (optional) The request log the the request data which sent by the user |
|
70 | + * |
|
71 | + * @return string |
|
72 | + */ |
|
73 | + public function BuildLogString($loglevel, $message, $detailMessage = false, $request = false) { |
|
74 | + $dateTime = strftime("%d-%b-%Y %H:%M:%S"); |
|
75 | + $log = "[" . $dateTime . "] "; |
|
76 | + $log .= $this->GetLogLevelString($loglevel); |
|
77 | + $log .= ' ' . $message; |
|
78 | 78 | |
79 | - if ($detailMessage) { |
|
80 | - $log .= ' :' . var_export($detailMessage, true) . "\r\n"; |
|
81 | - } |
|
79 | + if ($detailMessage) { |
|
80 | + $log .= ' :' . var_export($detailMessage, true) . "\r\n"; |
|
81 | + } |
|
82 | 82 | |
83 | - if ($request) { |
|
84 | - $log .= ' Request:' . var_export($request, true) . "\r\n"; |
|
85 | - } |
|
83 | + if ($request) { |
|
84 | + $log .= ' Request:' . var_export($request, true) . "\r\n"; |
|
85 | + } |
|
86 | 86 | |
87 | - return $log; |
|
88 | - } |
|
89 | - } |
|
87 | + return $log; |
|
88 | + } |
|
89 | + } |
@@ -1,163 +1,163 @@ |
||
1 | 1 | <?php |
2 | 2 | |
3 | - abstract class Logger { |
|
4 | - /** |
|
5 | - * @var string |
|
6 | - */ |
|
7 | - protected $user = ''; |
|
8 | - |
|
9 | - /** |
|
10 | - * @var array |
|
11 | - */ |
|
12 | - protected $specialLogUsers = []; |
|
13 | - |
|
14 | - /** |
|
15 | - * Only used as a cache value for IsUserInSpecialLogUsers. |
|
16 | - * |
|
17 | - * @var array |
|
18 | - */ |
|
19 | - private $isUserInSpecialLogUsers = []; |
|
20 | - |
|
21 | - /** |
|
22 | - * Only used as a cache value for IsAuthUserInSpecialLogUsers function. |
|
23 | - * |
|
24 | - * @var bool |
|
25 | - */ |
|
26 | - private $isAuthUserInSpecialLogUsers = false; |
|
27 | - |
|
28 | - /** |
|
29 | - * Returns the current user. |
|
30 | - * |
|
31 | - * @return string |
|
32 | - */ |
|
33 | - public function GetUser() { |
|
34 | - return $this->user; |
|
35 | - } |
|
36 | - |
|
37 | - /** |
|
38 | - * Sets the current user. |
|
39 | - * |
|
40 | - * @param array $value user information which is currently login |
|
41 | - */ |
|
42 | - public function SetUser($value) { |
|
43 | - $this->user = $value; |
|
44 | - } |
|
45 | - |
|
46 | - /** |
|
47 | - * Indicates if special log users are known. |
|
48 | - * |
|
49 | - * @return bool True if we do have to log some specific user. False otherwise. |
|
50 | - */ |
|
51 | - public function HasSpecialLogUsers() { |
|
52 | - return !empty($this->specialLogUsers); |
|
53 | - } |
|
54 | - |
|
55 | - /** |
|
56 | - * Indicates if the user is in the special log users. |
|
57 | - * |
|
58 | - * @param string $user |
|
59 | - * |
|
60 | - * @return bool |
|
61 | - */ |
|
62 | - public function IsUserInSpecialLogUsers($user) { |
|
63 | - if (isset($this->isUserInSpecialLogUsers[$user])) { |
|
64 | - return true; |
|
65 | - } |
|
66 | - if ($this->HasSpecialLogUsers()) { |
|
67 | - $specialLogUsers = $this->GetSpecialLogUsers(); |
|
68 | - if (array_search($user, $specialLogUsers, true) !== false) { |
|
69 | - $this->isUserInSpecialLogUsers[$user] = true; |
|
70 | - |
|
71 | - return true; |
|
72 | - } |
|
73 | - } |
|
74 | - |
|
75 | - return false; |
|
76 | - } |
|
77 | - |
|
78 | - /** |
|
79 | - * Returns the current special log users array. |
|
80 | - * |
|
81 | - * @return array |
|
82 | - */ |
|
83 | - public function GetSpecialLogUsers() { |
|
84 | - return $this->specialLogUsers; |
|
85 | - } |
|
86 | - |
|
87 | - /** |
|
88 | - * Sets the current special log users array. |
|
89 | - */ |
|
90 | - public function SetSpecialLogUsers(array $value) { |
|
91 | - $this->isUserInSpecialLogUsers = []; // reset cache |
|
92 | - $this->specialLogUsers = $value; |
|
93 | - } |
|
94 | - |
|
95 | - /** |
|
96 | - * Check that the current login user is in the special log user array. |
|
97 | - * This call is equivalent to `$this->IsUserInSpecialLogUsers($this->GetUser())` at the exception that this |
|
98 | - * call uses cache so there won't be more than one check to the specialLogUser for the login user. |
|
99 | - * |
|
100 | - * @return bool true if user exist in special log user array else false |
|
101 | - */ |
|
102 | - public function IsAuthUserInSpecialLogUsers() { |
|
103 | - if ($this->isAuthUserInSpecialLogUsers) { |
|
104 | - return true; |
|
105 | - } |
|
106 | - if ($this->IsUserInSpecialLogUsers($this->GetUser())) { |
|
107 | - $this->isAuthUserInSpecialLogUsers = true; |
|
108 | - |
|
109 | - return true; |
|
110 | - } |
|
111 | - |
|
112 | - return false; |
|
113 | - } |
|
114 | - |
|
115 | - /** |
|
116 | - * Logs a message with a given log level. |
|
117 | - * |
|
118 | - * @param {int} $logLevel The log level which will be configured in config file |
|
119 | - * @param {string} $message The log message which we want to log in user specific log file |
|
120 | - * @param {boolean|array} $detailMessage (optional) The detailed log message. it can be Error/Exception array. |
|
121 | - * @param {boolean|array} $request (optional) The request log the the request data which sent by the user |
|
122 | - */ |
|
123 | - public function Log($logLevel, $message, $detailMessage = false, $request = false) { |
|
124 | - if ($logLevel <= LOG_USER_LEVEL) { |
|
125 | - if ($this->IsAuthUserInSpecialLogUsers()) { |
|
126 | - $this->Write($logLevel, $message, $detailMessage, $request); |
|
127 | - } |
|
128 | - } |
|
129 | - } |
|
130 | - |
|
131 | - /** |
|
132 | - * Returns the string representation of the given $loglevel. |
|
133 | - * |
|
134 | - * @param {int} $loglevel one of the LOGLEVELs |
|
135 | - * |
|
136 | - * @return string |
|
137 | - */ |
|
138 | - protected function GetLogLevelString($loglevel) { |
|
139 | - switch ($loglevel) { |
|
140 | - case LOGLEVEL_OFF: return ""; break; |
|
141 | - |
|
142 | - case LOGLEVEL_FATAL: return "[FATAL]"; break; |
|
143 | - |
|
144 | - case LOGLEVEL_ERROR: return "[ERROR]"; break; |
|
145 | - |
|
146 | - case LOGLEVEL_WARN: return "[WARN]"; break; |
|
147 | - |
|
148 | - case LOGLEVEL_INFO: return "[INFO]"; break; |
|
149 | - |
|
150 | - case LOGLEVEL_DEBUG: return "[DEBUG]"; break; |
|
151 | - } |
|
152 | - } |
|
153 | - |
|
154 | - /** |
|
155 | - * Writes a log message to the general log. |
|
156 | - * |
|
157 | - * @param {int} $logLevel The log level which will be configured in config file |
|
158 | - * @param {string} $message The log message which we want to log in user specific log file |
|
159 | - * @param {boolean|array} $detailMessage (optional) The detailed log message. it can be Error/Exception array. |
|
160 | - * @param {boolean|array} $request (optional) The request log the the request data which sent by the user |
|
161 | - */ |
|
162 | - abstract protected function Write($logLevel, $message, $detailMessage, $request); |
|
163 | - } |
|
3 | + abstract class Logger { |
|
4 | + /** |
|
5 | + * @var string |
|
6 | + */ |
|
7 | + protected $user = ''; |
|
8 | + |
|
9 | + /** |
|
10 | + * @var array |
|
11 | + */ |
|
12 | + protected $specialLogUsers = []; |
|
13 | + |
|
14 | + /** |
|
15 | + * Only used as a cache value for IsUserInSpecialLogUsers. |
|
16 | + * |
|
17 | + * @var array |
|
18 | + */ |
|
19 | + private $isUserInSpecialLogUsers = []; |
|
20 | + |
|
21 | + /** |
|
22 | + * Only used as a cache value for IsAuthUserInSpecialLogUsers function. |
|
23 | + * |
|
24 | + * @var bool |
|
25 | + */ |
|
26 | + private $isAuthUserInSpecialLogUsers = false; |
|
27 | + |
|
28 | + /** |
|
29 | + * Returns the current user. |
|
30 | + * |
|
31 | + * @return string |
|
32 | + */ |
|
33 | + public function GetUser() { |
|
34 | + return $this->user; |
|
35 | + } |
|
36 | + |
|
37 | + /** |
|
38 | + * Sets the current user. |
|
39 | + * |
|
40 | + * @param array $value user information which is currently login |
|
41 | + */ |
|
42 | + public function SetUser($value) { |
|
43 | + $this->user = $value; |
|
44 | + } |
|
45 | + |
|
46 | + /** |
|
47 | + * Indicates if special log users are known. |
|
48 | + * |
|
49 | + * @return bool True if we do have to log some specific user. False otherwise. |
|
50 | + */ |
|
51 | + public function HasSpecialLogUsers() { |
|
52 | + return !empty($this->specialLogUsers); |
|
53 | + } |
|
54 | + |
|
55 | + /** |
|
56 | + * Indicates if the user is in the special log users. |
|
57 | + * |
|
58 | + * @param string $user |
|
59 | + * |
|
60 | + * @return bool |
|
61 | + */ |
|
62 | + public function IsUserInSpecialLogUsers($user) { |
|
63 | + if (isset($this->isUserInSpecialLogUsers[$user])) { |
|
64 | + return true; |
|
65 | + } |
|
66 | + if ($this->HasSpecialLogUsers()) { |
|
67 | + $specialLogUsers = $this->GetSpecialLogUsers(); |
|
68 | + if (array_search($user, $specialLogUsers, true) !== false) { |
|
69 | + $this->isUserInSpecialLogUsers[$user] = true; |
|
70 | + |
|
71 | + return true; |
|
72 | + } |
|
73 | + } |
|
74 | + |
|
75 | + return false; |
|
76 | + } |
|
77 | + |
|
78 | + /** |
|
79 | + * Returns the current special log users array. |
|
80 | + * |
|
81 | + * @return array |
|
82 | + */ |
|
83 | + public function GetSpecialLogUsers() { |
|
84 | + return $this->specialLogUsers; |
|
85 | + } |
|
86 | + |
|
87 | + /** |
|
88 | + * Sets the current special log users array. |
|
89 | + */ |
|
90 | + public function SetSpecialLogUsers(array $value) { |
|
91 | + $this->isUserInSpecialLogUsers = []; // reset cache |
|
92 | + $this->specialLogUsers = $value; |
|
93 | + } |
|
94 | + |
|
95 | + /** |
|
96 | + * Check that the current login user is in the special log user array. |
|
97 | + * This call is equivalent to `$this->IsUserInSpecialLogUsers($this->GetUser())` at the exception that this |
|
98 | + * call uses cache so there won't be more than one check to the specialLogUser for the login user. |
|
99 | + * |
|
100 | + * @return bool true if user exist in special log user array else false |
|
101 | + */ |
|
102 | + public function IsAuthUserInSpecialLogUsers() { |
|
103 | + if ($this->isAuthUserInSpecialLogUsers) { |
|
104 | + return true; |
|
105 | + } |
|
106 | + if ($this->IsUserInSpecialLogUsers($this->GetUser())) { |
|
107 | + $this->isAuthUserInSpecialLogUsers = true; |
|
108 | + |
|
109 | + return true; |
|
110 | + } |
|
111 | + |
|
112 | + return false; |
|
113 | + } |
|
114 | + |
|
115 | + /** |
|
116 | + * Logs a message with a given log level. |
|
117 | + * |
|
118 | + * @param {int} $logLevel The log level which will be configured in config file |
|
119 | + * @param {string} $message The log message which we want to log in user specific log file |
|
120 | + * @param {boolean|array} $detailMessage (optional) The detailed log message. it can be Error/Exception array. |
|
121 | + * @param {boolean|array} $request (optional) The request log the the request data which sent by the user |
|
122 | + */ |
|
123 | + public function Log($logLevel, $message, $detailMessage = false, $request = false) { |
|
124 | + if ($logLevel <= LOG_USER_LEVEL) { |
|
125 | + if ($this->IsAuthUserInSpecialLogUsers()) { |
|
126 | + $this->Write($logLevel, $message, $detailMessage, $request); |
|
127 | + } |
|
128 | + } |
|
129 | + } |
|
130 | + |
|
131 | + /** |
|
132 | + * Returns the string representation of the given $loglevel. |
|
133 | + * |
|
134 | + * @param {int} $loglevel one of the LOGLEVELs |
|
135 | + * |
|
136 | + * @return string |
|
137 | + */ |
|
138 | + protected function GetLogLevelString($loglevel) { |
|
139 | + switch ($loglevel) { |
|
140 | + case LOGLEVEL_OFF: return ""; break; |
|
141 | + |
|
142 | + case LOGLEVEL_FATAL: return "[FATAL]"; break; |
|
143 | + |
|
144 | + case LOGLEVEL_ERROR: return "[ERROR]"; break; |
|
145 | + |
|
146 | + case LOGLEVEL_WARN: return "[WARN]"; break; |
|
147 | + |
|
148 | + case LOGLEVEL_INFO: return "[INFO]"; break; |
|
149 | + |
|
150 | + case LOGLEVEL_DEBUG: return "[DEBUG]"; break; |
|
151 | + } |
|
152 | + } |
|
153 | + |
|
154 | + /** |
|
155 | + * Writes a log message to the general log. |
|
156 | + * |
|
157 | + * @param {int} $logLevel The log level which will be configured in config file |
|
158 | + * @param {string} $message The log message which we want to log in user specific log file |
|
159 | + * @param {boolean|array} $detailMessage (optional) The detailed log message. it can be Error/Exception array. |
|
160 | + * @param {boolean|array} $request (optional) The request log the the request data which sent by the user |
|
161 | + */ |
|
162 | + abstract protected function Write($logLevel, $message, $detailMessage, $request); |
|
163 | + } |