SANTUARIO-496 - Prevent KeyInfoResolver returning NONE keys.
git-svn-id: https://svn.apache.org/repos/asf/santuario/xml-security-cpp/trunk@1843566 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/xsec/enc/XSECKeyInfoResolverDefault.cpp b/xsec/enc/XSECKeyInfoResolverDefault.cpp
index 59e5e87..b0bf10a 100644
--- a/xsec/enc/XSECKeyInfoResolverDefault.cpp
+++ b/xsec/enc/XSECKeyInfoResolverDefault.cpp
@@ -105,7 +105,7 @@
const DSIGKeyInfoValue* dsaval = (const DSIGKeyInfoValue *) lst->item(i);
if (dsaval->getDSAP() || dsaval->getDSAQ() || dsaval->getDSAG() || dsaval->getDSAY()) {
- XSECCryptoKeyDSA * dsa = XSECPlatformUtils::g_cryptoProvider->keyDSA();
+ XSECCryptoKeyDSA* dsa = XSECPlatformUtils::g_cryptoProvider->keyDSA();
Janitor<XSECCryptoKeyDSA> j_dsa(dsa);
safeBuffer value;
@@ -127,8 +127,10 @@
dsa->loadYBase64BigNums(value.rawCharBuffer(), (unsigned int) strlen(value.rawCharBuffer()));
}
- j_dsa.release();
- return dsa;
+ if (dsa->getKeyType() != XSECCryptoKey::KEY_NONE) {
+ j_dsa.release();
+ return dsa;
+ }
}
}
break;
@@ -148,8 +150,10 @@
value << (*mp_formatter << rsaval->getRSAExponent());
rsa->loadPublicExponentBase64BigNums(value.rawCharBuffer(), (unsigned int) strlen(value.rawCharBuffer()));
- j_rsa.release();
- return rsa;
+ if (rsa->getKeyType() != XSECCryptoKey::KEY_NONE) {
+ j_rsa.release();
+ return rsa;
+ }
}
}
@@ -169,8 +173,10 @@
XSECAutoPtrChar curve(ecval->getECNamedCurve());
if (curve.get()) {
ec->loadPublicKeyBase64(curve.get(), value.rawCharBuffer(), (unsigned int) strlen(value.rawCharBuffer()));
- j_ec.release();
- return ec;
+ if (ec->getKeyType() != XSECCryptoKey::KEY_NONE) {
+ j_ec.release();
+ return ec;
+ }
}
}
}
@@ -184,7 +190,11 @@
safeBuffer value;
value << (*mp_formatter << derval->getData());
- return XSECPlatformUtils::g_cryptoProvider->keyDER(value.rawCharBuffer(), (unsigned int)strlen(value.rawCharBuffer()), true);
+ XSECCryptoKey* key = XSECPlatformUtils::g_cryptoProvider->keyDER(value.rawCharBuffer(), (unsigned int)strlen(value.rawCharBuffer()), true);
+ if (key && key->getKeyType() != XSECCryptoKey::KEY_NONE) {
+ return key;
+ }
+ delete key;
}
}
break;