summaryrefslogtreecommitdiff
path: root/leakcheck
diff options
context:
space:
mode:
authorJean-Paul Calderone <exarkun@twistedmatrix.com>2012-04-03 15:25:07 -0400
committerJean-Paul Calderone <exarkun@twistedmatrix.com>2012-04-03 15:25:07 -0400
commitffe420a7cd03197b0c3012dab2a1a90a71d26eb0 (patch)
treeef53cd05f3fa8b045e891ddb99e9127cbd82fc68 /leakcheck
parent0beed1c968ea4511cbe8515effed7acd2a715b48 (diff)
parent5f2cd26054adff5a1fbf9ba5d56766b972f46670 (diff)
downloadpyopenssl-ffe420a7cd03197b0c3012dab2a1a90a71d26eb0.tar.gz
Release the GIL around RSA and DSA key generation.
Diffstat (limited to 'leakcheck')
-rw-r--r--leakcheck/thread-key-gen.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/leakcheck/thread-key-gen.py b/leakcheck/thread-key-gen.py
new file mode 100644
index 0000000..62e1a58
--- /dev/null
+++ b/leakcheck/thread-key-gen.py
@@ -0,0 +1,38 @@
+# Copyright (C) Jean-Paul Calderone
+# See LICENSE for details.
+#
+# Stress tester for thread-related bugs in RSA and DSA key generation. 0.12 and
+# older held the GIL during these operations. Subsequent versions release it
+# during them.
+
+from threading import Thread
+
+from OpenSSL.crypto import TYPE_RSA, TYPE_DSA, PKey
+
+def generate_rsa():
+ keys = []
+ for i in range(100):
+ key = PKey()
+ key.generate_key(TYPE_RSA, 1024)
+ keys.append(key)
+
+def generate_dsa():
+ keys = []
+ for i in range(100):
+ key = PKey()
+ key.generate_key(TYPE_DSA, 512)
+ keys.append(key)
+
+
+def main():
+ threads = []
+ for i in range(3):
+ t = Thread(target=generate_rsa, args=())
+ threads.append(t)
+ t = Thread(target=generate_dsa, args=())
+ threads.append(t)
+
+ for t in threads:
+ t.start()
+
+main()