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
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 #ifndef DSIGSIGNATURE_INCLUDE
00058 #define DSIGSIGNATURE_INCLUDE
00059
00060
00061 #include <xsec/utils/XSECSafeBufferFormatter.hpp>
00062 #include <xsec/dsig/DSIGTransform.hpp>
00063 #include <xsec/dsig/DSIGKeyInfoList.hpp>
00064 #include <xsec/dsig/DSIGConstants.hpp>
00065 #include <xsec/dsig/DSIGSignedInfo.hpp>
00066
00067
00068
00069 #include <xercesc/dom/DOM.hpp>
00070
00071 class XSECBinTXFMInputStream;
00072 class XSECURIResolver;
00073 class XSECKeyInfoResolver;
00074 class DSIGKeyInfoValue;
00075 class DSIGKeyInfoX509;
00076 class DSIGKeyInfoName;
00077
00081
00082
00092 class DSIG_EXPORT DSIGSignature {
00093
00094 protected:
00095
00098
00115 DSIGSignature(DOMDocument *doc, DOMNode *sigNode);
00116 ~DSIGSignature();
00118
00119 public:
00120
00123
00133 void load(void);
00134
00148 void setSigningKey(XSECCryptoKey *k);
00149
00151
00154
00179 bool verify(void);
00180
00191 bool verifySignatureOnly(void);
00192
00218 void sign(void);
00220
00223
00243 void setDSIGNSPrefix(char * prefix);
00244
00268 DOMElement *createBlankSignature(DOMDocument *doc,
00269 canonicalizationMethod cm = CANON_C14N_NOC,
00270 signatureMethod sm = SIGNATURE_DSA,
00271 hashMethod hm = HASH_SHA1);
00272
00293 DSIGReference * createReference(char * URI,
00294 hashMethod hm = HASH_SHA1, char * type = NULL);
00295
00297
00300
00314 unsigned int calculateSignedInfoHash(unsigned char * hashBuf,
00315 unsigned int hashBufLen);
00316
00326 DSIGReferenceList * getReferenceList(void);
00327
00341 XSECBinTXFMInputStream * makeBinInputStream(void) const;
00342
00343
00357 safeBuffer &getErrMsgsSB(void);
00358
00367 const safeBuffer & getDSIGNSPrefix() {return m_prefixNS;}
00368
00379 DOMDocument * getParentDocument() {return mp_doc;}
00380
00388 XSECSafeBufferFormatter * getSBFormatter(void) {return mp_formatter;}
00389
00391
00394
00403 void setURIResolver(XSECURIResolver * resolver);
00404
00411 XSECURIResolver * getURIResolver(void);
00412
00421 void setKeyInfoResolver(XSECKeyInfoResolver * resolver);
00422
00429 XSECKeyInfoResolver * getKeyInfoResolver(void);
00430
00432
00436
00452 DSIGKeyInfoList * getKeyInfoList() {return &m_keyInfoList;}
00453
00462 void clearKeyInfo(void);
00463
00476 DSIGKeyInfoValue * appendDSAKeyValue(const char * P,
00477 const char * Q,
00478 const char * G,
00479 const char * Y);
00480
00492 DSIGKeyInfoX509 * appendX509Data(void);
00493
00503 DSIGKeyInfoName * appendKeyName(const char * name);
00504
00506
00507 friend class XSECProvider;
00508
00509 private:
00510
00511
00512 void createKeyInfoElement(void);
00513
00514 XSECSafeBufferFormatter * mp_formatter;
00515 bool m_loaded;
00516 DOMDocument * mp_doc;
00517 DOMNode * mp_sigNode;
00518 DSIGSignedInfo * mp_signedInfo;
00519 DOMNode * mp_signatureValueNode;
00520 safeBuffer m_signatureValueSB;
00521 DSIGKeyInfoList m_keyInfoList;
00522 DOMNode * mp_KeyInfoNode;
00523 safeBuffer m_errStr;
00524
00525
00526 safeBuffer m_prefixNS;
00527
00528
00529 XSECCryptoKey * mp_signingKey;
00530
00531
00532 XSECURIResolver * mp_URIResolver;
00533 XSECKeyInfoResolver * mp_KeyInfoResolver;
00534
00535
00536
00537 DSIGSignature();
00538
00539
00540 };
00541
00542 #endif