-/*\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__ */
-/*\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);