00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <xsec/framework/XSECDefs.hpp>
00028
00029
00030
00031 #include <xercesc/dom/DOM.hpp>
00032 #include <xercesc/dom/DOMNamedNodeMap.hpp>
00033
00034
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();
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
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;
00486 TXFMBase * mp_preHash;
00487 DSIGReferenceList * mp_manifestList;
00488 const XMLCh * mp_URI;
00489 bool m_isManifest;
00490 XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
00491 * mp_transformsNode;
00492 hashMethod me_hashMethod;
00493 XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
00494 * mp_hashValueNode;
00495 const XSECEnv * mp_env;
00496 DSIGTransformList * mp_transformList;
00497
00498 bool m_loaded;
00499
00500 DSIGReference();
00501
00502
00503 };
00504
00505
00506
00507