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/05/01 12:04:37 UTC

cvs commit: xml-security/c/src/dsig DSIGTransformC14n.cpp DSIGTransformC14n.hpp

blautenb    2003/05/01 03:04:36

  Modified:    c/src/dsig DSIGTransformC14n.cpp DSIGTransformC14n.hpp
  Log:
  Added API function to Exclusive Canonicaliser to add enter prefixes list (tx Scott Cantor)
  
  Revision  Changes    Path
  1.9       +68 -26    xml-security/c/src/dsig/DSIGTransformC14n.cpp
  
  Index: DSIGTransformC14n.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/dsig/DSIGTransformC14n.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- DSIGTransformC14n.cpp	30 Apr 2003 11:41:14 -0000	1.8
  +++ DSIGTransformC14n.cpp	1 May 2003 10:04:36 -0000	1.9
  @@ -299,7 +299,46 @@
   
   }
   
  -void DSIGTransformC14n::addInclusiveNamespace(const char * ns) {
  +void DSIGTransformC14n::createInclusiveNamespaceNode(void) {
  +
  +	// Creates an empty inclusiveNamespace node.  Does _not_ set the prefixlist attribute
  +
  +	if (mp_inclNSNode != NULL)
  +		return;		// Already exists
  +
  +	safeBuffer str;
  +	const XMLCh * prefix;
  +	DOMDocument *doc = mp_parentSignature->getParentDocument();
  +
  +	// Use the Exclusive Canonicalisation prefix
  +	prefix = mp_parentSignature->getECNSPrefix();
  +
  +	// Create the transform node
  +	makeQName(str, prefix, "InclusiveNamespaces");
  +	mp_inclNSNode = doc->createElementNS(DSIGConstants::s_unicodeStrURIDSIG, str.rawXMLChBuffer());
  +
  +	// Add the node to the owner element
  +	mp_txfmNode->appendChild(doc->createTextNode(DSIGConstants::s_unicodeStrNL));
  +	mp_txfmNode->appendChild(mp_inclNSNode);
  +	mp_txfmNode->appendChild(doc->createTextNode(DSIGConstants::s_unicodeStrNL));
  +
  +	// Set the namespace attribute
  +	if (prefix[0] == '\0') {
  +		str.sbTranscodeIn("xmlns");
  +	}
  +	else {
  +		str.sbTranscodeIn("xmlns:");
  +		str.sbXMLChCat(prefix);
  +	}
  +
  +	mp_inclNSNode->setAttributeNS(DSIGConstants::s_unicodeStrURIXMLNS, 
  +							str.rawXMLChBuffer(), 
  +							DSIGConstants::s_unicodeStrURIEC);
  +}
  +
  +void DSIGTransformC14n::setInclusiveNamespaces(XMLCh * ns) {
  +
  +	// Set all the namespaces at once
   
   	if (m_cMethod != CANON_C14NE_COM && m_cMethod != CANON_C14NE_NOC) {
   
  @@ -310,36 +349,39 @@
   
   	if (mp_inclNSNode == NULL) {
   
  -		safeBuffer str;
  -		const XMLCh * prefix;
  -		DOMDocument *doc = mp_parentSignature->getParentDocument();
  +		// Create the transform node
  +		createInclusiveNamespaceNode();
  +
  +
  +	}
   
  -		// Use the Exclusive Canonicalisation prefix
  -		prefix = mp_parentSignature->getECNSPrefix();
  +	// Now create the prefix list
  +
  +	mp_inclNSNode->setAttribute(MAKE_UNICODE_STRING("PrefixList"), ns);
  +	mp_inclNSStr = mp_inclNSNode->getAttributes()->getNamedItem(MAKE_UNICODE_STRING("PrefixList"))->getNodeValue();
  +
  +}
  +
  +
  +void DSIGTransformC14n::addInclusiveNamespace(const char * ns) {
  +
  +	if (m_cMethod != CANON_C14NE_COM && m_cMethod != CANON_C14NE_NOC) {
  +
  +		throw XSECException(XSECException::TransformError,
  +			"Cannot set inclusive namespaces on non Exclusive Canonicalisation");
  +
  +	}
  +
  +	if (mp_inclNSNode == NULL) {
   
   		// Create the transform node
  -		makeQName(str, prefix, "InclusiveNamespaces");
  -		mp_inclNSNode = doc->createElementNS(DSIGConstants::s_unicodeStrURIDSIG, str.rawXMLChBuffer());
  +		createInclusiveNamespaceNode();
  +
  +		// Now create the prefix list
  +
   		mp_inclNSNode->setAttribute(MAKE_UNICODE_STRING("PrefixList"), MAKE_UNICODE_STRING(ns));
   		mp_inclNSStr = mp_inclNSNode->getAttributes()->getNamedItem(MAKE_UNICODE_STRING("PrefixList"))->getNodeValue();
   
  -		// Add the node
  -		mp_txfmNode->appendChild(doc->createTextNode(DSIGConstants::s_unicodeStrNL));
  -		mp_txfmNode->appendChild(mp_inclNSNode);
  -		mp_txfmNode->appendChild(doc->createTextNode(DSIGConstants::s_unicodeStrNL));
  -
  -		// Set the namespace attribute
  -		if (prefix[0] == '\0') {
  -			str.sbTranscodeIn("xmlns");
  -		}
  -		else {
  -			str.sbTranscodeIn("xmlns:");
  -			str.sbXMLChCat(prefix);
  -		}
  -
  -		mp_inclNSNode->setAttributeNS(DSIGConstants::s_unicodeStrURIXMLNS, 
  -								str.rawXMLChBuffer(), 
  -								DSIGConstants::s_unicodeStrURIEC);
   	}
   
   	else {
  
  
  
  1.5       +17 -1     xml-security/c/src/dsig/DSIGTransformC14n.hpp
  
  Index: DSIGTransformC14n.hpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/dsig/DSIGTransformC14n.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DSIGTransformC14n.hpp	22 Feb 2003 08:47:23 -0000	1.4
  +++ DSIGTransformC14n.hpp	1 May 2003 10:04:36 -0000	1.5
  @@ -222,6 +222,19 @@
   	void addInclusiveNamespace(const char * ns);
   
   	/**
  +	 * \brief Set the namespace list
  +	 *
  +	 * Deletes current PrefixList (if any) and sets the list to the space
  +	 * separated list of namespace prefixes provided in ns.
  +	 *
  +	 * @note No checking is done on the string passed in.
  +	 *
  +	 * @param ns The (space separated) list of prefixes to set.
  +	 */
  +
  +	void DSIGTransformC14n::setInclusiveNamespaces(XMLCh * ns);
  +	
  +	/**
   	 * \brief Get the string containing the inclusive namespaces.
   	 *
   	 * Get the string containing a list of (space separated) prefixes that will
  @@ -249,6 +262,9 @@
   
   	DSIGTransformC14n();
   	DSIGTransformC14n(const DSIGTransformC14n & theOther);
  +
  +	void createInclusiveNamespaceNode(void);
  +
   
   	canonicalizationMethod			m_cMethod;			// The method
   	DOMElement						* mp_inclNSNode;	// Node holding the inclusive Namespaces