New KeyResolver/Validator/Encrypter/Decrypter classes.
[shibboleth/cpp-xmltooling.git] / xmltooling / signature / SignatureValidator.h
1 /*\r
2  *  Copyright 2001-2006 Internet2\r
3  * \r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 /**\r
18  * @file SignatureValidator.h\r
19  * \r
20  * Validator for signatures based on an externally-supplied key \r
21  */\r
22 \r
23 #if !defined(__xmltooling_sigval_h__) && !defined(XMLTOOLING_NO_XMLSEC)\r
24 #define __xmltooling_sigval_h__\r
25 \r
26 #include <xmltooling/signature/KeyResolver.h>\r
27 #include <xmltooling/signature/Signature.h>\r
28 #include <xmltooling/validation/Validator.h>\r
29 \r
30 namespace xmlsignature {\r
31 \r
32     /**\r
33      * Validator for signatures based on a KeyResolver\r
34      */\r
35     class XMLTOOL_API SignatureValidator : public virtual xmltooling::Validator\r
36     {\r
37     public:\r
38         /**\r
39          * Constructor\r
40          * \r
41          * @param resolver   the key resolver to use, will be freed by Validator\r
42          */\r
43         SignatureValidator(KeyResolver* resolver) : m_resolver(resolver) {\r
44         }\r
45         \r
46         virtual ~SignatureValidator() {\r
47             delete m_resolver;\r
48         }\r
49 \r
50         void validate(const xmltooling::XMLObject* xmlObject) const;\r
51 \r
52         virtual void validate(const Signature* signature) const;\r
53         \r
54         SignatureValidator* clone() const {\r
55             return new SignatureValidator(*this);\r
56         }\r
57 \r
58         /**\r
59          * Replace the current KeyResolver, if any, with a new one.\r
60          * \r
61          * @param resolver  the KeyResolver to attach \r
62          */\r
63         void setKeyResolver(KeyResolver* resolver) {\r
64             delete m_resolver;\r
65             m_resolver=resolver;\r
66         }\r
67     \r
68     protected:\r
69         SignatureValidator(const SignatureValidator& src) {\r
70             m_resolver=src.m_resolver ? src.m_resolver->clone() : NULL;\r
71         }\r
72 \r
73         KeyResolver* m_resolver;\r
74     };\r
75 \r
76 };\r
77 \r
78 #endif /* __xmltooling_sigval_h__ */\r