Add accessors for new KeyInfo extensions, and fix builder namespaces.
authorcantor <cantor@de75baf8-a10c-0410-a50a-987c0e22f00f>
Mon, 7 Jun 2010 20:00:51 +0000 (20:00 +0000)
committercantor <cantor@de75baf8-a10c-0410-a50a-987c0e22f00f>
Mon, 7 Jun 2010 20:00:51 +0000 (20:00 +0000)
git-svn-id: https://svn.middleware.georgetown.edu/cpp-xmltooling/branches/REL_1@752 de75baf8-a10c-0410-a50a-987c0e22f00f

xmltooling/signature/KeyInfo.h
xmltooling/signature/impl/KeyInfoImpl.cpp

index 25e72b8..64141b2 100644 (file)
 #define DECL_XMLSIGOBJECTBUILDER(cname) \
     DECL_XMLOBJECTBUILDER(XMLTOOL_API,cname,xmlconstants::XMLSIG_NS,xmlconstants::XMLSIG_PREFIX)
 
+/**
+ * Macro for declaring signature builders.
+ * 
+ * @param cname name of class being built
+ */
+#define DECL_XMLSIG11OBJECTBUILDER(cname) \
+    DECL_XMLOBJECTBUILDER(XMLTOOL_API,cname,xmlconstants::XMLSIG11_NS,xmlconstants::XMLSIG11_PREFIX)
+
 namespace xmlsignature {
 
     DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,KeyName,Name,XML Digital Signature version 20020212 KeyName element);
@@ -135,6 +143,7 @@ namespace xmlsignature {
         DECL_TYPED_CHILDREN(X509SubjectName);
         DECL_TYPED_CHILDREN(X509Certificate);
         DECL_TYPED_CHILDREN(X509CRL);
+        DECL_TYPED_CHILDREN(OCSPResponse);
         /** X509DataType local name */
         static const XMLCh TYPE_NAME[];
     END_XMLOBJECT;
@@ -157,32 +166,33 @@ namespace xmlsignature {
         static const XMLCh TYPE_NAME[];
     END_XMLOBJECT;
 
+    BEGIN_XMLOBJECT(XMLTOOL_API,KeyInfoReference,xmltooling::XMLObject,XML Digital Signature version 1.1 KeyInfoReference element);
+        DECL_STRING_ATTRIB(Id,ID);
+        DECL_STRING_ATTRIB(URI,URI);
+        /** KeyInfoReferenceType local name */
+        static const XMLCh TYPE_NAME[];
+    END_XMLOBJECT;
+
     BEGIN_XMLOBJECT(XMLTOOL_API,KeyInfo,xmltooling::ElementExtensibleXMLObject,XML Digital Signature version 20020212 KeyInfo element);
         DECL_STRING_ATTRIB(Id,ID);
         DECL_TYPED_CHILDREN(X509Data);
         DECL_TYPED_CHILDREN(KeyName);
         DECL_TYPED_CHILDREN(KeyValue);
+        DECL_TYPED_CHILDREN(DEREncodedKeyValue);
         DECL_TYPED_CHILDREN(RetrievalMethod);
         DECL_TYPED_CHILDREN(MgmtData);
         DECL_TYPED_CHILDREN(PGPData);
         DECL_TYPED_CHILDREN(SPKIData);
+        DECL_TYPED_CHILDREN(KeyInfoReference);
         /** KeyInfoType local name */
         static const XMLCh TYPE_NAME[];
     END_XMLOBJECT;
 
-    BEGIN_XMLOBJECT(XMLTOOL_API,KeyInfoReference,xmltooling::XMLObject,XML Digital Signature version 1.1 KeyInfoReference element);
-        DECL_STRING_ATTRIB(Id,ID);
-        DECL_STRING_ATTRIB(URI,URI);
-        /** KeyInfoReferenceType local name */
-        static const XMLCh TYPE_NAME[];
-    END_XMLOBJECT;
-
     DECL_XMLSIGOBJECTBUILDER(PGPData);
     DECL_XMLSIGOBJECTBUILDER(PGPKeyID);
     DECL_XMLSIGOBJECTBUILDER(PGPKeyPacket);
     DECL_XMLSIGOBJECTBUILDER(SPKIData);
     DECL_XMLSIGOBJECTBUILDER(SPKISexp);
-    DECL_XMLSIGOBJECTBUILDER(OCSPResponse);
     DECL_XMLSIGOBJECTBUILDER(X509IssuerSerial);
     DECL_XMLSIGOBJECTBUILDER(X509IssuerName);
     DECL_XMLSIGOBJECTBUILDER(X509SerialNumber);
@@ -209,9 +219,11 @@ namespace xmlsignature {
     DECL_XMLSIGOBJECTBUILDER(DSAKeyValue);
     DECL_XMLSIGOBJECTBUILDER(RSAKeyValue);
     DECL_XMLSIGOBJECTBUILDER(KeyValue);
-    DECL_XMLSIGOBJECTBUILDER(DEREncodedKeyValue);
     DECL_XMLSIGOBJECTBUILDER(KeyInfo);
-    DECL_XMLSIGOBJECTBUILDER(KeyInfoReference);
+
+    DECL_XMLSIG11OBJECTBUILDER(DEREncodedKeyValue);
+    DECL_XMLSIG11OBJECTBUILDER(KeyInfoReference);
+    DECL_XMLSIG11OBJECTBUILDER(OCSPResponse);
 
     /**
      * Registers builders and validators for KeyInfo classes into the runtime.
index d94b71c..cc82bf6 100644 (file)
@@ -36,6 +36,7 @@ using namespace xmltooling;
 using namespace xercesc;
 using namespace std;
 using xmlconstants::XMLSIG_NS;
+using xmlconstants::XMLSIG11_NS;
 
 #if defined (_MSC_VER)
     #pragma warning( push )
@@ -508,6 +509,12 @@ namespace xmlsignature {
                         continue;
                     }
 
+                    OCSPResponse* ocsp=dynamic_cast<OCSPResponse*>(*i);
+                    if (ocsp) {
+                        getOCSPResponses().push_back(ocsp->cloneOCSPResponse());
+                        continue;
+                    }
+
                     getUnknownXMLObjects().push_back((*i)->clone());
                 }
             }
@@ -519,6 +526,7 @@ namespace xmlsignature {
         IMPL_TYPED_CHILDREN(X509SubjectName,m_children.end());
         IMPL_TYPED_CHILDREN(X509Certificate,m_children.end());
         IMPL_TYPED_CHILDREN(X509CRL,m_children.end());
+        IMPL_TYPED_CHILDREN(OCSPResponse,m_children.end());
         IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end());
 
     protected:
@@ -528,6 +536,7 @@ namespace xmlsignature {
             PROC_TYPED_CHILDREN(X509SubjectName,XMLSIG_NS,false);
             PROC_TYPED_CHILDREN(X509Certificate,XMLSIG_NS,false);
             PROC_TYPED_CHILDREN(X509CRL,XMLSIG_NS,false);
+            PROC_TYPED_CHILDREN(OCSPResponse,XMLSIG_NS,false);
             
             // Unknown child.
             const XMLCh* nsURI=root->getNamespaceURI();
@@ -661,6 +670,51 @@ namespace xmlsignature {
         }
     };
 
+    class XMLTOOL_DLLLOCAL KeyInfoReferenceImpl : public virtual KeyInfoReference,
+        public AbstractComplexElement,
+        public AbstractDOMCachingXMLObject,
+        public AbstractXMLObjectMarshaller,
+        public AbstractXMLObjectUnmarshaller
+    {
+    public:
+        virtual ~KeyInfoReferenceImpl() {
+            XMLString::release(&m_Id);
+            XMLString::release(&m_URI);
+        }
+
+        KeyInfoReferenceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+            : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
+            init();
+        }
+
+        KeyInfoReferenceImpl(const KeyInfoReferenceImpl& src)
+                : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
+            init();
+            setId(getId());
+            setURI(getURI());
+        }
+
+        void init() {
+            m_Id=m_URI=nullptr;
+        }
+
+        IMPL_XMLOBJECT_CLONE(KeyInfoReference);
+        IMPL_ID_ATTRIB(Id);
+        IMPL_STRING_ATTRIB(URI);
+
+    protected:
+        void marshallAttributes(DOMElement* domElement) const {
+            MARSHALL_ID_ATTRIB(Id,ID,nullptr);
+            MARSHALL_STRING_ATTRIB(URI,URI,nullptr);
+        }
+
+        void processAttribute(const DOMAttr* attribute) {
+            PROC_ID_ATTRIB(Id,ID,nullptr);
+            PROC_STRING_ATTRIB(URI,URI,nullptr);
+            AbstractXMLObjectUnmarshaller::processAttribute(attribute);
+        }
+    };
+
     class XMLTOOL_DLLLOCAL KeyInfoImpl : public virtual KeyInfo,
         public AbstractComplexElement,
         public AbstractDOMCachingXMLObject,
@@ -700,6 +754,12 @@ namespace xmlsignature {
                         continue;
                     }
 
+                    DEREncodedKeyValue* ekv=dynamic_cast<DEREncodedKeyValue*>(*i);
+                    if (ekv) {
+                        getDEREncodedKeyValues().push_back(ekv->cloneDEREncodedKeyValue());
+                        continue;
+                    }
+
                     RetrievalMethod* rm=dynamic_cast<RetrievalMethod*>(*i);
                     if (rm) {
                         getRetrievalMethods().push_back(rm->cloneRetrievalMethod());
@@ -724,6 +784,12 @@ namespace xmlsignature {
                         continue;
                     }
 
+                    KeyInfoReference* kref=dynamic_cast<KeyInfoReference*>(*i);
+                    if (kref) {
+                        getKeyInfoReferences().push_back(kref->cloneKeyInfoReference());
+                        continue;
+                    }
+
                     getUnknownXMLObjects().push_back((*i)->clone());
                 }
             }
@@ -733,11 +799,13 @@ namespace xmlsignature {
         IMPL_ID_ATTRIB_EX(Id,ID,nullptr);
         IMPL_TYPED_CHILDREN(KeyName,m_children.end());
         IMPL_TYPED_CHILDREN(KeyValue,m_children.end());
+        IMPL_TYPED_CHILDREN(DEREncodedKeyValue,m_children.end());
         IMPL_TYPED_CHILDREN(RetrievalMethod,m_children.end());
         IMPL_TYPED_CHILDREN(X509Data,m_children.end());
         IMPL_TYPED_CHILDREN(MgmtData,m_children.end());
         IMPL_TYPED_CHILDREN(SPKIData,m_children.end());
         IMPL_TYPED_CHILDREN(PGPData,m_children.end());
+        IMPL_TYPED_CHILDREN(KeyInfoReference,m_children.end());
         IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end());
 
     protected:
@@ -749,10 +817,12 @@ namespace xmlsignature {
             PROC_TYPED_CHILDREN(X509Data,XMLSIG_NS,false);
             PROC_TYPED_CHILDREN(KeyName,XMLSIG_NS,false);
             PROC_TYPED_CHILDREN(KeyValue,XMLSIG_NS,false);
+            PROC_TYPED_CHILDREN(DEREncodedKeyValue,XMLSIG11_NS,false);
             PROC_TYPED_CHILDREN(RetrievalMethod,XMLSIG_NS,false);
             PROC_TYPED_CHILDREN(MgmtData,XMLSIG_NS,false);
             PROC_TYPED_CHILDREN(SPKIData,XMLSIG_NS,false);
             PROC_TYPED_CHILDREN(PGPData,XMLSIG_NS,false);
+            PROC_TYPED_CHILDREN(KeyInfoReference,XMLSIG11_NS,false);
             
             // Unknown child.
             const XMLCh* nsURI=root->getNamespaceURI();
@@ -769,53 +839,7 @@ namespace xmlsignature {
             AbstractXMLObjectUnmarshaller::processAttribute(attribute);
         }
     };
-
-    class XMLTOOL_DLLLOCAL KeyInfoReferenceImpl : public virtual KeyInfoReference,
-        public AbstractComplexElement,
-        public AbstractDOMCachingXMLObject,
-        public AbstractXMLObjectMarshaller,
-        public AbstractXMLObjectUnmarshaller
-    {
-    public:
-        virtual ~KeyInfoReferenceImpl() {
-            XMLString::release(&m_Id);
-            XMLString::release(&m_URI);
-        }
-
-        KeyInfoReferenceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
-            : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
-            init();
-        }
-
-        KeyInfoReferenceImpl(const KeyInfoReferenceImpl& src)
-                : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
-            init();
-            setId(getId());
-            setURI(getURI());
-        }
-
-        void init() {
-            m_Id=m_URI=nullptr;
-        }
-
-        IMPL_XMLOBJECT_CLONE(KeyInfoReference);
-        IMPL_ID_ATTRIB(Id);
-        IMPL_STRING_ATTRIB(URI);
-
-    protected:
-        void marshallAttributes(DOMElement* domElement) const {
-            MARSHALL_ID_ATTRIB(Id,ID,nullptr);
-            MARSHALL_STRING_ATTRIB(URI,URI,nullptr);
-        }
-
-        void processAttribute(const DOMAttr* attribute) {
-            PROC_ID_ATTRIB(Id,ID,nullptr);
-            PROC_STRING_ATTRIB(URI,URI,nullptr);
-            AbstractXMLObjectUnmarshaller::processAttribute(attribute);
-        }
-    };
-
-    
+   
     DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,KeyName);
     DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,MgmtData);
     DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,Modulus);