[cpp-xmltooling] branch master updated: CPPXT-110 test for code changes to OpenSSLCryptoKeyEC

Rod Widdowson rdw at steadingsoftware.com
Thu Nov 10 07:28:38 EST 2016


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch master
in repository cpp-xmltooling.

View the commit online:
http://git.shibboleth.net/view/?p=cpp-xmltooling.git;a=commit;h=b1dab00582efa014f37eba699b0868443e899c16

The following commit(s) were added to refs/heads/master by this push:
       new  b1dab00   CPPXT-110 test for code changes to OpenSSLCryptoKeyEC
b1dab00 is described below

commit b1dab00582efa014f37eba699b0868443e899c16
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Thu Nov 10 07:27:04 2016 -0500

    CPPXT-110 test for code changes to OpenSSLCryptoKeyEC
    
        https://issues.shibboleth.net/jira/browse/CPPXT-110
    
    Load a hand crafted <ds:keyInfo> EC.
    Load an EC cert/key via openssl
    Sign with the latter and verify with the former.
    (because there is no obvious easy visibility on the contents of
    an OpenSSL EC and it makes my head hurt)
---
 xmltoolingtest/InlineKeyResolverTest.h | 44 ++++++++++++++++++++++++++++++++--
 xmltoolingtest/data/KeyInfoEC.xml      |  9 +++++++
 2 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/xmltoolingtest/InlineKeyResolverTest.h b/xmltoolingtest/InlineKeyResolverTest.h
index 87c3f0f..e0ce64c 100644
--- a/xmltoolingtest/InlineKeyResolverTest.h
+++ b/xmltoolingtest/InlineKeyResolverTest.h
@@ -40,14 +40,13 @@ extern "C" {
 
 // Force XMLSEC to assume OpenSSL
 #define XSEC_HAVE_OPENSSL 1
+#define XSEC_OPENSSL_HAVE_EC (OPENSSL_VERSION_NUMBER >= 0x00907000L)
 
 #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 {
@@ -127,6 +126,47 @@ public:
         TSM_ASSERT(cmp, "PubKey/Y mismatch between keyInfo and file");
     }
 
+    void testOpenSSLEC() {
+
+        string path=data_path + "KeyInfoEC.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> credFromKeyInfo(dynamic_cast<X509Credential*>(m_resolver->resolve(kiObject.get())));
+        OpenSSLCryptoKeyEC* sslCredFromKeyInfo= dynamic_cast<OpenSSLCryptoKeyEC*>(credFromKeyInfo->getPublicKey());
+
+        const  EC_KEY* keyInfoEC = dynamic_cast<OpenSSLCryptoKeyEC*>(credFromKeyInfo->getPublicKey())->getOpenSSLEC();
+
+        path = data_path + "FileSystemCredentialResolver.xml";
+        ifstream in(path.c_str());
+        DOMDocument* cdoc=XMLToolingConfig::getConfig().getParser().parse(in);
+        XercesJanitor<DOMDocument> cjanitor(cdoc);
+        CredentialResolver* cresolver = XMLToolingConfig::getConfig().CredentialResolverManager.newPlugin(
+            CHAINING_CREDENTIAL_RESOLVER,cdoc->getDocumentElement()
+            );
+
+        CredentialCriteria cc;
+        cc.setUsage(Credential::SIGNING_CREDENTIAL);
+        cc.setKeyAlgorithm("EC");
+        OpenSSLCryptoKeyEC* fileResolverCryptoKeyEC = dynamic_cast<OpenSSLCryptoKeyEC*>(cresolver->resolve(&cc)->getPublicKey());
+        const EC_KEY* fileResolverEC= fileResolverCryptoKeyEC->getOpenSSLEC();
+
+        unsigned char toSign[] = "NibbleAHappyWartHog";
+        const int bufferSize = 1024;
+        char outSig[bufferSize] = {0};
+        unsigned int len = fileResolverCryptoKeyEC->signBase64SignatureDSA(toSign, sizeof(toSign), &outSig[0], bufferSize);
+        //bool worked = fileResolverCryptoKeyEC->verifyBase64SignatureDSA(toSign, sizeof(toSign), &outSig[0], len);
+        //TSM_ASSERT("EC Round Trip Signature Failed", worked);
+        bool worked = sslCredFromKeyInfo->verifyBase64SignatureDSA(toSign, sizeof(toSign), &outSig[0], len);
+        TSM_ASSERT("EC Round Trip Signature via KeyInfo Failed", worked);
+    }
+
+
     void testOpenSSLRSA() {
         string path=data_path + "KeyInfo1.xml";
         ifstream fs(path.c_str());
diff --git a/xmltoolingtest/data/KeyInfoEC.xml b/xmltoolingtest/data/KeyInfoEC.xml
new file mode 100644
index 0000000..802ccc1
--- /dev/null
+++ b/xmltoolingtest/data/KeyInfoEC.xml
@@ -0,0 +1,9 @@
+<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ds11="http://www.w3.org/2009/xmldsig11#">
+    <ds:KeyValue>
+        <ds11:ECKeyValue>
+            <ds11:NamedCurve URI="urn:oid:2.23.43.1.4.5"/>
+            <ds11:PublicKey>BAYIncGnewJiUxZdqjsBiRpzGGnXTQWSZFUxkVPmPr25FH1ckqX+2xiYsA==
+            </ds11:PublicKey>
+        </ds11:ECKeyValue>
+    </ds:KeyValue>
+</ds:KeyInfo>

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list