\r
void releaseDOM();\r
XMLObject* clone() const;\r
+ Signature* cloneSignature() const;\r
\r
DOMElement* marshall(DOMDocument* document=NULL, MarshallingContext* ctx=NULL) const;\r
DOMElement* marshall(DOMElement* parentElement, MarshallingContext* ctx=NULL) const;\r
\r
XMLObject* XMLSecSignatureImpl::clone() const\r
{\r
+ return cloneSignature();\r
+}\r
+\r
+Signature* XMLSecSignatureImpl::cloneSignature() const\r
+{\r
XMLSecSignatureImpl* ret=new XMLSecSignatureImpl();\r
\r
ret->m_c14n=XMLString::replicate(m_c14n);\r
try {\r
log.debug("creating signature content");\r
ctx.createSignature(m_signature);\r
- const std::vector<XSECCryptoX509*>& certs=ctx.getX509Certificates();\r
- if (!certs.empty()) {\r
+ const std::vector<XSECCryptoX509*>* certs=ctx.getX509Certificates();\r
+ if (certs && !certs->empty()) {\r
DSIGKeyInfoX509* x509Data=m_signature->appendX509Data();\r
- for_each(certs.begin(),certs.end(),bind1st(_addcert(),x509Data));\r
+ for_each(certs->begin(),certs->end(),bind1st(_addcert(),x509Data));\r
+ }\r
+ else {\r
+ auto_ptr<KeyInfo> keyInfo(ctx.getKeyInfo());\r
+ if (keyInfo.get()) {\r
+ DOMElement* domElement=keyInfo->marshall(m_signature->getParentDocument());\r
+ getDOM()->appendChild(domElement);\r
+ }\r
}\r
\r
log.debug("computing signature");\r