New KeyResolver/Validator/Encrypter/Decrypter classes.
[shibboleth/cpp-xmltooling.git] / xmltooling / signature / SignatureValidator.h
index 6a09ef4..4dc362a 100644 (file)
 #if !defined(__xmltooling_sigval_h__) && !defined(XMLTOOLING_NO_XMLSEC)\r
 #define __xmltooling_sigval_h__\r
 \r
+#include <xmltooling/signature/KeyResolver.h>\r
 #include <xmltooling/signature/Signature.h>\r
 #include <xmltooling/validation/Validator.h>\r
 \r
 namespace xmlsignature {\r
 \r
     /**\r
-     * Validator for signatures based on an externally-supplied key.\r
+     * Validator for signatures based on a KeyResolver\r
      */\r
     class XMLTOOL_API SignatureValidator : public virtual xmltooling::Validator\r
     {\r
@@ -37,15 +38,13 @@ namespace xmlsignature {
         /**\r
          * Constructor\r
          * \r
-         * @param key   the verification key to use, will be freed by Validator\r
+         * @param resolver   the key resolver to use, will be freed by Validator\r
          */\r
-        SignatureValidator(XSECCryptoKey* key) : m_key(key) {\r
-            if (!key)\r
-                throw xmltooling::ValidationException("Verification key cannot be NULL.");\r
+        SignatureValidator(KeyResolver* resolver) : m_resolver(resolver) {\r
         }\r
         \r
         virtual ~SignatureValidator() {\r
-            delete m_key;\r
+            delete m_resolver;\r
         }\r
 \r
         void validate(const xmltooling::XMLObject* xmlObject) const;\r
@@ -55,14 +54,23 @@ namespace xmlsignature {
         SignatureValidator* clone() const {\r
             return new SignatureValidator(*this);\r
         }\r
+\r
+        /**\r
+         * Replace the current KeyResolver, if any, with a new one.\r
+         * \r
+         * @param resolver  the KeyResolver to attach \r
+         */\r
+        void setKeyResolver(KeyResolver* resolver) {\r
+            delete m_resolver;\r
+            m_resolver=resolver;\r
+        }\r
     \r
     protected:\r
         SignatureValidator(const SignatureValidator& src) {\r
-            m_key=src.m_key->clone();\r
+            m_resolver=src.m_resolver ? src.m_resolver->clone() : NULL;\r
         }\r
 \r
-    private:\r
-        XSECCryptoKey* m_key;\r
+        KeyResolver* m_resolver;\r
     };\r
 \r
 };\r