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: