From f285c5eb3507d550c0085ed0f36317dfb47652f6 Mon Sep 17 00:00:00 2001 From: Roland Hedberg Date: Wed, 14 Oct 2009 05:41:34 +0200 Subject: [PATCH] tests of XML encryption syntax and processing support --- tests/test_xmlenc.py | 173 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 tests/test_xmlenc.py diff --git a/tests/test_xmlenc.py b/tests/test_xmlenc.py new file mode 100644 index 0000000..5b2d771 --- /dev/null +++ b/tests/test_xmlenc.py @@ -0,0 +1,173 @@ + +import xmlenc +import xmldsig + +data1 = """ + + + A23B45C56 + +""" + +def test_1(): + ed = xmlenc.encrypted_data_from_string(data1) + assert ed + assert ed.mime_type == "text/xml" + assert len(ed.cipher_data) == 1 + cd = ed.cipher_data[0] + assert len(cd.cipher_value) == 1 + assert cd.cipher_value[0].text == "A23B45C56" + +data2 = """ + + + John Smith + + DEADBEEF +""" + +def test_2(): + ed = xmlenc.encrypted_data_from_string(data2) + assert ed + print ed + assert ed.typ == "http://www.w3.org/2001/04/xmlenc#Element" + assert len(ed.encryption_method) == 1 + em = ed.encryption_method[0] + assert em.algorithm == 'http://www.w3.org/2001/04/xmlenc#tripledes-cbc' + assert len(ed.key_info) == 1 + ki = ed.key_info[0] + assert ki.key_name[0].text == "John Smith" + assert len(ed.cipher_data) == 1 + cd = ed.cipher_data[0] + assert len(cd.cipher_value) == 1 + assert cd.cipher_value[0].text == "DEADBEEF" + +data3 = """ + + + + Sally Doe + + DEADBEEF +""" + +def test_3(): + ed = xmlenc.encrypted_data_from_string(data3) + assert ed + print ed + assert len(ed.encryption_method) == 1 + em = ed.encryption_method[0] + assert em.algorithm == 'http://www.w3.org/2001/04/xmlenc#aes128-cbc' + assert len(ed.key_info) == 1 + ki = ed.key_info[0] + assert ki.key_name[0].text == "Sally Doe" + assert len(ki.retrieval_method) == 1 + rm = ki.retrieval_method[0] + assert rm.uri == "#EK" + assert rm.type == "http://www.w3.org/2001/04/xmlenc#EncryptedKey" + assert len(ed.cipher_data) == 1 + cd = ed.cipher_data[0] + assert len(cd.cipher_value) == 1 + assert cd.cipher_value[0].text == "DEADBEEF" + +data4 = """ + + + John Smith + + xyzabc + + + + Sally Doe +""" + +def test_4(): + ek = xmlenc.encrypted_key_from_string(data4) + assert ek + print ek + assert len(ek.encryption_method) == 1 + em = ek.encryption_method[0] + assert em.algorithm == 'http://www.w3.org/2001/04/xmlenc#rsa-1_5' + assert len(ek.key_info) == 1 + ki = ek.key_info[0] + assert ki.key_name[0].text == "John Smith" + assert len(ek.reference_list) == 1 + rl = ek.reference_list[0] + assert len(rl.data_reference) + dr = rl.data_reference[0] + assert dr.uri == "#ED" + assert len(ek.cipher_data) == 1 + cd = ek.cipher_data[0] + assert len(cd.cipher_value) == 1 + assert cd.cipher_value[0].text == "xyzabc" + +data5 = """ + + + + self::text()[parent::rep:CipherValue[@Id="example1"]] + + + + +""" + +def test_5(): + cr = xmlenc.cipher_reference_from_string(data5) + assert cr + print cr + assert len(cr.transforms) == 1 + trs = cr.transforms[0] + assert len(trs.transform) == 2 + tr = trs.transform[0] + assert tr.algorithm in ["http://www.w3.org/TR/1999/REC-xpath-19991116", + "http://www.w3.org/2000/09/xmldsig#base64"] + if tr.algorithm == "http://www.w3.org/2000/09/xmldsig#base64": + pass + elif tr.algorithm == "http://www.w3.org/TR/1999/REC-xpath-19991116": + assert len(tr.xpath) == 1 + xp = tr.xpath[0] + assert xp.text.strip() == """self::text()[parent::rep:CipherValue[@Id="example1"]]""" + + +data6 = """ + + + + + self::xenc:EncryptedData[@Id="example1"] + + + + +""" + +def test_6(): + rl = xmlenc.reference_list_from_string(data6) + assert rl + print rl + assert len(rl.data_reference) == 1 + dr = rl.data_reference[0] + assert dr.uri == "#invoice34" + assert len(dr.extension_elements) == 1 + ee = dr.extension_elements[0] + assert ee.tag == "Transforms" + assert ee.namespace == "http://www.w3.org/2000/09/xmldsig#" + trs = xmldsig.transforms_from_string(ee.to_string()) + assert trs + assert len(trs.transform) == 1 + tr = trs.transform[0] + assert tr.algorithm == "http://www.w3.org/TR/1999/REC-xpath-19991116" + assert len(tr.xpath) == 1 + assert tr.xpath[0].text.strip() == """self::xenc:EncryptedData[@Id="example1"]""" + \ No newline at end of file