blob: e895f4735fd0f875e8c0ab053166731f671c625c [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
*
* XENCEncryptionMethod := Interface definition for EncryptionMethod element
*
* $Id$
*
*/
#ifndef XENCENCRYPTIONMETHOD_INCLUDE
#define XENCENCRYPTIONMETHOD_INCLUDE
// XSEC Includes
#include <xsec/framework/XSECDefs.hpp>
class XSECEnv;
/**
* @ingroup xenc
*/
/**
* @brief Interface definition for the EncryptionMethod object
*
* The \<EncryptionMethod\> element holds information about the
* encryption algorithm being used.
*
* This element is optional within an EncryptedType derivative,
* but applications not making use of this need to know the
* this information, otherwise the library will not be able to
* decrypt the data.
*
* It is defined as :
* \verbatim
<complexType name='EncryptionMethodType' mixed='true'>
<sequence>
<element name='KeySize' minOccurs='0' type='xenc:KeySizeType'/>
<element name='OAEPparams' minOccurs='0' type='base64Binary'/>
<any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
</sequence>
<attribute name='Algorithm' type='anyURI' use='required'/>
</complexType>
\endverbatim
*/
class XSEC_EXPORT XENCEncryptionMethod {
public:
XENCEncryptionMethod() {};
virtual ~XENCEncryptionMethod() {};
/**
* \brief Create a new object.
*
* Create a new object.
*
* @param env environment instance
* @param algorithm algorithm to use
*
* @returns the new object
*/
static XENCEncryptionMethod* create(const XSECEnv* env, const XMLCh* algorithm);
/** @name Getter Methods */
//@{
/**
* \brief Get the algorithm
*
* Return the Algorithm URI representing the encryption type for this
* encrypted data
*
* @returns the URI representing the algorithm
*/
virtual const XMLCh * getAlgorithm(void) const = 0;
/**
* \brief Get the digest method URI
*
* Return the Algorithm URI represtenting the Digest Method for those
* encryption algorithms that require it (such as RSA with OAEP padding)
*
* @returns the URI representing the digest method algorithm
*/
virtual const XMLCh * getDigestMethod(void) const = 0;
/**
* \brief Get the value of the OAEPparams string
*
* The OAEP RSA padding method allows a user to set an optional
* params string (that will be used as input to the Digest algorithm).
*
* @returns The string (base64 encoded value) representing the OAEP params
*/
virtual const XMLCh * getOAEPparams(void) const = 0;
/**
* \brief Get the MGF URI
*
* Return the Algorithm URI represtenting the Mask Generation Function for those
* encryption algorithms that require it (such as RSA with OAEP padding)
*
* @returns the URI representing the mask generation function
*/
virtual const XMLCh * getMGF(void) const = 0;
/**
* \brief Get the KeySize that was set in this EncryptionMethod.
*
* This field would not normally be used for the encryption algorithms
* explicitly referenced in the XML Encryption standard. It is provided
* mainly for stream ciphers that have a variable key length
*/
virtual int getKeySize(void) const = 0;
/**
* \brief Get the DOM Element Node of this structure
*
* @returns the DOM Element Node representing the \<EncryptionMethod\> element
*/
virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * getElement(void) const = 0;
//@}
/** @name Setter Methods */
//@{
/**
* \brief Set the value of the DigestMethod
*
* Sets the DigestMethod element's Algorithm attribute to the passed in
* value - should be a URI string
*
* @param method String to set in the Algorithm attribute. Will create a
* \<DigestMethod\> element if one does not already exist
*/
virtual void setDigestMethod(const XMLCh * method) = 0;
/**
* \brief Set the value of the OAEPparams string
*
* Sets the OAEPparams element's Text node child to the passed in
* value - should be a base64 encoded value
*
* @param params String to set in the OAEPparams text node. Will create a
* \<OAEPparams\> element if one does not already exist
*/
virtual void setOAEPparams(const XMLCh * params) = 0;
/**
* \brief Set the value of the MGF
*
* Sets the MGF element's Algorithm attribute to the passed in
* value - should be a URI string
*
* @param method String to set in the Algorithm attribute. Will create a
* \<xenc11:MGF\> element if one does not already exist
*/
virtual void setMGF(const XMLCh * mgf) = 0;
/**
* \brief Set the KeySize that in this EncryptionMethod.
*
* This field would not normally be used for the encryption algorithms
* explicitly referenced in the XML Encryption standard. It is provided
* mainly for stream ciphers that have a variable key length
*/
virtual void setKeySize(int size) = 0;
//@}
private:
// Unimplemented
XENCEncryptionMethod(const XENCEncryptionMethod &);
XENCEncryptionMethod & operator = (const XENCEncryptionMethod &);
};
#endif /* XENCENCRYPTIONMETHOD_INCLUDE */