Tighten up validator namespace checking, rework registration.
[shibboleth/cpp-xmltooling.git] / xmltooling / signature / KeyInfo.h
index 40b3722..00cc9d6 100644 (file)
@@ -31,8 +31,6 @@
 #include <xmltooling/util/XMLConstants.h>
 #include <xmltooling/validation/ValidatingXMLObject.h>
 
-#include <typeinfo>
-
 #define DECL_XMLSIGOBJECTBUILDER(cname) \
     DECL_XMLOBJECTBUILDER(XMLTOOL_API,cname,xmltooling::XMLConstants::XMLSIG_NS,xmltooling::XMLConstants::XMLSIG_PREFIX)
 
@@ -192,80 +190,10 @@ namespace xmlsignature {
     DECL_XMLSIGOBJECTBUILDER(KeyValue);
     DECL_XMLSIGOBJECTBUILDER(KeyInfo);
 
-#ifdef XMLTOOLING_DECLARE_VALIDATORS
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,KeyName);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,MgmtData);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Modulus);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Exponent);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Seed);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,PgenCounter);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,P);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Q);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,G);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Y);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,J);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,XPath);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509IssuerName);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509SerialNumber);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509SKI);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509SubjectName);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509Certificate);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509CRL);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,SPKISexp);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,PGPKeyID);
-    XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,PGPKeyPacket);
-    
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,RSAKeyValue);
-        XMLOBJECTVALIDATOR_REQUIRE(RSAKeyValue,Modulus);
-        XMLOBJECTVALIDATOR_REQUIRE(RSAKeyValue,Exponent);
-    END_XMLOBJECTVALIDATOR;
-
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,DSAKeyValue);
-        XMLOBJECTVALIDATOR_REQUIRE(DSAKeyValue,Y);
-        XMLOBJECTVALIDATOR_NONEORBOTH(DSKeyValue,P,Q);
-        XMLOBJECTVALIDATOR_NONEORBOTH(DSKeyValue,Seed,PgenCounter);
-    END_XMLOBJECTVALIDATOR;
-
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,KeyValue);
-        XMLOBJECTVALIDATOR_ONEOF3(KeyValue,DSAKeyValue,RSAKeyValue,XMLObject);
-    END_XMLOBJECTVALIDATOR;
-
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,Transform);
-        XMLOBJECTVALIDATOR_REQUIRE(Transform,Algorithm);
-    END_XMLOBJECTVALIDATOR;
-
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,Transforms);
-        XMLOBJECTVALIDATOR_NONEMPTY(Transforms,Transform);
-    END_XMLOBJECTVALIDATOR;
-
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,RetrievalMethod);
-        XMLOBJECTVALIDATOR_REQUIRE(RetrievalMethod,URI);
-    END_XMLOBJECTVALIDATOR;
-
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,X509IssuerSerial);
-        XMLOBJECTVALIDATOR_REQUIRE(X509IssuerSerial,X509IssuerName);
-        XMLOBJECTVALIDATOR_REQUIRE(X509IssuerSerial,X509SerialNumber);
-    END_XMLOBJECTVALIDATOR;
-
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,X509Data);
-        if (!ptr->hasChildren())
-            throw xmltooling::ValidationException("X509Data must have at least one child element.");
-    END_XMLOBJECTVALIDATOR;
-
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,SPKIData);
-        XMLOBJECTVALIDATOR_NONEMPTY(SPKIData,SPKISexp);
-    END_XMLOBJECTVALIDATOR;
-
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,PGPData);
-        XMLOBJECTVALIDATOR_ONEOF(PGPData,PGPKeyID,PGPKeyPacket);
-    END_XMLOBJECTVALIDATOR;
-
-    BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,KeyInfo);
-        if (!ptr->hasChildren())
-            throw xmltooling::ValidationException("KeyInfo must have at least one child element.");
-    END_XMLOBJECTVALIDATOR;
-#endif /* XMLTOOLING_DECLARE_VALIDATORS */
-
+    /**
+     * Registers builders and validators for KeyInfo classes into the runtime.
+     */
+    void XMLTOOL_API registerKeyInfoClasses();
 };
 
 #endif /* __xmltooling_keyinfo_h__ */