blob: 2465010ea0d039f0b24ef2194ecd8f09d654fa73 [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
*
* XSECPlatformUtils:= To support the platform we run in
*
* Author(s): Berin Lautenbach
*
* $Id$
*
*/
#ifndef XSECPLATFORMUTILS_INCLUDE
#define XSECPLATFORMUTILS_INCLUDE
// XSEC
#include <xsec/framework/XSECDefs.hpp>
#include <xsec/enc/XSECCryptoProvider.hpp>
class XSECAlgorithmMapper;
class XSECAlgorithmHandler;
#include <stdio.h>
/**
* \brief High level library interface class.
* @ingroup internal
*
* This class is used primarily to initialise the library and
* communicate high level parameters that will be common to all
* objects from the class in any given session.
*
* It is primarily a static class.
*/
class DSIG_EXPORT XSECPlatformUtils {
public :
/**
* \brief Number of times initialise has been called
*
* initCount can be read by any class or function to determine how
* many times the library has been initialised.
*/
static int initCount;
/**
* \brief The main cryptographic provider
*
* This pointer can be used to determine the primary crypto
* provider registered in the library.
*
* Individual signatures can over-ride this default.
*
*/
static XSECCryptoProvider * g_cryptoProvider;
/**
* \brief The global Algorithm Mapper
*
* The algorithm mapper is used to map algorithm type URI strings
* to algorithm implementations. Note that this is a level of
* indirection above actual cryptographic algorithms. For example:
*
* URI = http://www.w3.org/2001/04/xmlenc#tripledes-cbc
*
* is the URI for 3DES in CBC mode. The mapper will return an
* algorithm handler that understands what this means in terms of
* IVs and how to call the XSECCryptoKey interface. It then uses the
* cryptographic provider to actually perform the encryption.
*
* This allows applications to provide new algorithm types. The
* mapper is used to map the type string to the means of doing the
* encryption, and a new XSECCryptoKey derivative can be provided
* to perform the actual crypo work.
*
* @note The provider should only be added to via the
* XSECPlatformUtils::addAlgorithmHandler() call.
*
* @see #addAlgorithmHandler()
*/
static const XSECAlgorithmMapper * g_algorithmMapper;
/**
* \brief Initialise the library
*
* <b>Must</b> be called prior to using any functions in the library.
*
* Primarily sets up static variables used by all classes in the
* library.
*
* @param p A pointer to a XSECCryptoProvider object that the library
* should use for cryptographic functions. If p == NULL, the library
* will instantiate an OpenSSLCryptoProvider object.
*/
static void Initialise(XSECCryptoProvider * p = NULL);
/**
* \brief Set a new crypto provider
*
* Set the crypto provider to the value passed in. Any current provider
* is deleted.
*
* @note This is not thread-safe. It should be called prior to any real
* usage of the library.
*
* @param p A pointer to a XSECCryptoProvider object that the library
* should use for cryptographic functions.
* @note Ownership of the provider is passed to the library, which will
* delete it at Termination.
*/
static void SetCryptoProvider(XSECCryptoProvider * p);
/**
* \brief Add a new algorithm Handler
*
* Application developers can extend the XSECAlgorithmHandler class to
* implement new cryptographic algorithms. This will then allow the
* library to call the provided handler whenever trying to process a
* type it doesn't understand.
*
* Any handler previously registered for this URI will be overwritten,
* allowing callers to overwrite the handlers for default URIs.
*
* @see XSECAlgorithmHandler
* @note This is <b>not</b> thread safe. Algorithm handlers should
* be added prior to any processing of signatures etc.
* @param uri Type URI that maps to this handler
* @param handler The handler to be used whenever this URI is seen by
* the library.
*/
static void registerAlgorithmHandler(const XMLCh * uri, const XSECAlgorithmHandler & handler);
/**
* \brief Terminate
*
* Should be called prior to any program exist to allow the library
* to cleanly delete any memory associated with the library as a whole.
*
* @note Do not call this function while any xml-security-c object
* remain instantiated. The results of doing so is undefined, and could
* cause bad results.
*/
static void Terminate(void);
};
#endif /* XSECPLATFORMUTILS_INCLUDE */