summaryrefslogtreecommitdiff
path: root/leakcheck/thread-key-gen.py
diff options
context:
space:
mode:
Diffstat (limited to 'leakcheck/thread-key-gen.py')
-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()