You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by bl...@apache.org on 2006/03/01 10:33:46 UTC

svn commit: r381965 - in /xml/security/trunk/c/src/xenc: XENCCipher.hpp impl/XENCCipherImpl.cpp impl/XENCCipherImpl.hpp

Author: blautenb
Date: Wed Mar  1 01:33:45 2006
New Revision: 381965

URL: http://svn.apache.org/viewcvs?rev=381965&view=rev
Log:
Expand API to allow users to load an encryptedData without actually doing a decrypt

Modified:
    xml/security/trunk/c/src/xenc/XENCCipher.hpp
    xml/security/trunk/c/src/xenc/impl/XENCCipherImpl.cpp
    xml/security/trunk/c/src/xenc/impl/XENCCipherImpl.hpp

Modified: xml/security/trunk/c/src/xenc/XENCCipher.hpp
URL: http://svn.apache.org/viewcvs/xml/security/trunk/c/src/xenc/XENCCipher.hpp?rev=381965&r1=381964&r2=381965&view=diff
==============================================================================
--- xml/security/trunk/c/src/xenc/XENCCipher.hpp (original)
+++ xml/security/trunk/c/src/xenc/XENCCipher.hpp Wed Mar  1 01:33:45 2006
@@ -110,6 +110,27 @@
 	) = 0;
 
 	/**
+	 * \brief Decrypt currently loaded element.
+	 *
+	 * Decrypts the an element that was previously passed in via 
+	 * loadEncryptedData with a type of "#Element".
+	 * If not, the library will throw an XSECException exception.
+	 *
+	 * This is an "all in one method".  The library will replace
+	 * the passed in Element (i.e. the encrypted XML data) with
+	 * the resultant plain text, after it has been parsed back into
+	 * DOM nodes
+	 *
+	 * @param element Root of EncryptedData DOM structyre to decrypt
+	 * @returns The owning document with the element replaced, or NULL
+	 * if the decryption fails for some reason (normally an exception).
+	 * @throws XSECException if the decryption fails, or if this is
+	 * not a valid EncryptedData DOM structure.
+	 */
+
+	virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument * decryptElement(void) = 0;
+
+	/**
 	 * \brief Decrypt the nominated element and put the output to an InputStream.
 	 *
 	 * Decrypts the passed in element, which must be the root
@@ -446,6 +467,25 @@
 	virtual XENCEncryptedKey * loadEncryptedKey(
 		XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * keyNode
 		) = 0;
+
+	/**
+	 * \brief Load an EncryptedData element
+	 *
+	 * Take a passed in EncryptedData DOMNode and return a loaded XENCEncryptedData
+	 * object based on the DOMNode from the passed in element.
+	 *
+	 * @note The Cipher object will take on this new object as the current
+	 * EncryptedData and delete any currently being held.
+	 *
+	 * @param dataNode Element node to load EncryptedData from
+	 * @returns An XENCEncryptedData structure (owned by the caller) based on the 
+	 * node.
+	 */
+
+	virtual XENCEncryptedData * loadEncryptedData(
+		XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * dataNode
+		) = 0;
+
 
 	//@}
 

Modified: xml/security/trunk/c/src/xenc/impl/XENCCipherImpl.cpp
URL: http://svn.apache.org/viewcvs/xml/security/trunk/c/src/xenc/impl/XENCCipherImpl.cpp?rev=381965&r1=381964&r2=381965&view=diff
==============================================================================
--- xml/security/trunk/c/src/xenc/impl/XENCCipherImpl.cpp (original)
+++ xml/security/trunk/c/src/xenc/impl/XENCCipherImpl.cpp Wed Mar  1 01:33:45 2006
@@ -288,7 +288,19 @@
 	ArrayJanitor<char> j_prefix(prefix);
 
 	sbt = prefix;
-	sbt.sbStrcatIn(content.rawCharBuffer());
+	const char * crcb = content.rawCharBuffer();
+	int offset = 0;
+	if (crcb[0] == '<' && crcb[1] == '?') {
+		// Have a PI prefix - get rid of it
+		int i = 2;
+		while (crcb[i] != '\0' && crcb[i] != '>')
+			++i;
+
+		if (crcb[i] == '>')
+			offset = i+1;
+	}
+
+	sbt.sbStrcatIn(&crcb[offset]);
 
 	// Now transform the content to UTF-8
 	//sb.sbXMLChCat8(content.rawCharBuffer());
@@ -417,10 +429,24 @@
 	return ret;
 }
 
+XENCEncryptedData * XENCCipherImpl::loadEncryptedData(DOMElement * element) {
 
-DOMDocument * XENCCipherImpl::decryptElement(DOMElement * element) {
+	// First of all load the element
+	if (mp_encryptedData != NULL)
+		delete mp_encryptedData;
 
-	XSECAlgorithmHandler *handler;
+	XSECnew(mp_encryptedData, 
+		XENCEncryptedDataImpl(mp_env, element));
+
+	// Load
+	mp_encryptedData->load();
+
+	return mp_encryptedData;
+
+}
+
+
+DOMDocument * XENCCipherImpl::decryptElement(DOMElement * element) {
 
 	// First of all load the element
 	if (mp_encryptedData != NULL)
@@ -432,6 +458,21 @@
 	// Load
 	mp_encryptedData->load();
 
+	return decryptElement();
+
+}
+
+DOMDocument * XENCCipherImpl::decryptElement(void) {
+
+	XSECAlgorithmHandler *handler;
+
+	if (mp_encryptedData == NULL) {
+
+		throw XSECException(XSECException::CipherError, 
+			"XENCCipherImpl::decryptElement - no element loaded for decryption");
+
+	}
+
 	// Check that this is a valid type
 	const XMLCh * typeURI = mp_encryptedData->getType();
 
@@ -514,6 +555,7 @@
 	}
 
 	// Now de-serialise
+	DOMElement * element = mp_encryptedData->getElement();
 	DOMDocumentFragment * frag = deSerialise(sb, element);
 
 	if (frag != NULL) {

Modified: xml/security/trunk/c/src/xenc/impl/XENCCipherImpl.hpp
URL: http://svn.apache.org/viewcvs/xml/security/trunk/c/src/xenc/impl/XENCCipherImpl.hpp?rev=381965&r1=381964&r2=381965&view=diff
==============================================================================
--- xml/security/trunk/c/src/xenc/impl/XENCCipherImpl.hpp (original)
+++ xml/security/trunk/c/src/xenc/impl/XENCCipherImpl.hpp Wed Mar  1 01:33:45 2006
@@ -53,6 +53,8 @@
 
 	XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument * 
 		decryptElement(XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * element);
+	XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument * 
+		decryptElement(void);
 	XSECBinTXFMInputStream * decryptToBinInputStream(
 		XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * element
 	);
@@ -119,6 +121,9 @@
 											const XMLCh * value);
 	virtual XENCEncryptedKey * loadEncryptedKey(
 		XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * keyNode
+		);
+	virtual XENCEncryptedData * loadEncryptedData(
+		XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * dataNode
 		);
 
 protected: