6a09ef42065430f141d0267d6d06528e5ce593c7
[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/Signature.h>\r
27 #include <xmltooling/validation/Validator.h>\r
28 \r
29 namespace xmlsignature {\r
30 \r
31     /**\r
32      * Validator for signatures based on an externally-supplied key.\r
33      */\r
34     class XMLTOOL_API SignatureValidator : public virtual xmltooling::Validator\r
35     {\r
36     public:\r
37         /**\r
38          * Constructor\r
39          * \r
40          * @param key   the verification key to use, will be freed by Validator\r
41          */\r
42         SignatureValidator(XSECCryptoKey* key) : m_key(key) {\r
43             if (!key)\r
44                 throw xmltooling::ValidationException("Verification key cannot be NULL.");\r
45         }\r
46         \r
47         virtual ~SignatureValidator() {\r
48             delete m_key;\r
49         }\r
50 \r
51         void validate(const xmltooling::XMLObject* xmlObject) const;\r
52 \r
53         virtual void validate(const Signature* signature) const;\r
54         \r
55         SignatureValidator* clone() const {\r
56             return new SignatureValidator(*this);\r
57         }\r
58     \r
59     protected:\r
60         SignatureValidator(const SignatureValidator& src) {\r
61             m_key=src.m_key->clone();\r
62         }\r
63 \r
64     private:\r
65         XSECCryptoKey* m_key;\r
66     };\r
67 \r
68 };\r
69 \r
70 #endif /* __xmltooling_sigval_h__ */\r