Move credential usage enum to Credential class.
[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          * Enumeration of use cases for credentials. 
66          */
67         enum UsageTypes {
68             UNSPECIFIED_CREDENTIAL,
69             SIGNING_CREDENTIAL,
70             TLS_CREDENTIAL,
71             ENCRYPTION_CREDENTIAL
72         };
73         
74         /**
75          * Get the credential usage type.
76          * 
77          * @return the usage
78          */
79         virtual UsageTypes getUsage() const=0;
80
81         /**
82          * Returns an algorithm identifier for the Credential.
83          *
84          * @return  the Credential algorithm, or NULL if indeterminate
85          */
86         virtual const char* getAlgorithm() const=0;
87
88         /**
89          * Returns the size of the key.
90          *
91          * @return  the key size, or 0 if indeterminate
92          */
93         virtual unsigned int getKeySize() const=0;
94
95         /**
96          * Returns a secret or private key to use for signing or decryption operations.
97          * 
98          * @return  a secret or private key
99          */
100         virtual XSECCryptoKey* getPrivateKey() const=0;
101
102         /**
103          * Returns a secret or public key to use for verification or encryption operations.
104          * 
105          * @return  a secret or public key
106          */
107         virtual XSECCryptoKey* getPublicKey() const=0;
108         
109         /**
110          * Returns names representing the Credential.
111          *
112          * <p>Names should be unique in the context of the comparisons against CredentialCriteria
113          * that deployments expect to see.
114          * 
115          * @return  a sorted set of names
116          */
117         virtual const std::set<std::string>& getKeyNames() const=0;
118         
119         /**
120          * Returns a ds:KeyInfo object representing the Credential for use in
121          * communicating with other entities.
122          * 
123          * @param compact   true iff the communication medium is such that only compact forms should be included
124          * @return a KeyInfo object, which must be freed by the caller
125          */
126         virtual xmlsignature::KeyInfo* getKeyInfo(bool compact=false) const=0;
127
128         /**
129          * Get the credential context information, which provides additional information
130          * specific to the context in which the credential was resolved.
131          * 
132          * @return resolution context of the credential
133          */
134         virtual const CredentialContext* getCredentalContext() const {
135             return NULL;
136         }
137     };
138 };
139
140 #endif /* __xmltooling_cred_h__ */