- auto_ptr<KeyInfoIterator> keyInfoIter(keyInfoSource.getKeyInfoIterator());
- if (!keyInfoIter->hasNext()) {
- log.warn("unable to validate signature, no key information available for peer");
+ vector<const Credential*> credentials;
+ if (criteria) {
+ criteria->setUsage(Credential::SIGNING_CREDENTIAL);
+ criteria->setKeyInfo(keyInfo, CredentialCriteria::KEYINFO_EXTRACTION_KEY);
+ criteria->setXMLAlgorithm(sigAlgorithm);
+ credResolver.resolve(credentials,criteria);
+ }
+ else {
+ CredentialCriteria cc;
+ cc.setUsage(Credential::SIGNING_CREDENTIAL);
+ cc.setKeyInfo(keyInfo, CredentialCriteria::KEYINFO_EXTRACTION_KEY);
+ cc.setXMLAlgorithm(sigAlgorithm);
+ credResolver.resolve(credentials,&cc);
+ }
+ if (credentials.empty()) {
+ log.debug("unable to validate signature, no credentials available from peer");