File 0012-CPPXT-110-Add-test-path-for-RSA-loadXXXBigNums.patch of Package xmltooling.29631
From a673915585ca04c71f8330857472ad8233dbe3ea Mon Sep 17 00:00:00 2001
From: Rod Widdowson <rdw@steadingsoftware.com>
Date: Tue, 1 Nov 2016 16:35:27 +0000
Subject: [PATCH 12/31] CPPXT-110 Add test path for RSA loadXXXBigNums
https://issues.shibboleth.net/jira/browse/CPPXT-110
This completes the code coervage tests for the OpenSSLCryptoKeyRSA
changes for OpenSSL 1.1
Add a test function to force the load of the RSA key from the
<ds:RSAKeyValue>, then cast it and the credential into the
base OpenSSL type.
Throw various OpenSSL incantations at these to extract the OpenSSL
struct and compare the two. This will need work when we move to
OpenSSL 1.1 (since the structures become opaque).
---
.../vc10/xmltoolingtest/xmltoolingtest.vcxproj | 6 +-
.../xmltoolingtest/xmltoolingtest.vcxproj.filters | 12 +++-
xmltoolingtest/InlineKeyResolverTest.h | 66 ++++++++++++++++++++++
3 files changed, 78 insertions(+), 6 deletions(-)
diff --git a/Projects/vc10/xmltoolingtest/xmltoolingtest.vcxproj b/Projects/vc10/xmltoolingtest/xmltoolingtest.vcxproj
index 8399157..bedca98 100644
--- a/Projects/vc10/xmltoolingtest/xmltoolingtest.vcxproj
+++ b/Projects/vc10/xmltoolingtest/xmltoolingtest.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
@@ -97,7 +97,7 @@
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
- <AdditionalDependencies>xerces-c_3D.lib;xsec_1D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>xerces-c_3D.lib;xsec_1D.lib;libeay32D.lib;ssleay32D.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
@@ -452,4 +452,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/Projects/vc10/xmltoolingtest/xmltoolingtest.vcxproj.filters b/Projects/vc10/xmltoolingtest/xmltoolingtest.vcxproj.filters
index d099072..58cc379 100644
--- a/Projects/vc10/xmltoolingtest/xmltoolingtest.vcxproj.filters
+++ b/Projects/vc10/xmltoolingtest/xmltoolingtest.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Generated Code">
@@ -62,6 +62,9 @@
<ClCompile Include="SOAPTest.cpp">
<Filter>Generated Code</Filter>
</ClCompile>
+ <ClCompile Include="CloneInputStreamTest.cpp">
+ <Filter>Generated Code</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\XMLToolingTest\XMLObjectBaseTestCase.h">
@@ -120,8 +123,11 @@
<CustomBuild Include="..\..\..\XMLToolingTest\xmltoolingtest.h">
<Filter>Unit Tests</Filter>
</CustomBuild>
- <CustomBuild Include="..\..\..\XMLToolingTest\eSOAPTest.h">
+ <CustomBuild Include="..\..\..\XMLToolingTest\CloneInputStreamTest.h">
+ <Filter>Unit Tests</Filter>
+ </CustomBuild>
+ <CustomBuild Include="..\..\..\XMLToolingTest\SOAPTest.h">
<Filter>Unit Tests</Filter>
</CustomBuild>
</ItemGroup>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/xmltoolingtest/InlineKeyResolverTest.h b/xmltoolingtest/InlineKeyResolverTest.h
index a499d6a..6418ec2 100644
--- a/xmltoolingtest/InlineKeyResolverTest.h
+++ b/xmltoolingtest/InlineKeyResolverTest.h
@@ -21,11 +21,29 @@
#include "XMLObjectBaseTestCase.h"
#include <fstream>
+
#include <xmltooling/security/X509Credential.h>
#include <xmltooling/security/KeyInfoResolver.h>
#include <xmltooling/signature/KeyInfo.h>
+
#include <xsec/enc/XSECCryptoKey.hpp>
+#include <xsec/dsig/DSIGReference.hpp>
+#include <xsec/dsig/DSIGSignature.hpp>
+extern "C" {
+#include <openssl/opensslv.h>
+}
+
+// Force XMLSEC to assume OpenSSL
+#define XSEC_HAVE_OPENSSL 1
+
+#include <xsec/enc/OpenSSL/OpenSSLCryptoX509.hpp>
+#include <xsec/enc/OpenSSL/OpenSSLCryptoKeyDSA.hpp>
+#include <xsec/enc/OpenSSL/OpenSSLCryptoKeyEC.hpp>
+#include <xsec/enc/OpenSSL/OpenSSLCryptoKeyRSA.hpp>
+
+
+
using namespace xmlsignature;
class InlineKeyResolverTest : public CxxTest::TestSuite {
@@ -65,6 +83,54 @@ public:
TSM_ASSERT_EQUALS("Wrong CRL count.", cred->getCRLs().size(), 3);
}
+
+ void testOpenSSLRSA() {
+ string path=data_path + "KeyInfo1.xml";
+ ifstream fs(path.c_str());
+ DOMDocument* doc=XMLToolingConfig::getConfig().getValidatingParser().parse(fs);
+ TS_ASSERT(doc!=nullptr);
+ const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());
+ TS_ASSERT(b!=nullptr);
+ auto_ptr<KeyInfo> kiObject(dynamic_cast<KeyInfo*>(b->buildFromDocument(doc)));
+ TS_ASSERT(kiObject.get()!=nullptr);
+
+ auto_ptr<X509Credential> cred(dynamic_cast<X509Credential*>(m_resolver->resolve(kiObject.get())));
+ auto_ptr<X509Credential> key(dynamic_cast<X509Credential*>(m_resolver->resolve(kiObject.get(), Credential::RESOLVE_KEYS)));
+
+ OpenSSLCryptoKeyRSA* sslCred = dynamic_cast<OpenSSLCryptoKeyRSA*>(cred->getPublicKey());
+ OpenSSLCryptoKeyRSA* sslKey = dynamic_cast<OpenSSLCryptoKeyRSA*>(key->getPublicKey());
+
+ RSA* rsaCred = sslCred->getOpenSSLRSA();
+ RSA* rsaKey = sslKey->getOpenSSLRSA();
+
+ BIGNUM* n = rsaCred->n;
+ BIGNUM* e = rsaCred->e;
+ BIGNUM* d = rsaCred->d;
+ BIGNUM* p = rsaCred->p;
+ BIGNUM* q = rsaCred->q;
+ BIGNUM* dmp1 = rsaCred->dmp1;
+ BIGNUM* dmq1 = rsaCred->dmq1;
+ BIGNUM* iqmp = rsaCred->iqmp;
+
+ BIGNUM* kn = rsaKey->n;
+ BIGNUM* ke = rsaKey->e;
+ BIGNUM* kd = rsaKey->d;
+ BIGNUM* kp = rsaKey->p;
+ BIGNUM* kq = rsaKey->q;
+ BIGNUM* kdmp1 = rsaKey->dmp1;
+ BIGNUM* kdmq1 = rsaKey->dmq1;
+ BIGNUM* kiqmp = rsaKey->iqmp;
+
+ TS_ASSERT(0 == BN_cmp(kn, n));
+ TS_ASSERT(0 == BN_cmp(ke, e));
+ TS_ASSERT(0 == BN_cmp(kd, d));
+ TS_ASSERT(0 == BN_cmp(kp, p));
+ TS_ASSERT(0 == BN_cmp(kq, q));
+ TS_ASSERT(0 == BN_cmp(kdmp1, dmp1));
+ TS_ASSERT(0 == BN_cmp(kdmq1, dmq1));
+ TS_ASSERT(0 == BN_cmp(kiqmp, iqmp));
+ }
+
void testDER() {
string path=data_path + "KeyInfo5.xml";
ifstream fs(path.c_str());
--
2.13.6