https://issues.shibboleth.net/jira/browse/CPPXT-70
[shibboleth/cpp-xmltooling.git] / xmltooling / security / OpenSSLPathValidator.h
1 /**
2  * Licensed to the University Corporation for Advanced Internet
3  * Development, Inc. (UCAID) under one or more contributor license
4  * agreements. See the NOTICE file distributed with this work for
5  * additional information regarding copyright ownership.
6  *
7  * UCAID licenses this file to you under the Apache License,
8  * Version 2.0 (the "License"); you may not use this file except
9  * in compliance with the License. You may obtain a copy of the
10  * License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17  * either express or implied. See the License for the specific
18  * language governing permissions and limitations under the License.
19  */
20
21 /**
22  * @file xmltooling/security/OpenSSLPathValidator.h
23  * 
24  * Extended PathValidator interface that adds validation
25  * using OpenSSL data types directly for efficiency.
26  */
27
28 #if !defined(__xmltooling_opensslpathval_h__) && !defined(XMLTOOLING_NO_XMLSEC)
29 #define __xmltooling_opensslpathval_h__
30
31 #include <xmltooling/security/PathValidator.h>
32
33 #include <openssl/x509.h>
34
35
36 namespace xmltooling {
37
38     /**
39      * Extended PathValidator interface that adds validation
40      * using OpenSSL data types directly for efficiency.
41      */
42     class XMLTOOL_API OpenSSLPathValidator : public PathValidator
43     {
44         MAKE_NONCOPYABLE(OpenSSLPathValidator);
45     protected:
46         OpenSSLPathValidator();
47
48     public:
49         virtual ~OpenSSLPathValidator();
50
51         /**
52          * Validates an end-entity certificate.
53          * 
54          * @param certEE    end-entity certificate
55          * @param certChain the complete untrusted certificate chain
56          * @param params    plugin-specific parameters to the validation process
57          * @return  true iff validaton succeeds
58          */
59         virtual bool validate(
60             X509* certEE,
61             STACK_OF(X509)* certChain,
62             const PathValidatorParams& params
63             ) const=0;
64
65     };
66 };
67
68 #endif /* __xmltooling_opensslpathval_h__ */