blob: 017b8c9a2710ec04f7ee6ba2cf94465ca395f6f2 [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
*
* 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/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 XSEC_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_EXTENSION = 0, // Extension type unknown to library
KEYINFO_NOTSET = 1, // Empty key type
KEYINFO_X509 = 2, // X.509 Certificate-Related Data
KEYINFO_VALUE_DSA = 3, // DSA Key
KEYINFO_VALUE_RSA = 4, // RSA Key
KEYINFO_NAME = 5, // Name of a key (application dependant)
KEYINFO_PGPDATA = 6, // PGP Key
KEYINFO_SPKIDATA = 7, // SPKI Key
KEYINFO_MGMTDATA = 8, // Management data
KEYINFO_ENCRYPTEDKEY = 9, // XML Encryption - Encrypted Key
KEYINFO_VALUE_EC = 10, // ECC Key
KEYINFO_DERENCODED = 11 // DER-Encoded 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) const = 0;
/**
* \brief Return the DOMNode that heads up this KeyInfo child
*/
virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *getKeyInfoDOMNode() const
{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) const = 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 */