blob: d12542ac2450540c92c88b43624f36a2868c30e4 [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
*
* XENCEncryptedKey := Definition for holder object for EncryptedKey
*
* $Id$
*
*/
#ifndef XENCENCRYPTEDKEY_INCLUDE
#define XENCENCRYPTEDKEY_INCLUDE
// XSEC Includes
#include <xsec/framework/XSECDefs.hpp>
#include <xsec/dsig/DSIGKeyInfo.hpp>
#include <xsec/xenc/XENCEncryptedType.hpp>
#include <xsec/xenc/XENCCipherData.hpp>
class XSECEnv;
/**
* @ingroup xenc
*/
/**
* @brief Interface definition for the EncryptedKey object
*
* The \<EncryptedKey\> element is an abstract type which builds
* on the EncryptedType element for encrypted data (as opposed to
* encrypted data).
*
* In general, this class should not be used directly. For most
* applications, callers will want to use the XENCCipher class
* instead.
*
* The schema definition for EncryptedKey is as follows:
*
* \verbatim
<element name='EncryptedKey' type='xenc:EncryptedKeyType'/>
<complexType name='EncryptedKeyType'>
<complexContent>
<extension base='xenc:EncryptedType'>
<sequence>
<element ref='xenc:ReferenceList' minOccurs='0'/>
<element name='CarriedKeyName' type='string' minOccurs='0'/>
</sequence>
<attribute name='Recipient' type='string' use='optional'/>
</extension>
</complexContent>
</complexType>
\endverbatim
*/
class XSEC_EXPORT XENCEncryptedKey : public virtual XENCEncryptedType, public DSIGKeyInfo {
/** @name Constructors and Destructors */
//@{
protected:
// Because we inherit from KeyInfo, we need to implement a slightly different
// constructor.
XENCEncryptedKey(const XSECEnv * env) : DSIGKeyInfo(env) {};
public:
virtual ~XENCEncryptedKey() {};
/**
* \brief Create a new object.
*
* Create a new object.
*
* @param env environment instance
* @param type type of cipher data
* @param algorithm algorithm to use
* @param value value to use
*
* @returns the new object
*/
static XENCEncryptedKey* create(
const XSECEnv* env,
XENCCipherData::XENCCipherDataType type,
const XMLCh * algorithm,
const XMLCh * value);
/** @name EncryptedKey Specific Getter Methods */
//@{
/**
* \brief Get the CarriedKeyName
*
* EncryptedKey elements MAY have a CarriedKeyName element that links
* the EncryptedKey to a KeyName KeyInfo element in another EncryptedKey
* or EncryptedData element.
*
* This method allows applications to retrieve the Carried Key Name for
* the particular EncryptedKey
*
* @returns A pointer (owned by the library) to the CarriedKeyName string
* (or NULL if none)
*/
virtual const XMLCh * getCarriedKeyName(void) const = 0;
/**
* \brief Get the Recipient name
*
* EncryptedKey elements MAY have a Recipient Attribute on the main
* EncryptedKey element that provide a hint to the application as to who
* the recipient of the key is.
*
* This method returns this string in cases where it has been provided
*
* @returns A pointer (owned by the library) to the Recipient string
* (or NULL if none provided).
*/
virtual const XMLCh * getRecipient(void) const = 0;
//@}
/** @name EncryptedKey Specific Setter Methods */
//@{
/**
* \brief Set the CarriedKeyName
*
* EncryptedKey elements MAY have a CarriedKeyName element that links
* the EncryptedKey to a KeyName KeyInfo element in another EncryptedKey
* or EncryptedData element.
*
* This method allows applications to set the Carried Key Name for
* the particular EncryptedKey
*
* @param name String to set in the CarriedKeyName element
*/
virtual void setCarriedKeyName(const XMLCh * name) = 0;
/**
* \brief Set the Recipient name
*
* EncryptedKey elements MAY have a Recipient Attribute on the main
* EncryptedKey element that provide a hint to the application as to who
* the recipient of the key is.
*
* This method sets the Recipient string
*
* @param recipient String to set in the Recipient attribute
*/
virtual void setRecipient(const XMLCh * recipient) = 0;
//@}
private:
// Unimplemented
XENCEncryptedKey(const XENCEncryptedKey &);
XENCEncryptedKey & operator = (const XENCEncryptedKey &);
};
#endif /* XENCENCRYPTEDKEY_INCLUDE */