aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/certffi.py
diff options
context:
space:
mode:
Diffstat (limited to 'netlib/certffi.py')
-rw-r--r--netlib/certffi.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/netlib/certffi.py b/netlib/certffi.py
new file mode 100644
index 00000000..c5d7c95e
--- /dev/null
+++ b/netlib/certffi.py
@@ -0,0 +1,36 @@
+import cffi
+import OpenSSL
+xffi = cffi.FFI()
+xffi.cdef ("""
+ struct rsa_meth_st {
+ int flags;
+ ...;
+ };
+ struct rsa_st {
+ int pad;
+ long version;
+ struct rsa_meth_st *meth;
+ ...;
+ };
+""")
+xffi.verify(
+ """#include <openssl/rsa.h>""",
+ extra_compile_args=['-w']
+)
+
+def handle(privkey):
+ new = xffi.new("struct rsa_st*")
+ newbuf = xffi.buffer(new)
+ rsa = OpenSSL.SSL._lib.EVP_PKEY_get1_RSA(privkey._pkey)
+ oldbuf = OpenSSL.SSL._ffi.buffer(rsa)
+ newbuf[:] = oldbuf[:]
+ return new
+
+def set_flags(privkey, val):
+ hdl = handle(privkey)
+ hdl.meth.flags = val
+ return privkey
+
+def get_flags(privkey):
+ hdl = handle(privkey)
+ return hdl.meth.flags