diff --git a/tests/test_40_sigver.py b/tests/test_40_sigver.py index ee33990..d596dfd 100644 --- a/tests/test_40_sigver.py +++ b/tests/test_40_sigver.py @@ -8,6 +8,8 @@ from saml2 import class_name from saml2 import time_util from saml2 import saml, samlp from saml2.s_utils import factory, do_attribute_statement +from saml2.sigver import xmlsec_version, get_xmlsec_binary + import xmldsig as ds from py.test import raises @@ -22,19 +24,30 @@ PRIV_KEY = "test.key" def _eq(l1,l2): return set(l1) == set(l2) -SIGNED_VALUE= """imvo3quPyMND8yCv8D3LNCbeiG98hKl+F5VekEY5N7EEBoq7S3A7mArz4yZUVJVw -1migufgOZEiZX80vzR0lwfjAEjwRp+NjKRvOcWHfIgjz+dG8q9n4LcI5YmsjveLa -+iNTujev1PYA+UWf57S5mqGFoi0KaS8Xnp0FG1olAZ0=""" - -DIGEST_VALUE = "0+0Td5mWbs+CF7xZeYSlcQ/pjKw=" - -def get_xmlsec(): - for path in os.environ["PATH"].split(":"): - fil = os.path.join(path, "xmlsec1") - if os.access(fil,os.X_OK): - return fil - - raise Exception("Can't find xmlsec1") +SIGNATURE_DIGEST = { + "1.2.14": [( + "kMuyOK17nyp4CbA1v7KE32rX4+NQQ8EvdglTK61uIMEo3ax0PgFU7bgZGey+Aj8H\nhTPVyAzWmBDxHpSCFe050PTtNoKHx7nXprLfhuQXsPq8s0KBoZR+2qYfVCkWYVX7\nT3zG/Tn+fesBA1zLo4lYdAovol7C35KAsAWoknmZdOE=", + "SXw3kqTf+PtTiUnI8nQ6xmrM3qw="), + ( + "upeKPE1pkzXLy9BvKFOSTnjn4du59lQQ74TN5CqDGae9D21uY/zLuOWql7LiSTSi\nC945F0WrOvG7s0eZnpuNPZobdfdeCOffCMMrq5RQ2+abPFBamkjmceuEKGdO5PWQ\nt7B1GkzXAMMgeMuU+YmvIJkHbbv5Yn6M0/ICE/COaKQ=", + "uX92C/YDroqITDfDY1IeekGtZac="), + ( + "xHECLk1jj4NBvk1jhGrb2mwnrLFKXk6JN3NogjMVMtnnarg9vtk7jYzy1M9RPWdj\nRSa2Jph7yVZJENm4bGuBkT91w+FYm2X4jREULPUsnupPHTQyhJEVZ07EhnluOWa3\n95KkqnZ5gbnTxn1ZvpsANzThLmYY3eSGzNXz+S7758M=", + "l36wHa6Lyed9ZeAZ3jFL77wPVQ4=" + ) + ], + "":[ + ( + "imvo3quPyMND8yCv8D3LNCbeiG98hKl+F5VekEY5N7EEBoq7S3A7mArz4yZUVJVw\n1migufgOZEiZX80vzR0lwfjAEjwRp+NjKRvOcWHfIgjz+dG8q9n4LcI5YmsjveLa\n+iNTujev1PYA+UWf57S5mqGFoi0KaS8Xnp0FG1olAZ0=", + "0+0Td5mWbs+CF7xZeYSlcQ/pjKw="), + ( + "NEoJEpCLRi35e+cK8fwInrThausuD3xNlKZFhZda6qS8GU93s8J3sKLpd5BwB9my\nesHX38c9WhQkXeuQu6O75hMwLWb7496vG+QcodaWvLJ8u/Cgp2XdQopkNWLOqLJC\n7XyLa0fEDhPY/kvX88kx9xBnA/VhIYVjQtNrTD9M5Q8=", + "gqe292uV8r7LfSomiMh9VS9wYZw="), + ( + "DS5V623NrKCXmBjzCgVDUkPXSg8kMezZIeEqg8RC6Q/0/vjoBgZDt1hMvOmOX4Vf\nA1ckqeEEHnsqegjBRUUiV41SALJmKSVvUG5V29ZonGK4EXtdC5dxRPa/2tqN1i8N\nwtTlD7DE/YLAPIM5nhL8qHKKovQvwypZmC2YVmKIuQ0=", + "h6o97FThq9XqEzw+njeKjH45QgM="), + ] +} CERT1 = """MIICsDCCAhmgAwIBAgIJAJrzqSSwmDY9MA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX @@ -92,9 +105,12 @@ def test_cert_from_instance_ssp(): class TestSecurity(): def setup_class(self): - self.sec = sigver.SecurityContext(get_xmlsec(), PRIV_KEY, "pem", + xmlexec = get_xmlsec_binary() + self.sec = sigver.SecurityContext(xmlexec, PRIV_KEY, "pem", PUB_KEY, "pem", debug=1) + self.sign_digest = SIGNATURE_DIGEST[xmlsec_version(xmlexec)] + self._assertion = factory( saml.Assertion, version="2.0", id="11111", @@ -135,10 +151,10 @@ class TestSecurity(): assert sass.id == "11111" assert time_util.str_to_time(sass.issue_instant) sig = sass.signature - assert sig.signature_value.text == SIGNED_VALUE + assert sig.signature_value.text == self.sign_digest[0][0] assert len(sig.signed_info.reference) == 1 assert sig.signed_info.reference[0].digest_value - assert sig.signed_info.reference[0].digest_value.text == DIGEST_VALUE + assert sig.signed_info.reference[0].digest_value.text == self.sign_digest[0][1] def test_sign_response(self): response = factory(samlp.Response, @@ -162,12 +178,12 @@ class TestSecurity(): assert sass.id == "11111" assert time_util.str_to_time(sass.issue_instant) sig = sass.signature - assert sig.signature_value.text == """NEoJEpCLRi35e+cK8fwInrThausuD3xNlKZFhZda6qS8GU93s8J3sKLpd5BwB9my\nesHX38c9WhQkXeuQu6O75hMwLWb7496vG+QcodaWvLJ8u/Cgp2XdQopkNWLOqLJC\n7XyLa0fEDhPY/kvX88kx9xBnA/VhIYVjQtNrTD9M5Q8=""" + assert sig.signature_value.text == self.sign_digest[1][0] assert len(sig.signed_info.reference) == 1 assert sig.signed_info.reference[0].digest_value digest = sig.signed_info.reference[0].digest_value.text - assert digest == "gqe292uV8r7LfSomiMh9VS9wYZw=" + assert digest == self.sign_digest[1][1] def test_sign_response_2(self): assertion2 = factory( saml.Assertion, @@ -202,12 +218,12 @@ class TestSecurity(): assert sass.id == "11122" assert time_util.str_to_time(sass.issue_instant) sig = sass.signature - assert sig.signature_value.text == "DS5V623NrKCXmBjzCgVDUkPXSg8kMezZIeEqg8RC6Q/0/vjoBgZDt1hMvOmOX4Vf\nA1ckqeEEHnsqegjBRUUiV41SALJmKSVvUG5V29ZonGK4EXtdC5dxRPa/2tqN1i8N\nwtTlD7DE/YLAPIM5nhL8qHKKovQvwypZmC2YVmKIuQ0=" + assert sig.signature_value.text == self.sign_digest[2][0] assert len(sig.signed_info.reference) == 1 assert sig.signed_info.reference[0].digest_value digest = sig.signed_info.reference[0].digest_value.text - assert digest == "h6o97FThq9XqEzw+njeKjH45QgM=" + assert digest == self.sign_digest[2][1] def test_sign_verify(self): response = factory(samlp.Response, diff --git a/tests/test_43_soap.py b/tests/test_43_soap.py index 7b3a85b..a133913 100755 --- a/tests/test_43_soap.py +++ b/tests/test_43_soap.py @@ -56,6 +56,5 @@ def test_make_soap_envelope(): request.become_child_element_of(body) string = ElementTree.tostring(envelope, encoding="UTF-8") - result = """ -""" + result = """\n""" assert string == result diff --git a/tests/test_51_client.py b/tests/test_51_client.py index bfc7133..048ff07 100644 --- a/tests/test_51_client.py +++ b/tests/test_51_client.py @@ -12,6 +12,7 @@ from saml2 import saml, s_utils, config, class_name from saml2.server import Server from saml2.s_utils import decode_base64_and_inflate from saml2.time_util import in_a_while +from saml2.sigver import xmlsec_version from py.test import raises @@ -48,9 +49,11 @@ def _leq(l1, l2): # print name_id # assert False -REQ1 = """ -urn:mace:example.com:saml:roland:spE8042FB4-4D5B-48C3-8E14-8EDD852790DD""" - +REQ1 = { "1.2.14": """ +urn:mace:example.com:saml:roland:spE8042FB4-4D5B-48C3-8E14-8EDD852790DD""", + "":""" +urn:mace:example.com:saml:roland:spE8042FB4-4D5B-48C3-8E14-8EDD852790DD"""} + class TestClient: def setup_class(self): self.server = Server("idp.config") @@ -69,9 +72,11 @@ class TestClient: self.client.issuer(), nameid_format=saml.NAMEID_FORMAT_PERSISTENT) reqstr = "%s" % req.to_string() + xmlsec_vers = xmlsec_version(self.client.config["xmlsec_binary"]) + print "XMLSEC version: %s" % xmlsec_vers print reqstr - print REQ1 % req.issue_instant - assert reqstr == REQ1 % req.issue_instant + print REQ1[xmlsec_vers] % req.issue_instant + assert reqstr == REQ1[xmlsec_vers] % req.issue_instant assert req.destination == "https://idp.example.com/idp/" assert req.id == "id1" assert req.version == "2.0"