Moved signature classes into own namespace.
[shibboleth/cpp-xmltooling.git] / xmltooling / signature / Signature.h
1 /*\r
2  *  Copyright 2001-2006 Internet2\r
3  * \r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 /**\r
18  * @file Signature.h\r
19  * \r
20  * XMLObject representing XML Digital Signature, version 20020212, Signature element. \r
21  */\r
22 \r
23 #if !defined(__xmltooling_sig_h__) && !defined(XMLTOOLING_NO_XMLSEC)\r
24 #define __xmltooling_sig_h__\r
25 \r
26 #include <xmltooling/XMLObjectBuilder.h>\r
27 #include <xmltooling/signature/SigningContext.h>\r
28 #include <xmltooling/signature/VerifyingContext.h>\r
29 \r
30 /**\r
31  * @namespace xmlsignature\r
32  * Public namespace of XML Signature classes\r
33  */\r
34 namespace xmlsignature {\r
35 \r
36     /**\r
37      * XMLObject representing XML Digital Signature, version 20020212, Signature element.\r
38      * The default signature settings include Exclusive c14n w/o comments, SHA-1 digests,\r
39      * and RSA-SHA1 signing. \r
40      */\r
41     class XMLTOOL_API Signature : public virtual xmltooling::XMLObject\r
42     {\r
43     public:\r
44         virtual ~Signature() {}\r
45 \r
46         /** Element local name */\r
47         static const XMLCh LOCAL_NAME[];\r
48 \r
49         /**\r
50          * Sets the canonicalization method for the ds:SignedInfo element\r
51          * \r
52          * @param c14n  the canonicalization method\r
53          */\r
54         virtual void setCanonicalizationMethod(const XMLCh* c14n)=0;\r
55         \r
56         /**\r
57          * Sets the signing algorithm for the signature.\r
58          * \r
59          * @param sm    the signature algorithm\r
60          */\r
61         virtual void setSignatureAlgorithm(const XMLCh* sm)=0;\r
62         \r
63         /**\r
64          * Applies an XML signature based on the supplied context.\r
65          * \r
66          * @param ctx   the signing context that determines the signature's content\r
67          * @throws SignatureException   thrown if the signing operation fails\r
68          */\r
69         virtual void sign(const SigningContext& ctx)=0;\r
70         \r
71         /**\r
72          * Verifies an XML signature based on the supplied context.\r
73          * \r
74          * @param ctx   the verifying context that validates the signature's content\r
75          * @throws SignatureException   thrown if the verifying operation fails\r
76          */\r
77         virtual void verify(const VerifyingContext& ctx) const=0;\r
78 \r
79     protected:\r
80         Signature() {}\r
81     };\r
82 \r
83     /**\r
84      * Builder for Signature objects.\r
85      */\r
86     class XMLTOOL_API SignatureBuilder : public xmltooling::XMLObjectBuilder\r
87     {\r
88     public:\r
89         virtual Signature* buildObject(\r
90             const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL\r
91             ) const;\r
92             \r
93         /**\r
94          * Default builder\r
95          * \r
96          * @return empty Signature object\r
97          */\r
98         virtual Signature* buildObject() const;\r
99     };\r
100 \r
101 };\r
102 \r
103 #endif /* __xmltooling_sig_h__ */\r