[xmltooling] 07/24: CPPXT-110 test for code changes to OpenSSLCryptoKeyDSA

Ferenc Wágner wferi at moszumanska.debian.org
Fri Dec 16 11:56:11 UTC 2016


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

wferi pushed a commit to branch master
in repository xmltooling.

commit 6b3d60c686265b538a38637893f86853dcb22eba
Author: Rod Widdowson <rdw at steadingsoftware.com>
Date:   Thu Nov 10 05:39:55 2016 -0500

    CPPXT-110 test for code changes to OpenSSLCryptoKeyDSA
    
    https://issues.shibboleth.net/jira/browse/CPPXT-110
    
    Load a hand crafted <ds:keyInfo> and prove that its the same as loaded by OpenSSL.
---
 xmltoolingtest/InlineKeyResolverTest.h | 44 ++++++++++++++++++++++++++++++++++
 xmltoolingtest/data/KeyInfoDSA.xml     | 17 +++++++++++++
 2 files changed, 61 insertions(+)

diff --git a/xmltoolingtest/InlineKeyResolverTest.h b/xmltoolingtest/InlineKeyResolverTest.h
index 6418ec2..87c3f0f 100644
--- a/xmltoolingtest/InlineKeyResolverTest.h
+++ b/xmltoolingtest/InlineKeyResolverTest.h
@@ -24,8 +24,12 @@
 
 #include <xmltooling/security/X509Credential.h>
 #include <xmltooling/security/KeyInfoResolver.h>
+#include <xmltooling/security/Credential.h>
+#include <xmltooling/security/CredentialCriteria.h>
+#include <xmltooling/security/CredentialResolver.h>
 #include <xmltooling/signature/KeyInfo.h>
 
+
 #include <xsec/enc/XSECCryptoKey.hpp>
 
 #include <xsec/dsig/DSIGReference.hpp>
@@ -83,6 +87,45 @@ public:
         TSM_ASSERT_EQUALS("Wrong CRL count.", cred->getCRLs().size(), 3);
     }
 
+    void testOpenSSLDSA() {
+
+        string path=data_path + "KeyInfoDSA.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())));
+        const DSA *keyInfoDSA = dynamic_cast<OpenSSLCryptoKeyDSA*>(credFromKeyInfo->getPublicKey())->getOpenSSLDSA();
+
+        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("DSA");
+        OpenSSLCryptoKeyDSA* fileResolverCryptoKeyDSA = dynamic_cast<OpenSSLCryptoKeyDSA*>(cresolver->resolve(&cc)->getPublicKey());
+        DSA* fileResolverDSA = fileResolverCryptoKeyDSA ->getOpenSSLDSA();
+
+        int cmp = BN_cmp(keyInfoDSA->g, fileResolverDSA->g);
+        TSM_ASSERT(cmp, "G mismatch between keyInfo and file");
+        cmp = BN_cmp(keyInfoDSA->p, fileResolverDSA->p);
+        TSM_ASSERT(cmp, "P mismatch between keyInfo and file");
+        cmp = BN_cmp(keyInfoDSA->q, fileResolverDSA->q);
+        TSM_ASSERT(cmp, "Q mismatch between keyInfo and file");
+        cmp = BN_cmp(keyInfoDSA->priv_key, fileResolverDSA->priv_key);
+        //TSM_ASSERT(cmp, "G mismatch between keyInfo and file");  // There is no private key in KeyInfo
+        cmp = BN_cmp(keyInfoDSA->pub_key, fileResolverDSA->pub_key);
+        TSM_ASSERT(cmp, "PubKey/Y mismatch between keyInfo and file");
+    }
 
     void testOpenSSLRSA() {
         string path=data_path + "KeyInfo1.xml";
@@ -131,6 +174,7 @@ public:
         TS_ASSERT(0 ==  BN_cmp(kiqmp, iqmp));
     }
 
+
     void testDER() {
         string path=data_path + "KeyInfo5.xml";
         ifstream fs(path.c_str());
diff --git a/xmltoolingtest/data/KeyInfoDSA.xml b/xmltoolingtest/data/KeyInfoDSA.xml
new file mode 100644
index 0000000..f0c3ebb
--- /dev/null
+++ b/xmltoolingtest/data/KeyInfoDSA.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+    <ds:KeyName>Foo</ds:KeyName>
+    <ds:KeyName>Bar</ds:KeyName>
+    <ds:KeyValue>
+        <ds:DSAKeyValue>
+            <ds:P>ANVGAtN1Mxr3ZkxKcQqZaMxw2Qbre4jG8G+KFhcPYJQNjhpYH2O+DVWx02vV4H9ypCnPaANktCitKuQSiDA9l1U=
+</ds:P>
+            <ds:Q>AK/apfGsK5pA4iia1j9qAR0Tdaw1
+</ds:Q>
+            <ds:G>DmEQoo+YAVNTUGokcy1ki01WgMfTBsvPqYjRDzcmF7p4oJ8neVCn0B990jv9W8v8gpvxr+w5ZpQkJybngJFAjw==
+</ds:G>
+            <ds:Y>AMJPFxCB9Kp6ekdM90H23zv4JNEhkm1qXNix44Xdl6IABgE896kpNzGQDCKf6iecO7oX+eTJl3KwT3oNE+8EQxk=
+</ds:Y>
+        </ds:DSAKeyValue>
+    </ds:KeyValue> 
+</ds:KeyInfo>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-shibboleth/xmltooling.git



More information about the Pkg-shibboleth-devel mailing list