*/\r
\r
#include "internal.h"\r
-#include "signature/VerifyingContext.h"\r
+#include "exceptions.h"\r
+#include "signature/SignatureProfileValidator.h"\r
\r
#include <xmltooling/signature/Signature.h>\r
\r
#include <xsec/dsig/DSIGTransformList.hpp>\r
\r
using namespace opensaml;\r
+using namespace xmlsignature;\r
+using namespace xmltooling;\r
using namespace std;\r
\r
-void VerifyingContext::verifySignature(DSIGSignature* sig) const\r
+void SignatureProfileValidator::validate(const XMLObject* xmlObject) const\r
{\r
- bool valid=false;\r
+ const Signature* sigObj=dynamic_cast<const Signature*>(xmlObject);\r
+ if (!sigObj)\r
+ throw ValidationException("Validator only applies to Signature objects.");\r
+ DSIGSignature* sig=sigObj->getXMLSignature();\r
+ if (!sig)\r
+ throw ValidationException("Signature does not exist yet.");\r
\r
+ const SignableObject* signableObj=dynamic_cast<const SignableObject*>(sigObj->getParent());\r
+ if (!signableObj)\r
+ throw ValidationException("Signature is not a child of a signable SAML object.");\r
+ \r
+ bool valid=false;\r
DSIGReferenceList* refs=sig->getReferenceList();\r
if (refs && refs->getSize()==1) {\r
DSIGReference* ref=refs->item(0);\r
if (ref) {\r
const XMLCh* URI=ref->getURI();\r
- if (URI==NULL || *URI==0 || (*URI==chPound && !XMLString::compareString(URI+1,m_id))) {\r
+ if (URI==NULL || *URI==0 || (*URI==chPound && !XMLString::compareString(URI+1,signableObj->getId()))) {\r
DSIGTransformList* tlist=ref->getTransforms();\r
for (unsigned int i=0; tlist && i<tlist->getSize(); i++) {\r
if (tlist->item(i)->getTransformType()==TRANSFORM_ENVELOPED_SIGNATURE)\r
}\r
\r
if (!valid)\r
- throw xmlsignature::SignatureException("Invalid signature profile for SAML object.");\r
+ throw ValidationException("Invalid signature profile for SAML object.");\r
}\r