blob: c1b8f264422100de01d1010afd7bc73b91a7d8d0 [file] [log] [blame]
/*
* Copyright 2002-2005 The Apache Software Foundation.
*
* Licensed 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
*
* DSIGKeyInfo := Base (virtual) class that defines an XSEC KeyInfo node
*
* Author(s): Berin Lautenbach
*
* $Id$
*
*/
#ifndef DSIGKEYINFO_INCLUDE
#define DSIGKEYINFO_INCLUDE
// XSEC Includes
#include <xsec/utils/XSECDOMUtils.hpp>
#include <xsec/utils/XSECSafeBufferFormatter.hpp>
#include <xsec/enc/XSECCryptoKey.hpp>
#include <xercesc/dom/DOM.hpp>
class DSIGSignature;
class XSECEnv;
/**
* @ingroup pubsig
*/
/**
* @brief Base class for <Key*> nodes in a KeyInfo list.
*
* Digital signatures can have a number of KeyInfo elements that are
* used to communicate information about what key to use between the
* signer and the validator.
*
* In the XML-Security-C libary, KeyInfo elements are only used for
* holding information about keys. They do not in themselves perform
* any cryptographic function.
*
*/
class DSIG_EXPORT DSIGKeyInfo {
public:
/**
* \brief List of potential KeyInfo types
*
* The keyIntoType enumerated type defines the KeyInfo types known by
* the XML-Security-C library.
*
*/
enum keyInfoType {
KEYINFO_NOTSET = 1, // Empty key type
KEYINFO_X509 = 2, // X509 Certificate (with embedded key)
KEYINFO_VALUE_DSA = 3, // DSA Key
KEYINFO_VALUE_RSA = 4,
KEYINFO_NAME = 5, // A name of a key (application dependant)
KEYINFO_PGPDATA = 6, // A PGP key
KEYINFO_SPKIDATA = 7,
KEYINFO_MGMTDATA = 8, // Management data
KEYINFO_ENCRYPTEDKEY = 9 // XML Encryption - Encrypted Key
};
public:
/** @name Constructors and Destructors */
//@{
/**
* \brief Construct from an owning signature
*
* All KeyInfo types take a constructor that provides the controlling environment.
*
* @param env The environment that the KeyInfo is operating within
*/
DSIGKeyInfo(const XSECEnv * env) {mp_keyInfoDOMNode = NULL; mp_env = env;}
/**
* \brief The Destructor
*/
virtual ~DSIGKeyInfo() {};
//@}
/** @name Get functions */
//@{
/**
* \brief Return type
*
* Can be used to find what type of KeyInfo this is
*/
virtual keyInfoType getKeyInfoType(void) = 0;
/**
* \brief Return the DOMNode that heads up this DOMNode
*/
virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *getKeyInfoDOMNode()
{return mp_keyInfoDOMNode;}
/**
* \brief Return the name of this key
*
* For those KeyInfo types that have a keyname, this function should return
* it. For certificates, this may be the DN.
*
* @returns A pointer to a buffer containing the name
*/
virtual const XMLCh * getKeyName(void) = 0;
//@}
/** @name Load and Set */
//@{
/**
* \brief Load the DOM structures.
*
* Used by the library to instruct the object to load information from
* the DOM nodes
*/
virtual void load() = 0;
//@}
protected:
XERCES_CPP_NAMESPACE_QUALIFIER DOMNode * mp_keyInfoDOMNode;
const XSECEnv * mp_env;
private:
DSIGKeyInfo();
};
#endif /* #define XSECKEYINFO_INCLUDE */