3b3362c5a3c74400ff70c955433b534e3ef95cd6
[shibboleth/cpp-xmltooling.git] / xmltooling / security / Credential.h
1 /*
2  *  Copyright 2001-2007 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/Credential.h
19  * 
20  * Wraps keys and related functionality. 
21  */
22
23 #if !defined(__xmltooling_cred_h__) && !defined(XMLTOOLING_NO_XMLSEC)
24 #define __xmltooling_cred_h__
25
26 #include <xmltooling/base.h>
27 #include <xsec/enc/XSECCryptoKey.hpp>
28
29 #include <set>
30 #include <string>
31
32 namespace xmlsignature {
33     class XMLTOOL_API KeyInfo;
34 };
35
36 namespace xmltooling {
37
38     class XMLTOOL_API CredentialCriteria;
39     class XMLTOOL_API CredentialContext;
40
41     /**
42      * Wraps keys and related functionality.
43      *
44      * <p>Shared credential implementations should implement reference counting
45      * and honor any locking parameters to ensure appropriate synchronization.
46      */
47     class XMLTOOL_API Credential
48     {
49         MAKE_NONCOPYABLE(Credential);
50     protected:
51         Credential() {}
52         
53     public:
54         virtual ~Credential() {}
55         
56         enum ResolveTypes {
57             RESOLVE_KEYS = 1,
58             RESOLVE_NAMES = 2
59         };
60
61         /**
62          * Returns an algorithm identifier for the Credential.
63          *
64          * @return  the Credential algorithm, or NULL if indeterminate
65          */
66         virtual const char* getAlgorithm() const=0;
67
68         /**
69          * Returns the size of the key.
70          *
71          * @return  the key size, or 0 if indeterminate
72          */
73         virtual unsigned int getKeySize() const=0;
74
75         /**
76          * Returns a secret or private key to use for signing or decryption operations.
77          * 
78          * @return  a secret or private key
79          */
80         virtual XSECCryptoKey* getPrivateKey() const=0;
81
82         /**
83          * Returns a secret or public key to use for verification or encryption operations.
84          * 
85          * @return  a secret or public key
86          */
87         virtual XSECCryptoKey* getPublicKey() const=0;
88         
89         /**
90          * Returns names representing the Credential.
91          *
92          * <p>Names should be unique in the context of the comparisons against CredentialCriteria
93          * that deployments expect to see.
94          * 
95          * @return  a sorted set of names
96          */
97         virtual const std::set<std::string>& getKeyNames() const=0;
98         
99         /**
100          * Returns a ds:KeyInfo object representing the Credential for use in
101          * communicating with other entities.
102          * 
103          * @param compact   true iff the communication medium is such that only compact forms should be included
104          * @return reference to a KeyInfo object
105          */
106         virtual const xmlsignature::KeyInfo* getKeyInfo(bool compact=false) const=0;
107
108         /**
109          * Get the credential context information, which provides additional information
110          * specific to the context in which the credential was resolved.
111          * 
112          * @return resolution context of the credential
113          */
114         virtual const CredentialContext* getCredentalContext() const {
115             return NULL;
116         }
117
118         /**
119          * Determines whether the supplied CredentialCriteria matches this Credential.
120          *
121          * @param criteria  the CredentialCriteria to evaluate
122          * @return true iff this Credential is consistent with the criteria
123          */
124         virtual bool matches(const CredentialCriteria& criteria) const;
125     };
126 };
127
128 #endif /* __xmltooling_cred_h__ */