696e539e841d51469d7cab09a4e3044ae2fd6bce
[shibboleth/cpp-xmltooling.git] / xmltooling / security / ChainingTrustEngine.h
1 /*
2  *  Copyright 2001-2009 Internet2
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /**
18  * @file xmltooling/security/ChainingTrustEngine.h
19  * 
20  * OpenSSLTrustEngine that uses multiple engines in sequence.
21  */
22
23 #if !defined(__xmltooling_chaintrust_h__) && !defined(XMLTOOLING_NO_XMLSEC)
24 #define __xmltooling_chaintrust_h__
25
26 #include <xmltooling/security/OpenSSLTrustEngine.h>
27 #include <xmltooling/security/SignatureTrustEngine.h>
28
29 namespace xmltooling {
30
31     /**
32      * OpenSSLTrustEngine that uses multiple engines in sequence.
33      */
34     class XMLTOOL_API ChainingTrustEngine : public SignatureTrustEngine, public OpenSSLTrustEngine {
35     public:
36         /**
37          * Constructor.
38          * 
39          * If a DOM is supplied, the following XML content is supported:
40          * 
41          * <ul>
42          *  <li>&lt;TrustEngine&gt; elements with a type attribute
43          * </ul>
44          * 
45          * XML namespaces are ignored in the processing of this content.
46          * 
47          * @param e DOM to supply configuration for provider
48          */
49         ChainingTrustEngine(const xercesc::DOMElement* e=NULL);
50         
51         /**
52          * Destructor will delete any embedded engines.
53          */
54         virtual ~ChainingTrustEngine();
55
56         /**
57          * Adds a trust engine for future calls.
58          * 
59          * @param newEngine trust engine to add
60          */
61         void addTrustEngine(TrustEngine* newEngine);
62
63         /**
64          * Removes a trust engine. The caller must delete the engine if necessary.
65          * 
66          * @param oldEngine trust engine to remove
67          * @return  the old engine
68          */
69         TrustEngine* removeTrustEngine(TrustEngine* oldEngine);
70
71         bool validate(
72             xmlsignature::Signature& sig,
73             const CredentialResolver& credResolver,
74             CredentialCriteria* criteria=NULL
75             ) const;
76         bool validate(
77             const XMLCh* sigAlgorithm,
78             const char* sig,
79             xmlsignature::KeyInfo* keyInfo,
80             const char* in,
81             unsigned int in_len,
82             const CredentialResolver& credResolver,
83             CredentialCriteria* criteria=NULL
84             ) const;
85         bool validate(
86             XSECCryptoX509* certEE,
87             const std::vector<XSECCryptoX509*>& certChain,
88             const CredentialResolver& credResolver,
89             CredentialCriteria* criteria=NULL
90             ) const;
91         bool validate(
92             X509* certEE,
93             STACK_OF(X509)* certChain,
94             const CredentialResolver& credResolver,
95             CredentialCriteria* criteria=NULL
96             ) const;
97     private:
98         std::vector<TrustEngine*> m_engines;
99         std::vector<SignatureTrustEngine*> m_sigEngines;
100         std::vector<X509TrustEngine*> m_x509Engines;
101         std::vector<OpenSSLTrustEngine*> m_osslEngines;
102     };
103     
104 };
105
106 #endif /* __xmltooling_chaintrust_h__ */