We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Use typedef ... *FOO_PTR; where appropriate.
So that FFI knows that the underlying type is opaque but that this is a pointer.

This makes `ffi.typeof` work correctly on bindings where functions take opaque typedef pointers such as some of the `ENGINE_` stuff.

See here for an example of it going wrong https://gist.github.com/public/8456596


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `cryptography/hazmat/bindings/openssl/engine.py`
Content:
```
1 # Licensed under the Apache License, Version 2.0 (the "License");
2 # you may not use this file except in compliance with the License.
3 # You may obtain a copy of the License at
4 #
5 #    http://www.apache.org/licenses/LICENSE-2.0
6 #
7 # Unless required by applicable law or agreed to in writing, software
8 # distributed under the License is distributed on an "AS IS" BASIS,
9 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10 # implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13 
14 INCLUDES = """
15 #include <openssl/engine.h>
16 """
17 
18 TYPES = """
19 typedef ... ENGINE;
20 typedef ... RSA_METHOD;
21 typedef ... DSA_METHOD;
22 typedef ... ECDH_METHOD;
23 typedef ... ECDSA_METHOD;
24 typedef ... DH_METHOD;
25 typedef ... RAND_METHOD;
26 typedef ... STORE_METHOD;
27 typedef ... ENGINE_GEN_INT_FUNC_PTR;
28 typedef ... ENGINE_CTRL_FUNC_PTR;
29 typedef ... ENGINE_LOAD_KEY_PTR;
30 typedef ... ENGINE_CIPHERS_PTR;
31 typedef ... ENGINE_DIGESTS_PTR;
32 typedef ... ENGINE_CMD_DEFN;
33 typedef ... UI_METHOD;
34 
35 static const unsigned int ENGINE_METHOD_RSA;
36 static const unsigned int ENGINE_METHOD_DSA;
37 static const unsigned int ENGINE_METHOD_RAND;
38 static const unsigned int ENGINE_METHOD_ECDH;
39 static const unsigned int ENGINE_METHOD_ECDSA;
40 static const unsigned int ENGINE_METHOD_CIPHERS;
41 static const unsigned int ENGINE_METHOD_DIGESTS;
42 static const unsigned int ENGINE_METHOD_STORE;
43 static const unsigned int ENGINE_METHOD_ALL;
44 static const unsigned int ENGINE_METHOD_NONE;
45 """
46 
47 FUNCTIONS = """
48 ENGINE *ENGINE_get_first(void);
49 ENGINE *ENGINE_get_last(void);
50 ENGINE *ENGINE_get_next(ENGINE *);
51 ENGINE *ENGINE_get_prev(ENGINE *);
52 int ENGINE_add(ENGINE *);
53 int ENGINE_remove(ENGINE *);
54 ENGINE *ENGINE_by_id(const char *);
55 int ENGINE_init(ENGINE *);
56 int ENGINE_finish(ENGINE *);
57 void ENGINE_load_openssl(void);
58 void ENGINE_load_dynamic(void);
59 void ENGINE_load_cryptodev(void);
60 void ENGINE_load_builtin_engines(void);
61 void ENGINE_cleanup(void);
62 ENGINE *ENGINE_get_default_RSA(void);
63 ENGINE *ENGINE_get_default_DSA(void);
64 ENGINE *ENGINE_get_default_ECDH(void);
65 ENGINE *ENGINE_get_default_ECDSA(void);
66 ENGINE *ENGINE_get_default_DH(void);
67 ENGINE *ENGINE_get_default_RAND(void);
68 ENGINE *ENGINE_get_cipher_engine(int);
69 ENGINE *ENGINE_get_digest_engine(int);
70 int ENGINE_set_default_RSA(ENGINE *);
71 int ENGINE_set_default_DSA(ENGINE *);
72 int ENGINE_set_default_ECDH(ENGINE *);
73 int ENGINE_set_default_ECDSA(ENGINE *);
74 int ENGINE_set_default_DH(ENGINE *);
75 int ENGINE_set_default_RAND(ENGINE *);
76 int ENGINE_set_default_ciphers(ENGINE *);
77 int ENGINE_set_default_digests(ENGINE *);
78 int ENGINE_set_default_string(ENGINE *, const char *);
79 int ENGINE_set_default(ENGINE *, unsigned int);
80 unsigned int ENGINE_get_table_flags(void);
81 void ENGINE_set_table_flags(unsigned int);
82 int ENGINE_register_RSA(ENGINE *);
83 void ENGINE_unregister_RSA(ENGINE *);
84 void ENGINE_register_all_RSA(void);
85 int ENGINE_register_DSA(ENGINE *);
86 void ENGINE_unregister_DSA(ENGINE *);
87 void ENGINE_register_all_DSA(void);
88 int ENGINE_register_ECDH(ENGINE *);
89 void ENGINE_unregister_ECDH(ENGINE *);
90 void ENGINE_register_all_ECDH(void);
91 int ENGINE_register_ECDSA(ENGINE *);
92 void ENGINE_unregister_ECDSA(ENGINE *);
93 void ENGINE_register_all_ECDSA(void);
94 int ENGINE_register_DH(ENGINE *);
95 void ENGINE_unregister_DH(ENGINE *);
96 void ENGINE_register_all_DH(void);
97 int ENGINE_register_RAND(ENGINE *);
98 void ENGINE_unregister_RAND(ENGINE *);
99 void ENGINE_register_all_RAND(void);
100 int ENGINE_register_STORE(ENGINE *);
101 void ENGINE_unregister_STORE(ENGINE *);
102 void ENGINE_register_all_STORE(void);
103 int ENGINE_register_ciphers(ENGINE *);
104 void ENGINE_unregister_ciphers(ENGINE *);
105 void ENGINE_register_all_ciphers(void);
106 int ENGINE_register_digests(ENGINE *);
107 void ENGINE_unregister_digests(ENGINE *);
108 void ENGINE_register_all_digests(void);
109 int ENGINE_register_complete(ENGINE *);
110 int ENGINE_register_all_complete(void);
111 int ENGINE_ctrl(ENGINE *, int, long, void *, void (*)(void));
112 int ENGINE_cmd_is_executable(ENGINE *, int);
113 int ENGINE_ctrl_cmd(ENGINE *, const char *, long, void *, void (*)(void), int);
114 int ENGINE_ctrl_cmd_string(ENGINE *, const char *, const char *, int);
115 
116 ENGINE *ENGINE_new(void);
117 int ENGINE_free(ENGINE *);
118 int ENGINE_up_ref(ENGINE *);
119 int ENGINE_set_id(ENGINE *, const char *);
120 int ENGINE_set_name(ENGINE *, const char *);
121 int ENGINE_set_RSA(ENGINE *, const RSA_METHOD *);
122 int ENGINE_set_DSA(ENGINE *, const DSA_METHOD *);
123 int ENGINE_set_ECDH(ENGINE *, const ECDH_METHOD *);
124 int ENGINE_set_ECDSA(ENGINE *, const ECDSA_METHOD *);
125 int ENGINE_set_DH(ENGINE *, const DH_METHOD *);
126 int ENGINE_set_RAND(ENGINE *, const RAND_METHOD *);
127 int ENGINE_set_STORE(ENGINE *, const STORE_METHOD *);
128 int ENGINE_set_destroy_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR);
129 int ENGINE_set_init_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR);
130 int ENGINE_set_finish_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR);
131 int ENGINE_set_ctrl_function(ENGINE *, ENGINE_CTRL_FUNC_PTR);
132 int ENGINE_set_load_privkey_function(ENGINE *, ENGINE_LOAD_KEY_PTR);
133 int ENGINE_set_load_pubkey_function(ENGINE *, ENGINE_LOAD_KEY_PTR);
134 int ENGINE_set_ciphers(ENGINE *, ENGINE_CIPHERS_PTR);
135 int ENGINE_set_digests(ENGINE *, ENGINE_DIGESTS_PTR);
136 int ENGINE_set_flags(ENGINE *, int);
137 int ENGINE_set_cmd_defns(ENGINE *, const ENGINE_CMD_DEFN *);
138 const char *ENGINE_get_id(const ENGINE *);
139 const char *ENGINE_get_name(const ENGINE *);
140 const RSA_METHOD *ENGINE_get_RSA(const ENGINE *);
141 const DSA_METHOD *ENGINE_get_DSA(const ENGINE *);
142 const ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *);
143 const ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *);
144 const DH_METHOD *ENGINE_get_DH(const ENGINE *);
145 const RAND_METHOD *ENGINE_get_RAND(const ENGINE *);
146 const STORE_METHOD *ENGINE_get_STORE(const ENGINE *);
147 
148 const EVP_CIPHER *ENGINE_get_cipher(ENGINE *, int);
149 const EVP_MD *ENGINE_get_digest(ENGINE *, int);
150 int ENGINE_get_flags(const ENGINE *);
151 const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *);
152 EVP_PKEY *ENGINE_load_private_key(ENGINE *, const char *, UI_METHOD *, void *);
153 EVP_PKEY *ENGINE_load_public_key(ENGINE *, const char *, UI_METHOD *, void *);
154 void ENGINE_add_conf_module(void);
155 """
156 
157 MACROS = """
158 """
159 
160 CUSTOMIZATIONS = """
161 """
162 
163 CONDITIONAL_NAMES = {}
164
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/cryptography/hazmat/bindings/openssl/engine.py b/cryptography/hazmat/bindings/openssl/engine.py
--- a/cryptography/hazmat/bindings/openssl/engine.py
+++ b/cryptography/hazmat/bindings/openssl/engine.py
@@ -24,11 +24,11 @@
 typedef ... DH_METHOD;
 typedef ... RAND_METHOD;
 typedef ... STORE_METHOD;
-typedef ... ENGINE_GEN_INT_FUNC_PTR;
-typedef ... ENGINE_CTRL_FUNC_PTR;
-typedef ... ENGINE_LOAD_KEY_PTR;
-typedef ... ENGINE_CIPHERS_PTR;
-typedef ... ENGINE_DIGESTS_PTR;
+typedef ... *ENGINE_GEN_INT_FUNC_PTR;
+typedef ... *ENGINE_CTRL_FUNC_PTR;
+typedef ... *ENGINE_LOAD_KEY_PTR;
+typedef ... *ENGINE_CIPHERS_PTR;
+typedef ... *ENGINE_DIGESTS_PTR;
 typedef ... ENGINE_CMD_DEFN;
 typedef ... UI_METHOD;

{"golden_diff": "diff --git a/cryptography/hazmat/bindings/openssl/engine.py b/cryptography/hazmat/bindings/openssl/engine.py\n--- a/cryptography/hazmat/bindings/openssl/engine.py\n+++ b/cryptography/hazmat/bindings/openssl/engine.py\n@@ -24,11 +24,11 @@\n typedef ... DH_METHOD;\n typedef ... RAND_METHOD;\n typedef ... STORE_METHOD;\n-typedef ... ENGINE_GEN_INT_FUNC_PTR;\n-typedef ... ENGINE_CTRL_FUNC_PTR;\n-typedef ... ENGINE_LOAD_KEY_PTR;\n-typedef ... ENGINE_CIPHERS_PTR;\n-typedef ... ENGINE_DIGESTS_PTR;\n+typedef ... *ENGINE_GEN_INT_FUNC_PTR;\n+typedef ... *ENGINE_CTRL_FUNC_PTR;\n+typedef ... *ENGINE_LOAD_KEY_PTR;\n+typedef ... *ENGINE_CIPHERS_PTR;\n+typedef ... *ENGINE_DIGESTS_PTR;\n typedef ... ENGINE_CMD_DEFN;\n typedef ... UI_METHOD;\n", "issue": "Use typedef ... *FOO_PTR; where appropriate.\nSo that FFI knows that the underlying type is opaque but that this is a pointer.\n\nThis makes `ffi.typeof` work correctly on bindings where functions take opaque typedef pointers such as some of the `ENGINE_` stuff.\n\nSee here for an example of it going wrong https://gist.github.com/public/8456596\n\n", "before_files": [{"content": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#    http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n# implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nINCLUDES = \"\"\"\n#include <openssl/engine.h>\n\"\"\"\n\nTYPES = \"\"\"\ntypedef ... ENGINE;\ntypedef ... RSA_METHOD;\ntypedef ... DSA_METHOD;\ntypedef ... ECDH_METHOD;\ntypedef ... ECDSA_METHOD;\ntypedef ... DH_METHOD;\ntypedef ... RAND_METHOD;\ntypedef ... STORE_METHOD;\ntypedef ... ENGINE_GEN_INT_FUNC_PTR;\ntypedef ... ENGINE_CTRL_FUNC_PTR;\ntypedef ... ENGINE_LOAD_KEY_PTR;\ntypedef ... ENGINE_CIPHERS_PTR;\ntypedef ... ENGINE_DIGESTS_PTR;\ntypedef ... ENGINE_CMD_DEFN;\ntypedef ... UI_METHOD;\n\nstatic const unsigned int ENGINE_METHOD_RSA;\nstatic const unsigned int ENGINE_METHOD_DSA;\nstatic const unsigned int ENGINE_METHOD_RAND;\nstatic const unsigned int ENGINE_METHOD_ECDH;\nstatic const unsigned int ENGINE_METHOD_ECDSA;\nstatic const unsigned int ENGINE_METHOD_CIPHERS;\nstatic const unsigned int ENGINE_METHOD_DIGESTS;\nstatic const unsigned int ENGINE_METHOD_STORE;\nstatic const unsigned int ENGINE_METHOD_ALL;\nstatic const unsigned int ENGINE_METHOD_NONE;\n\"\"\"\n\nFUNCTIONS = \"\"\"\nENGINE *ENGINE_get_first(void);\nENGINE *ENGINE_get_last(void);\nENGINE *ENGINE_get_next(ENGINE *);\nENGINE *ENGINE_get_prev(ENGINE *);\nint ENGINE_add(ENGINE *);\nint ENGINE_remove(ENGINE *);\nENGINE *ENGINE_by_id(const char *);\nint ENGINE_init(ENGINE *);\nint ENGINE_finish(ENGINE *);\nvoid ENGINE_load_openssl(void);\nvoid ENGINE_load_dynamic(void);\nvoid ENGINE_load_cryptodev(void);\nvoid ENGINE_load_builtin_engines(void);\nvoid ENGINE_cleanup(void);\nENGINE *ENGINE_get_default_RSA(void);\nENGINE *ENGINE_get_default_DSA(void);\nENGINE *ENGINE_get_default_ECDH(void);\nENGINE *ENGINE_get_default_ECDSA(void);\nENGINE *ENGINE_get_default_DH(void);\nENGINE *ENGINE_get_default_RAND(void);\nENGINE *ENGINE_get_cipher_engine(int);\nENGINE *ENGINE_get_digest_engine(int);\nint ENGINE_set_default_RSA(ENGINE *);\nint ENGINE_set_default_DSA(ENGINE *);\nint ENGINE_set_default_ECDH(ENGINE *);\nint ENGINE_set_default_ECDSA(ENGINE *);\nint ENGINE_set_default_DH(ENGINE *);\nint ENGINE_set_default_RAND(ENGINE *);\nint ENGINE_set_default_ciphers(ENGINE *);\nint ENGINE_set_default_digests(ENGINE *);\nint ENGINE_set_default_string(ENGINE *, const char *);\nint ENGINE_set_default(ENGINE *, unsigned int);\nunsigned int ENGINE_get_table_flags(void);\nvoid ENGINE_set_table_flags(unsigned int);\nint ENGINE_register_RSA(ENGINE *);\nvoid ENGINE_unregister_RSA(ENGINE *);\nvoid ENGINE_register_all_RSA(void);\nint ENGINE_register_DSA(ENGINE *);\nvoid ENGINE_unregister_DSA(ENGINE *);\nvoid ENGINE_register_all_DSA(void);\nint ENGINE_register_ECDH(ENGINE *);\nvoid ENGINE_unregister_ECDH(ENGINE *);\nvoid ENGINE_register_all_ECDH(void);\nint ENGINE_register_ECDSA(ENGINE *);\nvoid ENGINE_unregister_ECDSA(ENGINE *);\nvoid ENGINE_register_all_ECDSA(void);\nint ENGINE_register_DH(ENGINE *);\nvoid ENGINE_unregister_DH(ENGINE *);\nvoid ENGINE_register_all_DH(void);\nint ENGINE_register_RAND(ENGINE *);\nvoid ENGINE_unregister_RAND(ENGINE *);\nvoid ENGINE_register_all_RAND(void);\nint ENGINE_register_STORE(ENGINE *);\nvoid ENGINE_unregister_STORE(ENGINE *);\nvoid ENGINE_register_all_STORE(void);\nint ENGINE_register_ciphers(ENGINE *);\nvoid ENGINE_unregister_ciphers(ENGINE *);\nvoid ENGINE_register_all_ciphers(void);\nint ENGINE_register_digests(ENGINE *);\nvoid ENGINE_unregister_digests(ENGINE *);\nvoid ENGINE_register_all_digests(void);\nint ENGINE_register_complete(ENGINE *);\nint ENGINE_register_all_complete(void);\nint ENGINE_ctrl(ENGINE *, int, long, void *, void (*)(void));\nint ENGINE_cmd_is_executable(ENGINE *, int);\nint ENGINE_ctrl_cmd(ENGINE *, const char *, long, void *, void (*)(void), int);\nint ENGINE_ctrl_cmd_string(ENGINE *, const char *, const char *, int);\n\nENGINE *ENGINE_new(void);\nint ENGINE_free(ENGINE *);\nint ENGINE_up_ref(ENGINE *);\nint ENGINE_set_id(ENGINE *, const char *);\nint ENGINE_set_name(ENGINE *, const char *);\nint ENGINE_set_RSA(ENGINE *, const RSA_METHOD *);\nint ENGINE_set_DSA(ENGINE *, const DSA_METHOD *);\nint ENGINE_set_ECDH(ENGINE *, const ECDH_METHOD *);\nint ENGINE_set_ECDSA(ENGINE *, const ECDSA_METHOD *);\nint ENGINE_set_DH(ENGINE *, const DH_METHOD *);\nint ENGINE_set_RAND(ENGINE *, const RAND_METHOD *);\nint ENGINE_set_STORE(ENGINE *, const STORE_METHOD *);\nint ENGINE_set_destroy_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR);\nint ENGINE_set_init_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR);\nint ENGINE_set_finish_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR);\nint ENGINE_set_ctrl_function(ENGINE *, ENGINE_CTRL_FUNC_PTR);\nint ENGINE_set_load_privkey_function(ENGINE *, ENGINE_LOAD_KEY_PTR);\nint ENGINE_set_load_pubkey_function(ENGINE *, ENGINE_LOAD_KEY_PTR);\nint ENGINE_set_ciphers(ENGINE *, ENGINE_CIPHERS_PTR);\nint ENGINE_set_digests(ENGINE *, ENGINE_DIGESTS_PTR);\nint ENGINE_set_flags(ENGINE *, int);\nint ENGINE_set_cmd_defns(ENGINE *, const ENGINE_CMD_DEFN *);\nconst char *ENGINE_get_id(const ENGINE *);\nconst char *ENGINE_get_name(const ENGINE *);\nconst RSA_METHOD *ENGINE_get_RSA(const ENGINE *);\nconst DSA_METHOD *ENGINE_get_DSA(const ENGINE *);\nconst ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *);\nconst ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *);\nconst DH_METHOD *ENGINE_get_DH(const ENGINE *);\nconst RAND_METHOD *ENGINE_get_RAND(const ENGINE *);\nconst STORE_METHOD *ENGINE_get_STORE(const ENGINE *);\n\nconst EVP_CIPHER *ENGINE_get_cipher(ENGINE *, int);\nconst EVP_MD *ENGINE_get_digest(ENGINE *, int);\nint ENGINE_get_flags(const ENGINE *);\nconst ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *);\nEVP_PKEY *ENGINE_load_private_key(ENGINE *, const char *, UI_METHOD *, void *);\nEVP_PKEY *ENGINE_load_public_key(ENGINE *, const char *, UI_METHOD *, void *);\nvoid ENGINE_add_conf_module(void);\n\"\"\"\n\nMACROS = \"\"\"\n\"\"\"\n\nCUSTOMIZATIONS = \"\"\"\n\"\"\"\n\nCONDITIONAL_NAMES = {}\n", "path": "cryptography/hazmat/bindings/openssl/engine.py"}], "after_files": [{"content": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#    http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n# implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nINCLUDES = \"\"\"\n#include <openssl/engine.h>\n\"\"\"\n\nTYPES = \"\"\"\ntypedef ... ENGINE;\ntypedef ... RSA_METHOD;\ntypedef ... DSA_METHOD;\ntypedef ... ECDH_METHOD;\ntypedef ... ECDSA_METHOD;\ntypedef ... DH_METHOD;\ntypedef ... RAND_METHOD;\ntypedef ... STORE_METHOD;\ntypedef ... *ENGINE_GEN_INT_FUNC_PTR;\ntypedef ... *ENGINE_CTRL_FUNC_PTR;\ntypedef ... *ENGINE_LOAD_KEY_PTR;\ntypedef ... *ENGINE_CIPHERS_PTR;\ntypedef ... *ENGINE_DIGESTS_PTR;\ntypedef ... ENGINE_CMD_DEFN;\ntypedef ... UI_METHOD;\n\nstatic const unsigned int ENGINE_METHOD_RSA;\nstatic const unsigned int ENGINE_METHOD_DSA;\nstatic const unsigned int ENGINE_METHOD_RAND;\nstatic const unsigned int ENGINE_METHOD_ECDH;\nstatic const unsigned int ENGINE_METHOD_ECDSA;\nstatic const unsigned int ENGINE_METHOD_CIPHERS;\nstatic const unsigned int ENGINE_METHOD_DIGESTS;\nstatic const unsigned int ENGINE_METHOD_STORE;\nstatic const unsigned int ENGINE_METHOD_ALL;\nstatic const unsigned int ENGINE_METHOD_NONE;\n\"\"\"\n\nFUNCTIONS = \"\"\"\nENGINE *ENGINE_get_first(void);\nENGINE *ENGINE_get_last(void);\nENGINE *ENGINE_get_next(ENGINE *);\nENGINE *ENGINE_get_prev(ENGINE *);\nint ENGINE_add(ENGINE *);\nint ENGINE_remove(ENGINE *);\nENGINE *ENGINE_by_id(const char *);\nint ENGINE_init(ENGINE *);\nint ENGINE_finish(ENGINE *);\nvoid ENGINE_load_openssl(void);\nvoid ENGINE_load_dynamic(void);\nvoid ENGINE_load_cryptodev(void);\nvoid ENGINE_load_builtin_engines(void);\nvoid ENGINE_cleanup(void);\nENGINE *ENGINE_get_default_RSA(void);\nENGINE *ENGINE_get_default_DSA(void);\nENGINE *ENGINE_get_default_ECDH(void);\nENGINE *ENGINE_get_default_ECDSA(void);\nENGINE *ENGINE_get_default_DH(void);\nENGINE *ENGINE_get_default_RAND(void);\nENGINE *ENGINE_get_cipher_engine(int);\nENGINE *ENGINE_get_digest_engine(int);\nint ENGINE_set_default_RSA(ENGINE *);\nint ENGINE_set_default_DSA(ENGINE *);\nint ENGINE_set_default_ECDH(ENGINE *);\nint ENGINE_set_default_ECDSA(ENGINE *);\nint ENGINE_set_default_DH(ENGINE *);\nint ENGINE_set_default_RAND(ENGINE *);\nint ENGINE_set_default_ciphers(ENGINE *);\nint ENGINE_set_default_digests(ENGINE *);\nint ENGINE_set_default_string(ENGINE *, const char *);\nint ENGINE_set_default(ENGINE *, unsigned int);\nunsigned int ENGINE_get_table_flags(void);\nvoid ENGINE_set_table_flags(unsigned int);\nint ENGINE_register_RSA(ENGINE *);\nvoid ENGINE_unregister_RSA(ENGINE *);\nvoid ENGINE_register_all_RSA(void);\nint ENGINE_register_DSA(ENGINE *);\nvoid ENGINE_unregister_DSA(ENGINE *);\nvoid ENGINE_register_all_DSA(void);\nint ENGINE_register_ECDH(ENGINE *);\nvoid ENGINE_unregister_ECDH(ENGINE *);\nvoid ENGINE_register_all_ECDH(void);\nint ENGINE_register_ECDSA(ENGINE *);\nvoid ENGINE_unregister_ECDSA(ENGINE *);\nvoid ENGINE_register_all_ECDSA(void);\nint ENGINE_register_DH(ENGINE *);\nvoid ENGINE_unregister_DH(ENGINE *);\nvoid ENGINE_register_all_DH(void);\nint ENGINE_register_RAND(ENGINE *);\nvoid ENGINE_unregister_RAND(ENGINE *);\nvoid ENGINE_register_all_RAND(void);\nint ENGINE_register_STORE(ENGINE *);\nvoid ENGINE_unregister_STORE(ENGINE *);\nvoid ENGINE_register_all_STORE(void);\nint ENGINE_register_ciphers(ENGINE *);\nvoid ENGINE_unregister_ciphers(ENGINE *);\nvoid ENGINE_register_all_ciphers(void);\nint ENGINE_register_digests(ENGINE *);\nvoid ENGINE_unregister_digests(ENGINE *);\nvoid ENGINE_register_all_digests(void);\nint ENGINE_register_complete(ENGINE *);\nint ENGINE_register_all_complete(void);\nint ENGINE_ctrl(ENGINE *, int, long, void *, void (*)(void));\nint ENGINE_cmd_is_executable(ENGINE *, int);\nint ENGINE_ctrl_cmd(ENGINE *, const char *, long, void *, void (*)(void), int);\nint ENGINE_ctrl_cmd_string(ENGINE *, const char *, const char *, int);\n\nENGINE *ENGINE_new(void);\nint ENGINE_free(ENGINE *);\nint ENGINE_up_ref(ENGINE *);\nint ENGINE_set_id(ENGINE *, const char *);\nint ENGINE_set_name(ENGINE *, const char *);\nint ENGINE_set_RSA(ENGINE *, const RSA_METHOD *);\nint ENGINE_set_DSA(ENGINE *, const DSA_METHOD *);\nint ENGINE_set_ECDH(ENGINE *, const ECDH_METHOD *);\nint ENGINE_set_ECDSA(ENGINE *, const ECDSA_METHOD *);\nint ENGINE_set_DH(ENGINE *, const DH_METHOD *);\nint ENGINE_set_RAND(ENGINE *, const RAND_METHOD *);\nint ENGINE_set_STORE(ENGINE *, const STORE_METHOD *);\nint ENGINE_set_destroy_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR);\nint ENGINE_set_init_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR);\nint ENGINE_set_finish_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR);\nint ENGINE_set_ctrl_function(ENGINE *, ENGINE_CTRL_FUNC_PTR);\nint ENGINE_set_load_privkey_function(ENGINE *, ENGINE_LOAD_KEY_PTR);\nint ENGINE_set_load_pubkey_function(ENGINE *, ENGINE_LOAD_KEY_PTR);\nint ENGINE_set_ciphers(ENGINE *, ENGINE_CIPHERS_PTR);\nint ENGINE_set_digests(ENGINE *, ENGINE_DIGESTS_PTR);\nint ENGINE_set_flags(ENGINE *, int);\nint ENGINE_set_cmd_defns(ENGINE *, const ENGINE_CMD_DEFN *);\nconst char *ENGINE_get_id(const ENGINE *);\nconst char *ENGINE_get_name(const ENGINE *);\nconst RSA_METHOD *ENGINE_get_RSA(const ENGINE *);\nconst DSA_METHOD *ENGINE_get_DSA(const ENGINE *);\nconst ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *);\nconst ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *);\nconst DH_METHOD *ENGINE_get_DH(const ENGINE *);\nconst RAND_METHOD *ENGINE_get_RAND(const ENGINE *);\nconst STORE_METHOD *ENGINE_get_STORE(const ENGINE *);\n\nconst EVP_CIPHER *ENGINE_get_cipher(ENGINE *, int);\nconst EVP_MD *ENGINE_get_digest(ENGINE *, int);\nint ENGINE_get_flags(const ENGINE *);\nconst ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *);\nEVP_PKEY *ENGINE_load_private_key(ENGINE *, const char *, UI_METHOD *, void *);\nEVP_PKEY *ENGINE_load_public_key(ENGINE *, const char *, UI_METHOD *, void *);\nvoid ENGINE_add_conf_module(void);\n\"\"\"\n\nMACROS = \"\"\"\n\"\"\"\n\nCUSTOMIZATIONS = \"\"\"\n\"\"\"\n\nCONDITIONAL_NAMES = {}\n", "path": "cryptography/hazmat/bindings/openssl/engine.py"}]}