1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
From: Scott Cantor <scantor@apache.org>
Date: Thu, 11 Oct 2018 15:39:30 +0000
Subject: 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
---
xsec/enc/XSECKeyInfoResolverDefault.cpp | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/xsec/enc/XSECKeyInfoResolverDefault.cpp b/xsec/enc/XSECKeyInfoResolverDefault.cpp
index c4c81cb..7356fc4 100644
--- a/xsec/enc/XSECKeyInfoResolverDefault.cpp
+++ b/xsec/enc/XSECKeyInfoResolverDefault.cpp
@@ -127,8 +127,10 @@ XSECCryptoKey * XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
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 @@ XSECCryptoKey * XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
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 @@ XSECCryptoKey * XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
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 @@ XSECCryptoKey * XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
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;
|