Main Page | Modules | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

DSIGReference.hpp

Go to the documentation of this file.
00001 /*
00002  * Copyright 2002-2005 The Apache Software Foundation.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 /*
00018  * XSEC
00019  *
00020  * DSIG_Reference := Class for checking and setting up reference nodes in a DSIG signature
00021  *
00022  * $Id: DSIGReference.hpp,v 1.17 2005/06/04 11:30:25 blautenb Exp $
00023  *                   
00024  */
00025 
00026 // High level include
00027 #include <xsec/framework/XSECDefs.hpp>
00028 
00029 // Xerces INcludes
00030 
00031 #include <xercesc/dom/DOM.hpp>
00032 #include <xercesc/dom/DOMNamedNodeMap.hpp>
00033 
00034 // XSEC Includes
00035 #include <xsec/utils/XSECSafeBufferFormatter.hpp>
00036 #include <xsec/dsig/DSIGTransform.hpp>
00037 #include <xsec/dsig/DSIGReferenceList.hpp>
00038 #include <xsec/dsig/DSIGConstants.hpp>
00039 
00040 class DSIGTransformList;
00041 class DSIGTransformBase64;
00042 class DSIGTransformC14n;
00043 class DSIGTransformEnvelope;
00044 class DSIGTransformXPath;
00045 class DSIGTransformXPathFilter;
00046 class DSIGTransformXSL;
00047 class DSIGSignature;
00048 
00049 class TXFMBase;
00050 class TXFMChain;
00051 class XSECBinTXFMInputStream;
00052 class XSECURIResolver;
00053 class XSECEnv;
00054 
00067 class DSIG_EXPORT DSIGReference {
00068 
00069 public:
00070 
00073     
00090     DSIGReference(const XSECEnv * env, XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *dom);
00091 
00106     DSIGReference(const XSECEnv * env);
00107 
00117     ~DSIGReference();
00118 
00120 
00123 
00132     void load();
00133 
00153     XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * 
00154         createBlankReference(const XMLCh * URI, hashMethod hm, char * type);
00155 
00166     DSIGTransformEnvelope *  appendEnvelopedSignatureTransform();
00167     
00174     DSIGTransformBase64 * appendBase64Transform();
00175     
00187     DSIGTransformXPath * appendXPathTransform(const char * expr);
00188     
00199     DSIGTransformXPathFilter * appendXPathFilterTransform(void);
00200 
00211     DSIGTransformXSL * appendXSLTransform(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *stylesheet);
00212     
00220     DSIGTransformC14n * appendCanonicalizationTransform(canonicalizationMethod cm);
00221 
00235     void setPreHashTXFM(TXFMBase * t);
00236 
00237 
00239 
00242 
00255     XSECBinTXFMInputStream * makeBinInputStream(void) const;
00256 
00264     const XMLCh * getURI();
00265 
00274     hashMethod getHashMethod(void) {
00275         return me_hashMethod;
00276     }
00277 
00285     DSIGTransformList * getTransforms(void) {
00286         return mp_transformList;
00287     }
00288 
00295     bool isManifest();
00296 
00304     DSIGReferenceList * getManifestReferenceList();     // Return list of references for a manifest object
00305 
00306 
00308     
00311 
00324     unsigned int calculateHash(XMLByte * toFill, 
00325                             unsigned int maxToFill);
00326 
00339     unsigned int readHash(XMLByte *toFill,          
00340                             unsigned int maxToFill);
00341 
00352     bool checkHash();
00353 
00362     void setHash();
00363 
00365 
00368 
00388     static TXFMChain * DSIGReference::createTXFMChainFromList(TXFMBase * input, 
00389                             DSIGTransformList * lst);
00390 
00403     static DSIGTransformList * loadTransforms(
00404                             XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *transformsNode,
00405                             XSECSafeBufferFormatter * formatter,
00406                             const XSECEnv * env);
00407 
00420     static TXFMBase * getURIBaseTXFM(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument * doc, 
00421                                     const XMLCh * URI, 
00422                                     const XSECEnv * env);
00423 
00437     static DSIGReferenceList *loadReferenceListFromXML(const XSECEnv * env, 
00438                                                        XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *firstReference);
00439 
00451     static bool verifyReferenceList(DSIGReferenceList * lst, safeBuffer &errorStr);
00452     
00468     static void hashReferenceList(DSIGReferenceList * list, bool interlocking = true);
00469 
00471 
00472 private:
00473 
00474     // Internal functions
00475     void createTransformList(void);
00476     void addTransform(
00477         DSIGTransform * txfm, 
00478         XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * txfmElt
00479     );
00480 
00481 
00482     XSECSafeBufferFormatter     * mp_formatter;
00483     bool formatterLocal;
00484     XERCES_CPP_NAMESPACE_QUALIFIER DOMNode                      
00485                                 * mp_referenceNode;     // Points to start of document where reference node is
00486     TXFMBase                    * mp_preHash;           // To be used pre-hash
00487     DSIGReferenceList           * mp_manifestList;      // The list of references in a manifest
00488     const XMLCh                 * mp_URI;               // The URI String
00489     bool                        m_isManifest;           // Does this reference a manifest?
00490     XERCES_CPP_NAMESPACE_QUALIFIER DOMNode                      
00491                                 * mp_transformsNode;
00492     hashMethod                  me_hashMethod;          // What form of digest?
00493     XERCES_CPP_NAMESPACE_QUALIFIER DOMNode                      
00494                                 * mp_hashValueNode;     // Node where the Hash value is stored
00495     const XSECEnv               * mp_env;
00496     DSIGTransformList           * mp_transformList;     // List of transforms
00497     
00498     bool                        m_loaded;
00499 
00500     DSIGReference();
00501 
00502     /*\@}*/
00503 };
00504 
00505 
00506 
00507 

Generated on Sun Jul 3 17:37:25 2005 for XML-Security-C by  doxygen 1.4.2