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