Index: trunk/security/classes/funcoes_auxiliares.php
===================================================================
--- trunk/security/classes/funcoes_auxiliares.php	(revision 1174)
+++ trunk/security/classes/funcoes_auxiliares.php	(revision 1574)
@@ -1388,5 +1388,5 @@
 					// Unknown
 					$result[] = 'UNKNOWN' .  $data;;
-					//file_put_contents('/opt/lampp/htdocs/security/temp/arquivo_desconhecido.txt',$data);
+					//file_put_contents('/opt/lampp/htdocs/seguranca/temp/arquivo_desconhecido.txt',$data);
 					$data = '';
 					break;
@@ -1423,10 +1423,45 @@
 
 
+function testa_p7m($msg)
+	{
+		// oids pesquisadas: 
+		//                                1.2.840.113549.1.7.2     assinatura digital
+		//                                 1.2.840.113549.1.7.3     envelopeddata
+		$ZZ1 = explode('MIME-Version: 1.0',$msg);
+		$ZZ2 = explode('filename="smime.p7m"',$ZZ1[count($ZZ1)-1]);
+		$ZZ3 = str_replace(' ','',$ZZ2[count($ZZ2)-1]);
+		$p7m_formato_der = base64_decode($ZZ3);
+	        $oid_hexa = OIDtoHex('1.2.840.113549.1.7.2');       // converte oid de texto para hexadecimal ...
+		$partes = explode($oid_hexa,$p7m_formato_der);    // Faz o split pela oid...
+		if(count($partes)>1)
+			{
+					return 'signature' ;
+			}
+		$oid_hexa = OIDtoHex('1.2.840.113549.1.7.3');  
+		$partes = explode($oid_hexa,$p7m_formato_der);    // Faz o split pela oid...
+		if(count($partes)>1)
+			{
+					return 'cipher' ;
+			}			
+		return 'normal';
+	}
+
+
+function parse_sequence($data)
+	{
+		$len = ord($data[1]);
+		$bytes = 0;
+		get_length(&$len,&$bytes,$data);                  // obtem tamanho da parte de dados da oid.
+		$oid_data = substr($data,2 + $bytes,$len);    // Obtem porcao de bytes pertencentes a oid.
+		$ret =  Crl_parseASN($oid_data);                 // parse dos dados da oid.
+		return $ret;
+	}
+
 function recupera_dados_oid($certificado_digital_formato_der, $oid)
 	{
 		// Esta função assume que a oid esta inserida dentro de uma estrutura do tipo "sequencia" , como primeiro elemento da estrutura...
-	        $oid_hexa = OIDtoHex($oid);                                                        // converte oid de texto para hexadecimal ...
+	        $oid_hexa = OIDtoHex($oid);     // converte oid de texto para hexadecimal ...
 		$partes = explode($oid_hexa,$certificado_digital_formato_der);    // Faz o split pela oid...
-		$ret = array();
+		$retr = array();
 		if(count($partes)>1)
 			{
@@ -1437,28 +1472,41 @@
 						$xcv3 = substr($partes[$i-1],strlen($partes[$i-1])-3,3); // recupera da primeira parte os 3 ultimos digitos...
 						$xcv2 = substr($partes[$i-1],strlen($partes[$i-1])-2,2); // recupera da primeira parte os 2 ultimos digitos...
+						if($xcv2[0] == chr(0x30))
+							{
+								$xcv = $xcv2;
+								$data = $xcv . $oid_hexa . $partes[$i];           // reconstroi a sequencia.....	
+								$ret = parse_sequence($data);
+
+								if($ret[0] != '')
+									{
+										$retr[] = $ret;
+										continue;
+									}
+							}
+						if($xcv3[0] == chr(0x30))
+							{
+								$xcv = $xcv3;
+								$data = $xcv . $oid_hexa . $partes[$i];           // reconstroi a sequencia.....	
+								$ret = parse_sequence($data);
+								if($ret[0] != '')
+									{
+										$retr[] = $ret;
+										continue;
+									}
+							}
 						if($xcv4[0] == chr(0x30))
 							{
 								$xcv = $xcv4;
-							}
-						else
-							{
-								if($xcv3[0] == chr(0x30))
+								$data = $xcv . $oid_hexa . $partes[$i];           // reconstroi a sequencia.....	
+								$ret = parse_sequence($data);
+								if($ret[0] != '')
 									{
-										$xcv = $xcv3;
-									}
-								else
-									{
-										$xcv = $xcv2;
-									}
-							}
-						$data = $xcv . $oid_hexa . $partes[$i];           // reconstroi a sequencia.....				
-						$len = ord($data[1]);
-						$bytes = 0;
-						get_length(&$len,&$bytes,$data);                  // obtem tamanho da parte de dados da oid.
-						$oid_data = substr($data,2 + $bytes,$len);    // Obtem porcao de bytes pertencentes a oid.
-						$ret[] =  Crl_parseASN($oid_data);                 // parse dos dados da oid.
+										$retr[] = $ret;
+										continue;
+									}										
+							}							
 					} 
 			}
-		return $ret;
+		return $retr;
 	}
 
