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 2003/11/20 10:11:25 UTC

cvs commit: xml-security/c/src/xenc/impl XENCEncryptedTypeImpl.cpp XENCEncryptionMethodImpl.cpp XENCEncryptionMethodImpl.hpp

blautenb    2003/11/20 01:11:25

  Modified:    c/src/tools/xtest xtest.cpp
               c/src/utils XSECDOMUtils.cpp XSECDOMUtils.hpp
               c/src/xenc XENCEncryptionMethod.hpp
               c/src/xenc/impl XENCEncryptedTypeImpl.cpp
                        XENCEncryptionMethodImpl.cpp
                        XENCEncryptionMethodImpl.hpp
  Log:
  Cleaned up EncryptionMethod code
  
  Revision  Changes    Path
  1.35      +14 -1     xml-security/c/src/tools/xtest/xtest.cpp
  
  Index: xtest.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/tools/xtest/xtest.cpp,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- xtest.cpp	10 Nov 2003 22:10:37 -0000	1.34
  +++ xtest.cpp	20 Nov 2003 09:11:25 -0000	1.35
  @@ -127,6 +127,7 @@
   #include <xsec/xenc/XENCCipher.hpp>
   #include <xsec/xenc/XENCEncryptedData.hpp>
   #include <xsec/xenc/XENCEncryptedKey.hpp>
  +#include <xsec/xenc/XENCEncryptionMethod.hpp>
   
   #include <xsec/enc/XSECCryptoSymmetricKey.hpp>
   
  @@ -1347,6 +1348,10 @@
   		encryptedData->setEncodingURI(s_tstEncoding);
   		encryptedData->setMimeType(s_tstMimeType);
   
  +		// Set a KeySize
  +		cerr << "done\nSetting <KeySize> ... ";
  +		encryptedData->getEncryptionMethod()->setKeySize(192);
  +
   		cerr << "done\nSearching for <category> ... ";
   
   		DOMNode * t = findNode(doc, MAKE_UNICODE_STRING("category"));
  @@ -1484,6 +1489,14 @@
   		}
   		if (encryptedData->getEncodingURI() == NULL || !strEquals(encryptedData->getEncodingURI(), s_tstEncoding)) {
   			cerr << "Bad Encoding" << endl;
  +			exit(1);
  +		}
  +
  +		cerr << "OK" << endl;
  +
  +		cerr << "Checking KeySize in EncryptionMethod ... ";
  +		if (encryptedData->getEncryptionMethod() == NULL || encryptedData->getEncryptionMethod()->getKeySize() != 192) {
  +			cerr << "Bad KeySize" << endl;
   			exit(1);
   		}
   
  
  
  
  1.15      +31 -0     xml-security/c/src/utils/XSECDOMUtils.cpp
  
  Index: XSECDOMUtils.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/utils/XSECDOMUtils.cpp,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- XSECDOMUtils.cpp	11 Sep 2003 11:11:05 -0000	1.14
  +++ XSECDOMUtils.cpp	20 Nov 2003 09:11:25 -0000	1.15
  @@ -225,6 +225,37 @@
   
   }
   
  +DOMElement *findFirstElementChild(DOMNode *n) {
  +
  +	DOMNode *c;
  +
  +	if (n == NULL) 
  +		return NULL;
  +
  +	c = n->getFirstChild();
  +
  +	while (c != NULL && c->getNodeType() != DOMNode::ELEMENT_NODE)
  +		c = c->getNextSibling();
  +
  +	return (DOMElement *) c;
  +
  +}
  +
  +DOMElement * findNextElementChild(DOMNode *n) {
  +
  +	DOMNode * s = n;
  +
  +	if (s == NULL)
  +		return NULL;
  +
  +	do {
  +		s = s->getNextSibling();
  +	} while (s != NULL && s->getNodeType() != DOMNode::ELEMENT_NODE);
  +
  +	return (DOMElement *) s;
  +
  +}
  +
   // --------------------------------------------------------------------------------
   //           Make a QName
   // --------------------------------------------------------------------------------
  
  
  
  1.13      +4 -1      xml-security/c/src/utils/XSECDOMUtils.hpp
  
  Index: XSECDOMUtils.hpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/utils/XSECDOMUtils.hpp,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- XSECDOMUtils.hpp	11 Sep 2003 11:11:05 -0000	1.12
  +++ XSECDOMUtils.hpp	20 Nov 2003 09:11:25 -0000	1.13
  @@ -136,6 +136,9 @@
   XERCES_CPP_NAMESPACE_QUALIFIER DOMNode DSIG_EXPORT * findFirstChildOfType(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *n, XERCES_CPP_NAMESPACE_QUALIFIER DOMNode::NodeType t);
   XERCES_CPP_NAMESPACE_QUALIFIER DOMNode DSIG_EXPORT * findNextChildOfType(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *n, XERCES_CPP_NAMESPACE_QUALIFIER DOMNode::NodeType t);
   
  +XERCES_CPP_NAMESPACE_QUALIFIER DOMElement DSIG_EXPORT * findFirstElementChild(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *n);
  +XERCES_CPP_NAMESPACE_QUALIFIER DOMElement DSIG_EXPORT * findNextElementChild(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *n);
  +
   // --------------------------------------------------------------------------------
   //           Make a QName
   // --------------------------------------------------------------------------------
  
  
  
  1.5       +37 -4     xml-security/c/src/xenc/XENCEncryptionMethod.hpp
  
  Index: XENCEncryptionMethod.hpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/xenc/XENCEncryptionMethod.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XENCEncryptionMethod.hpp	4 Nov 2003 05:22:17 -0000	1.4
  +++ XENCEncryptionMethod.hpp	20 Nov 2003 09:11:25 -0000	1.5
  @@ -89,6 +89,17 @@
    * this information, otherwise the library will not be able to
    * decrypt the data.
    *
  + * It is defined as :
  + *
  + * <complexType name='EncryptionMethodType' mixed='true'>
  + *   <sequence>
  + *     <element name='KeySize' minOccurs='0' type='xenc:KeySizeType'/>
  + *     <element name='OAEPparams' minOccurs='0' type='base64Binary'/>
  + *     <any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
  + *   </sequence>
  + *   <attribute name='Algorithm' type='anyURI' use='required'/>
  + * </complexType>
  + *
    */
   
   
  @@ -137,12 +148,22 @@
   	virtual const XMLCh * getOAEPparams(void) = 0;
   
   	/**
  -	 * \brief Get the DOM Node of this structure
  +	 * \brief Get the KeySize that was set in this EncryptionMethod.
   	 *
  -	 * @returns the DOM Node representing the <EncryptionMethod> element
  +	 * This field would not normally be used for the encryption algorithms
  +	 * explicitly referenced in the XML Encryption standard.  It is provided
  +	 * mainly for stream ciphers that have a variable key length
   	 */
   
  -	virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMNode * getDOMNode(void) = 0;
  +	virtual int getKeySize(void) = 0;
  +
  +	/**
  +	 * \brief Get the DOM Element Node of this structure
  +	 *
  +	 * @returns the DOM Element Node representing the <EncryptionMethod> element
  +	 */
  +
  +	virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * getElement(void) = 0;
   
   
   	//@}
  @@ -173,6 +194,18 @@
   	 */
   
   	virtual void setOAEPparams(const XMLCh * params) = 0;
  +
  +	/**
  +	 * \brief Set the KeySize that in this EncryptionMethod.
  +	 *
  +	 * This field would not normally be used for the encryption algorithms
  +	 * explicitly referenced in the XML Encryption standard.  It is provided
  +	 * mainly for stream ciphers that have a variable key length
  +	 */
  +
  +	virtual void setKeySize(int size) = 0;
  +
  +	//@}
   
   private:
   
  
  
  
  1.12      +5 -5      xml-security/c/src/xenc/impl/XENCEncryptedTypeImpl.cpp
  
  Index: XENCEncryptedTypeImpl.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/xenc/impl/XENCEncryptedTypeImpl.cpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XENCEncryptedTypeImpl.cpp	10 Nov 2003 22:10:37 -0000	1.11
  +++ XENCEncryptedTypeImpl.cpp	20 Nov 2003 09:11:25 -0000	1.12
  @@ -251,14 +251,14 @@
   	// Don't know what the node name should be (held by super class), 
   	// so go straight to the children
   	
  -	DOMNode *tmpElt = findFirstChildOfType(mp_encryptedTypeNode, DOMNode::ELEMENT_NODE);
  +	DOMElement *tmpElt = (DOMElement *) findFirstChildOfType(mp_encryptedTypeNode, DOMNode::ELEMENT_NODE);
   
   	if (tmpElt != NULL && strEquals(getXENCLocalName(tmpElt), s_EncryptionMethod)) {
   
   		XSECnew(mp_encryptionMethod, XENCEncryptionMethodImpl(mp_env, tmpElt));
   		mp_encryptionMethod->load();
   
  -		tmpElt = findNextChildOfType(tmpElt, DOMNode::ELEMENT_NODE);
  +		tmpElt = (DOMElement *) findNextChildOfType(tmpElt, DOMNode::ELEMENT_NODE);
   
   	}
   
  @@ -270,7 +270,7 @@
   
   		// Find the next node
   
  -		tmpElt = findNextChildOfType(tmpElt, DOMNode::ELEMENT_NODE);
  +		tmpElt = (DOMElement *) findNextChildOfType(tmpElt, DOMNode::ELEMENT_NODE);
   
   	}
   
  @@ -280,7 +280,7 @@
   
   		XSECnew(mp_cipherData, XENCCipherDataImpl(mp_env, tmpElt));
   		mp_cipherData->load();
  -		tmpElt = findNextChildOfType(tmpElt, DOMNode::ELEMENT_NODE);
  +		tmpElt = (DOMElement *) findNextChildOfType(tmpElt, DOMNode::ELEMENT_NODE);
   
   	}
   
  
  
  
  1.3       +143 -76   xml-security/c/src/xenc/impl/XENCEncryptionMethodImpl.cpp
  
  Index: XENCEncryptionMethodImpl.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/xenc/impl/XENCEncryptionMethodImpl.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XENCEncryptionMethodImpl.cpp	4 Nov 2003 05:22:17 -0000	1.2
  +++ XENCEncryptionMethodImpl.cpp	20 Nov 2003 09:11:25 -0000	1.3
  @@ -135,34 +135,46 @@
   	chNull
   };
   
  +static XMLCh s_KeySize [] = {
  +
  +	chLatin_K,
  +	chLatin_e,
  +	chLatin_y,
  +	chLatin_S,
  +	chLatin_i,
  +	chLatin_z,
  +	chLatin_e,
  +	chNull
  +};
  +
   // --------------------------------------------------------------------------------
   //			Constructors and Destructors
   // --------------------------------------------------------------------------------
   
   XENCEncryptionMethodImpl::XENCEncryptionMethodImpl(const XSECEnv * env) :
   mp_env(env),
  -mp_encryptionMethodNode(NULL),
  -mp_algorithm(NULL),
  -mp_digestAlgorithmAttributeNode(NULL),
  -mp_oaepParamsTextNode(NULL) {
  +mp_encryptionMethodElement(NULL),
  +mp_algorithmAttr(NULL),
  +mp_digestAlgorithmAttr(NULL),
  +mp_oaepParamsTextNode(NULL),
  +mp_keySizeTextNode(NULL) {
   
   }
   
   XENCEncryptionMethodImpl::XENCEncryptionMethodImpl(
   		const XSECEnv * env, 
  -		DOMNode * node) :
  +		DOMElement * element) :
   mp_env(env),
  -mp_encryptionMethodNode(node),
  -mp_algorithm(NULL),
  -mp_digestAlgorithmAttributeNode(NULL),
  -mp_oaepParamsTextNode(NULL) {
  +mp_encryptionMethodElement(element),
  +mp_algorithmAttr(NULL),
  +mp_digestAlgorithmAttr(NULL),
  +mp_oaepParamsTextNode(NULL),
  +mp_keySizeTextNode(NULL) {
   
   }
   
   XENCEncryptionMethodImpl::~XENCEncryptionMethodImpl() {
   
  -	if (mp_algorithm != NULL)
  -		delete[] mp_algorithm;
   
   }
   
  @@ -174,7 +186,7 @@
   
   void XENCEncryptionMethodImpl::load() {
   
  -	if (mp_encryptionMethodNode == NULL) {
  +	if (mp_encryptionMethodElement == NULL) {
   
   		// Attempt to load an empty encryptedType element
   		throw XSECException(XSECException::EncryptionMethodError,
  @@ -182,7 +194,7 @@
   
   	}
   
  -	if (!strEquals(getXENCLocalName(mp_encryptionMethodNode), s_EncryptionMethod)) {
  +	if (!strEquals(getXENCLocalName(mp_encryptionMethodElement), s_EncryptionMethod)) {
   
   		// Attempt to load an empty encryptedData element
   		throw XSECException(XSECException::EncryptionMethodError,
  @@ -190,39 +202,22 @@
   
   	}
   
  -	// Clean up
  -	if (mp_algorithm != NULL)
  -		delete[] mp_algorithm;
  -
   	// Find the type
  -	DOMNamedNodeMap * tmpAtts = mp_encryptionMethodNode->getAttributes();
  -
  -	if (tmpAtts != NULL) {
  -
  -		DOMNode * att = tmpAtts->getNamedItem(DSIGConstants::s_unicodeStrAlgorithm);
  -
  -		if (att != NULL) {
  -
  -			mp_algorithm = XMLString::replicate(att->getNodeValue());
  -
  -		}
  -
  -	}
  +	mp_algorithmAttr = 
  +		mp_encryptionMethodElement->getAttributeNodeNS(NULL, 
  +			DSIGConstants::s_unicodeStrAlgorithm);
   
   	// Check for known children
  -	DOMNode * c = findFirstChildOfType(mp_encryptionMethodNode, DOMNode::ELEMENT_NODE);
  +	DOMElement * c = findFirstElementChild(mp_encryptionMethodElement);
   
   	while (c != NULL) {
   
   		if (strEquals(getDSIGLocalName(c), s_DigestMethod)) {
   
  -			mp_digestAlgorithmAttributeNode = NULL;
  -			tmpAtts = c->getAttributes();
  -
  -			if (tmpAtts != NULL)
  -				mp_digestAlgorithmAttributeNode = tmpAtts->getNamedItem(DSIGConstants::s_unicodeStrAlgorithm);
  +			mp_digestAlgorithmAttr = c->getAttributeNodeNS(NULL, 
  +				DSIGConstants::s_unicodeStrAlgorithm);
   
  -			if (mp_digestAlgorithmAttributeNode == NULL) {
  +			if (mp_digestAlgorithmAttr == NULL) {
   				throw XSECException(XSECException::EncryptionMethodError,
   					"XENCEncryptionMethod::load - Cannot find Algorithm Attribute in DigestMethod element");
   			}
  @@ -240,9 +235,18 @@
   
   		}
   
  -		do {
  -			c = c->getNextSibling();
  -		} while (c != NULL && c->getNodeType() != DOMNode::ELEMENT_NODE);
  +		else if (strEquals(getXENCLocalName(c), s_KeySize)) {
  +
  +			mp_keySizeTextNode = NULL;
  +			mp_keySizeTextNode = findFirstChildOfType(c, DOMNode::TEXT_NODE);
  +
  +			if (mp_keySizeTextNode == NULL) {
  +				throw XSECException(XSECException::EncryptionMethodError,
  +					"XENCEncryptionMethod::load - Cannot find text value of KeySize node");
  +			}
  +
  +		}
  +		c = findNextElementChild(c);
   	}
   }
   
  @@ -252,12 +256,6 @@
   
   DOMElement * XENCEncryptionMethodImpl::createBlankEncryptedMethod(const XMLCh * algorithm) {
   
  -	// Reset
  -	if (mp_algorithm != NULL) {
  -		delete[] mp_algorithm;
  -		mp_algorithm = NULL;
  -	}
  -
   	// Get some setup values
   	safeBuffer str;
   	DOMDocument *doc = mp_env->getParentDocument();
  @@ -265,20 +263,21 @@
   
   	makeQName(str, prefix, s_EncryptionMethod);
   
  -	DOMElement *ret = doc->createElementNS(DSIGConstants::s_unicodeStrURIXENC, str.rawXMLChBuffer());
  -	mp_encryptionMethodNode = ret;
  +	mp_encryptionMethodElement = doc->createElementNS(DSIGConstants::s_unicodeStrURIXENC, str.rawXMLChBuffer());
   
   	// Set the algorithm attribute
   
   	if (algorithm != NULL) {
  -		ret->setAttributeNS(DSIGConstants::s_unicodeStrURIXENC,
  +		mp_encryptionMethodElement->setAttributeNS(NULL,
   							DSIGConstants::s_unicodeStrAlgorithm,
   							algorithm);
  -		mp_algorithm = XMLString::replicate(algorithm);
  +		mp_algorithmAttr = 
  +			mp_encryptionMethodElement->getAttributeNodeNS(NULL, 
  +														   DSIGConstants::s_unicodeStrAlgorithm);
   
   	}
   
  -	return ret;
  +	return mp_encryptionMethodElement;
   
   }
   // --------------------------------------------------------------------------------
  @@ -287,8 +286,8 @@
   
   const XMLCh * XENCEncryptionMethodImpl::getDigestMethod(void) {
   
  -	if (mp_digestAlgorithmAttributeNode != NULL)
  -		return mp_digestAlgorithmAttributeNode->getNodeValue();
  +	if (mp_digestAlgorithmAttr != NULL)
  +		return mp_digestAlgorithmAttr->getNodeValue();
   
   	return NULL;
   
  @@ -304,17 +303,46 @@
   
   }
   
  +const XMLCh * XENCEncryptionMethodImpl::getAlgorithm(void) {
  +
  +	if (mp_algorithmAttr != NULL) {
  +		return mp_algorithmAttr->getNodeValue();
  +	}
  +
  +	return NULL;
  +
  +}
  +
  +int XENCEncryptionMethodImpl::getKeySize(void) {
  +
  +	if(mp_keySizeTextNode != NULL) {
  +
  +		const XMLCh * keyVal = mp_keySizeTextNode->getNodeValue();
  +		unsigned int res = 0;
  +		if (!XMLString::textToBin(keyVal, res) || res < 0) {
  +			throw XSECException(XSECException::EncryptionMethodError,
  +				"XENCEncryptionMethod::getKeySize - Cannot convert KeySize to integer");
  +		}
  +
  +		return (int) res;
  +
  +	}
  +
  +	return 0;
  +
  +}
  +
   // --------------------------------------------------------------------------------
   //			Setter functions
   // --------------------------------------------------------------------------------
   
   void XENCEncryptionMethodImpl::setDigestMethod(const XMLCh * method) {
   
  -	if (mp_digestAlgorithmAttributeNode == NULL) {
  +	if (mp_digestAlgorithmAttr == NULL) {
   
   		// Need to create
   		if (mp_oaepParamsTextNode == NULL) {
  -			mp_env->doPrettyPrint(mp_encryptionMethodNode);
  +			mp_env->doPrettyPrint(mp_encryptionMethodElement);
   		}
   
   		// Get some setup values
  @@ -326,20 +354,21 @@
   
   		DOMElement *e = doc->createElementNS(DSIGConstants::s_unicodeStrURIDSIG, str.rawXMLChBuffer());
   		if (mp_oaepParamsTextNode != NULL) {
  -			mp_encryptionMethodNode->insertBefore(e, mp_oaepParamsTextNode->getParentNode());
  +			mp_encryptionMethodElement->insertBefore(e, mp_oaepParamsTextNode->getParentNode());
   			if (mp_env->getPrettyPrintFlag())
  -				mp_encryptionMethodNode->insertBefore(doc->createTextNode(DSIGConstants::s_unicodeStrNL), mp_oaepParamsTextNode->getParentNode());
  +				mp_encryptionMethodElement->insertBefore(doc->createTextNode(DSIGConstants::s_unicodeStrNL), mp_oaepParamsTextNode->getParentNode());
   		}
   		else {
  -			mp_encryptionMethodNode->appendChild(e);
  -			mp_env->doPrettyPrint(mp_encryptionMethodNode);
  +			mp_encryptionMethodElement->appendChild(e);
  +			mp_env->doPrettyPrint(mp_encryptionMethodElement);
   		}
   
  -		e->setAttributeNS(DSIGConstants::s_unicodeStrURIDSIG,
  -							DSIGConstants::s_unicodeStrAlgorithm,
  -							method);
  +		e->setAttributeNS(NULL,
  +					DSIGConstants::s_unicodeStrAlgorithm,
  +					method);
   
   		// Set namespace
  +
   		if (prefix[0] == XERCES_CPP_NAMESPACE::chNull) {
   			str.sbTranscodeIn("xmlns");
   		}
  @@ -353,15 +382,11 @@
   								DSIGConstants::s_unicodeStrURIXENC);
   
   		// Now retrieve for later use
  -		DOMNamedNodeMap * tmpAtts = e->getAttributes();
  -
  -		if (tmpAtts != NULL) {
  -
  -			mp_digestAlgorithmAttributeNode = tmpAtts->getNamedItem(DSIGConstants::s_unicodeStrAlgorithm);
  -
  -		}
  +		mp_digestAlgorithmAttr =
  +			e->getAttributeNodeNS(NULL, 
  +				DSIGConstants::s_unicodeStrAlgorithm);
   
  -		if (mp_digestAlgorithmAttributeNode == NULL) {
  +		if (mp_digestAlgorithmAttr == NULL) {
   
   			throw XSECException(XSECException::EncryptionMethodError,
   				"XENCEncryptionMethod::setDigestMethod - Error creating Algorithm Attribute");
  @@ -370,7 +395,7 @@
   	
   	else {
   
  -		mp_digestAlgorithmAttributeNode->setNodeValue(method);
  +		mp_digestAlgorithmAttr->setNodeValue(method);
   
   	}
   
  @@ -381,8 +406,8 @@
   	if (mp_oaepParamsTextNode == NULL) {
   
   		// Need to create
  -		if (mp_digestAlgorithmAttributeNode == NULL) {
  -			mp_env->doPrettyPrint(mp_encryptionMethodNode);
  +		if (mp_digestAlgorithmAttr == NULL) {
  +			mp_env->doPrettyPrint(mp_encryptionMethodElement);
   		}
   
   		// Get some setup values
  @@ -393,8 +418,8 @@
   		makeQName(str, prefix, s_OAEPparams);
   
   		DOMElement *e = doc->createElementNS(DSIGConstants::s_unicodeStrURIXENC, str.rawXMLChBuffer());
  -		mp_encryptionMethodNode->appendChild(e);
  -		mp_env->doPrettyPrint(mp_encryptionMethodNode);
  +		mp_encryptionMethodElement->appendChild(e);
  +		mp_env->doPrettyPrint(mp_encryptionMethodElement);
   
   		mp_oaepParamsTextNode = doc->createTextNode(params);
   		e->appendChild(mp_oaepParamsTextNode);
  @@ -409,3 +434,45 @@
   
   }
   
  +
  +void XENCEncryptionMethodImpl::setKeySize(int size) {
  +
  +	// First map the int to an XMLCh string
  +	XMLCh sizeXMLCh[10];
  +	XMLString::binToText((unsigned int) size, sizeXMLCh, 9, 10);
  +
  +	if (mp_keySizeTextNode == NULL) {
  +
  +		// Get some setup values
  +		safeBuffer str;
  +		DOMDocument *doc = mp_env->getParentDocument();
  +		const XMLCh * prefix = mp_env->getXENCNSPrefix();
  +
  +		makeQName(str, prefix, s_KeySize);
  +
  +		DOMElement *e = doc->createElementNS(DSIGConstants::s_unicodeStrURIXENC, str.rawXMLChBuffer());
  +		if (mp_oaepParamsTextNode != NULL) {
  +			// Need to insert before
  +			DOMNode * oaepNode = mp_oaepParamsTextNode->getParentNode();
  +			mp_encryptionMethodElement->insertBefore(e, oaepNode);
  +			if (mp_env->getPrettyPrintFlag()) {
  +				mp_encryptionMethodElement->insertBefore(doc->createTextNode(DSIGConstants::s_unicodeStrNL),
  +														 oaepNode);
  +			}
  +		}
  +		else {
  +			mp_env->doPrettyPrint(mp_encryptionMethodElement);
  +			mp_encryptionMethodElement->appendChild(e);
  +			mp_env->doPrettyPrint(mp_encryptionMethodElement);
  +		}
  +
  +		e->appendChild(doc->createTextNode(sizeXMLCh));
  +	} 
  +	
  +	else {
  +
  +		mp_keySizeTextNode->setNodeValue(sizeXMLCh);
  +
  +	}
  +
  +}
  
  
  
  1.4       +15 -10    xml-security/c/src/xenc/impl/XENCEncryptionMethodImpl.hpp
  
  Index: XENCEncryptionMethodImpl.hpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/xenc/impl/XENCEncryptionMethodImpl.hpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XENCEncryptionMethodImpl.hpp	4 Nov 2003 05:22:17 -0000	1.3
  +++ XENCEncryptionMethodImpl.hpp	20 Nov 2003 09:11:25 -0000	1.4
  @@ -85,7 +85,7 @@
   	XENCEncryptionMethodImpl(const XSECEnv * env);
   	XENCEncryptionMethodImpl(
   		const XSECEnv * env, 
  -		XERCES_CPP_NAMESPACE_QUALIFIER DOMNode * node
  +		XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * element
   	);
   	virtual ~XENCEncryptionMethodImpl();
   
  @@ -97,13 +97,15 @@
   						const XMLCh * algorithm);
   
   	// Interface
  -	const XMLCh * getAlgorithm(void) {return mp_algorithm;}
  -	virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMNode * getDOMNode(void)
  -		{return mp_encryptionMethodNode;}
  +	const XMLCh * getAlgorithm(void);
  +	virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * getElement(void)
  +		{return mp_encryptionMethodElement;}
   	virtual const XMLCh * getDigestMethod(void);
   	virtual const XMLCh * getOAEPparams(void);
  +	virtual int getKeySize(void);
   	virtual void setDigestMethod(const XMLCh * method);
   	virtual void setOAEPparams(const XMLCh * params);
  +	virtual void setKeySize(int size);
   
   
   
  @@ -115,13 +117,16 @@
   	XENCEncryptionMethodImpl & operator = (const XENCEncryptionMethodImpl &);
   
   	const XSECEnv				* mp_env;
  +	XERCES_CPP_NAMESPACE_QUALIFIER DOMElement					
  +								* mp_encryptionMethodElement;	// Node at head of structure
  +	XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
  +								* mp_algorithmAttr;
   	XERCES_CPP_NAMESPACE_QUALIFIER DOMNode					
  -								* mp_encryptionMethodNode;	// Node at head of structure
  -	XMLCh						* mp_algorithm;
  -	XERCES_CPP_NAMESPACE_QUALIFIER DOMNode					
  -								* mp_digestAlgorithmAttributeNode;
  -	XERCES_CPP_NAMESPACE_QUALIFIER DOMNode					
  +								* mp_digestAlgorithmAttr;
  +	XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
   								* mp_oaepParamsTextNode;
  +	XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
  +								* mp_keySizeTextNode;
   };
   
   #endif /* XENCENCRYPTIONMETHODIMPL_INCLUDE */