summaryrefslogtreecommitdiff
path: root/tests/test_smime.py
diff options
context:
space:
mode:
authorHeikki Toivonen <heikki@heikkitoivonen.net>2006-04-25 16:43:52 +0000
committerHeikki Toivonen <heikki@heikkitoivonen.net>2006-04-25 16:43:52 +0000
commit588d3ed9913508259fbd6adc26cd2bb291f118b4 (patch)
tree5e5412cc724461efcf20d3536337bec5fa9fb90e /tests/test_smime.py
parentd131dcf3a00182a76b70a8a4324e36f947283be7 (diff)
downloadm2crypto-588d3ed9913508259fbd6adc26cd2bb291f118b4.tar.gz
Fixed load_pkcs7 (was always raising exceptions). Fixed
potential memory leaks in load_pkcs7 and smime_load_pkcs7 (would leak bio objects if pkcs7 read failed). git-svn-id: http://svn.osafoundation.org/m2crypto/trunk@425 2715db39-9adf-0310-9c64-84f055769b4b
Diffstat (limited to 'tests/test_smime.py')
-rw-r--r--tests/test_smime.py71
1 files changed, 66 insertions, 5 deletions
diff --git a/tests/test_smime.py b/tests/test_smime.py
index 54a5d25..a850c32 100644
--- a/tests/test_smime.py
+++ b/tests/test_smime.py
@@ -13,7 +13,7 @@ class SMIMETestCase(unittest.TestCase):
def setUp(self):
# XXX Ugly, but not sure what would be better
- self.signature = self.check_sign()
+ self.signed = self.check_sign()
self.encrypted = self.check_encrypt()
def check_sign(self):
@@ -49,7 +49,7 @@ class SMIMETestCase(unittest.TestCase):
st.load_info('ca.pem')
s.set_x509_store(st)
- p7, data = SMIME.smime_load_pkcs7_bio(self.signature)
+ p7, data = SMIME.smime_load_pkcs7_bio(self.signed)
assert data.read() == self.cleartext
assert isinstance(p7, SMIME.PKCS7), p7
@@ -68,7 +68,7 @@ class SMIMETestCase(unittest.TestCase):
st.load_info('recipient.pem')
s.set_x509_store(st)
- p7, data = SMIME.smime_load_pkcs7_bio(self.signature)
+ p7, data = SMIME.smime_load_pkcs7_bio(self.signed)
assert data.read() == self.cleartext
assert isinstance(p7, SMIME.PKCS7), p7
self.assertRaises(SMIME.PKCS7_Error, s.verify, p7) # Bad signer
@@ -159,8 +159,18 @@ class SMIMETestCase(unittest.TestCase):
f.close()
p7, data = SMIME.smime_load_pkcs7('smime_test.txt')
import os
- os.remove('smime_test.txt')
+ #os.remove('smime_test.txt')
else:
+# f = open('smime_test.txt', 'wb')
+# f.write(signedEncrypted.read())
+# f.close()
+# p7, data = SMIME.smime_load_pkcs7('smime_test.txt')
+#
+# f = open('smime_test.txt', 'rb')
+# t = f.read()
+# print t
+# signedEncrypted = BIO.MemoryBuffer(t)
+# f.close()
# XXX Bug: "not enough data" with straight bio?
p7, data = SMIME.smime_load_pkcs7_bio(signedEncrypted)
@@ -180,10 +190,61 @@ class SMIMETestCase(unittest.TestCase):
p7, data = SMIME.smime_load_pkcs7_bio(p7_bio)
v = s.verify(p7)
assert v == self.cleartext
+
+
+class WriteLoadTestCase(unittest.TestCase):
+ def setUp(self):
+ s = SMIME.SMIME()
+ s.load_key('signer_key.pem', 'signer.pem')
+ p7 = s.sign(BIO.MemoryBuffer('some text'))
+ self.filename = 'sig.p7'
+ f = BIO.openfile(self.filename, 'wb')
+ assert p7.write(f) == 1
+ f.close()
+
+ self.filenameSmime = 'sig.p7s'
+ f = BIO.openfile(self.filenameSmime, 'wb')
+ assert s.write(f, p7, BIO.MemoryBuffer('some text')) == 1
+ f.close()
+
+ def check_write_pkcs7_der(self):
+ buf = BIO.MemoryBuffer()
+ assert SMIME.load_pkcs7(self.filename).write_der(buf) == 1
+ s = buf.read()
+ assert len(s) == 1168, len(s)
+
+ def check_load_pkcs7(self):
+ assert SMIME.load_pkcs7(self.filename).type() == SMIME.PKCS7_SIGNED
+ def check_load_pkcs7_bio(self):
+ f = open(self.filename, 'rb')
+ buf = BIO.MemoryBuffer(f.read())
+ f.close()
+
+ assert SMIME.load_pkcs7_bio(buf).type() == SMIME.PKCS7_SIGNED
+
+ def check_load_smime(self):
+ a, b = SMIME.smime_load_pkcs7(self.filenameSmime)
+ assert isinstance(a, SMIME.PKCS7), a
+ assert isinstance(b, BIO.BIO), b
+ assert a.type() == SMIME.PKCS7_SIGNED
+
+ def check_load_smime_bio(self):
+ f = open(self.filenameSmime, 'rb')
+ buf = BIO.MemoryBuffer(f.read())
+ f.close()
+
+ a, b = SMIME.smime_load_pkcs7_bio(buf)
+ assert isinstance(a, SMIME.PKCS7), a
+ assert isinstance(b, BIO.BIO), b
+ assert a.type() == SMIME.PKCS7_SIGNED
+
def suite():
- return unittest.makeSuite(SMIMETestCase, 'check')
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(SMIMETestCase, 'check'))
+ suite.addTest(unittest.makeSuite(WriteLoadTestCase, 'check'))
+ return suite
if __name__ == '__main__':