xmlsecurityengine/xmlsec/inc/xmlsec_xkms.h
changeset 0 e35f40988205
child 24 74f0b3eb154c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xmlsecurityengine/xmlsec/inc/xmlsec_xkms.h	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,653 @@
+/** 
+ * XML Security Library (http://www.aleksey.com/xmlsec).
+ *
+ * "XML Key Management Specification v 2.0" implementation
+ *  http://www.w3.org/TR/xkms2/
+ * 
+ * This is free software; see Copyright file in the source
+ * distribution for preciese wording.
+ * 
+ * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
+ * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. 
+ */
+#ifndef __XMLSEC_XKMS_H__
+#define __XMLSEC_XKMS_H__    
+#include "xmlsec_config.h"
+#ifndef XMLSEC_NO_XKMS
+	
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */ 
+#include <stdio.h>		
+
+#include <libxml2_tree.h>
+#include <libxml2_parser.h>
+
+#include "xmlsec_xmlsec.h"
+#include "xmlsec_buffer.h"
+#include "xmlsec_list.h"
+#include "xmlsec_keys.h"
+#include "xmlsec_keysmngr.h"
+#include "xmlsec_keyinfo.h"
+#include "xmlsec_transforms.h"
+
+/************************************************************************
+ *
+ * Forward declarations. These internal xmlsec library structures are
+ * declared in "xmlsec/private/xkms.h" file.
+ *
+ ************************************************************************/ 
+typedef struct _xmlSecXkmsRespondWithKlass	xmlSecXkmsRespondWithKlass, 
+						*xmlSecXkmsRespondWithId;
+
+typedef struct _xmlSecXkmsServerRequestKlass	xmlSecXkmsServerRequestKlass, 
+						*xmlSecXkmsServerRequestId;
+
+
+/**
+ * xmlSecXkmsResultMajor:
+ * @xmlSecXkmsResultMajorSuccess:               The operation succeeded.
+ * @xmlSecXkmsResultMajorVersionMismatch:       The service does not support 
+ *                                              the protocol version specified 
+ *                                              in the request.
+ * @xmlSecXkmsResultMajorSender:                An error occurred that was due
+ *                                              to the message sent by the sender.
+ * @xmlSecXkmsResultMajorReceiver:              An error occurred at the receiver.
+ * @xmlSecXkmsResultMajorRepresent:             The service has not acted on the 
+ *                                              request. In order for the request
+ *                                              to be acted upon the request MUST 
+ *                                              be represented with the specified
+ *                                              nonce in accordance with the two
+ *                                              phase protocol.
+ * @xmlSecXkmsResultMajorPending:               The request has been accepted 
+ *                                              for processing and the service 
+ *                                              will return the result asynchronously.
+ * 
+ * The values for ResultMajor attribute.
+ */
+typedef enum {
+    xmlSecXkmsResultMajorSuccess = 0,
+    xmlSecXkmsResultMajorVersionMismatch,
+    xmlSecXkmsResultMajorSender,
+    xmlSecXkmsResultMajorReceiver,
+    xmlSecXkmsResultMajorRepresent,
+    xmlSecXkmsResultMajorPending
+} xmlSecXkmsResultMajor;
+
+/**
+ * xmlSecXkmsResultMinor:
+ * @xmlSecXkmsResultMinorNone:                  No minor result code available.
+ * @xmlSecXkmsResultMinorNoMatch:               No match was found for the search 
+ *                                              prototype provided.
+ * @xmlSecXkmsResultMinorTooManyResponses:      The request resulted in the 
+ *                                              number of responses that 
+ *                                              exceeded either the ResponseLimit 
+ *                                              value specified in the request or 
+ *                                              some other limit determined by 
+ *                                              the service. The service MAY 
+ *                                              either return a subset of the 
+ *                                              possible responses or none at all.
+ * @xmlSecXkmsResultMinorIncomplete:            Only part of the information 
+ *                                              requested could be provided.
+ * @xmlSecXkmsResultMinorFailure:               The service attempted to perform 
+ *                                              the request but the operation 
+ *                                              failed for unspecified reasons.
+ * @xmlSecXkmsResultMinorRefused:               The operation was refused. The 
+ *                                              service did not attempt to 
+ *                                              perform the request.
+ * @xmlSecXkmsResultMinorNoAuthentication:      The operation was refused 
+ *                                              because the necessary authentication 
+ *                                              information was incorrect or missing.
+ * @xmlSecXkmsResultMinorMessageNotSupported:   The receiver does not implement 
+ *                                              the specified operation.
+ * @xmlSecXkmsResultMinorUnknownResponseId:     The ResponseId for which pending 
+ *                                              status was requested is unknown to 
+ *                                              the service.
+ * @xmlSecXkmsResultMinorSynchronous:           The receiver does not support 
+ *                                              synchronous processing of this 
+ *                                              type of request.
+ *
+ * The values for ResultMinor attribute.
+ */
+typedef enum {
+    xmlSecXkmsResultMinorNone = 0,
+    xmlSecXkmsResultMinorNoMatch,
+    xmlSecXkmsResultMinorTooManyResponses,
+    xmlSecXkmsResultMinorIncomplete,
+    xmlSecXkmsResultMinorFailure,
+    xmlSecXkmsResultMinorRefused,
+    xmlSecXkmsResultMinorNoAuthentication,
+    xmlSecXkmsResultMinorMessageNotSupported,
+    xmlSecXkmsResultMinorUnknownResponseId,
+    xmlSecXkmsResultMinorSynchronous
+} xmlSecXkmsResultMinor;
+
+/** 
+ * xmlSecXkmsKeyBindingStatus:
+ * @xmlSecXkmsKeyBindingStatusNone:             The key status is not available.
+ * @xmlSecXkmsKeyBindingStatusValid:            The key is valid.
+ * @xmlSecXkmsKeyBindingStatusInvalid:          The key is not valid.
+ * @xmlSecXkmsKeyBindingStatusIndeterminate:    Could not determine key status.
+ *
+ * The values for key binding StatusValue attribute.
+ */ 
+typedef enum {
+    xmlSecXkmsKeyBindingStatusNone,
+    xmlSecXkmsKeyBindingStatusValid,
+    xmlSecXkmsKeyBindingStatusInvalid,
+    xmlSecXkmsKeyBindingStatusIndeterminate
+} xmlSecXkmsKeyBindingStatus;
+
+/**
+ * xmlSecXkmsServerFormat:
+ * @xmlSecXkmsServerFormatUnknown:              The format is unknown.
+ * @xmlSecXkmsServerFormatPlain:                The request/response are not enveloped.
+ * @xmlSecXkmsServerFormatSoap1_1:              The request/response are SOAP 1.1 encapsulated
+ * @xmlSecXkmsServerFormatSoap1_2:              The request/response are SOAP 1.2 encapsulated.
+ *
+ * The xkms server request/response format.
+ */
+typedef enum {
+    xmlSecXkmsServerFormatUnknown = 0,
+    xmlSecXkmsServerFormatPlain,
+    xmlSecXkmsServerFormatSoap11,
+    xmlSecXkmsServerFormatSoap12
+} xmlSecXkmsServerFormat;
+
+XMLSEC_EXPORT xmlSecXkmsServerFormat xmlSecXkmsServerFormatFromString
+                                                                (const xmlChar* str);
+XMLSEC_EXPORT const xmlChar*     xmlSecXkmsServerFormatToString (xmlSecXkmsServerFormat format);
+
+/************************************************************************
+ *
+ * XKMS requests server side processing klass
+ *
+ ************************************************************************/ 
+/** 
+ * xmlSecXkmsServerCtx:
+ * @userData:			the pointer to user data (xmlsec and xmlsec-crypto libraries
+ *				never touches this).
+ * @flags:			the XML Encryption processing flags.
+ * @flags2:			the XML Encryption processing flags.
+ * @keyInfoReadCtx:		the reading key context.
+ * @keyInfoWriteCtx:		the writing key context (not used for signature verification).
+ * @reserved0:			reserved for the future.
+ * @reserved1:			reserved for the future.
+ * 
+ * XKMS context.
+ */
+struct _xmlSecXkmsServerCtx {
+    /* these data user can set before performing the operation */
+    void*			userData;
+    xmlSecBitMask		flags;
+    xmlSecBitMask		flags2;    
+    xmlSecKeyInfoCtx		keyInfoReadCtx;
+    xmlSecKeyInfoCtx		keyInfoWriteCtx;
+    xmlSecPtrList		enabledRespondWithIds;
+    xmlSecPtrList		enabledServerRequestIds;
+    xmlChar* 			expectedService;
+    xmlChar*			idPrefix;
+    xmlSecSize			idLen;
+        
+    /* these data are returned */
+    xmlSecPtrList		keys;
+    xmlSecXkmsResultMajor	resultMajor;
+    xmlSecXkmsResultMinor	resultMinor;
+    xmlSecXkmsServerRequestId	requestId;
+    xmlChar*			id;    
+    xmlChar*			service;
+    xmlChar*			nonce;
+    xmlChar*			originalRequestId;
+    xmlChar*                    pendingNotificationMechanism;
+    xmlChar*                    pendingNotificationIdentifier;
+    int 			responseLimit;
+    xmlSecBitMask		responseMechanismMask;
+    xmlSecPtrListPtr		compoundRequestContexts;
+
+    /* these are internal data, nobody should change that except us */
+    xmlNodePtr			requestNode;
+    xmlNodePtr			opaqueClientDataNode;
+    xmlNodePtr 			firtsMsgExtNode;
+    xmlNodePtr 			keyInfoNode;
+    xmlSecPtrList		respWithList;
+    
+    /* reserved for future */
+    void*			reserved0;
+    void*			reserved1;
+};
+
+XMLSEC_EXPORT xmlSecXkmsServerCtxPtr xmlSecXkmsServerCtxCreate  (xmlSecKeysMngrPtr keysMngr);
+XMLSEC_EXPORT void 		xmlSecXkmsServerCtxDestroy	(xmlSecXkmsServerCtxPtr ctx);
+XMLSEC_EXPORT int		xmlSecXkmsServerCtxInitialize	(xmlSecXkmsServerCtxPtr ctx,
+								 xmlSecKeysMngrPtr keysMngr);
+XMLSEC_EXPORT void		xmlSecXkmsServerCtxFinalize	(xmlSecXkmsServerCtxPtr ctx);
+XMLSEC_EXPORT void		xmlSecXkmsServerCtxReset	(xmlSecXkmsServerCtxPtr ctx);
+XMLSEC_EXPORT int		xmlSecXkmsServerCtxCopyUserPref (xmlSecXkmsServerCtxPtr dst,
+								 xmlSecXkmsServerCtxPtr src);
+XMLSEC_EXPORT xmlNodePtr	xmlSecXkmsServerCtxProcess	(xmlSecXkmsServerCtxPtr ctx,
+								 xmlNodePtr node,
+                                                                 xmlSecXkmsServerFormat format,
+			    					 xmlDocPtr doc);
+XMLSEC_EXPORT int		xmlSecXkmsServerCtxRequestRead	(xmlSecXkmsServerCtxPtr ctx,
+								 xmlNodePtr node);
+XMLSEC_EXPORT xmlNodePtr	xmlSecXkmsServerCtxResponseWrite(xmlSecXkmsServerCtxPtr ctx,
+			    					 xmlDocPtr doc);
+XMLSEC_EXPORT xmlNodePtr	xmlSecXkmsServerCtxRequestUnwrap(xmlSecXkmsServerCtxPtr ctx,
+								 xmlNodePtr node,
+                                                                 xmlSecXkmsServerFormat format);
+XMLSEC_EXPORT xmlNodePtr	xmlSecXkmsServerCtxResponseWrap (xmlSecXkmsServerCtxPtr ctx,
+								 xmlNodePtr node,
+                                                                 xmlSecXkmsServerFormat format,
+                                                                 xmlDocPtr doc);
+XMLSEC_EXPORT xmlNodePtr	xmlSecXkmsServerCtxFatalErrorResponseCreate 
+								(xmlSecXkmsServerCtxPtr ctx,
+                                                                 xmlSecXkmsServerFormat format,
+                                                                 xmlDocPtr doc);
+XMLSEC_EXPORT void		xmlSecXkmsServerCtxSetResult	(xmlSecXkmsServerCtxPtr ctx,
+								 xmlSecXkmsResultMajor resultMajor,
+                                                                 xmlSecXkmsResultMinor resultMinor);
+XMLSEC_EXPORT void		xmlSecXkmsServerCtxDebugDump	(xmlSecXkmsServerCtxPtr ctx,
+								 FILE* output);
+XMLSEC_EXPORT void		xmlSecXkmsServerCtxDebugXmlDump (xmlSecXkmsServerCtxPtr ctx,
+								 FILE* output);
+
+/************************************************************************
+ *
+ * xmlSecXkmsServerCtxPtr list
+ *
+ ************************************************************************/ 
+/**
+ * xmlSecXkmsServerCtxPtrListId:
+ *
+ * zmlSecXkmsServerCtx klasses list klass.
+ */
+#define xmlSecXkmsServerCtxPtrListId	xmlSecXkmsServerCtxPtrListGetKlass()
+XMLSEC_EXPORT xmlSecPtrListId	xmlSecXkmsServerCtxPtrListGetKlass
+                                                                (void);
+
+/************************************************************************
+ *
+ * xmlSecXkmsServerCtxFlags
+ *
+ ************************************************************************/ 
+/**
+ * XMLSEC_XKMS_SERVER_FLAGS_STOP_ON_UNKNOWN_RESPONSE_MECHANISM
+ *
+ * If flag is set then we abort if an unknown <xkms:ResponseMechanism/> 
+ * value is found.
+ */
+#define XMLSEC_XKMS_SERVER_FLAGS_STOP_ON_UNKNOWN_RESPONSE_MECHANISM	0x00000001
+
+/**
+ * XMLSEC_XKMS_SERVER_FLAGS_STOP_ON_UNKNOWN_RESPOND_WITH
+ *
+ * If flag is set then we abort if an unknown <xkms:RespondWith/> 
+ * value is found.
+ */
+#define XMLSEC_XKMS_SERVER_FLAGS_STOP_ON_UNKNOWN_RESPOND_WITH		0x00000002
+
+/**
+ * XMLSEC_XKMS_SERVER_FLAGS_STOP_ON_UNKNOWN_KEY_USAGE
+ *
+ * If flag is set then we abort if an unknown <xkms:KeyUsage/> 
+ * value is found.
+ */
+#define XMLSEC_XKMS_SERVER_FLAGS_STOP_ON_UNKNOWN_KEY_USAGE		0x00000004
+
+/************************************************************************
+ *
+ * XKMS ResponseMechanism element values.
+ *
+ ************************************************************************/ 
+/**
+ * XMLSEC_XKMS_RESPONSE_MECHANISM_MASK_REPRESENT:
+ *
+ * XKMS ResponseMechanism element value. The requestor is prepared to 
+ * accept a response that uses asynchronous processing, i.e. the service 
+ * MAY return the MajorResult code Pending.
+ */
+#define XMLSEC_XKMS_RESPONSE_MECHANISM_MASK_PENDING			0x00000001	
+
+/**
+ * XMLSEC_XKMS_RESPONSE_MECHANISM_MASK_REPRESENT:
+ *
+ * XKMS ResponseMechanism element value. The requestor is prepared to 
+ * accept a response that uses the two phase protocol, i.e. the service 
+ * MAY return the MajorResult code Represent.
+ */
+#define XMLSEC_XKMS_RESPONSE_MECHANISM_MASK_REPRESENT			0x00000002
+
+/**
+ * XMLSEC_XKMS_RESPONSE_MECHANISM_MASK_REQUEST_SIGNATURE_VALUE:
+ *
+ * XKMS ResponseMechanism element value. The requestor is prepared to 
+ * accept a response that carries a <RequestSignatureValue> element.
+ */
+#define XMLSEC_XKMS_RESPONSE_MECHANISM_MASK_REQUEST_SIGNATURE_VALUE	0x00000004
+
+/************************************************************************
+ *
+ * XKMS ResponseLimit element values
+ *
+ ************************************************************************/ 
+/**
+ * XMLSEC_XKMS_NO_RESPONSE_LIMIT:
+ *
+ * The ResponseLimit is not specified.
+ */
+#define XMLSEC_XKMS_NO_RESPONSE_LIMIT			        -1
+
+
+/************************************************************************
+ *
+ * XKMS KeyBinding reason values
+ *
+ ************************************************************************/ 
+/**
+ * XMLSEC_XKMS_KEY_BINDING_REASON_MASK_ISSUER_TRAST:
+ *
+ * The issuer of the information on which the key binding is based is 
+ * considered to be trustworthy by the XKMS service.
+ *
+ * X.509 Equivalents
+ *   - Valid:	Certificate path anchored by trusted root successfully constructed.
+ *   - Invalid:	Certificate path could not be constructed to a trusted root.
+ */
+#define XMLSEC_XKMS_KEY_BINDING_REASON_MASK_ISSUER_TRAST	0x00000001
+
+/**
+ * XMLSEC_XKMS_KEY_BINDING_REASON_MASK_REVOCATION_STATUS:
+ *
+ * The XKMS service has affirmatively verified the status of the 
+ * key binding with an authoritative source
+ *
+ * X.509 Equivalents
+ *   - Valid:	Certificate status validated using CRL or OCSP.
+ *   - Invalid:	Certificate status returned revoked or suspended.
+ */
+#define XMLSEC_XKMS_KEY_BINDING_REASON_MASK_REVOCATION_STATUS	0x00000002
+
+/**
+ * XMLSEC_XKMS_KEY_BINDING_REASON_MASK_VALIDITY_INTERVAL:
+ *
+ * The requested time instant was within the validity interval of 
+ * the key binding
+ *
+ * X.509 Equivalents
+ *   - Valid:	The certificate chain was valid at the requested time instant.
+ *   - Invalid:	The requested time instant was before or after the certificate 
+ *              chain validity interval.
+ */
+#define XMLSEC_XKMS_KEY_BINDING_REASON_MASK_VALIDITY_INTERVAL	 0x00000004
+
+/**
+ * XMLSEC_XKMS_KEY_BINDING_REASON_MASK_SIGNATURE:
+ *
+ * Signature on signed data provided by the client in the <Keyinfo> element was 
+ * successfully verified.
+ *
+ * X.509 Equivalents
+ *   - Valid: 	Certificate Signature verified.
+ *   - Invalid: Certificate Signature verification failed.
+ */
+#define XMLSEC_XKMS_KEY_BINDING_REASON_MASK_SIGNATURE		 0x00000008
+
+
+/************************************************************************
+ *
+ * XKMS RespondWith Klass
+ *
+ ************************************************************************/ 
+XMLSEC_EXPORT xmlSecPtrListPtr	xmlSecXkmsRespondWithIdsGet	(void);
+XMLSEC_EXPORT int 		xmlSecXkmsRespondWithIdsInit	(void);
+XMLSEC_EXPORT void 		xmlSecXkmsRespondWithIdsShutdown(void);
+XMLSEC_EXPORT int 		xmlSecXkmsRespondWithIdsRegisterDefault
+                                                                (void);
+XMLSEC_EXPORT int		xmlSecXkmsRespondWithIdsRegister(xmlSecXkmsRespondWithId id);
+XMLSEC_EXPORT int  		xmlSecXkmsRespondWithNodeRead	(xmlSecXkmsRespondWithId id,
+								 xmlSecXkmsServerCtxPtr ctx,
+								 xmlNodePtr node);
+XMLSEC_EXPORT int  		xmlSecXkmsRespondWithNodeWrite	(xmlSecXkmsRespondWithId id,
+								 xmlSecXkmsServerCtxPtr ctx,
+								 xmlNodePtr node);
+XMLSEC_EXPORT void		xmlSecXkmsRespondWithDebugDump	(xmlSecXkmsRespondWithId id,
+								 FILE* output);
+XMLSEC_EXPORT void		xmlSecXkmsRespondWithDebugXmlDump
+                                                                (xmlSecXkmsRespondWithId id,
+								 FILE* output);
+XMLSEC_EXPORT int  		xmlSecXkmsRespondWithDefaultNodeRead
+                                                                (xmlSecXkmsRespondWithId id,
+								 xmlSecXkmsServerCtxPtr ctx,
+								 xmlNodePtr node);
+XMLSEC_EXPORT int  		xmlSecXkmsRespondWithDefaultNodeWrite
+                                                                (xmlSecXkmsRespondWithId id,
+								 xmlSecXkmsServerCtxPtr ctx,
+								 xmlNodePtr node);
+/************************************************************************
+ *
+ * XKMS RespondWith Klass List
+ *
+ ************************************************************************/ 
+/**
+ * xmlSecXkmsRespondWithIdListId:
+ *
+ * XKMS RespondWith  klasses list klass.
+ */
+#define xmlSecXkmsRespondWithIdListId	xmlSecXkmsRespondWithIdListGetKlass()
+XMLSEC_EXPORT xmlSecPtrListId	xmlSecXkmsRespondWithIdListGetKlass
+                                                                (void);
+XMLSEC_EXPORT int		xmlSecXkmsRespondWithIdListFind (xmlSecPtrListPtr list,
+								 xmlSecXkmsRespondWithId id);
+XMLSEC_EXPORT xmlSecXkmsRespondWithId xmlSecXkmsRespondWithIdListFindByNodeValue
+								(xmlSecPtrListPtr list,
+								 xmlNodePtr node);
+XMLSEC_EXPORT int		xmlSecXkmsRespondWithIdListWrite(xmlSecPtrListPtr list,
+								 xmlSecXkmsServerCtxPtr ctx,
+								 xmlNodePtr node);
+
+/******************************************************************** 
+ *
+ * XML Sec Library RespondWith Ids
+ *
+ *******************************************************************/
+/**
+ * xmlSecXkmsRespondWithIdUnknown:
+ *
+ * The "unknown" RespondWith id (NULL).
+ */
+#define xmlSecXkmsRespondWithIdUnknown			NULL
+
+/**
+ * xmlSecXkmsRespondWithKeyNameId:
+ *
+ * The respond with KeyName klass.
+ */ 
+#define xmlSecXkmsRespondWithKeyNameId \
+	xmlSecXkmsRespondWithKeyNameGetKlass()
+XMLSEC_EXPORT xmlSecXkmsRespondWithId	xmlSecXkmsRespondWithKeyNameGetKlass(void);
+
+/**
+ * xmlSecXkmsRespondWithKeyValueId:
+ *
+ * The respond with KeyValue klass.
+ */ 
+#define xmlSecXkmsRespondWithKeyValueId \
+	xmlSecXkmsRespondWithKeyValueGetKlass()
+XMLSEC_EXPORT xmlSecXkmsRespondWithId	xmlSecXkmsRespondWithKeyValueGetKlass(void);
+
+/**
+ * xmlSecXkmsRespondWithPrivateKeyId:
+ *
+ * The respond with PrivateKey klass.
+ */ 
+#define xmlSecXkmsRespondWithPrivateKeyId \
+	xmlSecXkmsRespondWithPrivateKeyGetKlass()
+XMLSEC_EXPORT xmlSecXkmsRespondWithId	xmlSecXkmsRespondWithPrivateKeyGetKlass(void);
+
+/**
+ * xmlSecXkmsRespondWithRetrievalMethodId:
+ *
+ * The respond with RetrievalMethod klass.
+ */ 
+#define xmlSecXkmsRespondWithRetrievalMethodId \
+	xmlSecXkmsRespondWithRetrievalMethodGetKlass()
+XMLSEC_EXPORT xmlSecXkmsRespondWithId	xmlSecXkmsRespondWithRetrievalMethodGetKlass(void);
+
+/**
+ * xmlSecXkmsRespondWithX509CertId:
+ *
+ * The respond with X509Cert klass.
+ */ 
+#define xmlSecXkmsRespondWithX509CertId \
+	xmlSecXkmsRespondWithX509CertGetKlass()
+XMLSEC_EXPORT xmlSecXkmsRespondWithId	xmlSecXkmsRespondWithX509CertGetKlass(void);
+
+/**
+ * xmlSecXkmsRespondWithX509ChainId:
+ *
+ * The respond with X509Chain klass.
+ */ 
+#define xmlSecXkmsRespondWithX509ChainId \
+	xmlSecXkmsRespondWithX509ChainGetKlass()
+XMLSEC_EXPORT xmlSecXkmsRespondWithId	xmlSecXkmsRespondWithX509ChainGetKlass(void);
+
+/**
+ * xmlSecXkmsRespondWithX509CRLId:
+ *
+ * The respond with X509CRL klass.
+ */ 
+#define xmlSecXkmsRespondWithX509CRLId \
+	xmlSecXkmsRespondWithX509CRLGetKlass()
+XMLSEC_EXPORT xmlSecXkmsRespondWithId	xmlSecXkmsRespondWithX509CRLGetKlass(void);
+
+
+/**
+ * xmlSecXkmsRespondWithPGPId:
+ *
+ * The respond with PGP klass.
+ */ 
+#define xmlSecXkmsRespondWithPGPId \
+	xmlSecXkmsRespondWithPGPGetKlass()
+XMLSEC_EXPORT xmlSecXkmsRespondWithId	xmlSecXkmsRespondWithPGPGetKlass(void);
+
+/**
+ * xmlSecXkmsRespondWithSPKIId:
+ *
+ * The respond with SPKI klass.
+ */ 
+#define xmlSecXkmsRespondWithSPKIId \
+	xmlSecXkmsRespondWithSPKIGetKlass()
+XMLSEC_EXPORT xmlSecXkmsRespondWithId	xmlSecXkmsRespondWithSPKIGetKlass(void);
+
+
+/************************************************************************
+ *
+ * XKMS ServerRequest Klass
+ *
+ ************************************************************************/ 
+XMLSEC_EXPORT xmlSecPtrListPtr	xmlSecXkmsServerRequestIdsGet	(void);
+XMLSEC_EXPORT int 		xmlSecXkmsServerRequestIdsInit	(void);
+XMLSEC_EXPORT void 		xmlSecXkmsServerRequestIdsShutdown
+								(void);
+XMLSEC_EXPORT int 		xmlSecXkmsServerRequestIdsRegisterDefault
+								(void);
+XMLSEC_EXPORT int		xmlSecXkmsServerRequestIdsRegister	
+								(xmlSecXkmsServerRequestId id);
+XMLSEC_EXPORT int  		xmlSecXkmsServerRequestNodeRead	(xmlSecXkmsServerRequestId id,
+								 xmlSecXkmsServerCtxPtr ctx,
+								 xmlNodePtr node);
+XMLSEC_EXPORT int  		xmlSecXkmsServerRequestExecute	(xmlSecXkmsServerRequestId id,
+								 xmlSecXkmsServerCtxPtr ctx);
+XMLSEC_EXPORT xmlNodePtr	xmlSecXkmsServerRequestNodeWrite(xmlSecXkmsServerRequestId id,
+								 xmlSecXkmsServerCtxPtr ctx,
+								 xmlDocPtr doc,
+								 xmlNodePtr node);
+XMLSEC_EXPORT void		xmlSecXkmsServerRequestDebugDump(xmlSecXkmsServerRequestId id,
+								 FILE* output);
+XMLSEC_EXPORT void		xmlSecXkmsServerRequestDebugXmlDump
+								(xmlSecXkmsServerRequestId id,
+								 FILE* output);
+
+/************************************************************************
+ *
+ * XKMS ServerRequest Klass List
+ *
+ ************************************************************************/ 
+/**
+ * xmlSecXkmsServerRequestIdListId:
+ *
+ * XKMS ServerRequest  klasses list klass.
+ */
+#define xmlSecXkmsServerRequestIdListId	xmlSecXkmsServerRequestIdListGetKlass()
+XMLSEC_EXPORT xmlSecPtrListId	xmlSecXkmsServerRequestIdListGetKlass
+								(void);
+XMLSEC_EXPORT int		xmlSecXkmsServerRequestIdListFind
+								(xmlSecPtrListPtr list,
+								 xmlSecXkmsServerRequestId id);
+XMLSEC_EXPORT xmlSecXkmsServerRequestId	xmlSecXkmsServerRequestIdListFindByName
+								(xmlSecPtrListPtr list,
+								 const xmlChar* name);
+XMLSEC_EXPORT xmlSecXkmsServerRequestId	xmlSecXkmsServerRequestIdListFindByNode
+								(xmlSecPtrListPtr list,
+								 xmlNodePtr node);
+
+/**
+ * xmlSecXkmsServerRequestIdUnknown:
+ *
+ * The "unknown" ServerRequest id (NULL).
+ */
+#define xmlSecXkmsServerRequestIdUnknown			NULL
+
+/**
+ * xmlSecXkmsServerRequestResultId:
+ *
+ * The Result response klass.
+ */ 
+#define xmlSecXkmsServerRequestResultId \
+	xmlSecXkmsServerRequestResultGetKlass()
+XMLSEC_EXPORT xmlSecXkmsServerRequestId	xmlSecXkmsServerRequestResultGetKlass(void);
+
+/**
+ * xmlSecXkmsServerRequestStatusId:
+ *
+ * The StatusRequest klass.
+ */ 
+#define xmlSecXkmsServerRequestStatusId \
+	xmlSecXkmsServerRequestStatusGetKlass()
+XMLSEC_EXPORT xmlSecXkmsServerRequestId	xmlSecXkmsServerRequestStatusGetKlass(void);
+
+/**
+ * xmlSecXkmsServerRequestCompoundId:
+ *
+ * The CompoundRequest klass.
+ */ 
+#define xmlSecXkmsServerRequestCompoundId \
+	xmlSecXkmsServerRequestCompoundGetKlass()
+XMLSEC_EXPORT xmlSecXkmsServerRequestId	xmlSecXkmsServerRequestCompoundGetKlass(void);
+
+/**
+ * xmlSecXkmsServerRequestLocateId:
+ *
+ * The LocateRequest klass.
+ */ 
+#define xmlSecXkmsServerRequestLocateId \
+	xmlSecXkmsServerRequestLocateGetKlass()
+XMLSEC_EXPORT xmlSecXkmsServerRequestId	xmlSecXkmsServerRequestLocateGetKlass(void);
+
+/**
+ * xmlSecXkmsServerRequestValidateId:
+ *
+ * The ValidateRequest klass.
+ */ 
+#define xmlSecXkmsServerRequestValidateId \
+	xmlSecXkmsServerRequestValidateGetKlass()
+XMLSEC_EXPORT xmlSecXkmsServerRequestId	xmlSecXkmsServerRequestValidateGetKlass(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* XMLSEC_NO_XKMS */
+
+#endif /* __XMLSEC_XKMS_H__ */
+