8fa7bb447b9e351d824407db718add9b74732dda
[shibboleth/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         /**
57          * Bitmask constants for limiting resolution process inside a CredentialResolver. 
58          */
59         enum ResolveTypes {
60             RESOLVE_KEYS = 1,
61             RESOLVE_NAMES = 2
62         };
63
64         /**
65          * Returns an algorithm identifier for the Credential.
66          *
67          * @return  the Credential algorithm, or NULL if indeterminate
68          */
69         virtual const char* getAlgorithm() const=0;
70
71         /**
72          * Returns the size of the key.
73          *
74          * @return  the key size, or 0 if indeterminate
75          */
76         virtual unsigned int getKeySize() const=0;
77
78         /**
79          * Returns a secret or private key to use for signing or decryption operations.
80          * 
81          * @return  a secret or private key
82          */
83         virtual XSECCryptoKey* getPrivateKey() const=0;
84
85         /**
86          * Returns a secret or public key to use for verification or encryption operations.
87          * 
88          * @return  a secret or public key
89          */
90         virtual XSECCryptoKey* getPublicKey() const=0;
91         
92         /**
93          * Returns names representing the Credential.
94          *
95          * <p>Names should be unique in the context of the comparisons against CredentialCriteria
96          * that deployments expect to see.
97          * 
98          * @return  a sorted set of names
99          */
100         virtual const std::set<std::string>& getKeyNames() const=0;
101         
102         /**
103          * Returns a ds:KeyInfo object representing the Credential for use in
104          * communicating with other entities.
105          * 
106          * @param compact   true iff the communication medium is such that only compact forms should be included
107          * @return a KeyInfo object, which must be freed by the caller
108          */
109         virtual xmlsignature::KeyInfo* getKeyInfo(bool compact=false) const=0;
110
111         /**
112          * Get the credential context information, which provides additional information
113          * specific to the context in which the credential was resolved.
114          * 
115          * @return resolution context of the credential
116          */
117         virtual const CredentialContext* getCredentalContext() const {
118             return NULL;
119         }
120     };
121 };
122
123 #endif /* __xmltooling_cred_h__ */