X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fbinding%2Fimpl%2FSimpleSigningRule.cpp;h=9255cef2afeb6df0f7fd654011b2edffffcae76e;hb=9d61992f725e8b73421e9262a711f4cbdd782b18;hp=cb8a4100e38a5945a45544fcec25929d3356558b;hpb=b1614d3c1fc1f4230ab2a123f43994127c25462c;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/binding/impl/SimpleSigningRule.cpp b/saml/binding/impl/SimpleSigningRule.cpp index cb8a410..9255cef 100644 --- a/saml/binding/impl/SimpleSigningRule.cpp +++ b/saml/binding/impl/SimpleSigningRule.cpp @@ -22,20 +22,21 @@ #include "internal.h" #include "exceptions.h" -#include "binding/HTTPRequest.h" #include "binding/SecurityPolicyRule.h" #include "saml2/core/Assertions.h" #include "saml2/metadata/Metadata.h" #include "saml2/metadata/MetadataCredentialCriteria.h" #include "saml2/metadata/MetadataProvider.h" -#include #include +#include +#include +#include using namespace opensaml::saml2md; using namespace opensaml; +using namespace xmltooling::logging; using namespace xmltooling; -using namespace log4cpp; using namespace std; using xmlsignature::KeyInfo; @@ -48,7 +49,10 @@ namespace opensaml { SimpleSigningRule(const DOMElement* e); virtual ~SimpleSigningRule() {} - void evaluate(const xmltooling::XMLObject& message, const GenericRequest* request, SecurityPolicy& policy) const; + const char* getType() const { + return SIMPLESIGNING_POLICY_RULE; + } + void evaluate(const XMLObject& message, const GenericRequest* request, const XMLCh* protocol, SecurityPolicy& policy) const; private: // Appends a raw parameter=value pair to the string. @@ -88,7 +92,9 @@ SimpleSigningRule::SimpleSigningRule(const DOMElement* e) : m_errorsFatal(false) } } -void SimpleSigningRule::evaluate(const XMLObject& message, const GenericRequest* request, SecurityPolicy& policy) const +void SimpleSigningRule::evaluate( + const XMLObject& message, const GenericRequest* request, const XMLCh* protocol, SecurityPolicy& policy + ) const { Category& log=Category::getInstance(SAML_LOGCAT".SecurityPolicyRule.SimpleSigning"); @@ -96,8 +102,10 @@ void SimpleSigningRule::evaluate(const XMLObject& message, const GenericRequest* log.debug("ignoring message, no issuer metadata supplied"); return; } - else if (!policy.getTrustEngine()) { - log.debug("ignoring message, no TrustEngine supplied"); + + const SignatureTrustEngine* sigtrust; + if (!(sigtrust=dynamic_cast(policy.getTrustEngine()))) { + log.debug("ignoring message, no SignatureTrustEngine supplied"); return; } @@ -189,13 +197,11 @@ void SimpleSigningRule::evaluate(const XMLObject& message, const GenericRequest* auto_ptr kjanitor(keyInfo); auto_ptr_XMLCh alg(sigAlgorithm); - // Set up criteria object, including peer name to enforce cert name checking. + // Set up criteria object. MetadataCredentialCriteria cc(*(policy.getIssuerMetadata())); - auto_ptr_char pn(policy.getIssuer()->getName()); - cc.setPeerName(pn.get()); - cc.setKeyAlgorithm(sigAlgorithm); + cc.setXMLAlgorithm(alg.get()); - if (!policy.getTrustEngine()->validate(alg.get(), signature, keyInfo, input.c_str(), input.length(), *(policy.getMetadataProvider()), &cc)) { + if (!sigtrust->validate(alg.get(), signature, keyInfo, input.c_str(), input.length(), *(policy.getMetadataProvider()), &cc)) { log.error("unable to verify message signature with supplied trust engine"); if (m_errorsFatal) throw SignatureException("Message was signed, but signature could not be verified.");