-
-bool AbstractMetadataProvider::matches(const pair<const XMLCh*,Credential*>& cred, const CredentialCriteria* criteria) const
-{
- if (criteria) {
- // Check for a usage mismatch.
- if ((criteria->getUsage()==CredentialCriteria::SIGNING_CREDENTIAL || criteria->getUsage()==CredentialCriteria::TLS_CREDENTIAL) &&
- XMLString::equals(cred.first,KeyDescriptor::KEYTYPE_ENCRYPTION))
- return false;
- else if (criteria->getUsage()==CredentialCriteria::ENCRYPTION_CREDENTIAL && XMLString::equals(cred.first,KeyDescriptor::KEYTYPE_SIGNING))
- return false;
-
- const char* alg = criteria->getKeyAlgorithm();
- if (alg && *alg) {
- const char* alg2 = cred.second->getAlgorithm();
- if (alg2 && *alg2) {
- if (!XMLString::equals(alg,alg2))
- return false;
- }
- }
- if (criteria->getKeySize()>0 && cred.second->getKeySize()>0) {
- if (criteria->getKeySize() != cred.second->getKeySize())
- return false;
- }
-
- if (cred.second->getPublicKey()) {
- // See if we have to match a specific key.
- auto_ptr<Credential> critcred(
- XMLToolingConfig::getConfig().getKeyInfoResolver()->resolve(*criteria,Credential::RESOLVE_KEYS)
- );
- if (critcred.get())
- if (!critcred->isEqual(*(cred.second->getPublicKey())))
- return false;
- }
- }
- return true;
-}