source: branches/2.3/security/classes/funcoes_auxiliares.php @ 5010

Revision 5010, 75.4 KB checked in by rafaelraymundo, 10 years ago (diff)

Ticket #2251 - No login/ "acolhimento" do certificado, não esta sendo testado se o mesmo esta revogado.

Line 
1<?php
2//  Conjunto de funcoes de apoio as Classes de tratamento do certificado digital.
3
4                function pega_path($chaves,$linha)
5                {
6                        if(!is_array($chaves) || !$linha)
7                                {
8                                        return false;
9                                }
10                        $ret = false;
11                        foreach($chaves as $chave)
12                                {
13                                        if(substr($linha,0,strlen($chave)) == $chave)
14                                                {
15                                                        $c = '';
16                                                        if(strpos($linha,'\'') > 0)
17                                                                {
18                                                                        $c = "'";
19                                                                }
20                                                        if(strpos($linha,'"') > 0)
21                                                                {
22                                                                        $c = '"';
23                                                                }
24                                                        if(!$c)
25                                                                {
26                                                                        break;
27                                                                }
28                                                        $data = explode($c,$linha);
29                                                        $ret = $data[1];
30                                                        break;
31                                                }
32                                }
33                        return $ret;
34                }
35
36        function ler_certificados_CAS($path,$flag=false)
37            {
38                // Ler o arquivo contendo certificados das Cas.
39                // Retorna array com os certificados formato PEM ...
40                $retorno = array();
41                if($flag === false)
42                    {
43                        if(!file_exists($path))
44                            {
45                                return $retorno;
46                            }
47                        $dados_do_arquivo = file_get_contents($path);
48                    }
49                 else
50                     {
51                        $dados_do_arquivo = $path;
52                     }
53                $inicio = '-----BEGIN CERTIFICATE-----';
54                $fim = '-----END CERTIFICATE-----';
55                $aux1 = explode($inicio,$dados_do_arquivo);
56                foreach($aux1 as $aux2)
57                    {
58                        if($aux2)
59                            {
60                                    $aux3 = explode($fim,$aux2);
61                                    $retorno[] =$inicio . $aux3[0] . $fim;
62                            }
63                    }
64                return $retorno;
65            }
66
67        function gera_xml_com_dados_do_certificado($dados)
68                {
69                    // Recebe array com dados de um certificado e gera o xml com estes dados.
70                    // As chaves formam os tags e os dados  o conteudo do tag ....
71                    $aux_xml = "<certificado>";
72                    if(is_array($dados))
73                        {
74                            foreach($dados as $K => $valor)
75                                    {
76                                        $aux_x = substr($K,0,1);
77                                        if(is_numeric($aux_x)) $K = 'oid-' . $K;
78                                        $K = trim($K);
79                                        if(!is_array($valor))
80                                            {
81                                                $aux_xml .= '<' . $K . '>'.$valor.'</' . $K . '>';
82                                            }
83                                        else
84                                            {
85                                                $aux_xml .= '<' . $K . '>';
86                                                foreach($valor as $KX => $valorx)
87                                                        {
88                                                            //$KX = trim($KX);
89                                                            if(is_int($KX))  $KX = 'D' . $KX;
90                                                            $KX = trim($KX);
91                                                            $aux_xml .= '<' . $KX . '>'.$valorx.'</' . $KX . '>';
92                                                        }
93                                                $aux_xml .= '</' . $K . '>';
94                                            }
95                                    }
96                        }
97                    $aux_xml .= "</certificado>";
98                    return  $aux_xml;
99                }
100
101        function data_hora($valor)
102        {
103                $aux = '00'.$valor;
104                return gmdate('YmdHis',data_hora_L($aux));
105        }
106
107        function data_hora_L($valor)
108        {
109                $year  = substr($valor, 2, 2);
110                $month = substr($valor, 4, 2);
111                $day   = substr($valor, 6, 2);
112                $hour  = substr($valor, 8, 2);
113                $min   = substr($valor, 10, 2);
114                $sec   = substr($valor, 12, 2);
115                return gmmktime($hour, $min, $sec, $month, $day, $year);
116        }
117
118        function gera_nome_arquivo_temporario($tab_arqs)
119        {
120                //include('Verifica_Certificado_conf.php');
121                if(!is_dir($GLOBALS['dirtemp']))
122                {
123                        #Se nao existe uma area de trabalho aborta a funcao..
124                        return false;
125                }
126                $lista = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
127                $N = $lista[rand(0,count($lista)-1)].date('U').$lista[rand(0,count($lista)-1)].RAND(12345,9999999999).$lista[rand(0,count($lista)-1)].$lista[rand(0,count($lista)-1)].RAND(12345,9999999999).'.tmp';
128                $aux = $GLOBALS['dirtemp'].'/'.$N;;
129                array_push($tab_arqs ,$aux);
130                return  $aux;
131        }
132
133
134        function grava_arquivo($arquivo,$dados)
135        {
136                $ret = file_put_contents($arquivo,$dados);
137                if(!$ret)
138                {
139                        return false;
140                }
141                else
142                        return $ret;
143        }
144
145
146        function deleta_arquivos_temporarios($tab_arqs)
147        {
148                foreach($tab_arqs as $arquivo )
149                        {
150                                if(file_exists($arquivo))
151                                        {
152                                                unlink($arquivo);
153                                        }
154                        }
155        }
156
157        function troca_espaco_por_mais($pem_data)
158        {
159            $begin = "CERTIFICATE-----";
160            $end   = "-----END";
161            $aux = substr($pem_data, strpos($pem_data, $begin)+strlen($begin));
162            $aux = substr($aux, 0, strpos($aux, $end));
163            $aux = strtr($aux,' ','+');
164            $aux = '-----BEGIN CERTIFICATE-----'.$aux.'-----END CERTIFICATE-----';
165            $aux = str_replace(chr(0x0A).chr(0x0A),chr(0x0A),str_replace(chr(0x0D).chr(0x0A),chr(0x0A), $aux));
166            return $aux;
167        }
168
169        function verificaopenssl()
170        {
171                if(extension_loaded('openssl'))
172                {
173                        return true;
174                }
175                else
176                        return false;
177        }
178
179
180        function print_hex($value)
181        {
182                $tab_val = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
183                for($A=0;$A<strlen($value);$A++)
184                        {
185                                $aux_parte_numerica =ord(substr($value,$A,1)) % 16;
186                                $aux_parte_zona = (ord(substr($value,$A,1)) - $aux_parte_numerica) / 16;
187                                $parte_numerica = $tab_val[$aux_parte_numerica];
188                                $parte_zona = $tab_val[$aux_parte_zona];
189                                $hex .=  $parte_zona.$parte_numerica;
190                        }
191                        return $hex;
192        }
193
194
195        function get_length($len,$bytes,$data)
196        {
197                $len = ord($data[1]);
198                $bytes = 0;
199                # Testa se tamanho menor/igual a 127 bytes..
200                # Neste caso $len  ja he o tamanho do conteudo
201                if ($len & 0x80)
202                        {
203                                # Testa se tamanho indefinido (nao deve ocorrer em uma codificação DER.
204                                if($len == chr(0x80))
205                                        {
206                                                # Tamanho indefinido, limitado por 0x0000h
207                                                $len = strpos($data,chr(0x00).chr(0x00));
208                                                $bytes = 0;
209                                        }
210                                else
211                                        {
212                                                # he tamanho definido. diz quantos bytes formam o tamanho....
213                                                $bytes = $len & 0x0f;
214                                                $len = 0;
215                                                for ($i = 0; $i < $bytes; $i++)
216                                                        {
217                                                                $len = ($len << 8) | ord($data[$i + 2]);
218                                                        }
219                                        }
220                        }
221        }
222
223        function xBase128($ab,$q,$flag )
224        {
225                $abc = $ab;
226                if( $q > 127 )
227                        {
228                                $abc = xBase128($abc, floor($q / 128), 0 );
229                        }
230                $q = $q % 128;
231                if( $flag)
232                        {
233                                $abc[] = $q;
234                        }
235                else
236                        {
237                                $abc[] = 0x80 | $q;
238                        }
239                return $abc;
240        }
241
242
243
244        function OIDtoHex($oid)
245        {
246                $abBinary = array();
247                $partes = explode('.',$oid);
248                $n = 0;
249                $b = 0;
250                for($n = 0; $n < count($partes); $n++)
251                {
252                        if($n==0)
253                                {
254                                        $b = 40 * $partes[$n];
255                                }
256                        elseif($n==1)
257                                {
258                                        $b +=  $partes[$n];
259                                        $abBinary[] = $b;
260                                }
261                        else
262                                {
263                                        $abBinary = xBase128($abBinary, $partes[$n], 1 );
264                                }
265                }
266                $value =chr(0x06) . chr(count($abBinary));
267                foreach($abBinary as $item)
268                {
269                        $value .= chr($item);
270                }
271                return $value;
272        }
273
274
275
276        function Crl_parseASN($data,$context_especific = false)
277        {
278        // Tabela de OIDs .
279                $_oids = array(
280                        '2.5.4.3' => 'CN',
281                        '2.5.4.4' => 'Surname',
282                        '2.5.4.6' => 'C',
283                        '2.5.4.7' => 'Cidade',
284                        '2.5.4.8' => 'Estatdo',
285                        '2.5.4.9' => 'StreetAddress',
286                        '2.5.4.10' => 'O',
287                        '2.5.4.11' => 'OU',
288                        '2.5.4.12' => 'Title',
289                        '2.5.4.20' => 'TelephoneNumber',
290                        '2.5.4.42' => 'GivenName',
291                        '2.5.29.14' => 'id-ce-subjectKeyIdentifier',
292                        '2.5.29.15' => 'id-ce-keyUsage',
293                        '2.5.29.17' => 'id-ce-subjectAltName',
294                        '2.5.29.19' => 'id-ce-basicConstraints',
295                        '2.5.29.20' => 'id-ce-cRLNumber',
296                        '2.5.29.31' => 'id-ce-CRLDistributionPoints',
297                        '2.5.29.32' => 'id-ce-certificatePolicies',
298                        '2.5.29.35' => 'id-ce-authorityKeyIdentifier',
299                        '2.5.29.37' => 'id-ce-extKeyUsage',
300                        '1.2.840.113549.1.9.1' => 'Email',
301                        '1.2.840.113549.1.1.1' => 'RSAEncryption',
302                        '1.2.840.113549.1.1.2' => 'md2WithRSAEncryption',
303                        '1.2.840.113549.1.1.4' => 'md5withRSAEncryption',
304                        '1.2.840.113549.1.1.5' => 'SHA-1WithRSAEncryption',
305                        '1.2.840.10040.4.3' => 'id-dsa-with-sha-1',
306                        '1.3.6.1.5.5.7.3.2' => 'id_kp_clientAuth',
307                        '1.3.6.1.5.5.7.3.4' => 'id_kp_securityemail',
308                        '1.3.6.1.5.5.7.2.1' => 'id_certificatePolicies',
309                        '2.16.840.1.113730.1.1' => 'netscape-cert-type',
310                        '2.16.840.1.113730.1.2' => 'netscape-base-url',
311                        '2.16.840.1.113730.1.3' => 'netscape-revocation-url',
312                        '2.16.840.1.113730.1.4' => 'netscape-ca-revocation-url',
313                        '2.16.840.1.113730.1.7' => 'netscape-cert-renewal-url',
314                        '2.16.840.1.113730.1.8' => 'netscape-ca-policy-url',
315                        '2.16.840.1.113730.1.12' => 'netscape-ssl-server-name',
316                        '2.16.840.1.113730.1.13' => 'netscape-comment',
317                        '2.16.76.1.2.1' => 'A1',
318                        '2.16.76.1.2.3' => 'A3',
319                        '2.16.76.1.2.1.16' => 'Certification Practice Statement pointer',
320                        '2.16.76.1.3.1' => 'Dados do cert parte 1',
321                        '2.16.76.1.3.5' => 'Dados do cert parte 2',
322                        '2.16.76.1.3.6' => 'Dados do cert parte 3',
323                        '0.9.2342.19200300.100.1.25' => ' domainComponent',
324                        '1.2.36.68980861.1.1.10' => ' Signet pilot',
325                        '1.2.36.68980861.1.1.11' => ' Signet intraNet',
326                        '1.2.36.68980861.1.1.2' => ' Signet personal',
327                        '1.2.36.68980861.1.1.20' => ' Signet securityPolicy',
328                        '1.2.36.68980861.1.1.3' => ' Signet business',
329                        '1.2.36.68980861.1.1.4' => ' Signet legal',
330                        '1.2.36.75878867.1.100.1.1' => ' Certificates Australia policyIdentifier',
331                        '1.2.752.34.1' => ' seis-cp',
332                        '1.2.752.34.1.1' => ' SEIS certificatePolicy-s10',
333                        '1.2.752.34.2' => ' SEIS pe',
334                        '1.2.752.34.3' => ' SEIS at',
335                        '1.2.752.34.3.1' => ' SEIS at-personalIdentifier',
336                        '1.2.840.10040.2.1' => ' holdinstruction-none',
337                        '1.2.840.10040.2.2' => ' holdinstruction-callissuer',
338                        '1.2.840.10040.2.3' => ' holdinstruction-reject',
339                        '1.2.840.10040.4.1' => ' dsa',
340                        '1.2.840.10040.4.3' => ' dsaWithSha1',
341                        '1.2.840.10045.1' => ' fieldType',
342                        '1.2.840.10045.1.1' => ' prime-field',
343                        '1.2.840.10045.1.2' => ' characteristic-two-field',
344                        '1.2.840.10045.1.2.1' => ' ecPublicKey',
345                        '1.2.840.10045.1.2.3' => ' characteristic-two-basis',
346                        '1.2.840.10045.1.2.3.1' => ' onBasis',
347                        '1.2.840.10045.1.2.3.2' => ' tpBasis',
348                        '1.2.840.10045.1.2.3.3' => ' ppBasis',
349                        '1.2.840.10045.2' => ' publicKeyType',
350                        '1.2.840.10045.2.1' => ' ecPublicKey',
351                        '1.2.840.10046.2.1' => ' dhPublicNumber',
352                        '1.2.840.113533.7' => ' nsn',
353                        '1.2.840.113533.7.65' => ' nsn-ce',
354                        '1.2.840.113533.7.65.0' => ' entrustVersInfo',
355                        '1.2.840.113533.7.66' => ' nsn-alg',
356                        '1.2.840.113533.7.66.10' => ' cast5CBC',
357                        '1.2.840.113533.7.66.11' => ' cast5MAC',
358                        '1.2.840.113533.7.66.12' => ' pbeWithMD5AndCAST5-CBC',
359                        '1.2.840.113533.7.66.13' => ' passwordBasedMac',
360                        '1.2.840.113533.7.66.3' => ' cast3CBC',
361                        '1.2.840.113533.7.67' => ' nsn-oc',
362                        '1.2.840.113533.7.67.0' => ' entrustUser',
363                        '1.2.840.113533.7.68' => ' nsn-at',
364                        '1.2.840.113533.7.68.0' => ' entrustCAInfo',
365                        '1.2.840.113533.7.68.10' => ' attributeCertificate',
366                        '1.2.840.113549.1.1' => ' pkcs-1',
367                        '1.2.840.113549.1.1.1' => ' rsaEncryption',
368                        '1.2.840.113549.1.1.2' => ' md2withRSAEncryption',
369                        '1.2.840.113549.1.1.3' => ' md4withRSAEncryption',
370                        '1.2.840.113549.1.1.4' => ' md5withRSAEncryption',
371                        '1.2.840.113549.1.1.5' => ' sha1withRSAEncryption',
372                        '1.2.840.113549.1.1.6' => ' rsaOAEPEncryptionSET',
373                        '1.2.840.113549.1.9.16.2.11' => 'SMIMEEncryptionKeyPreference',
374                        '1.2.840.113549.1.12' => ' pkcs-12',
375                        '1.2.840.113549.1.12.1' => ' pkcs-12-PbeIds',
376                        '1.2.840.113549.1.12.1.1' => ' pbeWithSHAAnd128BitRC4',
377                        '1.2.840.113549.1.12.1.2' => ' pbeWithSHAAnd40BitRC4',
378                        '1.2.840.113549.1.12.1.3' => ' pbeWithSHAAnd3-KeyTripleDES-CBC',
379                        '1.2.840.113549.1.12.1.4' => ' pbeWithSHAAnd2-KeyTripleDES-CBC',
380                        '1.2.840.113549.1.12.1.5' => ' pbeWithSHAAnd128BitRC2-CBC',
381                        '1.2.840.113549.1.12.1.6' => ' pbeWithSHAAnd40BitRC2-CBC',
382                        '1.2.840.113549.1.12.10' => ' pkcs-12Version1',
383                        '1.2.840.113549.1.12.10.1' => ' pkcs-12BadIds',
384                        '1.2.840.113549.1.12.10.1.1' => ' pkcs-12-keyBag',
385                        '1.2.840.113549.1.12.10.1.2' => ' pkcs-12-pkcs-8ShroudedKeyBag',
386                        '1.2.840.113549.1.12.10.1.3' => ' pkcs-12-certBag',
387                        '1.2.840.113549.1.12.10.1.4' => ' pkcs-12-crlBag',
388                        '1.2.840.113549.1.12.10.1.5' => ' pkcs-12-secretBag',
389                        '1.2.840.113549.1.12.10.1.6' => ' pkcs-12-safeContentsBag',
390                        '1.2.840.113549.1.12.2' => ' pkcs-12-ESPVKID',
391                        '1.2.840.113549.1.12.2.1' => ' pkcs-12-PKCS8KeyShrouding',
392                        '1.2.840.113549.1.12.3' => ' pkcs-12-BagIds',
393                        '1.2.840.113549.1.12.3.1' => ' pkcs-12-keyBagId',
394                        '1.2.840.113549.1.12.3.2' => ' pkcs-12-certAndCRLBagId',
395                        '1.2.840.113549.1.12.3.3' => ' pkcs-12-secretBagId',
396                        '1.2.840.113549.1.12.3.4' => ' pkcs-12-safeContentsId',
397                        '1.2.840.113549.1.12.3.5' => ' pkcs-12-pkcs-8ShroudedKeyBagId',
398                        '1.2.840.113549.1.12.4' => ' pkcs-12-CertBagID',
399                        '1.2.840.113549.1.12.4.1' => ' pkcs-12-X509CertCRLBagID',
400                        '1.2.840.113549.1.12.4.2' => ' pkcs-12-SDSICertBagID',
401                        '1.2.840.113549.1.12.5' => ' pkcs-12-OID',
402                        '1.2.840.113549.1.12.5.1' => ' pkcs-12-PBEID',
403                        '1.2.840.113549.1.12.5.1.1' => ' pkcs-12-PBEWithSha1And128BitRC4',
404                        '1.2.840.113549.1.12.5.1.2' => ' pkcs-12-PBEWithSha1And40BitRC4',
405                        '1.2.840.113549.1.12.5.1.3' => ' pkcs-12-PBEWithSha1AndTripleDESCBC',
406                        '1.2.840.113549.1.12.5.1.4' => ' pkcs-12-PBEWithSha1And128BitRC2CBC',
407                        '1.2.840.113549.1.12.5.1.5' => ' pkcs-12-PBEWithSha1And40BitRC2CBC',
408                        '1.2.840.113549.1.12.5.1.6' => ' pkcs-12-PBEWithSha1AndRC4',
409                        '1.2.840.113549.1.12.5.1.7' => ' pkcs-12-PBEWithSha1AndRC2CBC',
410                        '1.2.840.113549.1.12.5.2' => ' pkcs-12-EnvelopingID',
411                        '1.2.840.113549.1.12.5.2.1' => ' pkcs-12-RSAEncryptionWith128BitRC4',
412                        '1.2.840.113549.1.12.5.2.2' => ' pkcs-12-RSAEncryptionWith40BitRC4',
413                        '1.2.840.113549.1.12.5.2.3' => ' pkcs-12-RSAEncryptionWithTripleDES',
414                        '1.2.840.113549.1.12.5.3' => ' pkcs-12-SignatureID',
415                        '1.2.840.113549.1.12.5.3.1' => ' pkcs-12-RSASignatureWithSHA1Digest',
416                        '1.2.840.113549.1.3' => ' pkcs-3',
417                        '1.2.840.113549.1.3.1' => ' dhKeyAgreement',
418                        '1.2.840.113549.1.5' => ' pkcs-5',
419                        '1.2.840.113549.1.5.1' => ' pbeWithMD2AndDES-CBC',
420                        '1.2.840.113549.1.5.10' => ' pbeWithSHAAndDES-CBC',
421                        '1.2.840.113549.1.5.3' => ' pbeWithMD5AndDES-CBC',
422                        '1.2.840.113549.1.5.4' => ' pbeWithMD2AndRC2-CBC',
423                        '1.2.840.113549.1.5.6' => ' pbeWithMD5AndRC2-CBC',
424                        '1.2.840.113549.1.5.9' => ' pbeWithMD5AndXOR',
425                        '1.2.840.113549.1.7' => ' pkcs-7',
426                        '1.2.840.113549.1.7.1' => ' data',
427                        '1.2.840.113549.1.7.2' => ' signedData',
428                        '1.2.840.113549.1.7.3' => ' envelopedData',
429                        '1.2.840.113549.1.7.4' => ' signedAndEnvelopedData',
430                        '1.2.840.113549.1.7.5' => ' digestData',
431                        '1.2.840.113549.1.7.6' => ' encryptedData',
432                        '1.2.840.113549.1.7.7' => ' dataWithAttributes',
433                        '1.2.840.113549.1.7.8' => ' encryptedPrivateKeyInfo',
434                        '1.2.840.113549.1.9' => ' pkcs-9',
435                        '1.2.840.113549.1.9.1' => ' emailAddress',
436                        '1.2.840.113549.1.9.10' => ' issuerAndSerialNumber',
437                        '1.2.840.113549.1.9.11' => ' passwordCheck',
438                        '1.2.840.113549.1.9.12' => ' publicKey',
439                        '1.2.840.113549.1.9.13' => ' signingDescription',
440                        '1.2.840.113549.1.9.14' => ' extensionReq',
441                        '1.2.840.113549.1.9.15' => ' sMIMECapabilities',
442                        '1.2.840.113549.1.9.15.1' => ' preferSignedData',
443                        '1.2.840.113549.1.9.15.2' => ' canNotDecryptAny',
444                        '1.2.840.113549.1.9.15.3' => ' receiptRequest',
445                        '1.2.840.113549.1.9.15.4' => ' receipt',
446                        '1.2.840.113549.1.9.15.5' => ' contentHints',
447                        '1.2.840.113549.1.9.15.6' => ' mlExpansionHistory',
448                        '1.2.840.113549.1.9.16' => ' id-sMIME',
449                        '1.2.840.113549.1.9.16.0' => ' id-mod',
450                        '1.2.840.113549.1.9.16.0.1' => ' id-mod-cms',
451                        '1.2.840.113549.1.9.16.0.2' => ' id-mod-ess',
452                        '1.2.840.113549.1.9.16.1' => ' id-ct',
453                        '1.2.840.113549.1.9.16.1.1' => ' id-ct-receipt',
454                        '1.2.840.113549.1.9.16.2' => ' id-aa',
455                        '1.2.840.113549.1.9.16.2.1' => ' id-aa-receiptRequest',
456                        '1.2.840.113549.1.9.16.2.2' => ' id-aa-securityLabel',
457                        '1.2.840.113549.1.9.16.2.3' => ' id-aa-mlExpandHistory',
458                        '1.2.840.113549.1.9.16.2.4' => ' id-aa-contentHint',
459                        '1.2.840.113549.1.9.2' => ' unstructuredName',
460                        '1.2.840.113549.1.9.20' => ' friendlyName',
461                        '1.2.840.113549.1.9.21' => ' localKeyID',
462                        '1.2.840.113549.1.9.22' => ' certTypes',
463                        '1.2.840.113549.1.9.22.1' => ' x509Certificate',
464                        '1.2.840.113549.1.9.22.2' => ' sdsiCertificate',
465                        '1.2.840.113549.1.9.23' => ' crlTypes',
466                        '1.2.840.113549.1.9.23.1' => ' x509Crl',
467                        '1.2.840.113549.1.9.3' => ' contentType',
468                        '1.2.840.113549.1.9.4' => ' messageDigest',
469                        '1.2.840.113549.1.9.5' => ' signingTime',
470                        '1.2.840.113549.1.9.6' => ' countersignature',
471                        '1.2.840.113549.1.9.7' => ' challengePassword',
472                        '1.2.840.113549.1.9.8' => ' unstructuredAddress',
473                        '1.2.840.113549.1.9.9' => ' extendedCertificateAttributes',
474                        '1.2.840.113549.2' => ' digestAlgorithm',
475                        '1.2.840.113549.2.2' => ' md2',
476                        '1.2.840.113549.2.4' => ' md4',
477                        '1.2.840.113549.2.5' => ' md5',
478                        '1.2.840.113549.3' => ' encryptionAlgorithm',
479                        '1.2.840.113549.3.10' => ' desCDMF',
480                        '1.2.840.113549.3.2' => ' rc2CBC',
481                        '1.2.840.113549.3.3' => ' rc2ECB',
482                        '1.2.840.113549.3.4' => ' rc4',
483                        '1.2.840.113549.3.5' => ' rc4WithMAC',
484                        '1.2.840.113549.3.6' => ' DESX-CBC',
485                        '1.2.840.113549.3.7' => ' DES-EDE3-CBC',
486                        '1.2.840.113549.3.8' => ' RC5CBC',
487                        '1.2.840.113549.3.9' => ' RC5-CBCPad',
488                        '1.2.840.113556.4.3' => ' microsoftExcel',
489                        '1.2.840.113556.4.4' => ' titledWithOID',
490                        '1.2.840.113556.4.5' => ' microsoftPowerPoint',
491                        '1.3.133.16.840.9.84' => ' x9-84',
492                        '1.3.133.16.840.9.84.0' => ' x9-84-Module',
493                        '1.3.133.16.840.9.84.0.1' => ' x9-84-Biometrics',
494                        '1.3.133.16.840.9.84.0.2' => ' x9-84-CMS',
495                        '1.3.133.16.840.9.84.0.3' => ' x9-84-Identifiers',
496                        '1.3.133.16.840.9.84.1' => ' biometric',
497                        '1.3.133.16.840.9.84.1.0' => ' id-unknown-Type',
498                        '1.3.133.16.840.9.84.1.1' => ' id-body-Odor',
499                        '1.3.133.16.840.9.84.1.10' => ' id-palm',
500                        '1.3.133.16.840.9.84.1.11' => ' id-retina',
501                        '1.3.133.16.840.9.84.1.12' => ' id-signature',
502                        '1.3.133.16.840.9.84.1.13' => ' id-speech-Pattern',
503                        '1.3.133.16.840.9.84.1.14' => ' id-thermal-Image',
504                        '1.3.133.16.840.9.84.1.15' => ' id-vein-Pattern',
505                        '1.3.133.16.840.9.84.1.16' => ' id-thermal-Face-Image',
506                        '1.3.133.16.840.9.84.1.17' => ' id-thermal-Hand-Image',
507                        '1.3.133.16.840.9.84.1.18' => ' id-lip-Movement',
508                        '1.3.133.16.840.9.84.1.19' => ' id-gait',
509                        '1.3.133.16.840.9.84.1.2' => ' id-dna',
510                        '1.3.133.16.840.9.84.1.3' => ' id-ear-Shape',
511                        '1.3.133.16.840.9.84.1.4' => ' id-facial-Features',
512                        '1.3.133.16.840.9.84.1.5' => ' id-finger-Image',
513                        '1.3.133.16.840.9.84.1.6' => ' id-finger-Geometry',
514                        '1.3.133.16.840.9.84.1.7' => ' id-hand-Geometry',
515                        '1.3.133.16.840.9.84.1.8' => ' id-iris-Features',
516                        '1.3.133.16.840.9.84.1.9' => ' id-keystroke-Dynamics',
517                        '1.3.133.16.840.9.84.2' => ' processing-algorithm',
518                        '1.3.133.16.840.9.84.3' => ' matching-method',
519                        '1.3.133.16.840.9.84.4' => ' format-Owner',
520                        '1.3.133.16.840.9.84.4.0' => ' cbeff-Owner',
521                        '1.3.133.16.840.9.84.4.1' => ' ibia-Owner',
522                        '1.3.133.16.840.9.84.4.1.1' => ' id-ibia-SAFLINK',
523                        '1.3.133.16.840.9.84.4.1.10' => ' id-ibia-SecuGen',
524                        '1.3.133.16.840.9.84.4.1.11' => ' id-ibia-PreciseBiometric',
525                        '1.3.133.16.840.9.84.4.1.12' => ' id-ibia-Identix',
526                        '1.3.133.16.840.9.84.4.1.13' => ' id-ibia-DERMALOG',
527                        '1.3.133.16.840.9.84.4.1.14' => ' id-ibia-LOGICO',
528                        '1.3.133.16.840.9.84.4.1.15' => ' id-ibia-NIST',
529                        '1.3.133.16.840.9.84.4.1.16' => ' id-ibia-A3Vision',
530                        '1.3.133.16.840.9.84.4.1.17' => ' id-ibia-NEC',
531                        '1.3.133.16.840.9.84.4.1.18' => ' id-ibia-STMicroelectronics',
532                        '1.3.133.16.840.9.84.4.1.2' => ' id-ibia-Bioscrypt',
533                        '1.3.133.16.840.9.84.4.1.3' => ' id-ibia-Visionics',
534                        '1.3.133.16.840.9.84.4.1.4' => ' id-ibia-InfineonTechnologiesAG',
535                        '1.3.133.16.840.9.84.4.1.5' => ' id-ibia-IridianTechnologies',
536                        '1.3.133.16.840.9.84.4.1.6' => ' id-ibia-Veridicom',
537                        '1.3.133.16.840.9.84.4.1.7' => ' id-ibia-CyberSIGN',
538                        '1.3.133.16.840.9.84.4.1.8' => ' id-ibia-eCryp.',
539                        '1.3.133.16.840.9.84.4.1.9' => ' id-ibia-FingerprintCardsAB',
540                        '1.3.133.16.840.9.84.4.2' => ' x9-Owner',
541                        '1.3.14.2.26.5' => ' sha',
542                        '1.3.14.3.2.1.1' => ' rsa',
543                        '1.3.14.3.2.10' => ' desMAC',
544                        '1.3.14.3.2.11' => ' rsaSignature',
545                        '1.3.14.3.2.12' => ' dsa',
546                        '1.3.14.3.2.13' => ' dsaWithSHA',
547                        '1.3.14.3.2.14' => ' mdc2WithRSASignature',
548                        '1.3.14.3.2.15' => ' shaWithRSASignature',
549                        '1.3.14.3.2.16' => ' dhWithCommonModulus',
550                        '1.3.14.3.2.17' => ' desEDE',
551                        '1.3.14.3.2.18' => ' sha',
552                        '1.3.14.3.2.19' => ' mdc-2',
553                        '1.3.14.3.2.2' => ' md4WitRSA',
554                        '1.3.14.3.2.2.1' => ' sqmod-N',
555                        '1.3.14.3.2.20' => ' dsaCommon',
556                        '1.3.14.3.2.21' => ' dsaCommonWithSHA',
557                        '1.3.14.3.2.22' => ' rsaKeyTransport',
558                        '1.3.14.3.2.23' => ' keyed-hash-seal',
559                        '1.3.14.3.2.24' => ' md2WithRSASignature',
560                        '1.3.14.3.2.25' => ' md5WithRSASignature',
561                        '1.3.14.3.2.26' => ' sha1',
562                        '1.3.14.3.2.27' => ' dsaWithSHA1',
563                        '1.3.14.3.2.28' => ' dsaWithCommonSHA1',
564                        '1.3.14.3.2.29' => ' sha-1WithRSAEncryption',
565                        '1.3.14.3.2.3' => ' md5WithRSA',
566                        '1.3.14.3.2.3.1' => ' sqmod-NwithRSA',
567                        '1.3.14.3.2.4' => ' md4WithRSAEncryption',
568                        '1.3.14.3.2.6' => ' desECB',
569                        '1.3.14.3.2.7' => ' desCBC',
570                        '1.3.14.3.2.8' => ' desOFB',
571                        '1.3.14.3.2.9' => ' desCFB',
572                        '1.3.14.3.3.1' => ' simple-strong-auth-mechanism',
573                        '1.3.14.7.2.1.1' => ' ElGamal',
574                        '1.3.14.7.2.3.1' => ' md2WithRSA',
575                        '1.3.14.7.2.3.2' => ' md2WithElGamal',
576                        '1.3.36.3' => ' algorithm',
577                        '1.3.36.3.1' => ' encryptionAlgorithm',
578                        '1.3.36.3.1.1' => ' des',
579                        '1.3.36.3.1.1.1.1' => ' desECBPad',
580                        '1.3.36.3.1.1.1.1.1' => ' desECBPadISO',
581                        '1.3.36.3.1.1.2.1' => ' desCBCPad',
582                        '1.3.36.3.1.1.2.1.1' => ' desCBCPadISO',
583                        '1.3.36.3.1.2' => ' idea',
584                        '1.3.36.3.1.2.1' => ' ideaECB',
585                        '1.3.36.3.1.2.1.1' => ' ideaECBPad',
586                        '1.3.36.3.1.2.1.1.1' => ' ideaECBPadISO',
587                        '1.3.36.3.1.2.2' => ' ideaCBC',
588                        '1.3.36.3.1.2.2.1' => ' ideaCBCPad',
589                        '1.3.36.3.1.2.2.1.1' => ' ideaCBCPadISO',
590                        '1.3.36.3.1.2.3' => ' ideaOFB',
591                        '1.3.36.3.1.2.4' => ' ideaCFB',
592                        '1.3.36.3.1.3' => ' des-3',
593                        '1.3.36.3.1.3.1.1' => ' des-3ECBPad',
594                        '1.3.36.3.1.3.1.1.1' => ' des-3ECBPadISO',
595                        '1.3.36.3.1.3.2.1' => ' des-3CBCPad',
596                        '1.3.36.3.1.3.2.1.1' => ' des-3CBCPadISO',
597                        '1.3.36.3.2' => ' hashAlgorithm',
598                        '1.3.36.3.2.1' => ' ripemd160',
599                        '1.3.36.3.2.2' => ' ripemd128',
600                        '1.3.36.3.2.3' => ' ripemd256',
601                        '1.3.36.3.2.4' => ' mdc2singleLength',
602                        '1.3.36.3.2.5' => ' mdc2doubleLength',
603                        '1.3.36.3.3' => ' signatureAlgorithm',
604                        '1.3.36.3.3.1' => ' rsa',
605                        '1.3.36.3.3.1.1' => ' rsaMitSHA-1',
606                        '1.3.36.3.3.1.2' => ' rsaMitRIPEMD160',
607                        '1.3.36.3.3.2' => ' ellipticCurve',
608                        '1.3.36.3.4' => ' signatureScheme',
609                        '1.3.36.3.4.1' => ' iso9796-1',
610                        '1.3.36.3.4.2.1' => ' iso9796-2',
611                        '1.3.36.3.4.2.2' => ' iso9796-2rsa',
612                        '1.3.36.4' => ' attribute',
613                        '1.3.36.5' => ' policy',
614                        '1.3.36.6' => ' api',
615                        '1.3.36.6.1' => ' manufacturerSpecific',
616                        '1.3.36.6.2' => ' functionalitySpecific',
617                        '1.3.36.7' => ' api',
618                        '1.3.36.7.1' => ' keyAgreement',
619                        '1.3.36.7.2' => ' keyTransport',
620                        '1.3.6.1.4.1.2428.10.1.1' => ' UNINETT policyIdentifier',
621                        '1.3.6.1.4.1.2712.10' => ' ICE-TEL policyIdentifier',
622                        '1.3.6.1.4.1.3029.32.1' => ' cryptlibEnvelope',
623                        '1.3.6.1.4.1.3029.32.2' => ' cryptlibPrivateKey',
624                        '1.3.6.1.4.1.311' => ' Microsoft OID',
625                        '1.3.6.1.4.1.311.10' => ' Crypto 2.0',
626                        '1.3.6.1.4.1.311.10.1' => ' certTrustList',
627                        '1.3.6.1.4.1.311.10.1.1' => ' szOID_SORTED_CTL',
628                        '1.3.6.1.4.1.311.10.10' => ' Microsoft CMC OIDs',
629                        '1.3.6.1.4.1.311.10.10.1' => ' szOID_CMC_ADD_ATTRIBUTES',
630                        '1.3.6.1.4.1.311.10.11' => ' Microsoft certificate property OIDs',
631                        '1.3.6.1.4.1.311.10.11.1' => ' szOID_CERT_PROP_ID_PREFIX',
632                        '1.3.6.1.4.1.311.10.12' => ' CryptUI',
633                        '1.3.6.1.4.1.311.10.12.1' => ' szOID_ANY_APPLICATION_POLICY',
634                        '1.3.6.1.4.1.311.10.2' => ' nextUpdateLocation',
635                        '1.3.6.1.4.1.311.10.3.1' => ' certTrustListSigning',
636                        '1.3.6.1.4.1.311.10.3.10' => ' szOID_KP_QUALIFIED_SUBORDINATION',
637                        '1.3.6.1.4.1.311.10.3.11' => ' szOID_KP_KEY_RECOVERY',
638                        '1.3.6.1.4.1.311.10.3.12' => ' szOID_KP_DOCUMENT_SIGNING',
639                        '1.3.6.1.4.1.311.10.3.2' => ' timeStampSigning',
640                        '1.3.6.1.4.1.311.10.3.3' => ' serverGatedCrypto',
641                        '1.3.6.1.4.1.311.10.3.3.1' => ' szOID_SERIALIZED',
642                        '1.3.6.1.4.1.311.10.3.4' => ' encryptedFileSystem',
643                        '1.3.6.1.4.1.311.10.3.4.1' => ' szOID_EFS_RECOVERY',
644                        '1.3.6.1.4.1.311.10.3.5' => ' szOID_WHQL_CRYPTO',
645                        '1.3.6.1.4.1.311.10.3.6' => ' szOID_NT5_CRYPTO',
646                        '1.3.6.1.4.1.311.10.3.7' => ' szOID_OEM_WHQL_CRYPTO',
647                        '1.3.6.1.4.1.311.10.3.8' => ' szOID_EMBEDDED_NT_CRYPTO',
648                        '1.3.6.1.4.1.311.10.3.9' => ' szOID_ROOT_LIST_SIGNER',
649                        '1.3.6.1.4.1.311.10.4.1' => ' yesnoTrustAttr',
650                        '1.3.6.1.4.1.311.10.5.1' => ' szOID_DRM',
651                        '1.3.6.1.4.1.311.10.5.2' => ' szOID_DRM_INDIVIDUALIZATION',
652                        '1.3.6.1.4.1.311.10.6.1' => ' szOID_LICENSES',
653                        '1.3.6.1.4.1.311.10.6.2' => ' szOID_LICENSE_SERVER',
654                        '1.3.6.1.4.1.311.10.7' => ' szOID_MICROSOFT_RDN_PREFIX',
655                        '1.3.6.1.4.1.311.10.7.1' => ' szOID_KEYID_RDN',
656                        '1.3.6.1.4.1.311.10.8.1' => ' szOID_REMOVE_CERTIFICATE',
657                        '1.3.6.1.4.1.311.10.9.1' => ' szOID_CROSS_CERT_DIST_POINTS',
658                        '1.3.6.1.4.1.311.12' => ' Catalog',
659                        '1.3.6.1.4.1.311.12.1.1' => ' szOID_CATALOG_LIST',
660                        '1.3.6.1.4.1.311.12.1.2' => ' szOID_CATALOG_LIST_MEMBER',
661                        '1.3.6.1.4.1.311.12.2.1' => ' CAT_NAMEVALUE_OBJID',
662                        '1.3.6.1.4.1.311.12.2.2' => ' CAT_MEMBERINFO_OBJID',
663                        '1.3.6.1.4.1.311.13' => ' Microsoft PKCS10 OIDs',
664                        '1.3.6.1.4.1.311.13.1' => ' szOID_RENEWAL_CERTIFICATE',
665                        '1.3.6.1.4.1.311.13.2.1' => ' szOID_ENROLLMENT_NAME_VALUE_PAIR',
666                        '1.3.6.1.4.1.311.13.2.2' => ' szOID_ENROLLMENT_CSP_PROVIDER',
667                        '1.3.6.1.4.1.311.13.2.3' => ' OS Version',
668                        '1.3.6.1.4.1.311.15' => ' Microsoft Java',
669                        '1.3.6.1.4.1.311.16' => ' Microsoft Outlook/Exchange',
670                        '1.3.6.1.4.1.311.16.4' => ' Outlook Express',
671                        '1.3.6.1.4.1.311.17' => ' Microsoft PKCS12 attributes',
672                        '1.3.6.1.4.1.311.17.1' => ' szOID_LOCAL_MACHINE_KEYSET',
673                        '1.3.6.1.4.1.311.18' => ' Microsoft Hydra',
674                        '1.3.6.1.4.1.311.19' => ' Microsoft ISPU Test',
675                        '1.3.6.1.4.1.311.2' => ' Authenticode',
676                        '1.3.6.1.4.1.311.2.1.10' => ' spcAgencyInfo',
677                        '1.3.6.1.4.1.311.2.1.11' => ' spcStatementType',
678                        '1.3.6.1.4.1.311.2.1.12' => ' spcSpOpusInfo',
679                        '1.3.6.1.4.1.311.2.1.14' => ' certExtensions',
680                        '1.3.6.1.4.1.311.2.1.15' => ' spcPelmageData',
681                        '1.3.6.1.4.1.311.2.1.18' => ' SPC_RAW_FILE_DATA_OBJID',
682                        '1.3.6.1.4.1.311.2.1.19' => ' SPC_STRUCTURED_STORAGE_DATA_OBJID',
683                        '1.3.6.1.4.1.311.2.1.20' => ' spcLink',
684                        '1.3.6.1.4.1.311.2.1.21' => ' individualCodeSigning',
685                        '1.3.6.1.4.1.311.2.1.22' => ' commercialCodeSigning',
686                        '1.3.6.1.4.1.311.2.1.25' => ' spcLink',
687                        '1.3.6.1.4.1.311.2.1.26' => ' spcMinimalCriteriaInfo',
688                        '1.3.6.1.4.1.311.2.1.27' => ' spcFinancialCriteriaInfo',
689                        '1.3.6.1.4.1.311.2.1.28' => ' spcLink',
690                        '1.3.6.1.4.1.311.2.1.29' => ' SPC_HASH_INFO_OBJID',
691                        '1.3.6.1.4.1.311.2.1.30' => ' SPC_SIPINFO_OBJID',
692                        '1.3.6.1.4.1.311.2.1.4' => ' spcIndirectDataContext',
693                        '1.3.6.1.4.1.311.2.2' => ' CTL for Software Publishers Trusted CAs',
694                        '1.3.6.1.4.1.311.2.2.1' => ' szOID_TRUSTED_CODESIGNING_CA_LIST',
695                        '1.3.6.1.4.1.311.2.2.2' => ' szOID_TRUSTED_CLIENT_AUTH_CA_LIST',
696                        '1.3.6.1.4.1.311.2.2.3' => ' szOID_TRUSTED_SERVER_AUTH_CA_LIST',
697                        '1.3.6.1.4.1.311.20' => ' Microsoft Enrollment Infrastructure',
698                        '1.3.6.1.4.1.311.20.1' => ' szOID_AUTO_ENROLL_CTL_USAGE',
699                        '1.3.6.1.4.1.311.20.2' => ' szOID_ENROLL_CERTTYPE_EXTENSION',
700                        '1.3.6.1.4.1.311.20.2.1' => ' szOID_ENROLLMENT_AGENT',
701                        '1.3.6.1.4.1.311.20.2.2' => ' szOID_KP_SMARTCARD_LOGON',
702                        '1.3.6.1.4.1.311.20.2.3' => ' szOID_NT_PRINCIPAL_NAME',
703                        '1.3.6.1.4.1.311.20.3' => ' szOID_CERT_MANIFOLD',
704                        '1.3.6.1.4.1.311.21' => ' Microsoft CertSrv Infrastructure',
705                        '1.3.6.1.4.1.311.21.1' => ' szOID_CERTSRV_CA_VERSION',
706                        '1.3.6.1.4.1.311.21.20' => ' Client Information',
707                        '1.3.6.1.4.1.311.25' => ' Microsoft Directory Service',
708                        '1.3.6.1.4.1.311.25.1' => ' szOID_NTDS_REPLICATION',
709                        '1.3.6.1.4.1.311.3' => ' Time Stamping',
710                        '1.3.6.1.4.1.311.3.2.1' => ' SPC_TIME_STAMP_REQUEST_OBJID',
711                        '1.3.6.1.4.1.311.30' => ' IIS',
712                        '1.3.6.1.4.1.311.31' => ' Windows updates and service packs',
713                        '1.3.6.1.4.1.311.31.1' => ' szOID_PRODUCT_UPDATE',
714                        '1.3.6.1.4.1.311.4' => ' Permissions',
715                        '1.3.6.1.4.1.311.40' => ' Fonts',
716                        '1.3.6.1.4.1.311.41' => ' Microsoft Licensing and Registration',
717                        '1.3.6.1.4.1.311.42' => ' Microsoft Corporate PKI (ITG)',
718                        '1.3.6.1.4.1.311.88' => ' CAPICOM',
719                        '1.3.6.1.4.1.311.88.1' => ' szOID_CAPICOM_VERSION',
720                        '1.3.6.1.4.1.311.88.2' => ' szOID_CAPICOM_ATTRIBUTE',
721                        '1.3.6.1.4.1.311.88.2.1' => ' szOID_CAPICOM_DOCUMENT_NAME',
722                        '1.3.6.1.4.1.311.88.2.2' => ' szOID_CAPICOM_DOCUMENT_DESCRIPTION',
723                        '1.3.6.1.4.1.311.88.3' => ' szOID_CAPICOM_ENCRYPTED_DATA',
724                        '1.3.6.1.4.1.311.88.3.1' => ' szOID_CAPICOM_ENCRYPTED_CONTENT',
725                        '1.3.6.1.5.5.7' => ' pkix',
726                        '1.3.6.1.5.5.7.1' => ' privateExtension',
727                        '1.3.6.1.5.5.7.1.1' => ' authorityInfoAccess',
728                        '1.3.6.1.5.5.7.12.2' => ' CMC Data',
729                        '1.3.6.1.5.5.7.2' => ' policyQualifierIds',
730                        '1.3.6.1.5.5.7.2.1' => ' cps',
731                        '1.3.6.1.5.5.7.2.2' => ' unotice',
732                        '1.3.6.1.5.5.7.3' => ' keyPurpose',
733                        '1.3.6.1.5.5.7.3.1' => ' serverAuth',
734                        '1.3.6.1.5.5.7.3.2' => ' clientAuth',
735                        '1.3.6.1.5.5.7.3.3' => ' codeSigning',
736                        '1.3.6.1.5.5.7.3.4' => ' emailProtection',
737                        '1.3.6.1.5.5.7.3.5' => ' ipsecEndSystem',
738                        '1.3.6.1.5.5.7.3.6' => ' ipsecTunnel',
739                        '1.3.6.1.5.5.7.3.7' => ' ipsecUser',
740                        '1.3.6.1.5.5.7.3.8' => ' timeStamping',
741                        '1.3.6.1.5.5.7.4' => ' cmpInformationTypes',
742                        '1.3.6.1.5.5.7.4.1' => ' caProtEncCert',
743                        '1.3.6.1.5.5.7.4.2' => ' signKeyPairTypes',
744                        '1.3.6.1.5.5.7.4.3' => ' encKeyPairTypes',
745                        '1.3.6.1.5.5.7.4.4' => ' preferredSymmAlg',
746                        '1.3.6.1.5.5.7.4.5' => ' caKeyUpdateInfo',
747                        '1.3.6.1.5.5.7.4.6' => ' currentCRL',
748                        '1.3.6.1.5.5.7.48.1' => ' ocsp',
749                        '1.3.6.1.5.5.7.48.2' => ' caIssuers',
750                        '1.3.6.1.5.5.8.1.1' => ' HMAC-MD5',
751                        '1.3.6.1.5.5.8.1.2' => ' HMAC-SHA',
752                        '2.16.840.1.101.2.1.1.1' => ' sdnsSignatureAlgorithm',
753                        '2.16.840.1.101.2.1.1.10' => ' mosaicKeyManagementAlgorithm',
754                        '2.16.840.1.101.2.1.1.11' => ' sdnsKMandSigAlgorithm',
755                        '2.16.840.1.101.2.1.1.12' => ' mosaicKMandSigAlgorithm',
756                        '2.16.840.1.101.2.1.1.13' => ' SuiteASignatureAlgorithm',
757                        '2.16.840.1.101.2.1.1.14' => ' SuiteAConfidentialityAlgorithm',
758                        '2.16.840.1.101.2.1.1.15' => ' SuiteAIntegrityAlgorithm',
759                        '2.16.840.1.101.2.1.1.16' => ' SuiteATokenProtectionAlgorithm',
760                        '2.16.840.1.101.2.1.1.17' => ' SuiteAKeyManagementAlgorithm',
761                        '2.16.840.1.101.2.1.1.18' => ' SuiteAKMandSigAlgorithm',
762                        '2.16.840.1.101.2.1.1.19' => ' mosaicUpdatedSigAlgorithm',
763                        '2.16.840.1.101.2.1.1.2' => ' mosaicSignatureAlgorithm',
764                        '2.16.840.1.101.2.1.1.20' => ' mosaicKMandUpdSigAlgorithms',
765                        '2.16.840.1.101.2.1.1.21' => ' mosaicUpdatedIntegAlgorithm',
766                        '2.16.840.1.101.2.1.1.22' => ' mosaicKeyEncryptionAlgorithm',
767                        '2.16.840.1.101.2.1.1.3' => ' sdnsConfidentialityAlgorithm',
768                        '2.16.840.1.101.2.1.1.4' => ' mosaicConfidentialityAlgorithm',
769                        '2.16.840.1.101.2.1.1.5' => ' sdnsIntegrityAlgorithm',
770                        '2.16.840.1.101.2.1.1.6' => ' mosaicIntegrityAlgorithm',
771                        '2.16.840.1.101.2.1.1.7' => ' sdnsTokenProtectionAlgorithm',
772                        '2.16.840.1.101.2.1.1.8' => ' mosaicTokenProtectionAlgorithm',
773                        '2.16.840.1.101.2.1.1.9' => ' sdnsKeyManagementAlgorithm',
774                        '2.16.840.1.113730.1' => ' cert-extension',
775                        '2.16.840.1.113730.1.1' => ' netscape-cert-type',
776                        '2.16.840.1.113730.1.10' => ' EntityLogo',
777                        '2.16.840.1.113730.1.11' => ' UserPicture',
778                        '2.16.840.1.113730.1.12' => ' netscape-ssl-server-name',
779                        '2.16.840.1.113730.1.13' => ' netscape-comment',
780                        '2.16.840.1.113730.1.2' => ' netscape-base-url',
781                        '2.16.840.1.113730.1.3' => ' netscape-revocation-url',
782                        '2.16.840.1.113730.1.4' => ' netscape-ca-revocation-url',
783                        '2.16.840.1.113730.1.7' => ' netscape-cert-renewal-url',
784                        '2.16.840.1.113730.1.8' => ' netscape-ca-policy-url',
785                        '2.16.840.1.113730.1.9' => ' HomePage-url',
786                        '2.16.840.1.113730.2' => ' data-type',
787                        '2.16.840.1.113730.2.1' => ' GIF',
788                        '2.16.840.1.113730.2.2' => ' JPEG',
789                        '2.16.840.1.113730.2.3' => ' URL',
790                        '2.16.840.1.113730.2.4' => ' HTML',
791                        '2.16.840.1.113730.2.5' => ' netscape-cert-sequence',
792                        '2.16.840.1.113730.2.6' => ' netscape-cert-url',
793                        '2.16.840.1.113730.3' => ' directory',
794                        '2.16.840.1.113730.4.1' => ' serverGatedCrypto',
795                        '2.16.840.1.113733.1.6.3' => ' Unknown Verisign extension',
796                        '2.16.840.1.113733.1.6.6' => ' Unknown Verisign extension',
797                        '2.16.840.1.113733.1.7.1.1' => ' Verisign certificatePolicy',
798                        '2.16.840.1.113733.1.7.1.1.1' => ' Unknown Verisign policy qualifier',
799                        '2.16.840.1.113733.1.7.1.1.2' => ' Unknown Verisign policy qualifier',
800                        '2.23.133' => ' TCPA',
801                        '2.23.133.1' => ' tcpa_specVersion',
802                        '2.23.133.2' => ' tcpa_attribute',
803                        '2.23.133.2.1' => ' tcpa_at_tpmManufacturer',
804                        '2.23.133.2.10' => ' tcpa_at_securityQualities',
805                        '2.23.133.2.11' => ' tcpa_at_tpmProtectionProfile',
806                        '2.23.133.2.12' => ' tcpa_at_tpmSecurityTarget',
807                        '2.23.133.2.13' => ' tcpa_at_foundationProtectionProfile',
808                        '2.23.133.2.14' => ' tcpa_at_foundationSecurityTarget',
809                        '2.23.133.2.15' => ' tcpa_at_tpmIdLabel',
810                        '2.23.133.2.2' => ' tcpa_at_tpmModel',
811                        '2.23.133.2.3' => ' tcpa_at_tpmVersion',
812                        '2.23.133.2.4' => ' tcpa_at_platformManufacturer',
813                        '2.23.133.2.5' => ' tcpa_at_platformModel',
814                        '2.23.133.2.6' => ' tcpa_at_platformVersion',
815                        '2.23.133.2.7' => ' tcpa_at_componentManufacturer',
816                        '2.23.133.2.8' => ' tcpa_at_componentModel',
817                        '2.23.133.2.9' => ' tcpa_at_componentVersion',
818                        '2.23.133.3' => ' tcpa_protocol',
819                        '2.23.133.3.1' => ' tcpa_prtt_tpmIdProtocol',
820                        '2.23.42.0' => ' contentType',
821                        '2.23.42.0.0' => ' PANData',
822                        '2.23.42.0.1' => ' PANToken',
823                        '2.23.42.0.2' => ' PANOnly',
824                        '2.23.42.1' => ' msgExt',
825                        '2.23.42.10' => ' national',
826                        '2.23.42.10.192' => ' Japan',
827                        '2.23.42.2' => ' field',
828                        '2.23.42.2.0' => ' fullName',
829                        '2.23.42.2.1' => ' givenName',
830                        '2.23.42.2.10' => ' amount',
831                        '2.23.42.2.2' => ' familyName',
832                        '2.23.42.2.3' => ' birthFamilyName',
833                        '2.23.42.2.4' => ' placeName',
834                        '2.23.42.2.5' => ' identificationNumber',
835                        '2.23.42.2.6' => ' month',
836                        '2.23.42.2.7' => ' date',
837                        '2.23.42.2.7.11' => ' accountNumber',
838                        '2.23.42.2.7.12' => ' passPhrase',
839                        '2.23.42.2.8' => ' address',
840                        '2.23.42.2.9' => ' telephone',
841                        '2.23.42.3' => ' attribute',
842                        '2.23.42.3.0' => ' cert',
843                        '2.23.42.3.0.0' => ' rootKeyThumb',
844                        '2.23.42.3.0.1' => ' additionalPolicy',
845                        '2.23.42.4' => ' algorithm',
846                        '2.23.42.5' => ' policy',
847                        '2.23.42.5.0' => ' root',
848                        '2.23.42.6' => ' module',
849                        '2.23.42.7' => ' certExt',
850                        '2.23.42.7.0' => ' hashedRootKey',
851                        '2.23.42.7.1' => ' certificateType',
852                        '2.23.42.7.2' => ' merchantData',
853                        '2.23.42.7.3' => ' cardCertRequired',
854                        '2.23.42.7.4' => ' tunneling',
855                        '2.23.42.7.5' => ' setExtensions',
856                        '2.23.42.7.6' => ' setQualifier',
857                        '2.23.42.8' => ' brand',
858                        '2.23.42.8.1' => ' IATA-ATA',
859                        '2.23.42.8.30' => ' Diners',
860                        '2.23.42.8.34' => ' AmericanExpress',
861                        '2.23.42.8.4' => ' VISA',
862                        '2.23.42.8.5' => ' MasterCard',
863                        '2.23.42.8.6011' => ' Novus',
864                        '2.23.42.9' => ' vendor',
865                        '2.23.42.9.0' => ' GlobeSet',
866                        '2.23.42.9.1' => ' IBM',
867                        '2.23.42.9.10' => ' Griffin',
868                        '2.23.42.9.11' => ' Certicom',
869                        '2.23.42.9.12' => ' OSS',
870                        '2.23.42.9.13' => ' TenthMountain',
871                        '2.23.42.9.14' => ' Antares',
872                        '2.23.42.9.15' => ' ECC',
873                        '2.23.42.9.16' => ' Maithean',
874                        '2.23.42.9.17' => ' Netscape',
875                        '2.23.42.9.18' => ' Verisign',
876                        '2.23.42.9.19' => ' BlueMoney',
877                        '2.23.42.9.2' => ' CyberCash',
878                        '2.23.42.9.20' => ' Lacerte',
879                        '2.23.42.9.21' => ' Fujitsu',
880                        '2.23.42.9.22' => ' eLab',
881                        '2.23.42.9.23' => ' Entrust',
882                        '2.23.42.9.24' => ' VIAnet',
883                        '2.23.42.9.25' => ' III',
884                        '2.23.42.9.26' => ' OpenMarket',
885                        '2.23.42.9.27' => ' Lexem',
886                        '2.23.42.9.28' => ' Intertrader',
887                        '2.23.42.9.29' => ' Persimmon',
888                        '2.23.42.9.3' => ' Terisa',
889                        '2.23.42.9.30' => ' NABLE',
890                        '2.23.42.9.31' => ' espace-net',
891                        '2.23.42.9.32' => ' Hitachi',
892                        '2.23.42.9.33' => ' Microsoft',
893                        '2.23.42.9.34' => ' NEC',
894                        '2.23.42.9.35' => ' Mitsubishi',
895                        '2.23.42.9.36' => ' NCR',
896                        '2.23.42.9.37' => ' e-COMM',
897                        '2.23.42.9.38' => ' Gemplus',
898                        '2.23.42.9.4' => ' RSADSI',
899                        '2.23.42.9.5' => ' VeriFone',
900                        '2.23.42.9.6' => ' TrinTech',
901                        '2.23.42.9.7' => ' BankGate',
902                        '2.23.42.9.8' => ' GTE',
903                        '2.23.42.9.9' => ' CompuSource',
904                        '2.5.29.1' => ' authorityKeyIdentifier',
905                        '2.5.29.10' => ' basicConstraints',
906                        '2.5.29.11' => ' nameConstraints',
907                        '2.5.29.12' => ' policyConstraints',
908                        '2.5.29.13' => ' basicConstraints',
909                        '2.5.29.14' => ' subjectKeyIdentifier',
910                        '2.5.29.15' => ' keyUsage',
911                        '2.5.29.16' => ' privateKeyUsagePeriod',
912                        '2.5.29.17' => ' subjectAltName',
913                        '2.5.29.18' => ' issuerAltName',
914                        '2.5.29.19' => ' basicConstraints',
915                        '2.5.29.2' => ' keyAttributes',
916                        '2.5.29.20' => ' cRLNumber',
917                        '2.5.29.21' => ' cRLReason',
918                        '2.5.29.22' => ' expirationDate',
919                        '2.5.29.23' => ' instructionCode',
920                        '2.5.29.24' => ' invalidityDate',
921                        '2.5.29.26' => ' issuingDistributionPoint',
922                        '2.5.29.27' => ' deltaCRLIndicator',
923                        '2.5.29.28' => ' issuingDistributionPoint',
924                        '2.5.29.29' => ' certificateIssuer',
925                        '2.5.29.3' => ' certificatePolicies',
926                        '2.5.29.30' => ' nameConstraints',
927                        '2.5.29.31' => ' cRLDistributionPoints',
928                        '2.5.29.32' => ' certificatePolicies',
929                        '2.5.29.33' => ' policyMappings',
930                        '2.5.29.34' => ' policyConstraints',
931                        '2.5.29.35' => ' authorityKeyIdentifier',
932                        '2.5.29.36' => ' policyConstraints',
933                        '2.5.29.37' => ' extKeyUsage',
934                        '2.5.29.4' => ' keyUsageRestriction',
935                        '2.5.29.5' => ' policyMapping',
936                        '2.5.29.6' => ' subtreesConstraint',
937                        '2.5.29.7' => ' subjectAltName',
938                        '2.5.29.8' => ' issuerAltName',
939                        '2.5.29.9' => ' subjectDirectoryAttributes',
940                        '2.5.4.0' => ' objectClass',
941                        '2.5.4.1' => ' aliasObjectName',
942                        '2.5.4.12' => ' title',
943                        '2.5.4.13' => ' description',
944                        '2.5.4.14' => ' searchGuide',
945                        '2.5.4.15' => ' businessCategory',
946                        '2.5.4.16' => ' postalAddress',
947                        '2.5.4.17' => ' postalCode',
948                        '2.5.4.18' => ' postOfficeBox',
949                        '2.5.4.19' => ' physicalDeliveryOfficeName',
950                        '2.5.4.2' => ' knowledgeInformation',
951                        '2.5.4.20' => ' telephoneNumber',
952                        '2.5.4.21' => ' telexNumber',
953                        '2.5.4.22' => ' teletexTerminalIdentifier',
954                        '2.5.4.23' => ' facsimileTelephoneNumber',
955                        '2.5.4.24' => ' x121Address',
956                        '2.5.4.25' => ' internationalISDNNumber',
957                        '2.5.4.26' => ' registeredAddress',
958                        '2.5.4.27' => ' destinationIndicator',
959                        '2.5.4.28' => ' preferredDeliveryMehtod',
960                        '2.5.4.29' => ' presentationAddress',
961                        '2.5.4.30' => ' supportedApplicationContext',
962                        '2.5.4.31' => ' member',
963                        '2.5.4.32' => ' owner',
964                        '2.5.4.33' => ' roleOccupant',
965                        '2.5.4.34' => ' seeAlso',
966                        '2.5.4.35' => ' userPassword',
967                        '2.5.4.36' => ' userCertificate',
968                        '2.5.4.37' => ' caCertificate',
969                        '2.5.4.38' => ' authorityRevocationList',
970                        '2.5.4.39' => ' certificateRevocationList',
971                        '2.5.4.40' => ' crossCertificatePair',
972                        '2.5.4.41' => ' givenName',
973                        '2.5.4.42' => ' givenName',
974                        '2.5.4.5' => ' serialNumber',
975                        '2.5.4.52' => ' supportedAlgorithms',
976                        '2.5.4.53' => ' deltaRevocationList',
977                        '2.5.4.58' => ' crossCertificatePair',
978                        '2.5.4.9' => ' streetAddress',
979                        '2.5.8' => ' X.500-Algorithms',
980                        '2.5.8.1' => ' X.500-Alg-Encryption',
981                        '2.5.8.1.1' => ' rsa',
982                        '2.16.76.1.1' => 'DPC',
983                        '2.16.76.1.1.0' => 'DPC da AC Raiz',
984                        '2.16.76.1.1.1' => 'DPC da AC Presidência',
985                        '2.16.76.1.1.2' => 'DPC da AC Serpro',
986                        '2.16.76.1.1.3' => 'DPC da SERASA Autoridade Certificadora Principal - ACP',
987                        '2.16.76.1.1.4' => 'DPC da SERASA Autoridade Certificadora - AC',
988                        '2.16.76.1.1.5' => 'DPC da AC CertiSign na ICP­Brasil',
989                        '2.16.76.1.1.6' => 'DPC da AC CertiSign SPB na ICP­Brasil',
990                        '2.16.76.1.1.7' => 'DPC da SERASA Certificadora Digital',
991                        '2.16.76.1.1.8' => 'DPC da AC SRF',
992                        '2.16.76.1.1.9' => 'DPC da AC CAIXA',
993                        '2.16.76.1.1.10' => 'DPC da AC CAIXA IN',
994                        '2.16.76.1.1.11' => 'DPC da AC CAIXA PJ',
995                        '2.16.76.1.1.12' => 'DPC da AC CAIXA PF',
996                        '2.16.76.1.1.13' => 'DPC da AC SERPRO SRF',
997                        '2.16.76.1.1.14' => 'DPC da Autoridade Certificadora CertiSign Múltipla',
998                        '2.16.76.1.1.15' => 'DPC da Autoridade Certificadora CertiSign para Secretaria da Receita Federal',
999                        '2.16.76.1.1.16' => 'DPC da AC SERASA SRF',
1000                        '2.16.76.1.1.17' => 'DPC da Autoridade Certificadora Imprensa Oficial ­ SP',
1001                        '2.16.76.1.1.18' => 'DPC da Autoridade Certificadora PRODEMGE',
1002                        '2.16.76.1.1.19' => 'DPC da Autoridade Certificadora do Sistema Justiça Federal - AC­JUS',
1003                        '2.16.76.1.1.20' => 'Declaração   de   Práticas   de   Certificação   da   Autoridade   Certificadora   do SERPRO Final - DPC SERPRO ACF',
1004                        '2.16.76.1.1' => 'DPC',
1005                        '2.16.76.1.1.21' => 'Declaração de Práticas de Certificação da Autoridade Certificadora SINCOR',
1006                        '2.16.76.1.1.22' => 'Declaração de Práticas de Certificação da Autoridade Certificadora Imprensa Oficial SP SRF',
1007                        '2.16.76.1.1.23' => 'Declaração de Práticas de Certificação da AC FENACOR',
1008                        '2.16.76.1.1.24' => 'Declaração de Práticas de Certificação da Autoridade Certificadora SERPRO­ JUS',
1009                        '2.16.76.1.1.25' => 'DPC da AC Caixa Justiça',
1010                        '2.16.76.1.1.26' => 'DPC da Autoridade Certificadora Imprensa Oficial SP (AC IMESP)',
1011                        '2.16.76.1.1.27' => 'DPC da Autoridade Certificadora PRODEMGE SRF',
1012                        '2.16.76.1.1.28' => 'Declaração de Práticas de Certificação da Autoridade Certificadora CertSign  para a Justiça',
1013                        '2.16.76.1.1.29' => 'DPC da AC SERASA JUS',
1014                        '2.16.76.1.2' => 'PC',
1015                        '2.16.76.1.2.1' => 'A1',
1016                        '2.16.76.1.2.1.1' => 'Política de Certificados da ACSERPRO para certificados SERPRO­SPB ­ PC SERPRO­SPB',
1017                        '2.16.76.1.2.1.2' => 'Política de Certificados para certificados da SERASA Autoridade Certificadora',
1018                        '2.16.76.1.2.1.3' => 'Política   de   Certificados   da   Autoridade   Certificadora   da   Presidência   da República - PCA1',
1019                        '2.16.76.1.2.1.4' => 'Política   de   Certificado   da   Autoridade   Certificadora   CertiSign   Certificadora Digital para o Sistema de Pagamentos Brasileiro na ICP­Brasil­ PC da AC CertiSign SPB na ICP­Brasil',
1020                        '2.16.76.1.2.1.5' => 'Política de Certificados SEPROA1',
1021                        '2.16.76.1.2.1.6' => 'Política de Certificado Digital para Certificado de Assinatura Digital Tipo A1 -  SERASA CD',
1022                        '2.16.76.1.2.1.7' => 'Política de Certificado de Assinatura Digital do Tipo A1 da AC Caixa IN',
1023                        '2.16.76.1.2.1.8' => 'Política de Certificado de Assinatura Digital do Tipo A1 da AC Caixa PF',
1024                        '2.16.76.1.2.1.9' => 'Política de Certificado de Assinatura Digital do Tipo A1 da AC Caixa PJ',
1025                        '2.16.76.1.2.1.10' => 'Política de Certificados  da  Autoridade  Certificadora  do  Serpro­SRF  para certificados de assinatura digital do tipo A1 (PCSerpro­SRFA1)',
1026                        '2.16.76.1.2.1.11' => 'Política de  Certificado de  Assinatura Digital do Tipo  A1 da  Autoridade  Certificadora  CertiSign  Múltipla  na  Infra­estrutura  de  Chaves  Públicas  Brasileira',
1027                        '2.16.76.1.2.1.12' => 'Política  de  Certificado  de   Assinatura   Digital   Tipo   A1   da   Autoridade  Certificadora CertiSign para a Secretaria da Receita Federal',
1028                        '2.16.76.1.2.1.13' => 'Política de Certificado de Assinatura Digital Tipo A1 da AC SERASA SRF',
1029                        '2.16.76.1.2.1.14' => 'Política  de Certificado  de  Assinatura   Digital   Tipo  A1  da  Autoridade Certificadora Imprensa Oficial ­ SP',
1030                        '2.16.76.1.2.1.15' => 'Política  de  Certificado  de  Assinatura   Digital  Tipo  A1  da  Autoridade  Certificadora PRODEMGE',
1031                        '2.16.76.1.2.1.16' => 'Política de Certificados SERPRO do Tipo A1 - PC SERPRO ACF A1',
1032                        '2.16.76.1.2.1.17' => 'Política de Certificados do SERPRO - SPB - PC SERPRO ACF SPB',
1033                        '2.16.76.1.2.1.18' => 'Política  de  Certificado  de  Assinatura  Digital  Tipo  A1  da  Autoridade Certificadora SINCOR',
1034                        '2.16.76.1.2.1.19' => 'Política de Certificado  de  Assinatura  Digital  Tipo  A1  da  Autoridade Certificadora SINCOR para Corretores de Seguros',
1035                        '2.16.76.1.2' => 'PC',
1036                        '2.16.76.1.2.1' => 'A1',
1037                        '2.16.76.1.2.1.20' => 'Política  de  Certificado  de  Assinatura  Digital  Tipo  A1  da  Autoridade Certificadora Imprensa Oficial SP SRF',
1038                        '2.16.76.1.2.1.21' => 'Política de Certificados SERPRO­JUS do tipo A1 ­ PCSERPROJUSA1',
1039                        '2.16.76.1.2.1.22' => 'Política de Certificado de Assinatura Digital do Tipo A1 da AC Caixa Justiça',
1040                        '2.16.76.1.2.1.23' => 'Política  de Certificado de  Assinatura  Tipo  A1 da  Autoridade  Certificadora PRODEMGE SRF',
1041                        '2.16.76.1.2.1.24' => 'Política de Certificado de Assinatura Digital Tipo A1 da Autoridade Certificadora CertiSign para a Justiça',
1042                        '2.16.76.1.2.1.25' => 'Política de Certificado Digital da AC  SERASA­JUS para Certificados Tipo A1',
1043                        '2.16.76.1.2' => 'PC',
1044                        '2.16.76.1.2.2' => 'A2',
1045                        '2.16.76.1.2.2.1' => 'Política de Certificado Digital para Certificado de Assinatura Digital  Tipo A2 - SERASA CD',
1046                        '2.16.76.1.2.2.2' => 'Política de Certificado Digital para Certificado de Assinatura Digital Tipo A2 da AC SERASA SRF',
1047                        '2.16.76.1.2.2.3' => 'Política  de  Certificado  de  Assinatura  Digital   do  Tipo  A2  da  Autoridade  Certificadora  CertiSign  últipla  na  Infra­estrutura  de Chaves Públicas Brasileira',
1048                        '2.16.76.1.2.2.4' => 'Política  de  Certificado  de  Assinatura  Digital  do Tipo  A2  da Autoridade Certificadora Imprensa Oficial ­ SP',
1049                        '2.16.76.1.2.2.5' => 'Política de Certificado de Assinatura Digital do Tipo A2 da AC Caixa Justiça',
1050                        '2.16.76.1.2.2.6' => 'Política de Certificado de Assinatura Digital Tipo A2 da Autoridade Certificadora CertiSign para a Justiça',
1051                        '2.16.76.1.2.2.7' => 'Política de Certificado  Digital da  AC SERASA­JUS para Certificados Tipo A2',
1052                        '2.16.76.1.2' => 'PC',
1053                        '2.16.76.1.2.3' => 'A3',
1054                        '2.16.76.1.2.3.1' => 'Política de Certificados da Autoridade Certificadora da Presidência da República - PC ACPR',
1055                        '2.16.76.1.2.3.2' => 'Política  de  Certificados   da  Autoridade  Certificadora do  SERPRO para certificados SERPRO do tipo A3 - PCSERPROA3',
1056                        '2.16.76.1.2.3.3' => 'Política de Certificado Digital para Certificado de Assinatura Digital Tipo A3 - SERASA CD',
1057                        '2.16.76.1.2.3.4' => 'Política de Certificados da Autoridade Certificadora do Serpro­SRF para certificados de assinatura digital do tipo A3 (PCSerpro­SRFA3)',
1058                        '2.16.76.1.2.3.5' => 'Política de Certificado de Assinatura Digital do Tipo A3 da  Autoridade Certificadora CertiSign Múltipla na Infra­estrutura de Chaves Públicas Brasileira',
1059                        '2.16.76.1.2.3.6' => 'Política de Certificado de Assinatura Digital Tipo A3 da Autoridade Certificadora CertiSign para a Secretaria da Receita Federal na Infra­estrutura de Chaves Públicas Brasileira',
1060                        '2.16.76.1.2.3.7' => 'Política de Certificado de Assinatura Digital do Tipo A3 da AC Caixa  IN',
1061                        '2.16.76.1.2.3.8' => 'Política de Certificado de Assinatura Digital do Tipo A3 da AC Caixa  PF',
1062                        '2.16.76.1.2.3.9' => 'Política de Certificado de Assinatura Digital do Tipo A3 da AC Caixa   PJ',
1063                        '2.16.76.1.2.3.10' => 'Política de Certificado de Assinatura Digital do Tipo A3 da AC SERASA SRF',
1064                        '2.16.76.1.2.3.11' => 'Política de Certificado de Assinatura Digital do Tipo A3 da  Autoridade Certificadora  Imprensa Oficial ­ SP',
1065                        '2.16.76.1.2.3.12' => 'Política de Certificado de Assinatura Digital do Tipo A3 da  Autoridade Certificadora PRODEMGE',
1066                        '2.16.76.1.2.3.13' => 'Política de Certificados SERPRO do Tipo A3 - PC SERPRO A3',
1067                        '2.16.76.1.2.3.14' => 'Política de Certificado de Assinatura Digital Tipo A3 da Autoridade Certificadora SINCOR',
1068                        '2.16.76.1.2.3.15' => 'Política de Certificado de Assinatura Digital Tipo A3 da Autoridade  Certificadora SINCOR para Corretores de Seguros',
1069                        '2.16.76.1.2.3.16' => 'Política de Certificado de Assinatura Digital Tipo A3 da Autoridade  Certificadora Imprensa Oficial SP SRF',
1070                        '2.16.76.1.2' => 'PC',
1071                        '2.16.76.1.2.3' => 'A3',
1072                        '2.16.76.1.2.3.17' => 'Política de Certificado da AC FENACOR A3',
1073                        '2.16.76.1.2.3.18' => 'Política  de  Certificados  SERPRO­JUS  do  tipo  A3 PCSERPROJUSA3',
1074                        '2.16.76.1.2.3.19' => 'Política de Certificado de Assinatura Digital do Tipo A3 da AC Caixa Justiça',
1075                        '2.16.76.1.2.3.20' => 'Política  de  Certificado  de  Assinatura   Tipo   A3   da   Autoridade Certificadora PRODEMGE SRF',
1076                        '2.16.76.1.2.3.21' => 'Política de Certificado de Assinatura Digital Tipo A3 da Autoridade  Certificadora CertiSign para a Justiça',
1077                        '2.16.76.1.2.3.22' => 'Política   de   Certificado   Digital   da   AC     SERASA­JUS   para Certificados Tipo A3',
1078                        '2.16.76.1.2' => 'PC',
1079                        '2.16.76.1.2.4' => 'A4',
1080                        '2.16.76.1.2.4.1' => 'Política de Certificado Digital para Certificado de Assinatura Digital  Tipo A4 - SERASA CD;',
1081                        '2.16.76.1.2.4.2' => 'VAGO',
1082                        '2.16.76.1.2.4.3' => 'Política de Certificado de Assinatura Digital do Tipo A4 da  Autoridade Certificadora CertiSign Múltipla na Infra­estrutura de Chaves Públicas Brasileira',
1083                        '2.16.76.1.2.4.4' => 'Política de Certificado de Assinatura Digital Tipo A4 da Autoridade Certificadora CertiSign para a Secretaria da Receita Federal na Infra­estrutura de Chaves Públicas Brasileira',
1084                        '2.16.76.1.2.4.5' => 'Política de Certificado de Assinatura Digital Tipo A4 da Autoridade Certificadora Imprensa Oficial ­ SP',
1085                        '2.16.76.1.2.4.6' => 'Política de Certificado de Assinatura Digital Tipo A4 da Autoridade Certificadora Imprensa Oficial - SP SRF',
1086                        '2.16.76.1.2.4.7' => 'Política   de   Certificado   de   Assinatura   Tipo   A4   da   Autoridade Certificadora PRODEMGE SRF',
1087                        '2.16.76.1.2.4.8' => 'Política de Certificado de Assinatura Digital Tipo A4 da Autoridade Certificadora CertiSign para a Justiça',
1088                        '2.16.76.1.2.4.9' => 'VAGO',
1089                        '2.16.76.1.2.4.10' => 'Política de Certificado Digital  a  AC SERASA­JUS  para Certificados Tipo A4',
1090                        '2.16.76.1.2' => 'PC',
1091                        '2.16.76.1.2.101' => 'S1',
1092                        '2.16.76.1.2.101.1' => 'Política de Certificado Digital para Certificado de Sigilo Tipo S1 -  SERASA CD',
1093                        '2.16.76.1.2.101.2' => 'Política de Certificado de Sigilo Tipo S1 da Autoridade Certificadora Imprensa Oficial ­ SP',
1094                        '2.16.76.1.2.101.3' => 'Política  de  Certificado  de  Sigilo  do  Tipo  S1  da   Autoridade Certificadora CertiSign Múltipla',
1095                        '2.16.76.1.2.101.4' => 'Política   de   Certificado   de   Sigilo   do   Tipo   S1   da   Autoridade Certificadora PRODEMGE',
1096                        '2.16.76.1.2.101.5' => 'Política de Certificado de Assinatura Digital do Tipo S1 da AC Caixa Justiça',
1097                        '2.16.76.1.2.101.6' => 'Política de Certificado de Assinatura Digital Tipo S1 da Autoridade Certificadora CertiSign para a Justiça',
1098                        '2.16.76.1.2.101.7' => 'Política   de   Certificado   Digital   da   AC     SERASA­JUS   para Cerficados Tipo S1',
1099                        '2.16.76.1.2' => 'PC',
1100                        '2.16.76.1.2.102' => 'S2',
1101                        '2.16.76.1.2.102.1' => 'Política de Certificado Digital para Certificado de Sigilo Tipo S2 - SERASA CD',
1102                        '2.16.76.1.2.102.2' => 'Política de Certificado de Sigilo Tipo S2 da Autoridade Certificadora Imprensa Oficial ­ SP',
1103                        '2.16.76.1.2.102.3' => 'Política   de   Certificado   de   Sigilo   do   Tipo   S2   da   Autoridade Certificadora CertiSign Múltipla',
1104                        '2.16.76.1.2.102.4' => 'Política de Certificado de Assinatura Digital do Tipo S2 da AC Caixa Justiça',
1105                        '2.16.76.1.2.102.5' => 'Política de Certificado de Assinatura Digital Tipo S2 da Autoridade Certificadora CertiSign para a Justiça',
1106                        '2.16.76.1.2.102.6' => 'Política  de  Certificado  Digital  da   AC  SERASA­JUS   para Certificados Tipo S2',
1107                        '2.16.76.1.2' => 'PC',
1108                        '2.16.76.1.2.103' => 'S3',
1109                        '2.16.76.1.2.103.1' => 'Política de Certificado Digital para Certificado de Sigilo Tipo S3 -  SERASA CD',
1110                        '2.16.76.1.2.103.2' => 'VAGO',
1111                        '2.16.76.1.2.103.3' => 'Política   de   Certificado   de   Sigilo   do   Tipo   S3   da   Autoridade Certificadora CertiSign Múltipla',
1112                        '2.16.76.1.2.103.4' => 'Política de Certificado de Sigilo Tipo S3 da Autoridade Certificadora Imprensa Oficial ­ SP',
1113                        '2.16.76.1.2.103.5' => 'Política de Certificado de Sigilo Tipo S3 da Autoridade Certificadora PRODEMGE',
1114                        '2.16.76.1.2.103.6' => 'Política de Certificado de Assinatura Digital do Tipo S3 da AC Caixa Justiça',
1115                        '2.16.76.1.2.103.7' => 'Política de Certificado de Assinatura Digital Tipo S3 da Autoridade Certificadora CertiSign para a Justiça',
1116                        '2.16.76.1.2.103.8' => 'Política   de   Certificado   Digital   da   AC     SERASA­JUS   para Certificados Tipo S3',
1117                        '2.16.76.1.2' => 'PC',
1118                        '2.16.76.1.2.104' => 'S4',
1119                        '2.16.76.1.2.104.1' => 'Política de Certificado Digital para Certificado de Sigilo Tipo S4 - SERASA CD',
1120                        '2.16.76.1.2.104.2' => 'VAGO',
1121                        '2.16.76.1.2.104.3' => 'Política   de   Certificado   de   Sigilo   do   Tipo   S4   da   Autoridade Certificadora CertiSign Múltipla',
1122                        '2.16.76.1.2.104.4' => 'Política de Certificado de Sigilo Tipo S4 da Autoridade Certificadora Imprensa Oficial ­ SP',
1123                        '2.16.76.1.2.104.5' => 'Política de Certificado de Assinatura Digital Tipo S4 da Autoridade Certificadora CertiSign para a Justiça',
1124                        '2.16.76.1.2.104.6' => 'Política   de   Certificado   Digital   da   AC     SERASA­JUS   para Certificados Tipo S4',
1125                        '2.16.76.1.2' => 'PC',
1126                        '2.16.76.1.2.201' => 'PC de AC',
1127                        '2.16.76.1.2.201.1' => 'PC da Serasa Autoridade Certificadora Principal - ACP',
1128                        '2.16.76.1.2.201.2' => 'PC da AC CertiSign na ICP­Brasil',
1129                        '2.16.76.1.2.201.3' => 'PC da AC SRF',
1130                        '2.16.76.1.2.201.4' => 'Política de Certificados da Autoridade Certificadora Caixa',
1131                        '2.16.76.1.2.201.5' => 'PC da Autoridade Certificadora do Sistema Justiça Federal - AC­ JUS',
1132                        '2.16.76.1.2.201.6' => 'PC da Autoridade Certificadora do SERPRO (AC SERPRO)',
1133                        '2.16.76.1.2.201.7' => 'PC da Autoridade Certificadora Imprensa Oficial SP (AC IMESP)',
1134                        '2.16.76.1.3' => 'Atributos Obrigatórios de Certificados',
1135                        '2.16.76.1.3.1' => 'campo otherName em certificado de pessoa física',
1136                        '2.16.76.1.3.2' => 'campo otherName em certificado de pessoa  jurídica',
1137                        '2.16.76.1.3.3' => 'campo otherName em certificado de pessoa  jurídica',
1138                        '2.16.76.1.3.4' => 'campo otherName em certificado de pessoa jurídica',
1139                        '2.16.76.1.3.5' => 'campo otherName em certificado de pessoa física',
1140                        '2.16.76.1.3.6' => 'campo otherName em certificado de pessoa física',
1141                        '2.16.76.1.3.7' => 'campo otherName em certificado de pessoa jurídica',
1142                        '2.16.76.1.4' => 'Atributos Opcionais de  Certificados',
1143                        '2.16.76.1.4.1' => 'Entidades Sindicais',
1144                        '2.16.76.1.4.1.1' => 'SINCOR',
1145                        '2.16.76.1.4.1.1.1' => 'Número de registro do corretor associado');
1146
1147
1148                $result = array();
1149
1150                while (strlen($data) > 1)
1151                {
1152                        $class = ord($data[0]);
1153                        switch ($class)
1154                        {
1155                                case 0x30:
1156                                        // Sequence
1157                                        $len = ord($data[1]);
1158                                        $bytes = 0;
1159                                        get_length(&$len,&$bytes,$data);
1160                                        $sequence_data = substr($data, 2 + $bytes, $len);
1161                                        $data = substr($data, 2 + $bytes + $len);
1162                                        $values = Crl_parseASN($sequence_data);
1163                                        if (!is_array($values) || is_string($values[0]))
1164                                        {
1165                                                $values = array($values);
1166                                        }
1167                                        $result[] = array('sequence (' . $len . ')' , $values);
1168                                        break;
1169
1170                                case 0x31:
1171                                        // Set of
1172                                        $len = ord($data[1]);
1173                                        $bytes = 0;
1174                                        get_length(&$len,&$bytes,$data);
1175                                        $sequence_data = substr($data, 2 + $bytes, $len);
1176                                        $data = substr($data, 2 + $bytes + $len);
1177                                        $result[] = array('set (' . $len . ')' , Crl_parseASN($sequence_data));
1178                                        break;
1179
1180                                case 0x01:
1181                                        // Boolean type
1182                                        $boolean_value = (ord($data[2]) == 0xff);
1183                                        $data = substr($data, 3);
1184                                        $result[] = array('boolean (1)' , $boolean_value);
1185                                        break;
1186
1187                                case 0x02:
1188                                        // Integer type
1189                                        $len = ord($data[1]);
1190                                        $bytes = 0;
1191                                        get_length(&$len,&$bytes,$data);
1192                                        $integer_data = substr($data, 2 + $bytes, $len);
1193                                        $data = substr($data, 2 + $bytes + $len);
1194                                        $result[] = array('integer(' . $len . ')', print_hex($integer_data));
1195                                        break;
1196                                        /*
1197                                        if($len == 16)
1198                                        {
1199                                                $result[] = array('integer(' . $len . ')', $integer_data);
1200                                                break;
1201                                        }
1202                                        else
1203                                        {
1204                                                $value = 0;
1205                                                if ($len <= 4)
1206                                                {
1207                                                        // Method works fine for small integers
1208                                                        for ($i = 0; $i < strlen($integer_data); $i++)
1209                                                        {
1210                                                                $value = ($value << 8) | ord($integer_data[$i]);
1211                                                        }
1212                                                }
1213                                                else
1214                                                {
1215                                                        // Method works for arbitrary length integers
1216                                                        if (extension_loaded('bcmath'))
1217                                                        {
1218                                                                for ($i = 0; $i < strlen($integer_data); $i++)
1219                                                                {
1220                                                                        $value = bcadd(bcmul($value, 256), ord($integer_data[$i]));
1221                                                                }
1222                                                        }
1223                                                        else
1224                                                        {
1225                                                                $value = -1;
1226                                                        }
1227                                                }
1228                                                $result[] = array('integer(' . $len . ')', $value);
1229                                                break;
1230                                        }
1231                                        */
1232                                case 0x03:
1233                                        // Bitstring type
1234                                        $len = ord($data[1]);
1235                                        $bytes = 0;
1236                                        get_length(&$len,&$bytes,$data);
1237                                        $bitstring_data = substr($data, 2+bytes ,  $len);
1238                                        $data = substr($data, 2 + $bytes + $len);
1239                                        //$result[] = array('bit string (' . $len . ')' ,Crl_parseASN($bitstring_data));
1240                                        $result[] = array('bit string (' . $len . ')' ,'UnsedBits:'.ord($bitstring_data[0]).':'.ord($bitstring_data[1]));
1241                                        break;
1242
1243                                case 0x04:
1244                                        // Octetstring type
1245                                        $len = ord($data[1]);
1246                                        $bytes = 0;
1247                                        get_length(&$len,&$bytes,$data);
1248                                        $octectstring_data = substr($data, 2 + $bytes, $len);
1249                                        $data = substr($data, 2 + $bytes + $len);
1250                                        if($context_especific)
1251                                        {
1252                                                $result[] = array('octet string(' . $len . ')'  , $octectstring_data);
1253                                        }
1254                                        else
1255                                        {
1256                                                $aux = array('octet string (' . $len . ')' , Crl_parseASN($octectstring_data));
1257                                                $aux_r = @substr($aux[1],0,7);
1258                                                if($aux_r == 'UNKNOWN')
1259                                                {
1260                                                    $aux = array('octet string (' . $len . ')' , print_hex($octectstring_data));
1261                                                }
1262                                                $result[]=$aux;
1263                                        }
1264
1265                                        break;
1266
1267                                case 0x0C:
1268                                        // UTF8 STRING
1269                                        $len = ord($data[1]);
1270                                        $bytes = 0;
1271                                        get_length(&$len,&$bytes,$data);
1272                                        $octectstring_data = substr($data, 2 + $bytes, $len);
1273                                        $data = substr($data, 2 + $bytes + $len);
1274                                        if($context_especific)
1275                                        {
1276                                                $result[] = array('utf8 string(' . $len . ')'  , $octectstring_data);
1277                                        }
1278                                        else
1279                                        {
1280                                                $result[] = array('utf8 string (' . $len . ')' , Crl_parseASN($octectstring_data));
1281                                        }
1282                                        break;
1283
1284                                case 0x05:
1285                                        // Null type
1286                                        $data = substr($data, 2);
1287                                        $result[] = array('null', null);
1288                                        break;
1289
1290                                case 0x06:
1291                                        // Object identifier type
1292                                        $len = ord($data[1]);
1293                                        $bytes = 0;
1294                                        get_length(&$len,&$bytes,$data);
1295                                        $oid_data = substr($data, 2 + $bytes, $len);
1296                                        $x_len = $data[1];
1297                                        $data = substr($data, 2 + $bytes + $len);
1298
1299                                        // Unpack the OID
1300                                        $plain  = floor(ord($oid_data[0]) / 40);
1301                                        $plain .= '.' . ord($oid_data[0]) % 40;
1302
1303                                        $value = 0;
1304                                        $i = 1;
1305                                        while ($i < strlen($oid_data))
1306                                        {
1307                                                $value = $value << 7;
1308                                                $value = $value | (ord($oid_data[$i]) & 0x7f);
1309
1310                                                if (!(ord($oid_data[$i]) & 0x80))
1311                                                {
1312                                                        $plain .= '.' . $value;
1313                                                        $value = 0;
1314                                                }
1315                                                $i++;
1316                                        }
1317
1318                                        if (isset($_oids[$plain]))
1319                                        {
1320                                                $result[] =  array('oid(' . $len . '): '  . $plain, $_oids[$plain]);
1321                                        }
1322                                        else
1323                                        {
1324                                                $result[] = array('oid(' . $len . '): '  . $plain, $plain);
1325                                        }
1326                                        break;
1327
1328                                case 0x16:
1329                                        // Character string type
1330                                        $len = ord($data[1]);
1331                                        $bytes = 0;
1332                                        get_length(&$len,&$bytes,$data);
1333                                        $string_data = substr($data, 2 + $bytes, $len);
1334                                        $data = substr($data, 2 + $bytes + $len);
1335                                        $result[] = array('IA5 String (' . $len . ')'  , $string_data);
1336                                        break;
1337
1338                                case 0x12:
1339                                case 0x14:
1340                                case 0x15:
1341                                case 0x81:
1342                                        // Character string type
1343                                        $len = ord($data[1]);
1344                                        $bytes = 0;
1345                                        get_length(&$len,&$bytes,$data);
1346                                        $string_data = substr($data, 2 + $bytes, $len);
1347                                        $data = substr($data, 2 + $bytes + $len);
1348                                        $result[] = array('string (' . $len . ')'  , $string_data);
1349                                        break;
1350
1351                                case 0x80:
1352                                        // Character string type
1353                                        $len = strlen($data)-2;
1354                                        $bytes = 0;
1355                                        //get_length(&$len,&$bytes,$data);
1356                                        $data_aux = $data;
1357                                        $string_data = substr($data, strlen($data)-20);
1358                                        $data = substr($data, 2 + $bytes + $len);
1359                                        $result[] = array('string (' . $len . ')'  , print_hex($string_data));
1360                                        break;
1361
1362                                case 0x13:
1363                                case 0x86:
1364                                        // Printable string type
1365                                        $len = ord($data[1]);
1366                                        $bytes = 0;
1367                                        get_length(&$len,&$bytes,$data);
1368                                        $string_data = substr($data, 2 + $bytes, $len);
1369                                        $data = substr($data, 2 + $bytes + $len);
1370                                        $result[] = array('Printable String (' . $len . ')'  , $string_data);
1371                                        break;
1372
1373                                case 0x17:
1374                                        // Time types
1375                                        $len = ord($data[1]);
1376                                        $bytes = 0;
1377                                        get_length(&$len,&$bytes,$data);
1378                                        $time_data = substr($data, 2 + $bytes, $len);
1379                                        $data = substr($data, 2 + $bytes + $len);
1380                                        $result[] = array('utctime (' . $len . ')'  , $time_data);
1381                                        break;
1382
1383                                case 0x82:
1384                                        // X509v3 extensions?
1385                                        $len = ord($data[1]);
1386                                        $bytes = 0;
1387                                        get_length(&$len,&$bytes,$data);
1388                                        $sequence_data = substr($data, 2 + $bytes, $len);
1389                                        $data = substr($data, 2 + $bytes + $len);
1390                                        $result[] = array('extension : X509v3 extensions (' . $len . ')'  , array(Crl_parseASN($sequence_data)));
1391                                        break;
1392
1393                                case 0xa0:
1394                                case 0xa4:
1395                                        // Extensions
1396                                        $len = ord($data[1]);
1397                                        $bytes = 0;
1398                                        get_length(&$len,&$bytes,$data);
1399                                        $extension_data = substr($data, 2 + $bytes, $len);
1400                                        $data = substr($data, 2 + $bytes + $len);
1401                                        $result[] = array('Context Especific (' . $len . ')' , array(Crl_parseASN($extension_data,true)));
1402                                        break;
1403
1404                                case 0xa3:
1405                                        // Extensions
1406                                        $len = ord($data[1]);
1407                                        $bytes = 0;
1408                                        get_length(&$len,&$bytes,$data);
1409                                        $extension_data = substr($data, 2 + $bytes, $len);
1410                                        $data = substr($data, 2 + $bytes + $len);
1411                                        $result[] = array('extension (0xA3)  (' . $len . ')' ,array(Crl_parseASN($extension_data)));
1412                                        break;
1413
1414                                case 0xe6:
1415                                        $extension_data = substr($data, 0, 1);
1416                                        $data = substr($data, 1);
1417                                        $result[] = array('extension (0xE6) (' . $len . ')'  , dechex($extension_data));
1418                                        break;
1419
1420                                case 0xa1:
1421                                        $extension_data = substr($data, 0, 1);
1422                                        $data = substr($data, 6);
1423                                        $result[] = array('extension (0xA1) (' . $len . ')'  , dechex($extension_data));
1424                                        break;
1425
1426                                default:
1427                                        // Unknown
1428                                        $result[] = 'UNKNOWN' .  $data;
1429                                        $data = '';
1430                                        break;
1431                        }
1432        }
1433
1434        return (count($result) > 1) ? $result : array_pop($result);
1435
1436   }
1437
1438   function openssl_to_timestamp ($in)
1439   {
1440        $year  = substr($in, 0, 4); /* NOTE: Yes, this returns a two digit year */
1441        $month = substr($in, 4, 2);
1442        $day   = substr($in, 6, 2);
1443        $hour  = substr($in, 8, 2);
1444        $min   = substr($in, 10, 2);
1445        $sec   = substr($in, 12, 2);
1446
1447        return gmmktime($hour, $min, $sec, $month, $day, $year);
1448        }
1449
1450#============================================================================================
1451# Transforma o certificado do formato PEM para o formato DER ...
1452function pem2der($pem_data)
1453        {
1454                $begin = "CERTIFICATE-----";
1455                $end   = "-----END";
1456                $pem_data = substr($pem_data, strpos($pem_data, $begin)+strlen($begin));
1457                $pem_data = substr($pem_data, 0, strpos($pem_data, $end));
1458                $der = base64_decode($pem_data);
1459                return $der;
1460        }
1461
1462
1463function testa_p7m($msg)
1464        {
1465                // oids pesquisadas:
1466                //                                1.2.840.113549.1.7.2     assinatura digital
1467                //                                 1.2.840.113549.1.7.3     envelopeddata
1468                $ZZ1 = explode('MIME-Version: 1.0',$msg);
1469                $ZZ2 = explode('filename="smime.p7m"',$ZZ1[count($ZZ1)-1]);
1470                $ZZ3 = str_replace(' ','',$ZZ2[count($ZZ2)-1]);
1471                $p7m_formato_der = base64_decode($ZZ3);
1472                $oid_hexa = OIDtoHex('1.2.840.113549.1.7.2');       // converte oid de texto para hexadecimal ...
1473                $partes = explode($oid_hexa,$p7m_formato_der);    // Faz o split pela oid...
1474                if(count($partes)>1)
1475                        {
1476                                        return 'signature' ;
1477                        }
1478                $oid_hexa = OIDtoHex('1.2.840.113549.1.7.3');
1479                $partes = explode($oid_hexa,$p7m_formato_der);    // Faz o split pela oid...
1480                if(count($partes)>1)
1481                        {
1482                                        return 'cipher' ;
1483                        }
1484                return 'normal';
1485        }
1486
1487
1488function parse_sequence($data)
1489        {
1490                $len = ord($data[1]);
1491                $bytes = 0;
1492                get_length(&$len,&$bytes,$data);                  // obtem tamanho da parte de dados da oid.
1493                $oid_data = substr($data,2 + $bytes,$len);    // Obtem porcao de bytes pertencentes a oid.
1494                $ret =  Crl_parseASN($oid_data);                 // parse dos dados da oid.
1495                return $ret;
1496        }
1497
1498function recupera_dados_oid($certificado_digital_formato_der, $oid)
1499        {
1500                // Esta função assume que a oid esta inserida dentro de uma estrutura do tipo "sequencia" , como primeiro elemento da estrutura...
1501                $oid_hexa = OIDtoHex($oid);     // converte oid de texto para hexadecimal ...
1502                $partes = explode($oid_hexa,$certificado_digital_formato_der);    // Faz o split pela oid...
1503                $retr = array();
1504                if(count($partes)>1)
1505                        {
1506                                for($i=1;$i<count($partes);$i++)
1507                                        {
1508                                                //O inicio da seq pode estar a 3 ou 2 digitos antes do inicio da oid .... depende do numero de bytes usados para  tamanho da seq.
1509                                                $xcv4 = substr($partes[$i-1],strlen($partes[$i-1])-4,4); // recupera da primeira parte os 4 ultimos digitos...
1510                                                $xcv3 = substr($partes[$i-1],strlen($partes[$i-1])-3,3); // recupera da primeira parte os 3 ultimos digitos...
1511                                                $xcv2 = substr($partes[$i-1],strlen($partes[$i-1])-2,2); // recupera da primeira parte os 2 ultimos digitos...
1512                                                if($xcv2[0] == chr(0x30))
1513                                                        {
1514                                                                $xcv = $xcv2;
1515                                                                $data = $xcv . $oid_hexa . $partes[$i];           // reconstroi a sequencia.....
1516                                                                $ret = parse_sequence($data);
1517
1518                                                                if($ret[0] != '')
1519                                                                        {
1520                                                                                $retr[] = $ret;
1521                                                                                continue;
1522                                                                        }
1523                                                        }
1524                                                if($xcv3[0] == chr(0x30))
1525                                                        {
1526                                                                $xcv = $xcv3;
1527                                                                $data = $xcv . $oid_hexa . $partes[$i];           // reconstroi a sequencia.....
1528                                                                $ret = parse_sequence($data);
1529                                                                if($ret[0] != '')
1530                                                                        {
1531                                                                                $retr[] = $ret;
1532                                                                                continue;
1533                                                                        }
1534                                                        }
1535                                                if($xcv4[0] == chr(0x30))
1536                                                        {
1537                                                                $xcv = $xcv4;
1538                                                                $data = $xcv . $oid_hexa . $partes[$i];           // reconstroi a sequencia.....
1539                                                                $ret = parse_sequence($data);
1540                                                                if($ret[0] != '')
1541                                                                        {
1542                                                                                $retr[] = $ret;
1543                                                                                continue;
1544                                                                        }
1545                                                        }
1546                                        }
1547                        }
1548                return $retr;
1549        }
1550
1551
1552# Recupera dados da oid passada como parametro.....
1553function parse($oid,$valor)
1554        {
1555                //
1556                //  OID's PESSOA FISICA = 2.16.76.1.3.1 ,  2.16.76.1.3.6 ,  2.16.76.1.3.5 ,  2.16.76.1.4.n ... as 2.16.1.4.n não são obrigatórias e ão sao tratadas..
1557                //
1558                //  OID's PESSOA JURIDICA = 2.16.76.1.3.4 ,  2.16.76.1.3.2 , 2.16.76.1.3.3 , 2.16.76.1.3.7
1559                //
1560                //  OID's EQUIPAMENTO/APLICAÇÃO = 2.16.76.1.3.8 ,  2.16.76.1.3.3 , 2.16.76.1.3.2 , 2.16.76.1.3.4
1561                //
1562                //  OID  para logon no NT:  1.3.6.1.4.1.311.20.2.3
1563                //
1564                $oids = array('2.16.76.1.3.1' => array('1'=>array('NASCIMENTO',8),
1565                                                               '2'=>array('CPF',11),
1566                                                               '3'=>array('NIS',11),
1567                                                               '4'=>array('RG',15),
1568                                                               '5'=>array('ORGAOUF',6)),
1569                                     '2.16.76.1.3.2' => array('1'=>array('NOMERESPONSAVELCERTIFICADO',0)),
1570                                     '2.16.76.1.3.3' => array('1'=>array('CNPJ',14)),
1571                                     '2.16.76.1.3.4' => array('1'=>array('NASCIMENTO',8),
1572                                                               '2'=>array('CPF',11),
1573                                                               '3'=>array('NIS',11),
1574                                                               '4'=>array('RG',15),
1575                                                               '5'=>array('ORGAOUF',6)),
1576                                     '2.16.76.1.3.5' => array('1'=>array('TITULO',12),
1577                                                              '2'=>array('ZONA',3),
1578                                                              '3'=>array('SECAO',4),
1579                                                              '4'=>array('TITULO_CIDADE_UF',0)),
1580                                     '2.16.76.1.3.6' => array('1'=>array('CADINSS',12)),
1581                                     '2.16.76.1.3.7' => array('1'=>array('CEI',12)),
1582                                     '2.16.76.1.3.8' => array('1'=>array('NOMEEMPRESARIAL',0)),
1583                                     '1.3.6.1.4.1.311.20.2.3' => array('1'=>array('NTNOMEPRINCIPAL',0)));
1584
1585                $resultado = array();
1586                $esta_oid = $oids[$oid];
1587                $p = 0;
1588                for($i=1;$i < count($esta_oid) + 1; $i++)
1589                        {
1590                                if($esta_oid[$i][1] == 0)
1591                                        {
1592                                                # se igual a zero, então esta apontando um ultimo elemento, iniciando em $p, até o fim dos dados
1593                                                $tamanho = strlen($valor) - $p;
1594                                        }
1595                                else
1596                                        {
1597                                                $tamanho = $esta_oid[$i][1];
1598                                        }
1599                                $resultado[$oid][$esta_oid[$i][0]] = substr($valor,$p,$tamanho);
1600                                // A linha logo abaixo he para manter compatibilidade com versoes anteriores... Sera desativada assim que possivel...
1601                                $resultado[$esta_oid[$i][0]] = substr($valor,$p,$tamanho);
1602                                $p = $p + $esta_oid[$i][1];
1603                        }
1604
1605                return $resultado;
1606        }
1607
1608
1609function subjectAltName($xx, $certificado_digital_formato_der)
1610        {
1611                $dados = array();
1612                $ret = recupera_dados_oid($certificado_digital_formato_der,'2.5.29.17');
1613                if(count($ret))
1614                {
1615                        if(substr($ret[0][1][0],0,12) == 'octet string')
1616                                {
1617                                        $ret = $ret[0][1][1][1];
1618                                }
1619                        else
1620                                {
1621                                        $ret = $ret[0][2][1][1];  // Se não iniciou por um octet string skipa para o próximo item na estrutura.
1622                                }
1623                        foreach($ret as $group)
1624                                {
1625                                        if(substr($group[0],0,17) == 'Context Especific')  // primeiro indice tem de ter o valor  'Context Especific' ...
1626                                                {
1627                                                        $oid = explode(':',$group[1][0][0][0]);   //  Pega o numero da oid.
1628                                                        $dados = array_merge(parse(trim($oid[1]), $group[1][0][1][1][0][1]),$dados); // Passa a oid e o seu valor para ser parseado....
1629                                                }
1630                                        if(substr($group[0],0,6) == 'string')
1631                                                {
1632                                                        if(strpos($group[1],'@'))                  //se he email tem de ter uma @.
1633                                                                {
1634                                                                        $aux_email = $group[1];
1635                                                                }
1636                                                }
1637                                }
1638                        // O  EMAIL foi localizado no loop de tratamento das OIDs.....
1639                        $dados['EMAIL'] = $aux_email;
1640                }
1641                return $dados;
1642        }
1643
1644
1645function CRLDistributionPointsxx($xx, $certificado_digital_formato_der)
1646        {
1647                $AUX = recupera_dados_oid($certificado_digital_formato_der,'2.5.29.31');
1648                echo '<br/><br/><br/><pre>';
1649                print_r($AUX);
1650                echo '</pre><br/><br/>';
1651                exit();
1652
1653
1654                $i=1;
1655                if(substr($AUX[0][1][0],0,7) == 'boolean')
1656                        {
1657                                $i=2;
1658                        }
1659                $AUX1 = $AUX[0][$i][1][1][0];
1660                // Pode existir mais de uma crl, mas vamos considerar apenas a primeira.....
1661                return array('CRLDISTRIBUTIONPOINTS' => $AUX1[1][0][1][0][1][0][1]);
1662        }
1663
1664function CRLDistributionPoints($xx, $certificado_digital_formato_der)
1665        {
1666                $AUX = recupera_dados_oid($certificado_digital_formato_der,'2.5.29.31');
1667                $i=1;
1668                if(substr($AUX[0][1][0],0,7) == 'boolean')
1669                        {
1670                                $i=2;
1671                        }
1672                $ret = array();
1673                if($AUX[0][$i][1][1])
1674                        {
1675                                if(is_array($AUX[0][$i][1][1]))
1676                                        {
1677                                                //Pode existir mais de um local para obter a CRL.
1678                                                foreach($AUX[0][$i][1][1] as $crl)
1679                                                  {
1680                                                      if(substr($crl[1][0][1][0][1][0][1],0,4) == 'http' || substr($crl[1][0][1][0][1][0][1],0,4) == 'ldap')
1681                                                        {
1682                                                                $ret[] = $crl[1][0][1][0][1][0][1];
1683                                                        }
1684                                                  }
1685                                          }
1686                        }
1687
1688                // Se $ret esta vazio tenta obter crls em outra estrutura(outro layout).
1689                if(count($ret) == 0)
1690                        {
1691                                if(is_array($AUX[0][1][1][1][0][1][0][1][0][1][0]))
1692                                        {
1693                                                //Pode existir mais de um local para obter a CRL.
1694                                                foreach($AUX[0][1][1][1][0][1][0][1][0][1][0]as $crl)
1695                                                        {
1696                                                                if(substr($crl[1],0,4) == 'http' || substr($crl[1],0,4) == 'ldap')
1697                                                                        {
1698                                                                                $ret[] = $crl[1];
1699                                                                        }
1700                                                        }
1701                                          }
1702                        }
1703
1704                return array('CRLDISTRIBUTIONPOINTS' => $ret);
1705        }
1706
1707
1708function SERIALNUMBER($cert_data,$KK)
1709        {
1710                $dados = array();
1711                if($cert_data[1][0][1][$KK][1])
1712                        {
1713                                $dados['SERIALNUMBER'] = $cert_data[1][0][1][$KK][1];
1714                        }
1715                return $dados;
1716        }
1717
1718function SUBJECT($cert_data,$KK)
1719        {
1720                $dados = array();
1721                $dados['SUBJECT'] = array();
1722                foreach($cert_data[1][0][1][$KK][1] as $AUX2)
1723                        {
1724                                $dados['SUBJECT'][trim($AUX2[1][1][0][1])] = $AUX2[1][1][1][1];
1725                        }
1726                        $AUX = explode(':',$dados['SUBJECT']['CN']);
1727                $dados['NOME'] = $AUX[0];
1728                return $dados;
1729        }
1730
1731function ISSUER($cert_data,$KK)
1732        {
1733                $dados = array();
1734                $dados['EMISSOR_CAMINHO_COMPLETO']  = array();
1735
1736                foreach($cert_data[1][0][1][$KK][1] as $AUX2)
1737                        {
1738                                $dados['EMISSOR_CAMINHO_COMPLETO'][$AUX2[1][1][0][1]] = $AUX2[1][1][1][1] ;
1739                        }
1740                $dados['EMISSOR'] = $dados['EMISSOR_CAMINHO_COMPLETO']['CN'];
1741                return $dados;
1742        }
1743
1744
1745function BEFOREAFTER($cert_data,$KK)
1746        {
1747                $dados = array();
1748                $dados['INICIO_VALIDADE'] = data_hora($cert_data[1][0][1][$KK][1][0][1]);
1749                $dados['FIM_VALIDADE'] = data_hora($cert_data[1][0][1][$KK][1][1][1]);
1750                $agora = data_hora(date('y').date('m').date('d').(date('H')).date('i').date('s'));
1751                if($agora < date("YmdHis",data_hora_L($dados['INICIO_VALIDADE'])) || $agora > date("YmdHis",data_hora_L($dados['FIM_VALIDADE'])))
1752                        {
1753                                $dados['EXPIRADO'] = true;
1754                        }
1755                else
1756                        {
1757                                $dados['EXPIRADO'] = false;
1758                        }
1759                return $dados;
1760                }
1761
1762               
1763function AUTHORITYKEYIDENTIFIER($xx, $certificado_digital_formato_der)
1764        {
1765                $dados = array();
1766                if (isset($certificado_digital_formato_der))
1767                        {
1768                                $caid = recupera_dados_oid($certificado_digital_formato_der,'2.5.29.35');
1769                                $i=1;
1770                                if(substr($caid[0][1][0],0,7) == 'boolean')
1771                                        {
1772                                                $i=2;
1773                                        }
1774                                $dados['AUTHORITYKEYIDENTIFIER'] = $caid[0][$i][1][1][0][1];
1775                        }
1776                else
1777                        {
1778                                // Se nao existir um valor, assume certificado auto assinado .....
1779                                $dados['AUTHORITYKEYIDENTIFIER'] = "auto-assinado";
1780                        }
1781                return $dados;
1782        }
1783
1784function KEYUSAGE($xx, $certificado_digital_formato_der)
1785        {
1786                $KeyUsage= array( 0x80 => 'digitalSignature',
1787                              0x40 => 'nonRepudiation',
1788                              0x20 => 'keyEncipherment',
1789                              0x10 => 'dataEncipherment',
1790                              0x08 => 'keyAgreement',
1791                              0x04 => 'keyCertSign',
1792                              0x02 => 'cRLSign');
1793
1794                $dados = array();
1795                if (isset($certificado_digital_formato_der))
1796                        {
1797                                $AUX = recupera_dados_oid($certificado_digital_formato_der,'2.5.29.15');  // busca oid do keyusage
1798                                $AUX = explode(':',$AUX[0][2][1][1]);
1799                                if(count($AUX) == 3)
1800                                        {
1801                                                foreach($KeyUsage as $chave => $valor)
1802                                                        {
1803                                                                if($AUX[2] & $chave)
1804                                                                        {
1805                                                                                $dados['KEYUSAGE'][$valor] = TRUE;
1806                                                                        }
1807                                                        }
1808                                        }
1809                        }
1810                return $dados;
1811        }
1812
1813function EXTKEYUSAGE($xx, $certificado_digital_formato_der)
1814        {
1815                $dados = array();
1816                if (isset($certificado_digital_formato_der))
1817                        {
1818                                $AUX = recupera_dados_oid($certificado_digital_formato_der,'2.5.29.37');  // busca oid do extkeyusage
1819                                $AUX1 = $AUX[0][count($AUX[0])-1];
1820                                if(count($AUX1) > 0)
1821                                {
1822                                foreach($AUX1[1][1] as $itens)
1823                                        {
1824                                                $AUX2 = explode(':',$itens[0]);
1825                                                $dados['EXTKEYUSAGE'][trim($itens[1])] =  trim($AUX2[1]);
1826                                        }
1827                                }
1828                        }
1829                return $dados;
1830        }
1831
1832function BASICCONSTRAINTS($xx, $certificado_digital_formato_der)
1833        {
1834                $dados = array();
1835                if (isset($certificado_digital_formato_der))
1836                        {
1837                                $AUX = recupera_dados_oid($certificado_digital_formato_der,'2.5.29.19');  // busca oid do BasicConstraints
1838                                if(count($AUX) > 0)
1839                                        {
1840                                                $dados['CA'] = $AUX[0][count($AUX[0])-1][1][1][0][1];
1841                                        }
1842                        }
1843                return $dados;
1844        }
1845
1846function recupera_dados_do_ceritificado_digital($certificado_digital_formato_pem)
1847        {
1848                $cert_der =  pem2der($certificado_digital_formato_pem);
1849
1850                $funcoes = array(SERIALNUMBER => 1,
1851                                        ISSUER => 3,
1852                                        BEFOREAFTER => 4,
1853                                        SUBJECT => 5,
1854                                        AUTHORITYKEYIDENTIFIER => $cert_der,
1855                                        KEYUSAGE => $cert_der,
1856                                        EXTKEYUSAGE => $cert_der,
1857                                        BASICCONSTRAINTS => $cert_der,
1858                                        CRLDistributionPoints =>  $cert_der,
1859                                        subjectAltName => $cert_der);
1860
1861                $dados=array();
1862
1863                $cert_data = Crl_parseASN( $cert_der);
1864
1865                foreach($funcoes as $funcao => $parametro)
1866                        {
1867                                $dados= array_merge($dados,$funcao($cert_data,$parametro));
1868                        }
1869
1870                if(!$dados['EMAIL'])
1871                        {
1872                                if(isset( $dados['SUBJECT']['emailAddress']))
1873                                        {
1874                                                $dados['EMAIL'] = $dados['SUBJECT']['emailAddress'];
1875                                        }
1876                        }
1877                return $dados;
1878        }
1879
1880#============================================================================================
1881
1882?>
Note: See TracBrowser for help on using the repository browser.