#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
/**\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
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