blautenb 2003/03/29 22:53:38
Added: c/src/transformers TXFMMD5.cpp TXFMMD5.hpp Log: Support for MD-5 Digests Revision Changes Path 1.1 xml-security/c/src/transformers/TXFMMD5.cpp Index: TXFMMD5.cpp =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "<WebSig>" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 2001, Institute for * Data Communications Systems, <http://www.nue.et-inf.uni-siegen.de/>. * The development of this software was partly funded by the European * Commission in the <WebSig> project in the ISIS Programme. * For more information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ /* * XSEC * * TXFMMD5 := Class that performs a MD5 transform * * Author(s): Berin Lautenbach * * $Id: TXFMMD5.cpp,v 1.1 2003/03/30 06:53:38 blautenb Exp $ * */ // XSEC #include <xsec/transformers/TXFMMD5.hpp> #include <xsec/utils/XSECPlatformUtils.hpp> #include <xsec/framework/XSECException.hpp> // Standarad includes TXFMMD5::TXFMMD5(DOMDocument *doc, XSECCryptoKey * key) : TXFMBase (doc) { toOutput = 0; // Nothing yet to output if (key == NULL) // Get a MD5 worker mp_h = XSECPlatformUtils::g_cryptoProvider->hashMD5(); else { // Get an HMAC MD5 mp_h = XSECPlatformUtils::g_cryptoProvider->hashHMACMD5(); mp_h->setKey(key); } if (!mp_h) { throw XSECException(XSECException::CryptoProviderError, "Error requesting MD5 object from Crypto Provider"); } }; TXFMMD5::~TXFMMD5() { // Clean up if (mp_h) delete mp_h; }; // Methods to set the inputs //void TXFMMD5::setInput(TXFMBase *input); // Methods to get tranform output type and input requirement TXFMBase::ioType TXFMMD5::getInputType(void) { return TXFMBase::BYTE_STREAM; } TXFMBase::ioType TXFMMD5::getOutputType(void) { return TXFMBase::BYTE_STREAM; } TXFMBase::nodeType TXFMMD5::getNodeType(void) { return TXFMBase::DOM_NODE_NONE; } // Methods to set input data void TXFMMD5::setInput(TXFMBase * inputT) { input = inputT; keepComments = input->getCommentsStatus(); // Now run through the data unsigned char buffer[1024]; unsigned int size; while ((size = input->readBytes((XMLByte *) buffer, 1024)) != 0) mp_h->hash(buffer, size); // Finalise md_len = mp_h->finish(md_value, CRYPTO_MAX_HASH_SIZE); toOutput = md_len; } unsigned int TXFMMD5::readBytes(XMLByte * const toFill, unsigned int maxToFill) { unsigned int ret; if (toOutput == 0) return 0; // Check if we can just output everything left if (toOutput <= maxToFill) { memcpy((char *) toFill, &md_value[md_len - toOutput], toOutput); ret = toOutput; toOutput = 0; return ret; } // Output just some memcpy((char *) toFill, &md_value[md_len - toOutput], maxToFill); ret = maxToFill; toOutput -= maxToFill; return ret; } DOMDocument * TXFMMD5::getDocument() { return NULL; } DOMNode * TXFMMD5::getFragmentNode() { return NULL; // Return a null node }; const XMLCh * TXFMMD5::getFragmentId() { return NULL; // Empty string } 1.1 xml-security/c/src/transformers/TXFMMD5.hpp Index: TXFMMD5.hpp =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "<WebSig>" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 2001, Institute for * Data Communications Systems, <http://www.nue.et-inf.uni-siegen.de/>. * The development of this software was partly funded by the European * Commission in the <WebSig> project in the ISIS Programme. * For more information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ /* * XSEC * * TXFMMD5 := Class that performs a MD5 transform * * Author(s): Berin Lautenbach * * $Id: TXFMMD5.hpp,v 1.1 2003/03/30 06:53:38 blautenb Exp $ * */ #ifndef TXFMMD5_INCLUDE #define TXFMMD5_INCLUDE // XSEC Includes #include <xsec/transformers/TXFMBase.hpp> #include <xsec/enc/XSECCryptoProvider.hpp> /** * \brief Transformer to handle create a MD5-1 hash from a chain * @ingroup internal */ class DSIG_EXPORT TXFMMD5 : public TXFMBase { private: XSECCryptoHash * mp_h; // To hold the hash unsigned char md_value[CRYPTO_MAX_HASH_SIZE]; // Final output unsigned int md_len; // Length of digest unsigned int toOutput; // Amount still to output public: TXFMMD5(DOMDocument *doc, XSECCryptoKey * key = NULL); ~TXFMMD5(); // Methods to get tranform output type and input requirement virtual TXFMBase::ioType getInputType(void); virtual TXFMBase::ioType getOutputType(void); virtual nodeType getNodeType(void); // Methods to set input data virtual void setInput(TXFMBase * inputT); // Methods to get output data virtual unsigned int readBytes(XMLByte * const toFill, const unsigned int maxToFill); virtual DOMDocument *getDocument(); virtual DOMNode *getFragmentNode(); virtual const XMLCh * getFragmentId(); private: TXFMSHA1(); }; #endif /* TXFMMD5 */
