Linux fixes
authorScott Cantor <cantor.2@osu.edu>
Sat, 1 Apr 2006 22:11:47 +0000 (22:11 +0000)
committerScott Cantor <cantor.2@osu.edu>
Sat, 1 Apr 2006 22:11:47 +0000 (22:11 +0000)
xmltooling/XMLToolingConfig.cpp
xmltooling/base.h
xmltooling/signature/KeyInfo.h
xmltooling/signature/impl/KeyInfoImpl.cpp

index 2c8d410..a9e51b7 100644 (file)
@@ -49,12 +49,12 @@ using namespace xmltooling;
 using namespace std;
 
 #define REGISTER_ELEMENT(namespaceURI,cname) \
-    q=QName(namespaceURI,cname##::LOCAL_NAME); \
+    q=QName(namespaceURI,cname::LOCAL_NAME); \
     XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
     Validator::registerValidator(q,new cname##SchemaValidator())
     
 #define REGISTER_TYPE(namespaceURI,cname) \
-    q=QName(namespaceURI,cname##::TYPE_NAME); \
+    q=QName(namespaceURI,cname::TYPE_NAME); \
     XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
     Validator::registerValidator(q,new cname##SchemaValidator())
 
index 7de34c5..c3e780a 100644 (file)
  * @param namespaceURI  the XML namespace of the child element
  */
 #define PROC_XMLOBJECT_CHILDREN(proper,namespaceURI) \
-    if (XMLHelper::isNodeNamed(root,namespaceURI,proper##::LOCAL_NAME)) { \
+    if (XMLHelper::isNodeNamed(root,namespaceURI,proper::LOCAL_NAME)) { \
         proper* typesafe=dynamic_cast<proper*>(childXMLObject); \
         if (typesafe) { \
             get##proper##s().push_back(typesafe); \
  * @param namespaceURI  the XML namespace of the child element
  */
 #define PROC_XMLOBJECT_CHILD(proper,namespaceURI) \
-    if (XMLHelper::isNodeNamed(root,namespaceURI,proper##::LOCAL_NAME)) { \
+    if (XMLHelper::isNodeNamed(root,namespaceURI,proper::LOCAL_NAME)) { \
         proper* typesafe=dynamic_cast<proper*>(childXMLObject); \
         if (typesafe) { \
             set##proper(typesafe); \
index 50c8637..50e82cc 100644 (file)
-/*\r
- *  Copyright 2001-2006 Internet2\r
- * \r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- *     http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-/**\r
- * @file KeyInfo.h\r
- * \r
- * XMLObjects representing XML Digital Signature, version 20020212, KeyInfo element\r
- * and related content.\r
- */\r
-\r
-#ifndef __xmltooling_keyinfo_h__\r
-#define __xmltooling_keyinfo_h__\r
-\r
-#include <xmltooling/ElementProxy.h>\r
-#include <xmltooling/exceptions.h>\r
-#include <xmltooling/XMLObjectBuilder.h>\r
-#include <xmltooling/util/XMLConstants.h>\r
-#include <xmltooling/validation/ValidatingXMLObject.h>\r
-\r
-#include <typeinfo.h>\r
-\r
-#define DECL_XMLSIGOBJECTBUILDER(cname) \\r
-    DECL_XMLOBJECTBUILDER(XMLTOOL_API,cname,XMLConstants::XMLSIG_NS,XMLConstants::XMLSIG_PREFIX)\r
-\r
-namespace xmltooling {\r
-\r
-    /**\r
-     * XMLObject representing XML Digital Signature, version 20020212, KeyName element.\r
-     */\r
-    BEGIN_XMLOBJECT(XMLTOOL_API,KeyName,XMLObject);\r
-        DECL_XMLOBJECT_CONTENT(Name);\r
-    END_XMLOBJECT;\r
-\r
-    /**\r
-     * XMLObject representing XML Digital Signature, version 20020212, MgmtData element.\r
-     */\r
-    BEGIN_XMLOBJECT(XMLTOOL_API,MgmtData,XMLObject);\r
-        DECL_XMLOBJECT_CONTENT(Data);\r
-    END_XMLOBJECT;\r
-\r
-    /**\r
-     * XMLObject representing XML Digital Signature, version 20020212, Modulus element.\r
-     */\r
-    BEGIN_XMLOBJECT(XMLTOOL_API,Modulus,XMLObject);\r
-        DECL_XMLOBJECT_CONTENT(Value);\r
-    END_XMLOBJECT;\r
-\r
-    /**\r
-     * XMLObject representing XML Digital Signature, version 20020212, Exponent element.\r
-     */\r
-    BEGIN_XMLOBJECT(XMLTOOL_API,Exponent,XMLObject);\r
-        DECL_XMLOBJECT_CONTENT(Value);\r
-    END_XMLOBJECT;\r
-\r
-    /**\r
-     * XMLObject representing XML Digital Signature, version 20020212, RSAKeyValue element.\r
-     */\r
-    BEGIN_XMLOBJECT(XMLTOOL_API,RSAKeyValue,XMLObject);\r
-        DECL_XMLOBJECT_CHILD(Modulus);\r
-        DECL_XMLOBJECT_CHILD(Exponent);\r
-        /** RSAKeyValueType local name */\r
-        static const XMLCh TYPE_NAME[];\r
-    END_XMLOBJECT;\r
-\r
-    /**\r
-     * XMLObject representing XML Digital Signature, version 20020212, KeyInfo element.\r
-     */\r
-    BEGIN_XMLOBJECT(XMLTOOL_API,KeyInfo,ElementProxy);\r
-        DECL_XMLOBJECT_ATTRIB(Id,ID);\r
-        DECL_XMLOBJECT_CHILDREN(KeyName);\r
-        DECL_XMLOBJECT_CHILDREN(MgmtData);\r
-        /** KeyInfoType local name */\r
-        static const XMLCh TYPE_NAME[];\r
-    END_XMLOBJECT;\r
-\r
-    DECL_XMLSIGOBJECTBUILDER(KeyName);\r
-    DECL_XMLSIGOBJECTBUILDER(MgmtData);\r
-    DECL_XMLSIGOBJECTBUILDER(Modulus);\r
-    DECL_XMLSIGOBJECTBUILDER(Exponent);\r
-    DECL_XMLSIGOBJECTBUILDER(RSAKeyValue);\r
-    DECL_XMLSIGOBJECTBUILDER(KeyInfo);\r
-    \r
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,KeyName);\r
-        XMLOBJECTVALIDATOR_REQUIRE(KeyName,Name);\r
-    END_XMLOBJECTVALIDATOR;\r
-    \r
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,MgmtData);\r
-        XMLOBJECTVALIDATOR_REQUIRE(MgmtData,Data);\r
-    END_XMLOBJECTVALIDATOR;\r
-\r
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,Modulus);\r
-        XMLOBJECTVALIDATOR_REQUIRE(Modulus,Value);\r
-    END_XMLOBJECTVALIDATOR;\r
-\r
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,Exponent);\r
-        XMLOBJECTVALIDATOR_REQUIRE(Exponent,Value);\r
-    END_XMLOBJECTVALIDATOR;\r
-\r
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,RSAKeyValue);\r
-        XMLOBJECTVALIDATOR_REQUIRE(RSAKeyValue,Modulus);\r
-        XMLOBJECTVALIDATOR_REQUIRE(RSAKeyValue,Exponent);\r
-    END_XMLOBJECTVALIDATOR;\r
-\r
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,KeyInfo);\r
-        XMLOBJECTVALIDATOR_CHECKEMPTY(KeyInfo,XMLObject);\r
-    END_XMLOBJECTVALIDATOR;\r
-\r
-};\r
-\r
-#endif /* __xmltooling_keyinfo_h__ */\r
+/*
+ *  Copyright 2001-2006 Internet2
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file KeyInfo.h
+ * 
+ * XMLObjects representing XML Digital Signature, version 20020212, KeyInfo element
+ * and related content.
+ */
+
+#ifndef __xmltooling_keyinfo_h__
+#define __xmltooling_keyinfo_h__
+
+#include <xmltooling/ElementProxy.h>
+#include <xmltooling/exceptions.h>
+#include <xmltooling/XMLObjectBuilder.h>
+#include <xmltooling/util/XMLConstants.h>
+#include <xmltooling/validation/ValidatingXMLObject.h>
+
+#include <typeinfo>
+
+#define DECL_XMLSIGOBJECTBUILDER(cname) \
+    DECL_XMLOBJECTBUILDER(XMLTOOL_API,cname,XMLConstants::XMLSIG_NS,XMLConstants::XMLSIG_PREFIX)
+
+namespace xmltooling {
+
+    /**
+     * XMLObject representing XML Digital Signature, version 20020212, KeyName element.
+     */
+    BEGIN_XMLOBJECT(XMLTOOL_API,KeyName,XMLObject);
+        DECL_XMLOBJECT_CONTENT(Name);
+    END_XMLOBJECT;
+
+    /**
+     * XMLObject representing XML Digital Signature, version 20020212, MgmtData element.
+     */
+    BEGIN_XMLOBJECT(XMLTOOL_API,MgmtData,XMLObject);
+        DECL_XMLOBJECT_CONTENT(Data);
+    END_XMLOBJECT;
+
+    /**
+     * XMLObject representing XML Digital Signature, version 20020212, Modulus element.
+     */
+    BEGIN_XMLOBJECT(XMLTOOL_API,Modulus,XMLObject);
+        DECL_XMLOBJECT_CONTENT(Value);
+    END_XMLOBJECT;
+
+    /**
+     * XMLObject representing XML Digital Signature, version 20020212, Exponent element.
+     */
+    BEGIN_XMLOBJECT(XMLTOOL_API,Exponent,XMLObject);
+        DECL_XMLOBJECT_CONTENT(Value);
+    END_XMLOBJECT;
+
+    /**
+     * XMLObject representing XML Digital Signature, version 20020212, RSAKeyValue element.
+     */
+    BEGIN_XMLOBJECT(XMLTOOL_API,RSAKeyValue,XMLObject);
+        DECL_XMLOBJECT_CHILD(Modulus);
+        DECL_XMLOBJECT_CHILD(Exponent);
+        /** RSAKeyValueType local name */
+        static const XMLCh TYPE_NAME[];
+    END_XMLOBJECT;
+
+    /**
+     * XMLObject representing XML Digital Signature, version 20020212, KeyInfo element.
+     */
+    BEGIN_XMLOBJECT(XMLTOOL_API,KeyInfo,ElementProxy);
+        DECL_XMLOBJECT_ATTRIB(Id,ID);
+        DECL_XMLOBJECT_CHILDREN(KeyName);
+        DECL_XMLOBJECT_CHILDREN(MgmtData);
+        /** KeyInfoType local name */
+        static const XMLCh TYPE_NAME[];
+    END_XMLOBJECT;
+
+    DECL_XMLSIGOBJECTBUILDER(KeyName);
+    DECL_XMLSIGOBJECTBUILDER(MgmtData);
+    DECL_XMLSIGOBJECTBUILDER(Modulus);
+    DECL_XMLSIGOBJECTBUILDER(Exponent);
+    DECL_XMLSIGOBJECTBUILDER(RSAKeyValue);
+    DECL_XMLSIGOBJECTBUILDER(KeyInfo);
+    
+    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,KeyName);
+        XMLOBJECTVALIDATOR_REQUIRE(KeyName,Name);
+    END_XMLOBJECTVALIDATOR;
+    
+    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,MgmtData);
+        XMLOBJECTVALIDATOR_REQUIRE(MgmtData,Data);
+    END_XMLOBJECTVALIDATOR;
+
+    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,Modulus);
+        XMLOBJECTVALIDATOR_REQUIRE(Modulus,Value);
+    END_XMLOBJECTVALIDATOR;
+
+    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,Exponent);
+        XMLOBJECTVALIDATOR_REQUIRE(Exponent,Value);
+    END_XMLOBJECTVALIDATOR;
+
+    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,RSAKeyValue);
+        XMLOBJECTVALIDATOR_REQUIRE(RSAKeyValue,Modulus);
+        XMLOBJECTVALIDATOR_REQUIRE(RSAKeyValue,Exponent);
+    END_XMLOBJECTVALIDATOR;
+
+    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,KeyInfo);
+        XMLOBJECTVALIDATOR_CHECKEMPTY(KeyInfo,XMLObject);
+    END_XMLOBJECTVALIDATOR;
+
+};
+
+#endif /* __xmltooling_keyinfo_h__ */
index b31de4e..8773b04 100644 (file)
-/*\r
-*  Copyright 2001-2006 Internet2\r
- * \r
-* Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- *     http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-/**\r
- * XMLSecSignatureImpl.cpp\r
- * \r
- * Signature class for XMLSec-based signature-handling\r
- */\r
-\r
-#include "internal.h"\r
-#include "AbstractElementProxy.h"\r
-#include "exceptions.h"\r
-#include "io/AbstractXMLObjectMarshaller.h"\r
-#include "io/AbstractXMLObjectUnmarshaller.h"\r
-#include "signature/KeyInfo.h"\r
-#include "util/XMLHelper.h"\r
-#include "validation/AbstractValidatingXMLObject.h"\r
-\r
-#include <xercesc/util/XMLUniDefs.hpp>\r
-\r
-using namespace xmltooling;\r
-using namespace std;\r
-\r
-#if defined (_MSC_VER)\r
-    #pragma warning( push )\r
-    #pragma warning( disable : 4250 4251 )\r
-#endif\r
-\r
-namespace xmltooling {\r
-    \r
-    class XMLTOOL_DLLLOCAL RSAKeyValueImpl\r
-        : public RSAKeyValue,\r
-            public AbstractDOMCachingXMLObject,\r
-            public AbstractValidatingXMLObject,\r
-            public AbstractXMLObjectMarshaller,\r
-            public AbstractXMLObjectUnmarshaller\r
-    {\r
-    public:\r
-        virtual ~RSAKeyValueImpl() {}\r
-\r
-        RSAKeyValueImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)\r
-            : AbstractXMLObject(nsURI, localName, prefix, schemaType) {\r
-            init();\r
-        }\r
-            \r
-        RSAKeyValueImpl(const RSAKeyValueImpl& src)\r
-            : AbstractXMLObject(src),\r
-                AbstractDOMCachingXMLObject(src),\r
-                AbstractValidatingXMLObject(src) {\r
-            init();\r
-            setModulus(src.getModulus());\r
-            setExponent(src.getExponent());\r
-        }\r
-        \r
-        void init() {\r
-            m_Modulus=NULL;\r
-            m_Exponent=NULL;\r
-            m_children.push_back(NULL);\r
-            m_children.push_back(NULL);\r
-            m_pos_Modulus=m_children.begin();\r
-            m_pos_Exponent=m_children.begin();\r
-            m_pos_Exponent++;\r
-        }\r
-        \r
-        IMPL_XMLOBJECT_CLONE(RSAKeyValue);\r
-        IMPL_XMLOBJECT_CHILD(Modulus);\r
-        IMPL_XMLOBJECT_CHILD(Exponent);\r
-\r
-    protected:\r
-        void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {\r
-            PROC_XMLOBJECT_CHILD(Modulus,XMLConstants::XMLSIG_NS);\r
-            PROC_XMLOBJECT_CHILD(Exponent,XMLConstants::XMLSIG_NS);\r
-            \r
-            throw UnmarshallingException("Invalid child element: $1",params(1,childXMLObject->getElementQName().toString()));\r
-        }\r
-    };\r
-    \r
-    class XMLTOOL_DLLLOCAL KeyInfoImpl\r
-        : public KeyInfo,\r
-            public AbstractDOMCachingXMLObject,\r
-            public AbstractElementProxy,\r
-            public AbstractValidatingXMLObject,\r
-            public AbstractXMLObjectMarshaller,\r
-            public AbstractXMLObjectUnmarshaller\r
-    {\r
-    public:\r
-        virtual ~KeyInfoImpl() {}\r
-\r
-        KeyInfoImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)\r
-            : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Id(NULL) {\r
-        }\r
-            \r
-        KeyInfoImpl(const KeyInfoImpl& src)\r
-            : AbstractXMLObject(src),\r
-                AbstractDOMCachingXMLObject(src),\r
-                AbstractElementProxy(src),\r
-                AbstractValidatingXMLObject(src),\r
-                m_Id(XMLString::replicate(src.m_Id)) {\r
-                    \r
-            for (list<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {\r
-                if (*i) {\r
-                    KeyName* kn=dynamic_cast<KeyName*>(*i);\r
-                    if (kn) {\r
-                        getKeyNames().push_back(kn->cloneKeyName());\r
-                        continue;\r
-                    }\r
-                    MgmtData* md=dynamic_cast<MgmtData*>(*i);\r
-                    if (md) {\r
-                        getMgmtDatas().push_back(md->cloneMgmtData());\r
-                        continue;\r
-                    }\r
-                    getXMLObjects().push_back((*i)->clone());\r
-                }\r
-            }\r
-        }\r
-        \r
-        IMPL_XMLOBJECT_CLONE(KeyInfo);\r
-        IMPL_XMLOBJECT_ATTRIB(Id);\r
-        IMPL_XMLOBJECT_CHILDREN(KeyName,m_children.end());\r
-        IMPL_XMLOBJECT_CHILDREN(MgmtData,m_children.end());\r
-\r
-    protected:\r
-        void marshallAttributes(DOMElement* domElement) const {\r
-            if(getId()) {\r
-                domElement->setAttributeNS(NULL, ID_ATTRIB_NAME, getId());\r
-                domElement->setIdAttributeNS(NULL, ID_ATTRIB_NAME);\r
-            }\r
-        }\r
-\r
-        void marshallElementContent(DOMElement* domElement) const {\r
-            if(getTextContent()) {\r
-                domElement->appendChild(domElement->getOwnerDocument()->createTextNode(getTextContent()));\r
-            }\r
-        }\r
-\r
-        void processElementContent(const XMLCh* elementContent) {\r
-            setTextContent(elementContent);\r
-        }\r
-\r
-        void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {\r
-            PROC_XMLOBJECT_CHILDREN(KeyName,XMLConstants::XMLSIG_NS);\r
-            PROC_XMLOBJECT_CHILDREN(MgmtData,XMLConstants::XMLSIG_NS);\r
-            \r
-            // Unknown child.\r
-            const XMLCh* nsURI=childXMLObject->getElementQName().getNamespaceURI();\r
-            if (!XMLString::equals(nsURI,XMLConstants::XMLSIG_NS) && nsURI && *nsURI)\r
-                getXMLObjects().push_back(childXMLObject);\r
-            \r
-            throw UnmarshallingException("Invalid child element: $1",params(1,childXMLObject->getElementQName().toString()));\r
-        }\r
-\r
-        void processAttribute(const DOMAttr* attribute) {\r
-            if (XMLHelper::isNodeNamed(attribute, NULL, ID_ATTRIB_NAME)) {\r
-                setId(attribute->getValue());\r
-                static_cast<DOMElement*>(attribute->getParentNode())->setIdAttributeNode(attribute);\r
-            }\r
-        }\r
-    };\r
-    \r
-    DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,KeyName,Name);\r
-    DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,MgmtData,Data);\r
-    DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,Modulus,Value);\r
-    DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,Exponent,Value);\r
-};\r
-\r
-#if defined (_MSC_VER)\r
-    #pragma warning( pop )\r
-#endif\r
-\r
-// Builder Implementations\r
-\r
-IMPL_XMLOBJECTBUILDER(KeyInfo);\r
-IMPL_XMLOBJECTBUILDER(KeyName);\r
-IMPL_XMLOBJECTBUILDER(MgmtData);\r
-IMPL_XMLOBJECTBUILDER(Modulus);\r
-IMPL_XMLOBJECTBUILDER(Exponent);\r
-IMPL_XMLOBJECTBUILDER(RSAKeyValue);\r
-\r
-const XMLCh KeyInfo::LOCAL_NAME[] =         UNICODE_LITERAL_7(K,e,y,I,n,f,o);\r
-const XMLCh KeyInfo::TYPE_NAME[] =          UNICODE_LITERAL_11(K,e,y,I,n,f,o,T,y,p,e);\r
-const XMLCh KeyInfo::ID_ATTRIB_NAME[] =     UNICODE_LITERAL_2(I,d);\r
-const XMLCh MgmtData::LOCAL_NAME[] =        UNICODE_LITERAL_8(M,g,m,t,D,a,t,a);\r
-const XMLCh KeyName::LOCAL_NAME[] =         UNICODE_LITERAL_7(K,e,y,N,a,m,e);\r
-const XMLCh Modulus::LOCAL_NAME[] =         UNICODE_LITERAL_7(M,o,d,u,l,u,s);\r
-const XMLCh Exponent::LOCAL_NAME[] =        UNICODE_LITERAL_8(E,x,p,o,n,e,n,t);\r
-const XMLCh RSAKeyValue::LOCAL_NAME[] =     UNICODE_LITERAL_11(R,S,A,K,e,y,V,a,l,u,e);\r
-const XMLCh RSAKeyValue::TYPE_NAME[] =      UNICODE_LITERAL_15(R,S,A,K,e,y,V,a,l,u,e,T,y,p,e);\r
+/*
+*  Copyright 2001-2006 Internet2
+ * 
+* Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * XMLSecSignatureImpl.cpp
+ * 
+ * Signature class for XMLSec-based signature-handling
+ */
+
+#include "internal.h"
+#include "AbstractElementProxy.h"
+#include "exceptions.h"
+#include "io/AbstractXMLObjectMarshaller.h"
+#include "io/AbstractXMLObjectUnmarshaller.h"
+#include "signature/KeyInfo.h"
+#include "util/XMLHelper.h"
+#include "validation/AbstractValidatingXMLObject.h"
+
+#include <xercesc/util/XMLUniDefs.hpp>
+
+using namespace xmltooling;
+using namespace std;
+
+#if defined (_MSC_VER)
+    #pragma warning( push )
+    #pragma warning( disable : 4250 4251 )
+#endif
+
+namespace xmltooling {
+    
+    class XMLTOOL_DLLLOCAL RSAKeyValueImpl
+        : public RSAKeyValue,
+            public AbstractDOMCachingXMLObject,
+            public AbstractValidatingXMLObject,
+            public AbstractXMLObjectMarshaller,
+            public AbstractXMLObjectUnmarshaller
+    {
+    public:
+        virtual ~RSAKeyValueImpl() {}
+
+        RSAKeyValueImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)
+            : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
+            init();
+        }
+            
+        RSAKeyValueImpl(const RSAKeyValueImpl& src)
+            : AbstractXMLObject(src),
+                AbstractDOMCachingXMLObject(src),
+                AbstractValidatingXMLObject(src) {
+            init();
+            setModulus(src.getModulus());
+            setExponent(src.getExponent());
+        }
+        
+        void init() {
+            m_Modulus=NULL;
+            m_Exponent=NULL;
+            m_children.push_back(NULL);
+            m_children.push_back(NULL);
+            m_pos_Modulus=m_children.begin();
+            m_pos_Exponent=m_children.begin();
+            m_pos_Exponent++;
+        }
+        
+        IMPL_XMLOBJECT_CLONE(RSAKeyValue);
+        IMPL_XMLOBJECT_CHILD(Modulus);
+        IMPL_XMLOBJECT_CHILD(Exponent);
+
+    protected:
+        void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
+            PROC_XMLOBJECT_CHILD(Modulus,XMLConstants::XMLSIG_NS);
+            PROC_XMLOBJECT_CHILD(Exponent,XMLConstants::XMLSIG_NS);
+            
+            throw UnmarshallingException("Invalid child element: $1",params(1,childXMLObject->getElementQName().toString().c_str()));
+        }
+    };
+    
+    class XMLTOOL_DLLLOCAL KeyInfoImpl
+        : public KeyInfo,
+            public AbstractDOMCachingXMLObject,
+            public AbstractElementProxy,
+            public AbstractValidatingXMLObject,
+            public AbstractXMLObjectMarshaller,
+            public AbstractXMLObjectUnmarshaller
+    {
+    public:
+        virtual ~KeyInfoImpl() {}
+
+        KeyInfoImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)
+            : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Id(NULL) {
+        }
+            
+        KeyInfoImpl(const KeyInfoImpl& src)
+            : AbstractXMLObject(src),
+                AbstractDOMCachingXMLObject(src),
+                AbstractElementProxy(src),
+                AbstractValidatingXMLObject(src),
+                m_Id(XMLString::replicate(src.m_Id)) {
+                    
+            for (list<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {
+                if (*i) {
+                    KeyName* kn=dynamic_cast<KeyName*>(*i);
+                    if (kn) {
+                        getKeyNames().push_back(kn->cloneKeyName());
+                        continue;
+                    }
+                    MgmtData* md=dynamic_cast<MgmtData*>(*i);
+                    if (md) {
+                        getMgmtDatas().push_back(md->cloneMgmtData());
+                        continue;
+                    }
+                    getXMLObjects().push_back((*i)->clone());
+                }
+            }
+        }
+        
+        IMPL_XMLOBJECT_CLONE(KeyInfo);
+        IMPL_XMLOBJECT_ATTRIB(Id);
+        IMPL_XMLOBJECT_CHILDREN(KeyName,m_children.end());
+        IMPL_XMLOBJECT_CHILDREN(MgmtData,m_children.end());
+
+    protected:
+        void marshallAttributes(DOMElement* domElement) const {
+            if(getId()) {
+                domElement->setAttributeNS(NULL, ID_ATTRIB_NAME, getId());
+                domElement->setIdAttributeNS(NULL, ID_ATTRIB_NAME);
+            }
+        }
+
+        void marshallElementContent(DOMElement* domElement) const {
+            if(getTextContent()) {
+                domElement->appendChild(domElement->getOwnerDocument()->createTextNode(getTextContent()));
+            }
+        }
+
+        void processElementContent(const XMLCh* elementContent) {
+            setTextContent(elementContent);
+        }
+
+        void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
+            PROC_XMLOBJECT_CHILDREN(KeyName,XMLConstants::XMLSIG_NS);
+            PROC_XMLOBJECT_CHILDREN(MgmtData,XMLConstants::XMLSIG_NS);
+            
+            // Unknown child.
+            const XMLCh* nsURI=childXMLObject->getElementQName().getNamespaceURI();
+            if (!XMLString::equals(nsURI,XMLConstants::XMLSIG_NS) && nsURI && *nsURI)
+                getXMLObjects().push_back(childXMLObject);
+            
+            throw UnmarshallingException("Invalid child element: $1",params(1,childXMLObject->getElementQName().toString().c_str()));
+        }
+
+        void processAttribute(const DOMAttr* attribute) {
+            if (XMLHelper::isNodeNamed(attribute, NULL, ID_ATTRIB_NAME)) {
+                setId(attribute->getValue());
+                static_cast<DOMElement*>(attribute->getParentNode())->setIdAttributeNode(attribute);
+            }
+        }
+    };
+    
+    DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,KeyName,Name);
+    DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,MgmtData,Data);
+    DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,Modulus,Value);
+    DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,Exponent,Value);
+};
+
+#if defined (_MSC_VER)
+    #pragma warning( pop )
+#endif
+
+// Builder Implementations
+
+IMPL_XMLOBJECTBUILDER(KeyInfo);
+IMPL_XMLOBJECTBUILDER(KeyName);
+IMPL_XMLOBJECTBUILDER(MgmtData);
+IMPL_XMLOBJECTBUILDER(Modulus);
+IMPL_XMLOBJECTBUILDER(Exponent);
+IMPL_XMLOBJECTBUILDER(RSAKeyValue);
+
+const XMLCh KeyInfo::LOCAL_NAME[] =         UNICODE_LITERAL_7(K,e,y,I,n,f,o);
+const XMLCh KeyInfo::TYPE_NAME[] =          UNICODE_LITERAL_11(K,e,y,I,n,f,o,T,y,p,e);
+const XMLCh KeyInfo::ID_ATTRIB_NAME[] =     UNICODE_LITERAL_2(I,d);
+const XMLCh MgmtData::LOCAL_NAME[] =        UNICODE_LITERAL_8(M,g,m,t,D,a,t,a);
+const XMLCh KeyName::LOCAL_NAME[] =         UNICODE_LITERAL_7(K,e,y,N,a,m,e);
+const XMLCh Modulus::LOCAL_NAME[] =         UNICODE_LITERAL_7(M,o,d,u,l,u,s);
+const XMLCh Exponent::LOCAL_NAME[] =        UNICODE_LITERAL_8(E,x,p,o,n,e,n,t);
+const XMLCh RSAKeyValue::LOCAL_NAME[] =     UNICODE_LITERAL_11(R,S,A,K,e,y,V,a,l,u,e);
+const XMLCh RSAKeyValue::TYPE_NAME[] =      UNICODE_LITERAL_15(R,S,A,K,e,y,V,a,l,u,e,T,y,p,e);