Refactored signature handling.
[shibboleth/opensaml2.git] / saml / signature / ContentReference.cpp
similarity index 71%
rename from saml/signature/SigningContext.cpp
rename to saml/signature/ContentReference.cpp
index e77052b..1b452e8 100644 (file)
  */\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
@@ -40,13 +42,17 @@ public:
     }\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
@@ -58,6 +64,4 @@ bool SigningContext::createSignature(DSIGSignature* sig)
     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