You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-dev@ws.apache.org by "Arpit Doshi (JIRA)" <xm...@ws.apache.org> on 2006/06/21 12:47:30 UTC

[jira] Created: (XMLRPC-88) org.apache.xml.security.encryption.XMLCipher.removeContent

org.apache.xml.security.encryption.XMLCipher.removeContent
----------------------------------------------------------

         Key: XMLRPC-88
         URL: http://issues.apache.org/jira/browse/XMLRPC-88
     Project: XML-RPC
        Type: Bug

  Components: Releases  
    Versions: unspecified    
 Environment: OS:Windows 2000
J2SE:1.5
JRE:1.5.0_06
Hardware: P-4 2.4 Ghz CPU, 2GB RAM. 
    Reporter: Arpit Doshi
    Priority: Blocker


Hello,

I am trying to encrypt a XML file using XMLCipher class. The size of the file is almost 35 MB, while encrypting the XML file it throws this error after around 3 minutes.
The program works perfectly fine for file size of less than 5 MB. This is very critical for our project and has to work as soon as possible.
Eventually we are going to port the application on AIX5.3
The piece of code I am using is:

public void encryptData() throws EncryptionException
	{
		final String methodName = "encryptData";
	
		XMLCipher keyCipher,xmlCipher = null;
		Document document = null;
		String encryptedFileName = null;
		Key symmetricKey = null;
		Key keyEncryptKey = null;
		boolean exceptionOccured = false;
	
		try 
		{
			System.out.println("now parsing document");
			document=parseFile( fileToBeEncrypted );
			// generate symmetric key
			symmetricKey = GenerateSymmetricKey();
			
			// Get a key to be used for encrypting the symmetric key
			keyEncryptKey = GenerateKeyEncryptionKey();
			
			// Write the key to a file 
			//and pass the key and the name of file in which it has to store the Key
			storeKeyFile(keyEncryptKey,getKeyFileName(fileToBeEncrypted.toString()));
			
			
		
			// initialize cipher and operation mode is to wrap a key
			keyCipher =XMLCipher.getInstance(XMLCipher.TRIPLEDES_KeyWrap);
			keyCipher.init(XMLCipher.WRAP_MODE, keyEncryptKey);
		
			// encrypt symmetric key
			EncryptedKey encryptedKey =	keyCipher.encryptKey(document, symmetricKey);
			// specify the element to encrypt, ideally it will be root element
			Element rootElement = document.getDocumentElement();
			
			Element elementToEncrypt = rootElement;
									  
		   if (elementToEncrypt == null)
		   {
			  throw new EncryptionException("Element to Encrypt is null since the filename may not be correct" +
			                                "or the file to be encrypted may not be well formed" + 
			                                "Please check in File" + "AMLFeederConfiguration.properties");
		   }
		
			
		
			// initialize cipher for encrypting XML data using operation mode of ENCRYPT_MODE
			xmlCipher = XMLCipher.getInstance(XMLCipher.TRIPLEDES);
			
			xmlCipher.init(XMLCipher.ENCRYPT_MODE, symmetricKey);
			
		
			// add key info to encrypted data element, so that within the encrypted data, 
			// there is also information about the key, that should be used to decrypt the data 
			EncryptedData encryptedDataElement = xmlCipher.getEncryptedData();
			KeyInfo keyInfo = new KeyInfo(document);
			keyInfo.add(encryptedKey);
			encryptedDataElement.setKeyInfo(keyInfo);
		
Problem is caused while calling doFinal()	// do the actual encryption
			boolean encryptContentsOnly = true;
			xmlCipher.doFinal(document, elementToEncrypt, encryptContentsOnly);
		
			//this will return xxxxx_e.xml
			encryptedFileName = getEncryptedFileNameToWrite(fileToBeEncrypted.toString()); 

			// write the results to a file
			writeEncryptedDocToFile(document, encryptedFileName);

			this.encryptedFileName = encryptedFileName;


		}
		catch(FileNotFoundException fnfException){
    
		}
		catch (ContentHandlerAlreadyRegisteredException e) {
		}
		catch(XMLEncryptionException xeException){
		}
		catch( EncryptionException encryptionException )
		{
		}
		catch(Exception e){
		}
		finally{
		
			if(exceptionOccured){
				moveToRejectedDir( this.fileToBeEncrypted );
				moveToRejectedDir( this.keyFile );   
			}
			document = null;
			symmetricKey = null;
			keyEncryptKey = null;
			xmlCipher = null;
			
		}
        

	}



The exception I am getting is:
Exception in thread "main" java.lang.StackOverflowError
        at org.apache.xerces.dom.ParentNode.internalRemoveChild(Unknown Source)
        at org.apache.xerces.dom.ParentNode.removeChild(Unknown Source)
        at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
urce)
        at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
urce)
        at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
urce)
        at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
urce)
        at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
urce)
        at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
urce)
        at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
urce)
        at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
urce)
        at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: xmlrpc-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: xmlrpc-dev-help@ws.apache.org


Re: [jira] Created: (XMLRPC-88) org.apache.xml.security.encryption.XMLCipher.removeContent

Posted by Siegfried Goeschl <si...@it20one.at>.
Mhmm,

looking at the stack trace you have a StackOverflowError in XERCES when 
using XMLCipher. IMHO this is totally unrelated to XMLRPC

Cheers,

Siegfried Goeschl

Arpit Doshi (JIRA) wrote:
> org.apache.xml.security.encryption.XMLCipher.removeContent
> ----------------------------------------------------------
> 
>          Key: XMLRPC-88
>          URL: http://issues.apache.org/jira/browse/XMLRPC-88
>      Project: XML-RPC
>         Type: Bug
> 
>   Components: Releases  
>     Versions: unspecified    
>  Environment: OS:Windows 2000
> J2SE:1.5
> JRE:1.5.0_06
> Hardware: P-4 2.4 Ghz CPU, 2GB RAM. 
>     Reporter: Arpit Doshi
>     Priority: Blocker
> 
> 
> Hello,
> 
> I am trying to encrypt a XML file using XMLCipher class. The size of the file is almost 35 MB, while encrypting the XML file it throws this error after around 3 minutes.
> The program works perfectly fine for file size of less than 5 MB. This is very critical for our project and has to work as soon as possible.
> Eventually we are going to port the application on AIX5.3
> The piece of code I am using is:
> 
> public void encryptData() throws EncryptionException
> 	{
> 		final String methodName = "encryptData";
> 	
> 		XMLCipher keyCipher,xmlCipher = null;
> 		Document document = null;
> 		String encryptedFileName = null;
> 		Key symmetricKey = null;
> 		Key keyEncryptKey = null;
> 		boolean exceptionOccured = false;
> 	
> 		try 
> 		{
> 			System.out.println("now parsing document");
> 			document=parseFile( fileToBeEncrypted );
> 			// generate symmetric key
> 			symmetricKey = GenerateSymmetricKey();
> 			
> 			// Get a key to be used for encrypting the symmetric key
> 			keyEncryptKey = GenerateKeyEncryptionKey();
> 			
> 			// Write the key to a file 
> 			//and pass the key and the name of file in which it has to store the Key
> 			storeKeyFile(keyEncryptKey,getKeyFileName(fileToBeEncrypted.toString()));
> 			
> 			
> 		
> 			// initialize cipher and operation mode is to wrap a key
> 			keyCipher =XMLCipher.getInstance(XMLCipher.TRIPLEDES_KeyWrap);
> 			keyCipher.init(XMLCipher.WRAP_MODE, keyEncryptKey);
> 		
> 			// encrypt symmetric key
> 			EncryptedKey encryptedKey =	keyCipher.encryptKey(document, symmetricKey);
> 			// specify the element to encrypt, ideally it will be root element
> 			Element rootElement = document.getDocumentElement();
> 			
> 			Element elementToEncrypt = rootElement;
> 									  
> 		   if (elementToEncrypt == null)
> 		   {
> 			  throw new EncryptionException("Element to Encrypt is null since the filename may not be correct" +
> 			                                "or the file to be encrypted may not be well formed" + 
> 			                                "Please check in File" + "AMLFeederConfiguration.properties");
> 		   }
> 		
> 			
> 		
> 			// initialize cipher for encrypting XML data using operation mode of ENCRYPT_MODE
> 			xmlCipher = XMLCipher.getInstance(XMLCipher.TRIPLEDES);
> 			
> 			xmlCipher.init(XMLCipher.ENCRYPT_MODE, symmetricKey);
> 			
> 		
> 			// add key info to encrypted data element, so that within the encrypted data, 
> 			// there is also information about the key, that should be used to decrypt the data 
> 			EncryptedData encryptedDataElement = xmlCipher.getEncryptedData();
> 			KeyInfo keyInfo = new KeyInfo(document);
> 			keyInfo.add(encryptedKey);
> 			encryptedDataElement.setKeyInfo(keyInfo);
> 		
> Problem is caused while calling doFinal()	// do the actual encryption
> 			boolean encryptContentsOnly = true;
> 			xmlCipher.doFinal(document, elementToEncrypt, encryptContentsOnly);
> 		
> 			//this will return xxxxx_e.xml
> 			encryptedFileName = getEncryptedFileNameToWrite(fileToBeEncrypted.toString()); 
> 
> 			// write the results to a file
> 			writeEncryptedDocToFile(document, encryptedFileName);
> 
> 			this.encryptedFileName = encryptedFileName;
> 
> 
> 		}
> 		catch(FileNotFoundException fnfException){
>     
> 		}
> 		catch (ContentHandlerAlreadyRegisteredException e) {
> 		}
> 		catch(XMLEncryptionException xeException){
> 		}
> 		catch( EncryptionException encryptionException )
> 		{
> 		}
> 		catch(Exception e){
> 		}
> 		finally{
> 		
> 			if(exceptionOccured){
> 				moveToRejectedDir( this.fileToBeEncrypted );
> 				moveToRejectedDir( this.keyFile );   
> 			}
> 			document = null;
> 			symmetricKey = null;
> 			keyEncryptKey = null;
> 			xmlCipher = null;
> 			
> 		}
>         
> 
> 	}
> 
> 
> 
> The exception I am getting is:
> Exception in thread "main" java.lang.StackOverflowError
>         at org.apache.xerces.dom.ParentNode.internalRemoveChild(Unknown Source)
>         at org.apache.xerces.dom.ParentNode.removeChild(Unknown Source)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: xmlrpc-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: xmlrpc-dev-help@ws.apache.org


[jira] Closed: (XMLRPC-88) org.apache.xml.security.encryption.XMLCipher.removeContent

Posted by "Jochen Wiedmann (JIRA)" <xm...@ws.apache.org>.
     [ http://issues.apache.org/jira/browse/XMLRPC-88?page=all ]
     
Jochen Wiedmann closed XMLRPC-88:
---------------------------------

    Resolution: Invalid

I cannot see, why this would be an issue for Apache XML-RPC. I suggest using a forum on java.sun.com, or a mailing list related to encryption.

> org.apache.xml.security.encryption.XMLCipher.removeContent
> ----------------------------------------------------------
>
>          Key: XMLRPC-88
>          URL: http://issues.apache.org/jira/browse/XMLRPC-88
>      Project: XML-RPC
>         Type: Bug

>   Components: Releases
>     Versions: unspecified
>  Environment: OS:Windows 2000
> J2SE:1.5
> JRE:1.5.0_06
> Hardware: P-4 2.4 Ghz CPU, 2GB RAM. 
>     Reporter: Arpit Doshi
>     Priority: Blocker

>
> Hello,
> I am trying to encrypt a XML file using XMLCipher class. The size of the file is almost 35 MB, while encrypting the XML file it throws this error after around 3 minutes.
> The program works perfectly fine for file size of less than 5 MB. This is very critical for our project and has to work as soon as possible.
> Eventually we are going to port the application on AIX5.3
> The piece of code I am using is:
> public void encryptData() throws EncryptionException
> 	{
> 		final String methodName = "encryptData";
> 	
> 		XMLCipher keyCipher,xmlCipher = null;
> 		Document document = null;
> 		String encryptedFileName = null;
> 		Key symmetricKey = null;
> 		Key keyEncryptKey = null;
> 		boolean exceptionOccured = false;
> 	
> 		try 
> 		{
> 			System.out.println("now parsing document");
> 			document=parseFile( fileToBeEncrypted );
> 			// generate symmetric key
> 			symmetricKey = GenerateSymmetricKey();
> 			
> 			// Get a key to be used for encrypting the symmetric key
> 			keyEncryptKey = GenerateKeyEncryptionKey();
> 			
> 			// Write the key to a file 
> 			//and pass the key and the name of file in which it has to store the Key
> 			storeKeyFile(keyEncryptKey,getKeyFileName(fileToBeEncrypted.toString()));
> 			
> 			
> 		
> 			// initialize cipher and operation mode is to wrap a key
> 			keyCipher =XMLCipher.getInstance(XMLCipher.TRIPLEDES_KeyWrap);
> 			keyCipher.init(XMLCipher.WRAP_MODE, keyEncryptKey);
> 		
> 			// encrypt symmetric key
> 			EncryptedKey encryptedKey =	keyCipher.encryptKey(document, symmetricKey);
> 			// specify the element to encrypt, ideally it will be root element
> 			Element rootElement = document.getDocumentElement();
> 			
> 			Element elementToEncrypt = rootElement;
> 									  
> 		   if (elementToEncrypt == null)
> 		   {
> 			  throw new EncryptionException("Element to Encrypt is null since the filename may not be correct" +
> 			                                "or the file to be encrypted may not be well formed" + 
> 			                                "Please check in File" + "AMLFeederConfiguration.properties");
> 		   }
> 		
> 			
> 		
> 			// initialize cipher for encrypting XML data using operation mode of ENCRYPT_MODE
> 			xmlCipher = XMLCipher.getInstance(XMLCipher.TRIPLEDES);
> 			
> 			xmlCipher.init(XMLCipher.ENCRYPT_MODE, symmetricKey);
> 			
> 		
> 			// add key info to encrypted data element, so that within the encrypted data, 
> 			// there is also information about the key, that should be used to decrypt the data 
> 			EncryptedData encryptedDataElement = xmlCipher.getEncryptedData();
> 			KeyInfo keyInfo = new KeyInfo(document);
> 			keyInfo.add(encryptedKey);
> 			encryptedDataElement.setKeyInfo(keyInfo);
> 		
> Problem is caused while calling doFinal()	// do the actual encryption
> 			boolean encryptContentsOnly = true;
> 			xmlCipher.doFinal(document, elementToEncrypt, encryptContentsOnly);
> 		
> 			//this will return xxxxx_e.xml
> 			encryptedFileName = getEncryptedFileNameToWrite(fileToBeEncrypted.toString()); 
> 			// write the results to a file
> 			writeEncryptedDocToFile(document, encryptedFileName);
> 			this.encryptedFileName = encryptedFileName;
> 		}
> 		catch(FileNotFoundException fnfException){
>     
> 		}
> 		catch (ContentHandlerAlreadyRegisteredException e) {
> 		}
> 		catch(XMLEncryptionException xeException){
> 		}
> 		catch( EncryptionException encryptionException )
> 		{
> 		}
> 		catch(Exception e){
> 		}
> 		finally{
> 		
> 			if(exceptionOccured){
> 				moveToRejectedDir( this.fileToBeEncrypted );
> 				moveToRejectedDir( this.keyFile );   
> 			}
> 			document = null;
> 			symmetricKey = null;
> 			keyEncryptKey = null;
> 			xmlCipher = null;
> 			
> 		}
>         
> 	}
> The exception I am getting is:
> Exception in thread "main" java.lang.StackOverflowError
>         at org.apache.xerces.dom.ParentNode.internalRemoveChild(Unknown Source)
>         at org.apache.xerces.dom.ParentNode.removeChild(Unknown Source)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So
> urce)
>         at org.apache.xml.security.encryption.XMLCipher.removeContent(Unknown So

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: xmlrpc-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: xmlrpc-dev-help@ws.apache.org