7f7fa7daffcda202ab51a5b8309c1ea47bb8ff2b
[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 Key or a KeyResolver\r
34      */\r
35     class XMLTOOL_API SignatureValidator : public xmltooling::Validator\r
36     {\r
37     public:\r
38         /**\r
39          * Constructor using a KeyResolver\r
40          * \r
41          * @param resolver the key resolver to use, will be freed by Validator\r
42          */\r
43         SignatureValidator(KeyResolver* resolver) : m_key(NULL), m_resolver(resolver) {\r
44         }\r
45 \r
46         /**\r
47          * Constructor using a Key\r
48          * \r
49          * @param key the verification key to use, will be freed by Validator\r
50          */\r
51         SignatureValidator(XSECCryptoKey* key=NULL) : m_key(key), m_resolver(NULL) {\r
52         }\r
53         \r
54         virtual ~SignatureValidator() {\r
55             delete m_key;\r
56             delete m_resolver;\r
57         }\r
58 \r
59         virtual void validate(const xmltooling::XMLObject* xmlObject) const;\r
60 \r
61         virtual void validate(const Signature* signature) const;\r
62         \r
63         /**\r
64          * Replace the current Key, if any, with a new one.\r
65          * \r
66          * @param key  the Key to attach \r
67          */\r
68         void setKey(XSECCryptoKey* key) {\r
69             delete m_key;\r
70             delete m_resolver;\r
71             m_resolver=NULL;\r
72             m_key=key;\r
73         }\r
74 \r
75         /**\r
76          * Replace the current KeyResolver, if any, with a new one.\r
77          * \r
78          * @param resolver  the KeyResolver to attach \r
79          */\r
80         void setKeyResolver(KeyResolver* resolver) {\r
81             delete m_key;\r
82             delete m_resolver;\r
83             m_key=NULL;\r
84             m_resolver=resolver;\r
85         }\r
86     \r
87     protected:\r
88         XSECCryptoKey* m_key;\r
89         KeyResolver* m_resolver;\r
90     };\r
91 \r
92 };\r
93 \r
94 #endif /* __xmltooling_sigval_h__ */\r