X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Fsecurity%2Fimpl%2FChainingTrustEngine.cpp;h=4b5aa2c68286746cf193a70288f3768949407d04;hb=64dcaec957e9befd960779498d7fe35bbb62141a;hp=f94c23481664094bf7d723f59f5d5ab72530c5b6;hpb=d74afc7a6b39c5fd3868981a8366471098841fc8;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/security/impl/ChainingTrustEngine.cpp b/xmltooling/security/impl/ChainingTrustEngine.cpp index f94c234..4b5aa2c 100644 --- a/xmltooling/security/impl/ChainingTrustEngine.cpp +++ b/xmltooling/security/impl/ChainingTrustEngine.cpp @@ -22,15 +22,15 @@ #include "internal.h" #include "exceptions.h" +#include "logging.h" #include "security/ChainingTrustEngine.h" #include "util/XMLHelper.h" -#include #include using namespace xmlsignature; +using namespace xmltooling::logging; using namespace xmltooling; -using namespace log4cpp; using namespace std; namespace xmltooling { @@ -43,8 +43,8 @@ namespace xmltooling { static const XMLCh _TrustEngine[] = UNICODE_LITERAL_11(T,r,u,s,t,E,n,g,i,n,e); static const XMLCh type[] = UNICODE_LITERAL_4(t,y,p,e); -ChainingTrustEngine::ChainingTrustEngine(const DOMElement* e) : OpenSSLTrustEngine(e) { - Category& log=Category::getInstance(XMLTOOLING_LOGCAT".TrustEngine"); +ChainingTrustEngine::ChainingTrustEngine(const DOMElement* e) : TrustEngine(e) { + Category& log=Category::getInstance(XMLTOOLING_LOGCAT".TrustEngine."CHAINING_TRUSTENGINE); e = e ? XMLHelper::getFirstChildElement(e, _TrustEngine) : NULL; while (e) { try { @@ -53,6 +53,15 @@ ChainingTrustEngine::ChainingTrustEngine(const DOMElement* e) : OpenSSLTrustEngi log.info("building TrustEngine of type %s", temp.get()); TrustEngine* engine = XMLToolingConfig::getConfig().TrustEngineManager.newPlugin(temp.get(), e); m_engines.push_back(engine); + SignatureTrustEngine* sig = dynamic_cast(engine); + if (sig) + m_sigEngines.push_back(sig); + X509TrustEngine* x509 = dynamic_cast(engine); + if (x509) + m_x509Engines.push_back(x509); + OpenSSLTrustEngine* ossl = dynamic_cast(engine); + if (ossl) + m_osslEngines.push_back(ossl); } } catch (exception& ex) { @@ -68,7 +77,7 @@ ChainingTrustEngine::~ChainingTrustEngine() { bool ChainingTrustEngine::validate(Signature& sig, const CredentialResolver& credResolver, CredentialCriteria* criteria) const { - for (vector::const_iterator i=m_engines.begin(); i!=m_engines.end(); ++i) { + for (vector::const_iterator i=m_sigEngines.begin(); i!=m_sigEngines.end(); ++i) { if ((*i)->validate(sig,credResolver,criteria)) return true; } @@ -85,7 +94,7 @@ bool ChainingTrustEngine::validate( CredentialCriteria* criteria ) const { - for (vector::const_iterator i=m_engines.begin(); i!=m_engines.end(); ++i) { + for (vector::const_iterator i=m_sigEngines.begin(); i!=m_sigEngines.end(); ++i) { if ((*i)->validate(sigAlgorithm, sig, keyInfo, in, in_len, credResolver, criteria)) return true; } @@ -99,10 +108,8 @@ bool ChainingTrustEngine::validate( CredentialCriteria* criteria ) const { - X509TrustEngine* down; - for (vector::const_iterator i=m_engines.begin(); i!=m_engines.end(); ++i) { - if ((down = dynamic_cast(*i)) && - down->validate(certEE,certChain,credResolver,criteria)) + for (vector::const_iterator i=m_x509Engines.begin(); i!=m_x509Engines.end(); ++i) { + if ((*i)->validate(certEE,certChain,credResolver,criteria)) return true; } return false; @@ -115,9 +122,8 @@ bool ChainingTrustEngine::validate( CredentialCriteria* criteria ) const { - OpenSSLTrustEngine* down; - for (vector::const_iterator i=m_engines.begin(); i!=m_engines.end(); ++i) { - if ((down = dynamic_cast(*i)) && down->validate(certEE,certChain,credResolver,criteria)) + for (vector::const_iterator i=m_osslEngines.begin(); i!=m_osslEngines.end(); ++i) { + if ((*i)->validate(certEE,certChain,credResolver,criteria)) return true; } return false;