blob: 3def5e2da1919cfbb74250781bd69957f7c08163 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
* XSEC
*
* XKMSKeyBindingAbstractType := Interface for base schema of XKMS messages
*
* $Id$
*
*/
#ifndef XKMSKEYBINDINGABSTRACTTYPE_INCLUDE
#define XKMSKEYBINDINGABSTRACTTYPE_INCLUDE
// XSEC Includes
#include <xsec/framework/XSECDefs.hpp>
#ifdef XSEC_XKMS_ENABLED
class DSIGKeyInfoList;
class DSIGKeyInfoMgmtData;
class DSIGKeyInfoName;
class DSIGKeyInfoPGPData;
class DSIGKeyInfoSPKIData;
class DSIGKeyInfoValue;
class DSIGKeyInfoX509;
class XKMSUseKeyWith;
XSEC_DECLARE_XERCES_CLASS(DOMElement);
/**
* @ingroup xkms
*/
/**
* @brief Interface definition for the KeyBindingAbstractType
*
* The \<KeyBindingAbstractType\> is an abstract type on which all
* KeyBinding components are build.
*
* The schema definition for KeyBindingAbstractType is as follows :
*
* \verbatim
<!-- KeyBindingAbstractType-->
<complexType name="KeyBindingAbstractType" abstract="true">
<sequence>
<element ref="ds:KeyInfo" minOccurs="0"/>
<element ref="xkms:KeyUsage" minOccurs="0" maxOccurs="3"/>
<element ref="xkms:UseKeyWith" minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<!-- /KeyBindingAbstractType-->
\endverbatim
*/
class XSEC_EXPORT XKMSKeyBindingAbstractType {
/** @name Constructors and Destructors */
//@{
protected:
XKMSKeyBindingAbstractType() {};
public:
virtual ~XKMSKeyBindingAbstractType() {};
/** @name Getter Interface Methods */
//@{
/*
* \brief Obtain the base Element for this structure
*
* @returns the Element node at the head of the DOM structure
*/
virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * getElement(void) const = 0;
/**
* \brief Get the Id for the KeyBinding
*
* All KeyBinding elements MAY have an Id attribute that
* identifies the binding. This method is used to retrieve a pointer
* to the Id string.
*
* @returns a pointer to the Id string (owned by the library)
*/
virtual const XMLCh * getId(void) const = 0;
/**
* \brief Obtain the KeyInfo elements for this KeyBinding
*
* KeyBinding elements may provide information about the keys that are being
* bound.
*
* @returns A KeyInfoList object containing all the KeyInfo elements
*/
virtual DSIGKeyInfoList * getKeyInfoList(void) const = 0;
/**
* \brief Determine if an Encryption key usage is set
*
* KeyBinding elements may define Encryption, Signature of Exchange as being
* permitted for a particular key.
*
* @returns whether the Encryption KeyUsage element is set
*/
virtual bool getEncryptionKeyUsage(void) const = 0;
/**
* \brief Determine if an Signature key usage is set
*
* KeyBinding elements may define Encryption, Signature of Exchange as being
* permitted for a particular key.
*
* @returns whether the Signature KeyUsage element is set
*/
virtual bool getSignatureKeyUsage(void) const = 0;
/**
* \brief Determine if an Exchange key usage is set
*
* KeyBinding elements may define Encryption, Signature of Exchange as being
* permitted for a particular key.
*
* @returns whether the Exchange KeyUsage element is set
*/
virtual bool getExchangeKeyUsage(void) const = 0;
//@}
/** @name Setter interface methods */
//@{
/**
* \brief Set the Id URI for the Message
*
* Allows a calling application to set a new Id for the
* KeyBinding
*
* @param id The Id to set - if NULL, the library will generate a random Id
*/
virtual void setId(const XMLCh * id = NULL) = 0;
/**
* \brief Set Encryption key usage on
*
* KeyBinding elements may define Encryption, Signature of Exchange as being
* permitted for a particular key. When first created, all these elements
* are off (which indicates that all are permitted).
*
* This call activates the Encryption key usage for this KeyBinding
*/
virtual void setEncryptionKeyUsage(void) = 0;
/**
* \brief Set Signature key usage on
*
* KeyBinding elements may define Encryption, Signature of Exchange as being
* permitted for a particular key. When first created, all these elements
* are off (which indicates that all are permitted).
*
* This call activates the Signature key usage for this KeyBinding
*/
virtual void setSignatureKeyUsage(void) = 0;
/**
* \brief Set Exchange key usage on
*
* KeyBinding elements may define Encryption, Signature of Exchange as being
* permitted for a particular key. When first created, all these elements
* are off (which indicates that all are permitted).
*
* This call activates the Exchange key usage for this KeyBinding
*/
virtual void setExchangeKeyUsage(void) = 0;
//@}
/** @name KeyInfo Element Manipulation */
//@{
/**
* \brief Get the list of \<KeyInfo\> elements.
*
* <p>This function recovers list that contains the KeyInfo elements
* read in from the DOM document.</p>
*
* @returns A pointer to the (library owned) KeyInfo list, or NULL
* if none exists in the KeyBinding.
*/
virtual DSIGKeyInfoList * getKeyInfoList(void) = 0;
/**
* \brief Clear out all KeyInfo elements in the KeyBinding.
*
* This function will delete all KeyInfo elements from both the KeyBinding
* object <em>and the associated DOM</em>.
*
*/
virtual void clearKeyInfo(void) = 0;
/**
* \brief Append a DSA KeyValue element
*
* Add a new KeyInfo element for a DSA Value
*
* @param P Base64 encoded value of P
* @param Q Base64 encoded value of Q
* @param G Base64 encoded value of G
* @param Y Base64 encoded value of Y
* @returns A pointer to the created object.
*/
virtual DSIGKeyInfoValue * appendDSAKeyValue(const XMLCh * P,
const XMLCh * Q,
const XMLCh * G,
const XMLCh * Y) = 0;
/**
* \brief Append a RSA KeyValue element
*
* Add a new KeyInfo element for a RSA Value
*
* @param modulus Base64 encoded value of the modulus
* @param exponent Base64 encoded value of exponent
* @returns A pointer to the created object.
*/
virtual DSIGKeyInfoValue * appendRSAKeyValue(const XMLCh * modulus,
const XMLCh * exponent) = 0;
/**
* \brief Append a X509Data element.
*
* Add a new KeyInfo element for X509 data.
*
* @note The added element is empty. The caller must make use of the
* returned object to set the required values.
*
* @returns A pointer to the created object.
*/
virtual DSIGKeyInfoX509 * appendX509Data(void) = 0;
/**
* \brief Append a KeyName element.
*
* Add a new KeyInfo element for a key name.
*
* @param name The name of the key to set in the XML
* @param isDName Treat the name as a Distinguished name and encode accordingly
* @returns A pointer to the created object
*/
virtual DSIGKeyInfoName * appendKeyName(const XMLCh * name, bool isDName = false) = 0;
/**
* \brief Append a PGPData element.
*
* Add a new KeyInfo element for a PGP key.
*
* @param id The ID of the key to set in the XML (base64 encoded - NULL if none)
* @param packet The Packet information to set in the XML (base64 encoded -
* NULL if none)
* @returns A pointer to the created object
*/
virtual DSIGKeyInfoPGPData * appendPGPData(const XMLCh * id, const XMLCh * packet) = 0;
/**
* \brief Append a SPKIData element
*
* Add a new KeyInfo element for a set of SPKI S-expressions
*
* @param sexp The initial S-expression to set in the SPKIData element
* @returns A pointer to the created object
*/
virtual DSIGKeyInfoSPKIData * appendSPKIData(const XMLCh * sexp) = 0;
/**
* \brief Append a MgmtData element
*
* Add a new KeyInfo element for Management Data
*
* @param data The string to set in the MgmtData element
* @returns A pointer to the created object
*/
virtual DSIGKeyInfoMgmtData * appendMgmtData(const XMLCh * data) = 0;
//@}
/** @name UseKeyWith handling */
//@{
/**
* \brief Find number of UseKeyWith elements
*
* @returns the number of UseKeyWith items within the KeyBinding
*/
virtual int getUseKeyWithSize(void) const = 0;
/*
* \brief Obtain an UseKeyWith item
*
* @param item Index of the item to return (0 = first element)
* @returns the UseKeyWith referenced by "item"
*/
virtual XKMSUseKeyWith * getUseKeyWithItem(int item) const = 0;
/*
* \brief Append a new UnverifiedKeyBinding element
*
* Allows callers to append a new UnverifiedKeyBinding item.
* The item is initially empty of KeyInfo elements - these must be added
* by the caller.
*
* @returns the newly created UnverifiedKeyBinding object (already inserted
* in the LocateResult
*/
virtual XKMSUseKeyWith * appendUseKeyWithItem(
const XMLCh * application,
const XMLCh * identifier) = 0;
//@}
private:
// Unimplemented
XKMSKeyBindingAbstractType(const XKMSKeyBindingAbstractType &);
XKMSKeyBindingAbstractType & operator = (const XKMSKeyBindingAbstractType &);
};
#endif /* XSEC_XKMS_ENABLED */
#endif /* XKMSKEYBINDINGABSTRACTTYPE_INCLUDE */