Major revamp of credential and trust handling code, PKIX engine still needs work.
[shibboleth/cpp-opensaml.git] / saml / saml2 / core / Assertions.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 saml/saml2/core/Assertions.h
19  * 
20  * XMLObjects representing the SAML 2.0 Assertions schema
21  */
22
23 #ifndef __saml2_assertions_h__
24 #define __saml2_assertions_h__
25
26 #include <saml/Assertion.h>
27 #include <saml/util/SAMLConstants.h>
28
29 #include <xmltooling/XMLObjectBuilder.h>
30 #include <xmltooling/encryption/Encryption.h>
31 #include <xmltooling/security/CredentialCriteria.h>
32 #include <xmltooling/security/CredentialResolver.h>
33 #include <xmltooling/signature/Signature.h>
34 #include <xmltooling/util/DateTime.h>
35
36 #define DECL_SAML2OBJECTBUILDER(cname) \
37     DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML20_NS,samlconstants::SAML20_PREFIX)
38
39 namespace opensaml {
40
41     /**
42      * @namespace opensaml::saml2
43      * SAML 2.0 assertion namespace
44      */
45     namespace saml2 {
46         
47         // Forward references
48         class SAML_API Assertion;
49         class SAML_API EncryptedAssertion;
50         
51         DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionIDRef,AssertionID,SAML 2.0 AssertionIDRef element);
52         DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionURIRef,AssertionURI,SAML 2.0 AssertionURIRef element);
53         DECL_XMLOBJECT_SIMPLE(SAML_API,Audience,AudienceURI,SAML 2.0 Audience element);
54         DECL_XMLOBJECT_SIMPLE(SAML_API,AuthnContextClassRef,Reference,SAML 2.0 AuthnContextClassRef element);
55         DECL_XMLOBJECT_SIMPLE(SAML_API,AuthnContextDeclRef,Reference,SAML 2.0 AuthnContextDeclRef element);
56         DECL_XMLOBJECT_SIMPLE(SAML_API,AuthenticatingAuthority,ID,SAML 2.0 AuthenticatingAuthority element);
57
58         BEGIN_XMLOBJECT(SAML_API,EncryptedElementType,xmltooling::XMLObject,SAML 2.0 EncryptedElementType type);
59             DECL_TYPED_FOREIGN_CHILD(EncryptedData,xmlencryption);
60             DECL_TYPED_FOREIGN_CHILDREN(EncryptedKey,xmlencryption);
61             /** EncryptedElementType local name */
62             static const XMLCh TYPE_NAME[];
63             
64             /**
65              * Decrypts the element using the supplied CredentialResolver.
66              *
67              * <p>The object returned will be unmarshalled around the decrypted DOM element, but the
68              * DOM itself will be released.
69              * 
70              * @param credResolver  locked resolver supplying decryption keys
71              * @param recipient     identifier naming the recipient (the entity performing the decryption)
72              * @param criteria      optional external criteria to use with resolver
73              * @return  the decrypted and unmarshalled object
74              */
75             virtual xmltooling::XMLObject* decrypt(
76                 const xmltooling::CredentialResolver& credResolver, const XMLCh* recipient, xmltooling::CredentialCriteria* criteria=NULL
77                 ) const=0;
78         END_XMLOBJECT;
79
80         BEGIN_XMLOBJECT(SAML_API,EncryptedID,EncryptedElementType,SAML 2.0 EncryptedID element);
81         END_XMLOBJECT;
82
83         BEGIN_XMLOBJECT(SAML_API,BaseID,xmltooling::XMLObject,SAML 2.0 BaseID abstract element);
84             DECL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER);
85             DECL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER);
86         END_XMLOBJECT;
87
88         BEGIN_XMLOBJECT(SAML_API,NameIDType,xmltooling::XMLObject,SAML 2.0 NameIDType type);
89             DECL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER);
90             DECL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER);
91             DECL_STRING_ATTRIB(Format,FORMAT);
92             DECL_STRING_ATTRIB(SPProvidedID,SPPROVIDEDID);
93             DECL_SIMPLE_CONTENT(Name);
94             /** NameIDType local name */
95             static const XMLCh TYPE_NAME[];
96             /** Unspecified name format ID */
97             static const XMLCh UNSPECIFIED[];
98             /** Email address name format ID */
99             static const XMLCh EMAIL[];
100             /** X.509 subject name format ID */
101             static const XMLCh X509_SUBJECT[];
102             /** Windows domain qualified name format ID */
103             static const XMLCh WIN_DOMAIN_QUALIFIED[];
104             /** Kerberos principal name format ID */
105             static const XMLCh KERBEROS[];
106             /** Entity identifier name format ID */
107             static const XMLCh ENTITY[];
108             /** Persistent identifier name format ID */
109             static const XMLCh PERSISTENT[];
110             /** Transient identifier name format ID */
111             static const XMLCh TRANSIENT[];
112         END_XMLOBJECT;
113
114         BEGIN_XMLOBJECT(SAML_API,NameID,NameIDType,SAML 2.0 NameID element);
115         END_XMLOBJECT;
116
117         BEGIN_XMLOBJECT(SAML_API,Issuer,NameIDType,SAML 2.0 Issuer element);
118         END_XMLOBJECT;
119
120         BEGIN_XMLOBJECT(SAML_API,Condition,xmltooling::XMLObject,SAML 2.0 Condition element);
121         END_XMLOBJECT;
122         
123         BEGIN_XMLOBJECT(SAML_API,AudienceRestriction,Condition,SAML 2.0 AudienceRestriction element);
124             DECL_TYPED_CHILDREN(Audience);
125             /** AudienceRestrictionType local name */
126             static const XMLCh TYPE_NAME[];
127         END_XMLOBJECT;
128
129         BEGIN_XMLOBJECT(SAML_API,OneTimeUse,Condition,SAML 2.0 OneTimeUse element);
130             /** OneTimeUseType local name */
131             static const XMLCh TYPE_NAME[];
132         END_XMLOBJECT;
133
134         BEGIN_XMLOBJECT(SAML_API,ProxyRestriction,Condition,SAML 2.0 ProxyRestriction element);
135             DECL_INTEGER_ATTRIB(Count,COUNT);
136             DECL_TYPED_CHILDREN(Audience);
137             /** ProxyRestrictionType local name */
138             static const XMLCh TYPE_NAME[];
139         END_XMLOBJECT;
140
141         BEGIN_XMLOBJECT(SAML_API,Conditions,xmltooling::XMLObject,SAML 2.0 Conditions element);
142             DECL_DATETIME_ATTRIB(NotBefore,NOTBEFORE);
143             DECL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER);
144             DECL_TYPED_CHILDREN(AudienceRestriction);
145             DECL_TYPED_CHILDREN(OneTimeUse);
146             DECL_TYPED_CHILDREN(ProxyRestriction);
147             DECL_TYPED_CHILDREN(Condition);
148             /** ConditionsType local name */
149             static const XMLCh TYPE_NAME[];
150         END_XMLOBJECT;
151
152         BEGIN_XMLOBJECT(SAML_API,SubjectConfirmationDataType,xmltooling::XMLObject,SAML 2.0 SubjectConfirmationDataType base type);
153             DECL_DATETIME_ATTRIB(NotBefore,NOTBEFORE);
154             DECL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER);
155             DECL_STRING_ATTRIB(Recipient,RECIPIENT);
156             DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
157             DECL_STRING_ATTRIB(Address,ADDRESS);
158         END_XMLOBJECT;
159
160         BEGIN_XMLOBJECT2(SAML_API,SubjectConfirmationData,SubjectConfirmationDataType,xmltooling::ElementProxy,SAML 2.0 SubjectConfirmationData element);
161             DECL_SIMPLE_CONTENT(Data);
162         END_XMLOBJECT;
163
164         BEGIN_XMLOBJECT2(SAML_API,KeyInfoConfirmationDataType,SubjectConfirmationDataType,xmltooling::AttributeExtensibleXMLObject,SAML 2.0 KeyInfoConfirmationDataType type);
165             DECL_TYPED_FOREIGN_CHILDREN(KeyInfo,xmlsignature);
166             /** KeyInfoConfirmationDataType local name */
167             static const XMLCh TYPE_NAME[];
168         END_XMLOBJECT;
169         
170         BEGIN_XMLOBJECT(SAML_API,SubjectConfirmation,xmltooling::XMLObject,SAML 2.0 SubjectConfirmation element);
171             DECL_STRING_ATTRIB(Method,METHOD);
172             DECL_TYPED_CHILD(BaseID);
173             DECL_TYPED_CHILD(NameID);
174             DECL_TYPED_CHILD(EncryptedID);
175             DECL_XMLOBJECT_CHILD(SubjectConfirmationData);
176             /** SubjectConfirmationType local name */
177             static const XMLCh TYPE_NAME[];
178             /** Bearer confirmation method */
179             static const XMLCh BEARER[];
180             /** Holder of key confirmation method */
181             static const XMLCh HOLDER_KEY[];
182             /** Sender vouches confirmation method */
183             static const XMLCh SENDER_VOUCHES[];
184         END_XMLOBJECT;
185
186         BEGIN_XMLOBJECT(SAML_API,Subject,xmltooling::XMLObject,SAML 2.0 Subject element);
187             DECL_TYPED_CHILD(BaseID);
188             DECL_TYPED_CHILD(NameID);
189             DECL_TYPED_CHILD(EncryptedID);
190             DECL_TYPED_CHILDREN(SubjectConfirmation);
191             /** SubjectType local name */
192             static const XMLCh TYPE_NAME[];
193         END_XMLOBJECT;
194
195         BEGIN_XMLOBJECT(SAML_API,Statement,xmltooling::XMLObject,SAML 2.0 Statement element);
196         END_XMLOBJECT;
197
198         BEGIN_XMLOBJECT(SAML_API,SubjectLocality,xmltooling::XMLObject,SAML 2.0 SubjectLocality element);
199             DECL_STRING_ATTRIB(Address,ADDRESS);
200             DECL_STRING_ATTRIB(DNSName,DNSNAME);
201             /** SubjectLocalityType local name */
202             static const XMLCh TYPE_NAME[];
203         END_XMLOBJECT;
204
205         BEGIN_XMLOBJECT(SAML_API,AuthnContextDecl,xmltooling::ElementProxy,SAML 2.0 AuthnContextDecl element);
206         END_XMLOBJECT;
207
208         BEGIN_XMLOBJECT(SAML_API,AuthnContext,xmltooling::XMLObject,SAML 2.0 AuthnContext element);
209             DECL_TYPED_CHILD(AuthnContextClassRef);
210             DECL_XMLOBJECT_CHILD(AuthnContextDecl);
211             DECL_TYPED_CHILD(AuthnContextDeclRef);
212             DECL_TYPED_CHILDREN(AuthenticatingAuthority);
213             /** AuthnContextType local name */
214             static const XMLCh TYPE_NAME[];
215         END_XMLOBJECT;
216
217         BEGIN_XMLOBJECT(SAML_API,AuthnStatement,Statement,SAML 2.0 AuthnStatement element);
218             DECL_DATETIME_ATTRIB(AuthnInstant,AUTHNINSTANT);
219             DECL_STRING_ATTRIB(SessionIndex,SESSIONINDEX);
220             DECL_DATETIME_ATTRIB(SessionNotOnOrAfter,SESSIONNOTONORAFTER);
221             DECL_TYPED_CHILD(SubjectLocality);
222             DECL_TYPED_CHILD(AuthnContext);
223             /** AuthnStatementType local name */
224             static const XMLCh TYPE_NAME[];
225         END_XMLOBJECT;
226
227         BEGIN_XMLOBJECT(SAML_API,Action,xmltooling::XMLObject,SAML 2.0 Action element);
228             DECL_STRING_ATTRIB(Namespace,NAMESPACE);
229             DECL_SIMPLE_CONTENT(Action);
230             /** ActionType local name */
231             static const XMLCh TYPE_NAME[];
232             /** Read/Write/Execute/Delete/Control Action Namespace */
233             static const XMLCh RWEDC_NEG_ACTION_NAMESPACE[];
234             /** Read/Write/Execute/Delete/Control with Negation Action Namespace */
235             static const XMLCh RWEDC_ACTION_NAMESPACE[];
236             /** Get/Head/Put/Post Action Namespace */
237             static const XMLCh GHPP_ACTION_NAMESPACE[];
238             /** UNIX File Permissions Action Namespace */
239             static const XMLCh UNIX_ACTION_NAMESPACE[];
240         END_XMLOBJECT;
241
242         BEGIN_XMLOBJECT(SAML_API,Evidence,xmltooling::XMLObject,SAML 2.0 Evidence element);
243             DECL_TYPED_CHILDREN(AssertionIDRef);
244             DECL_TYPED_CHILDREN(AssertionURIRef);
245             DECL_TYPED_CHILDREN(Assertion);
246             DECL_TYPED_CHILDREN(EncryptedAssertion);
247             /** EvidenceType local name */
248             static const XMLCh TYPE_NAME[];
249         END_XMLOBJECT;
250
251         BEGIN_XMLOBJECT(SAML_API,AuthzDecisionStatement,Statement,SAML 2.0 AuthzDecisionStatement element);
252             DECL_STRING_ATTRIB(Resource,RESOURCE);
253             DECL_STRING_ATTRIB(Decision,DECISION);
254             DECL_TYPED_CHILDREN(Action);
255             DECL_TYPED_CHILD(Evidence);
256             /** AuthzDecisionStatementType local name */
257             static const XMLCh TYPE_NAME[];
258             /** Permit Decision */
259             static const XMLCh DECISION_PERMIT[];
260             /** Deny Decision */
261             static const XMLCh DECISION_DENY[];
262             /** Indeterminate Decision */
263             static const XMLCh DECISION_INDETERMINATE[];
264         END_XMLOBJECT;
265
266         BEGIN_XMLOBJECT(SAML_API,AttributeValue,xmltooling::ElementProxy,SAML 2.0 AttributeValue element);
267         END_XMLOBJECT;
268
269         BEGIN_XMLOBJECT(SAML_API,Attribute,xmltooling::AttributeExtensibleXMLObject,SAML 2.0 Attribute element);
270             DECL_STRING_ATTRIB(Name,NAME);
271             DECL_STRING_ATTRIB(NameFormat,NAMEFORMAT);
272             DECL_STRING_ATTRIB(FriendlyName,FRIENDLYNAME);
273             DECL_XMLOBJECT_CHILDREN(AttributeValue);
274             /** AttributeType local name */
275             static const XMLCh TYPE_NAME[];
276             /** Unspecified attribute name format ID */
277             static const XMLCh UNSPECIFIED[];
278             /** URI reference attribute name format ID */
279             static const XMLCh URI_REFERENCE[];
280             /** Basic attribute name format ID */
281             static const XMLCh BASIC[];
282         END_XMLOBJECT;
283
284         BEGIN_XMLOBJECT(SAML_API,EncryptedAttribute,EncryptedElementType,SAML 2.0 EncryptedAttribute element);
285         END_XMLOBJECT;
286
287         BEGIN_XMLOBJECT(SAML_API,AttributeStatement,Statement,SAML 2.0 AttributeStatement element);
288             DECL_TYPED_CHILDREN(Attribute);
289             DECL_TYPED_CHILDREN(EncryptedAttribute);
290             /** AttributeStatementType local name */
291             static const XMLCh TYPE_NAME[];
292         END_XMLOBJECT;
293
294         BEGIN_XMLOBJECT(SAML_API,EncryptedAssertion,EncryptedElementType,SAML 2.0 EncryptedAssertion element);
295         END_XMLOBJECT;
296
297         BEGIN_XMLOBJECT(SAML_API,Advice,xmltooling::ElementExtensibleXMLObject,SAML 2.0 Advice element);
298             DECL_TYPED_CHILDREN(AssertionIDRef);
299             DECL_TYPED_CHILDREN(AssertionURIRef);
300             DECL_TYPED_CHILDREN(Assertion);
301             DECL_TYPED_CHILDREN(EncryptedAssertion);
302             /** AdviceType local name */
303             static const XMLCh TYPE_NAME[];
304         END_XMLOBJECT;
305
306         /**
307          * SAML 2.0 assertion or protocol message.
308          */
309         class SAML_API RootObject : virtual public opensaml::RootObject
310         {
311         protected:
312             RootObject() {}
313         public:
314             virtual ~RootObject() {}
315             
316             /** Gets the Version attribute. */
317             virtual const XMLCh* getVersion() const=0;
318             
319             /** Gets the Issuer. */
320             virtual Issuer* getIssuer() const=0;
321         };
322
323         BEGIN_XMLOBJECT2(SAML_API,Assertion,saml2::RootObject,opensaml::Assertion,SAML 2.0 Assertion element);
324             DECL_INHERITED_STRING_ATTRIB(Version,VER);
325             DECL_INHERITED_STRING_ATTRIB(ID,ID);
326             DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
327             DECL_INHERITED_TYPED_CHILD(Issuer);
328             DECL_TYPED_CHILD(Subject);
329             DECL_TYPED_CHILD(Conditions);
330             DECL_TYPED_CHILD(Advice);
331             DECL_TYPED_CHILDREN(Statement);
332             DECL_TYPED_CHILDREN(AuthnStatement);
333             DECL_TYPED_CHILDREN(AttributeStatement);
334             DECL_TYPED_CHILDREN(AuthzDecisionStatement);
335             /** AssertionType local name */
336             static const XMLCh TYPE_NAME[];
337         END_XMLOBJECT;
338
339         DECL_SAML2OBJECTBUILDER(Action);
340         DECL_SAML2OBJECTBUILDER(Advice);
341         DECL_SAML2OBJECTBUILDER(Assertion);
342         DECL_SAML2OBJECTBUILDER(AssertionIDRef);
343         DECL_SAML2OBJECTBUILDER(AssertionURIRef);
344         DECL_SAML2OBJECTBUILDER(Attribute);
345         DECL_SAML2OBJECTBUILDER(AttributeStatement);
346         DECL_SAML2OBJECTBUILDER(AttributeValue);
347         DECL_SAML2OBJECTBUILDER(Audience);
348         DECL_SAML2OBJECTBUILDER(AudienceRestriction);
349         DECL_SAML2OBJECTBUILDER(AuthenticatingAuthority);
350         DECL_SAML2OBJECTBUILDER(AuthnContext);
351         DECL_SAML2OBJECTBUILDER(AuthnContextClassRef);
352         DECL_SAML2OBJECTBUILDER(AuthnContextDecl);
353         DECL_SAML2OBJECTBUILDER(AuthnContextDeclRef);
354         DECL_SAML2OBJECTBUILDER(AuthnStatement);
355         DECL_SAML2OBJECTBUILDER(AuthzDecisionStatement);
356         DECL_SAML2OBJECTBUILDER(Conditions);
357         DECL_SAML2OBJECTBUILDER(EncryptedAssertion);
358         DECL_SAML2OBJECTBUILDER(EncryptedAttribute);
359         DECL_SAML2OBJECTBUILDER(EncryptedID);
360         DECL_SAML2OBJECTBUILDER(Evidence);
361         DECL_SAML2OBJECTBUILDER(Issuer);
362         DECL_SAML2OBJECTBUILDER(NameID);
363         DECL_SAML2OBJECTBUILDER(OneTimeUse);
364         DECL_SAML2OBJECTBUILDER(ProxyRestriction);
365         DECL_SAML2OBJECTBUILDER(Subject);
366         DECL_SAML2OBJECTBUILDER(SubjectConfirmation);
367         DECL_SAML2OBJECTBUILDER(SubjectConfirmationData);
368         DECL_SAML2OBJECTBUILDER(SubjectLocality);
369         
370         /**
371          * Builder for NameIDType objects.
372          * 
373          * This is customized to force the element name to be specified.
374          */
375         class SAML_API NameIDTypeBuilder : public xmltooling::XMLObjectBuilder {
376         public:
377             virtual ~NameIDTypeBuilder() {}
378             /** Builder that allows element/type override. */
379 #ifdef HAVE_COVARIANT_RETURNS
380             virtual NameIDType* buildObject(
381 #else
382             virtual xmltooling::XMLObject* buildObject(
383 #endif
384                 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
385                 ) const;
386         
387             /** Singleton builder. */
388             static NameIDType* buildNameIDType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
389                 const NameIDTypeBuilder* b = dynamic_cast<const NameIDTypeBuilder*>(
390                     XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,NameIDType::TYPE_NAME))
391                     );
392                 if (b) {
393                     xmltooling::QName schemaType(samlconstants::SAML20_NS,NameIDType::TYPE_NAME,samlconstants::SAML20_PREFIX);
394 #ifdef HAVE_COVARIANT_RETURNS
395                     return b->buildObject(nsURI, localName, prefix, &schemaType);
396 #else
397                     return dynamic_cast<NameIDType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
398 #endif
399                 }
400                 throw xmltooling::XMLObjectException("Unable to obtain typed builder for NameIDType.");
401             }
402         };
403
404         /**
405          * Builder for KeyInfoConfirmationDataType objects.
406          * 
407          * This is customized to return a SubjectConfirmationData element with an
408          * xsi:type of KeyInfoConfirmationDataType.
409          */
410         class SAML_API KeyInfoConfirmationDataTypeBuilder : public xmltooling::XMLObjectBuilder {
411         public:
412             virtual ~KeyInfoConfirmationDataTypeBuilder() {}
413             /** Default builder. */
414 #ifdef HAVE_COVARIANT_RETURNS
415             virtual KeyInfoConfirmationDataType* buildObject() const {
416 #else
417             virtual xmltooling::XMLObject* buildObject() const {
418 #endif
419                 xmltooling::QName schemaType(
420                     samlconstants::SAML20_NS,KeyInfoConfirmationDataType::TYPE_NAME,samlconstants::SAML20_PREFIX
421                     );
422                 return buildObject(
423                     samlconstants::SAML20_NS,KeyInfoConfirmationDataType::LOCAL_NAME,samlconstants::SAML20_PREFIX,&schemaType
424                     );
425             }
426             /** Builder that allows element/type override. */
427 #ifdef HAVE_COVARIANT_RETURNS
428             virtual KeyInfoConfirmationDataType* buildObject(
429 #else
430             virtual xmltooling::XMLObject* buildObject(
431 #endif
432                 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
433                 ) const;
434         
435             /** Singleton builder. */
436             static KeyInfoConfirmationDataType* buildKeyInfoConfirmationDataType() {
437                 const KeyInfoConfirmationDataTypeBuilder* b = dynamic_cast<const KeyInfoConfirmationDataTypeBuilder*>(
438                     XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,KeyInfoConfirmationDataType::TYPE_NAME))
439                     );
440                 if (b)
441 #ifdef HAVE_COVARIANT_RETURNS
442                     return b->buildObject();
443 #else
444                     return dynamic_cast<KeyInfoConfirmationDataType*>(b->buildObject());
445 #endif
446                 throw xmltooling::XMLObjectException("Unable to obtain typed builder for KeyInfoConfirmationDataType.");
447             }
448         };
449         
450         /**
451          * Registers builders and validators for SAML 2.0 Assertion classes into the runtime.
452          */
453         void SAML_API registerAssertionClasses();
454     };
455 };
456
457 #endif /* __saml2_assertions_h__ */