blob: 94a4cc9c9b357d3649bff1e8a734a63788ef0002 [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
*
* XENCEncryptedTypeImpl := Implementation of the EncryptedType interface
* element
*
* $Id$
*
*/
#ifndef XENCENCRYPTEDTYPEIMPL_INCLUDE
#define XENCENCRYPTEDTYPEIMPL_INCLUDE
// XSEC Includes
#include <xsec/framework/XSECDefs.hpp>
#include <xsec/xenc/XENCEncryptedType.hpp>
#include <xsec/dsig/DSIGKeyInfoList.hpp>
// Forward declarations
XSEC_DECLARE_XERCES_CLASS(DOMNode);
class XENCCipherDataImpl;
class XENCEncryptionMethodImpl;
class TXFMChain;
class XSECEnv;
class XENCEncryptedTypeImpl : public virtual XENCEncryptedType {
public:
XENCEncryptedTypeImpl(const XSECEnv * env);
XENCEncryptedTypeImpl(
const XSECEnv * env,
XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * node
);
virtual ~XENCEncryptedTypeImpl();
// Load elements
void load();
// Create from scratch. LocalName is the name of the owning element
XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * createBlankEncryptedType(
XMLCh * localName,
XENCCipherData::XENCCipherDataType type,
const XMLCh * algorithm,
const XMLCh * value);
// Interface Methods
virtual XENCCipherData * getCipherData() const;
virtual XENCEncryptionMethod * getEncryptionMethod() const;
virtual void clearKeyInfo();
/**
* \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 DSIGKeyInfoList object held by the encrypted type
*/
virtual DSIGKeyInfoList * getKeyInfoList();
/**
* \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 DSIGKeyInfoList object held by the encrypted type
*/
virtual const DSIGKeyInfoList * getKeyInfoList() const;
/**
* \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);
/**
* \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);
/**
* \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();
/**
* \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);
/**
* \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);
/**
* \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);
/**
* \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);
/**
* \brief Append an already created EncryptedKey.
*
* Add an already created EncryptedKey.
*
* @note The encryptedKey becomes the property of the owning EncryptedType
* object and will be deleted upon its destruction.
*
* @param encryptedKey A pointer to the encrypted Key
*/
virtual void appendEncryptedKey(XENCEncryptedKey * encryptedKey);
// Get methods
virtual const XMLCh * getType() const;
virtual const XMLCh * getMimeType() const;
virtual const XMLCh * getEncoding() const;
virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * getElement() const
{return mp_encryptedTypeElement;};
// Set methods
virtual void setType(const XMLCh * uri);
virtual void setMimeType(const XMLCh * mimeType);
virtual void setEncoding(const XMLCh * uri);
protected:
// Create the txfm list - gives as output a TXFM chain with
// the output being the raw encrypted data
TXFMChain * createCipherTXFMChain();
// Worker function to start building the KeyInfo list
void createKeyInfoElement();
const XSECEnv * mp_env;
XERCES_CPP_NAMESPACE_QUALIFIER DOMElement
* mp_encryptedTypeElement; // Node at head of structure
XERCES_CPP_NAMESPACE_QUALIFIER DOMElement
* mp_keyInfoElement; // Any underlying KeyInfo
XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
* mp_cipherDataElement; // CipherData structure
XENCCipherDataImpl * mp_cipherData;
XENCEncryptionMethodImpl * mp_encryptionMethod;
// Hold the XML Digital Signature KeyInfo list
DSIGKeyInfoList m_keyInfoList;
// Type URI
XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
* mp_typeAttr;
XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
* mp_mimeTypeAttr;
XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
* mp_encodingAttr;
friend class XENCCipherImpl;
private:
// Un-implemented
XENCEncryptedTypeImpl();
XENCEncryptedTypeImpl(const XENCEncryptedTypeImpl &);
XENCEncryptedTypeImpl & operator = (const XENCEncryptedTypeImpl &);
};
#endif /* XENCENCRYPTEDTYPEIMPL_INCLUDE */