Evolving macros, reduce casting in accessors, add const collection access.
[shibboleth/cpp-xmltooling.git] / xmltooling / signature / KeyInfo.h
index 83c9e4c..50c8637 100644 (file)
 #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, KeyInfo element.\r
+     * XMLObject representing XML Digital Signature, version 20020212, KeyName element.\r
      */\r
-    BEGIN_XMLOBJECT(KeyInfo,ElementProxy);\r
-        DECL_XMLOBJECT_ATTRIB(Id,ID);\r
-        static const XMLCh TYPE_NAME[];\r
+    BEGIN_XMLOBJECT(XMLTOOL_API,KeyName,XMLObject);\r
+        DECL_XMLOBJECT_CONTENT(Name);\r
     END_XMLOBJECT;\r
 \r
-    BEGIN_XMLOBJECTBUILDER(KeyInfo);\r
-    END_XMLOBJECTBUILDER;\r
-\r
-#ifdef XMLTOOLING_DEFINE_CONSTANTS\r
-    const XMLCh KeyInfo::LOCAL_NAME[] = {\r
-        chLatin_K, chLatin_e, chLatin_y, chLatin_I, chLatin_n, chLatin_f, chLatin_o, chNull\r
-    }; \r
-    const XMLCh KeyInfo::TYPE_NAME[] = {\r
-        chLatin_K, chLatin_e, chLatin_y, chLatin_I, chLatin_n, chLatin_f, chLatin_o,\r
-        chLatin_T, chLatin_y, chLatin_p, chLatin_e, chNull\r
-    }; \r
-    const XMLCh KeyInfo::ID_ATTRIB_NAME[] = {\r
-        chLatin_I, chLatin_d, chNull\r
-    };\r
-#endif\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, KeyName element.\r
+     * XMLObject representing XML Digital Signature, version 20020212, Modulus element.\r
      */\r
-    BEGIN_XMLOBJECT(KeyName,XMLObject);\r
-        DECL_XMLOBJECT_CONTENT(Name);\r
+    BEGIN_XMLOBJECT(XMLTOOL_API,Modulus,XMLObject);\r
+        DECL_XMLOBJECT_CONTENT(Value);\r
     END_XMLOBJECT;\r
 \r
-    BEGIN_XMLOBJECTBUILDER(KeyName);\r
-    END_XMLOBJECTBUILDER;\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
-#ifdef XMLTOOLING_DEFINE_CONSTANTS\r
-    const XMLCh KeyName::LOCAL_NAME[] = {\r
-        chLatin_K, chLatin_e, chLatin_y, chLatin_N, chLatin_a, chLatin_m, chLatin_e, chNull\r
-    }; \r
-#endif\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, MgmtData element.\r
+     * XMLObject representing XML Digital Signature, version 20020212, KeyInfo element.\r
      */\r
-    BEGIN_XMLOBJECT(MgmtData,XMLObject);\r
-        DECL_XMLOBJECT_CONTENT(Data);\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
-    BEGIN_XMLOBJECTBUILDER(MgmtData);\r
-    END_XMLOBJECTBUILDER;\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
-#ifdef XMLTOOLING_DEFINE_CONSTANTS\r
-    const XMLCh MgmtData::LOCAL_NAME[] = {\r
-        chLatin_M, chLatin_g, chLatin_m, chLatin_t, chLatin_D, chLatin_a, chLatin_t, chLatin_a, chNull\r
-    }; \r
-#endif\r
 };\r
 \r
 #endif /* __xmltooling_keyinfo_h__ */\r