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
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071 #ifndef DSIGSIGNATURE_INCLUDE
00072 #define DSIGSIGNATURE_INCLUDE
00073
00074
00075 #include <xsec/utils/XSECSafeBufferFormatter.hpp>
00076 #include <xsec/dsig/DSIGTransform.hpp>
00077 #include <xsec/dsig/DSIGKeyInfoList.hpp>
00078 #include <xsec/dsig/DSIGConstants.hpp>
00079 #include <xsec/dsig/DSIGSignedInfo.hpp>
00080
00081
00082
00083 #include <xercesc/dom/DOM.hpp>
00084
00085 class XSECBinTXFMInputStream;
00086 class XSECURIResolver;
00087 class XSECKeyInfoResolver;
00088 class DSIGKeyInfoValue;
00089 class DSIGKeyInfoX509;
00090 class DSIGKeyInfoName;
00091 class DSIGKeyInfoPGPData;
00092 class DSIGKeyInfoSPKIData;
00093 class DSIGKeyInfoMgmtData;
00094
00098
00099
00109 class DSIG_EXPORT DSIGSignature {
00110
00111 protected:
00112
00115
00132 DSIGSignature(DOMDocument *doc, DOMNode *sigNode);
00133 ~DSIGSignature();
00135
00136 public:
00137
00140
00150 void load(void);
00151
00165 void setSigningKey(XSECCryptoKey *k);
00166
00168
00171
00196 bool verify(void);
00197
00208 bool verifySignatureOnly(void);
00209
00235 void sign(void);
00237
00240
00261 void setDSIGNSPrefix(const XMLCh * prefix);
00262
00279 void setECNSPrefix(const XMLCh * prefix);
00280
00297 void setXPFNSPrefix(const XMLCh * prefix);
00298
00322 DOMElement *createBlankSignature(DOMDocument *doc,
00323 canonicalizationMethod cm = CANON_C14N_NOC,
00324 signatureMethod sm = SIGNATURE_DSA,
00325 hashMethod hm = HASH_SHA1);
00326
00347 DSIGReference * createReference(const XMLCh * URI,
00348 hashMethod hm = HASH_SHA1, char * type = NULL);
00349
00351
00354
00368 unsigned int calculateSignedInfoHash(unsigned char * hashBuf,
00369 unsigned int hashBufLen);
00370
00380 DSIGReferenceList * getReferenceList(void);
00381
00395 XSECBinTXFMInputStream * makeBinInputStream(void) const;
00396
00397
00411 const XMLCh * getErrMsgs(void);
00412
00421 const XMLCh * getDSIGNSPrefix() {return mp_prefixNS;}
00422
00430 const XMLCh * getECNSPrefix() {return mp_ecPrefixNS;}
00431
00439 const XMLCh * getXPFNSPrefix() {return mp_xpfPrefixNS;}
00440
00451 DOMDocument * getParentDocument() {return mp_doc;}
00452
00462 canonicalizationMethod getCanonicalizationMethod(void)
00463 {return (mp_signedInfo != NULL ?
00464 mp_signedInfo->getCanonicalizationMethod() : CANON_NONE);}
00465
00466
00476 hashMethod getHashMethod(void)
00477 {return (mp_signedInfo != NULL ?
00478 mp_signedInfo->getHashMethod() : HASH_NONE);}
00479
00489 signatureMethod getSignatureMethod(void)
00490 {return (mp_signedInfo != NULL ?
00491 mp_signedInfo->getSignatureMethod() : SIGNATURE_NONE);}
00492
00500 XSECSafeBufferFormatter * getSBFormatter(void) {return mp_formatter;}
00501
00503
00506
00515 void setURIResolver(XSECURIResolver * resolver);
00516
00523 XSECURIResolver * getURIResolver(void);
00524
00533 void setKeyInfoResolver(XSECKeyInfoResolver * resolver);
00534
00541 XSECKeyInfoResolver * getKeyInfoResolver(void);
00542
00544
00548
00564 DSIGKeyInfoList * getKeyInfoList() {return &m_keyInfoList;}
00565
00574 void clearKeyInfo(void);
00575
00588 DSIGKeyInfoValue * appendDSAKeyValue(const XMLCh * P,
00589 const XMLCh * Q,
00590 const XMLCh * G,
00591 const XMLCh * Y);
00592
00603 DSIGKeyInfoValue * appendRSAKeyValue(const XMLCh * modulus,
00604 const XMLCh * exponent);
00605
00617 DSIGKeyInfoX509 * appendX509Data(void);
00618
00629 DSIGKeyInfoName * appendKeyName(const XMLCh * name, bool isDName = false);
00630
00642 DSIGKeyInfoPGPData * appendPGPData(const XMLCh * id, const XMLCh * packet);
00643
00653 DSIGKeyInfoSPKIData * appendSPKIData(const XMLCh * sexp);
00654
00664 DSIGKeyInfoMgmtData * appendMgmtData(const XMLCh * data);
00665
00667
00668 friend class XSECProvider;
00669
00670 private:
00671
00672
00673 void createKeyInfoElement(void);
00674 bool verifySignatureOnlyInternal(void);
00675
00676 XSECSafeBufferFormatter * mp_formatter;
00677 bool m_loaded;
00678 DOMDocument * mp_doc;
00679 DOMNode * mp_sigNode;
00680 DSIGSignedInfo * mp_signedInfo;
00681 DOMNode * mp_signatureValueNode;
00682 safeBuffer m_signatureValueSB;
00683 DSIGKeyInfoList m_keyInfoList;
00684 DOMNode * mp_KeyInfoNode;
00685 safeBuffer m_errStr;
00686
00687
00688 XMLCh * mp_prefixNS;
00689 XMLCh * mp_ecPrefixNS;
00690 XMLCh * mp_xpfPrefixNS;
00691
00692
00693 XSECCryptoKey * mp_signingKey;
00694
00695
00696 XSECURIResolver * mp_URIResolver;
00697 XSECKeyInfoResolver * mp_KeyInfoResolver;
00698
00699
00700
00701 DSIGSignature();
00702
00703
00704 };
00705
00706 #endif