*/\r
\r
/**\r
- * SigningContext.cpp\r
+ * ContentReference.cpp\r
* \r
- * SAML-specific signature construction \r
+ * SAML-specific signature reference profile \r
*/\r
\r
#include "internal.h"\r
-#include "signature/SigningContext.h"\r
+#include "signature/ContentReference.h"\r
+#include "signature/SignableObject.h"\r
\r
+#include <xmltooling/signature/Signature.h>\r
#include <xercesc/util/XMLUniDefs.hpp>\r
#include <xsec/dsig/DSIGReference.hpp>\r
#include <xsec/dsig/DSIGTransformC14n.hpp>\r
}\r
};\r
\r
-bool SigningContext::createSignature(DSIGSignature* sig)\r
+void ContentReference::createReferences(DSIGSignature* sig)\r
{\r
+ const XMLCh* id=m_signableObject.getId();\r
+ if (!id || !*id)\r
+ throw xmlsignature::SignatureException("Cannot create Signature reference to SAML object without an identifier."); \r
+ \r
DSIGReference* ref=NULL;\r
- XMLCh* buf=new XMLCh[XMLString::stringLen(m_id) + 2];\r
+ XMLCh* buf=new XMLCh[XMLString::stringLen(id) + 2];\r
buf[0]=chPound;\r
buf[1]=chNull;\r
- XMLString::catString(buf,m_id);\r
+ XMLString::catString(buf,id);\r
try {\r
ref=sig->createReference(buf);\r
delete[] buf;\r
ref->appendEnvelopedSignatureTransform();\r
DSIGTransformC14n* c14n=ref->appendCanonicalizationTransform(CANON_C14NE_NOC);\r
for_each(m_prefixes.begin(), m_prefixes.end(), bind1st(_addprefix(),c14n));\r
- \r
- return false;\r
}\r