summaryrefslogtreecommitdiff
path: root/doc/html/_modules/M2Crypto/SSL/Context.html
blob: 4f7dd23521d828fe8ccc839d8d70bf03d02ba4e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548

<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>M2Crypto.SSL.Context &#8212; M2Crypto  documentation</title>
    <link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
    <script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
    <script src="../../../_static/jquery.js"></script>
    <script src="../../../_static/underscore.js"></script>
    <script src="../../../_static/doctools.js"></script>
    <script src="../../../_static/language_data.js"></script>
    <link rel="index" title="Index" href="../../../genindex.html" />
    <link rel="search" title="Search" href="../../../search.html" />
   
  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
  
  
  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />

  </head><body>
  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          

          <div class="body" role="main">
            
  <h1>Source code for M2Crypto.SSL.Context</h1><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">absolute_import</span>

<span class="sd">&quot;&quot;&quot;SSL Context</span>

<span class="sd">Copyright (c) 1999-2004 Ng Pheng Siong. All rights reserved.&quot;&quot;&quot;</span>

<span class="kn">from</span> <span class="nn">M2Crypto</span> <span class="kn">import</span> <span class="n">BIO</span><span class="p">,</span> <span class="n">Err</span><span class="p">,</span> <span class="n">RSA</span><span class="p">,</span> <span class="n">X509</span><span class="p">,</span> <span class="n">m2</span><span class="p">,</span> <span class="n">util</span>  <span class="c1"># noqa</span>
<span class="kn">from</span> <span class="nn">M2Crypto.SSL</span> <span class="kn">import</span> <span class="n">cb</span>  <span class="c1"># noqa</span>
<span class="kn">from</span> <span class="nn">M2Crypto.SSL.Session</span> <span class="kn">import</span> <span class="n">Session</span>  <span class="c1"># noqa</span>
<span class="kn">from</span> <span class="nn">weakref</span> <span class="kn">import</span> <span class="n">WeakValueDictionary</span>
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">AnyStr</span><span class="p">,</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Union</span>  <span class="c1"># noqa</span>

<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;ctxmap&#39;</span><span class="p">,</span> <span class="s1">&#39;Context&#39;</span><span class="p">,</span> <span class="s1">&#39;map&#39;</span><span class="p">]</span>


<span class="k">class</span> <span class="nc">_ctxmap</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="n">singleton</span> <span class="o">=</span> <span class="kc">None</span>  <span class="c1"># type: Optional[_ctxmap]</span>

    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># type: () -&gt; None</span>
        <span class="sd">&quot;&quot;&quot;Simple WeakReffed list.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ctxmap</span> <span class="o">=</span> <span class="n">WeakValueDictionary</span><span class="p">()</span>

    <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
        <span class="c1"># type: (int) -&gt; Any</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ctxmap</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>

    <span class="k">def</span> <span class="fm">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
        <span class="c1"># type: (int, Any) -&gt; None</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ctxmap</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>

    <span class="k">def</span> <span class="fm">__delitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
        <span class="c1"># type: (int) -&gt; None</span>
        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ctxmap</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>


<div class="viewcode-block" id="ctxmap"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.ctxmap">[docs]</a><span class="k">def</span> <span class="nf">ctxmap</span><span class="p">():</span>
    <span class="c1"># type: () -&gt; _ctxmap</span>
    <span class="k">if</span> <span class="n">_ctxmap</span><span class="o">.</span><span class="n">singleton</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
        <span class="n">_ctxmap</span><span class="o">.</span><span class="n">singleton</span> <span class="o">=</span> <span class="n">_ctxmap</span><span class="p">()</span>
    <span class="k">return</span> <span class="n">_ctxmap</span><span class="o">.</span><span class="n">singleton</span></div>
<span class="c1"># deprecated!!!</span>
<span class="nb">map</span> <span class="o">=</span> <span class="n">ctxmap</span>


<div class="viewcode-block" id="Context"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context">[docs]</a><span class="k">class</span> <span class="nc">Context</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>

    <span class="sd">&quot;&quot;&quot;&#39;Context&#39; for SSL connections.&quot;&quot;&quot;</span>

    <span class="n">m2_ssl_ctx_free</span> <span class="o">=</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_free</span>

    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protocol</span><span class="o">=</span><span class="s1">&#39;tls&#39;</span><span class="p">,</span> <span class="n">weak_crypto</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
                 <span class="n">post_connection_check</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="c1"># type: (str, Optional[int], Optional[Callable]) -&gt; None</span>
        <span class="n">proto</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">m2</span><span class="p">,</span> <span class="n">protocol</span> <span class="o">+</span> <span class="s1">&#39;_method&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">proto</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
            <span class="c1"># default is &#39;sslv23&#39; for older versions of OpenSSL</span>
            <span class="k">if</span> <span class="n">protocol</span> <span class="o">==</span> <span class="s1">&#39;tls&#39;</span><span class="p">:</span>
                <span class="n">proto</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">m2</span><span class="p">,</span> <span class="s1">&#39;sslv23_method&#39;</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;no such protocol &#39;</span><span class="si">%s</span><span class="s2">&#39;&quot;</span> <span class="o">%</span> <span class="n">protocol</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">ctx</span> <span class="o">=</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_new</span><span class="p">(</span><span class="n">proto</span><span class="p">())</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">allow_unknown_ca</span> <span class="o">=</span> <span class="mi">0</span>  <span class="c1"># type: Union[int, bool]</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">post_connection_check</span> <span class="o">=</span> <span class="n">post_connection_check</span>
        <span class="n">ctxmap</span><span class="p">()[</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">)]</span> <span class="o">=</span> <span class="bp">self</span>
        <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_cache_size</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="mi">128</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">weak_crypto</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">protocol</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;sslv23&#39;</span><span class="p">,</span> <span class="s1">&#39;tls&#39;</span><span class="p">):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">set_options</span><span class="p">(</span><span class="n">m2</span><span class="o">.</span><span class="n">SSL_OP_ALL</span> <span class="o">|</span> <span class="n">m2</span><span class="o">.</span><span class="n">SSL_OP_NO_SSLv2</span> <span class="o">|</span>
                             <span class="n">m2</span><span class="o">.</span><span class="n">SSL_OP_NO_SSLv3</span><span class="p">)</span>

    <span class="k">def</span> <span class="fm">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># type: () -&gt; None</span>
        <span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;ctx&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">m2_ssl_ctx_free</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">)</span>

<div class="viewcode-block" id="Context.close"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.close">[docs]</a>    <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># type: () -&gt; None</span>
        <span class="k">del</span> <span class="n">ctxmap</span><span class="p">()[</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">)]</span></div>

<div class="viewcode-block" id="Context.load_cert"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.load_cert">[docs]</a>    <span class="k">def</span> <span class="nf">load_cert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certfile</span><span class="p">,</span> <span class="n">keyfile</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
                  <span class="n">callback</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">passphrase_callback</span><span class="p">):</span>
        <span class="c1"># type: (AnyStr, Optional[AnyStr], Callable) -&gt; None</span>
        <span class="sd">&quot;&quot;&quot;Load certificate and private key into the context.</span>

<span class="sd">        :param certfile: File that contains the PEM-encoded certificate.</span>
<span class="sd">        :param keyfile:  File that contains the PEM-encoded private key.</span>
<span class="sd">                         Default value of None indicates that the private key</span>
<span class="sd">                         is to be found in &#39;certfile&#39;.</span>
<span class="sd">        :param callback: Callable object to be invoked if the private key is</span>
<span class="sd">                         passphrase-protected. Default callback provides a</span>
<span class="sd">                         simple terminal-style input for the passphrase.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_passphrase_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
        <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_use_cert</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">certfile</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">keyfile</span><span class="p">:</span>
            <span class="n">keyfile</span> <span class="o">=</span> <span class="n">certfile</span>
        <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_use_privkey</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">keyfile</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_check_privkey</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">):</span>
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;public/private key mismatch&#39;</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.load_cert_chain"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.load_cert_chain">[docs]</a>    <span class="k">def</span> <span class="nf">load_cert_chain</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certchainfile</span><span class="p">,</span> <span class="n">keyfile</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
                        <span class="n">callback</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">passphrase_callback</span><span class="p">):</span>
        <span class="c1"># type: (AnyStr, Optional[AnyStr], Callable) -&gt; None</span>
        <span class="sd">&quot;&quot;&quot;Load certificate chain and private key into the context.</span>

<span class="sd">        :param certchainfile: File object containing the PEM-encoded</span>
<span class="sd">                              certificate chain.</span>
<span class="sd">        :param keyfile:       File object containing the PEM-encoded private</span>
<span class="sd">                              key. Default value of None indicates that the</span>
<span class="sd">                              private key is to be found in &#39;certchainfile&#39;.</span>
<span class="sd">        :param callback:      Callable object to be invoked if the private key</span>
<span class="sd">                              is passphrase-protected. Default callback</span>
<span class="sd">                              provides a simple terminal-style input for the</span>
<span class="sd">                              passphrase.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_passphrase_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
        <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_use_cert_chain</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">certchainfile</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">keyfile</span><span class="p">:</span>
            <span class="n">keyfile</span> <span class="o">=</span> <span class="n">certchainfile</span>
        <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_use_privkey</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">keyfile</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_check_privkey</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">):</span>
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;public/private key mismatch&#39;</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_client_CA_list_from_file"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_client_CA_list_from_file">[docs]</a>    <span class="k">def</span> <span class="nf">set_client_CA_list_from_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cafile</span><span class="p">):</span>
        <span class="c1"># type: (AnyStr) -&gt; None</span>
        <span class="sd">&quot;&quot;&quot;Load CA certs into the context. These CA certs are sent to the</span>
<span class="sd">        peer during *SSLv3 certificate request*.</span>

<span class="sd">        :param cafile: File object containing one or more PEM-encoded CA</span>
<span class="sd">                       certificates concatenated together.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_client_CA_list_from_file</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">cafile</span><span class="p">)</span></div>

    <span class="c1"># Deprecated.</span>
    <span class="n">load_client_CA</span> <span class="o">=</span> <span class="n">load_client_ca</span> <span class="o">=</span> <span class="n">set_client_CA_list_from_file</span>

<div class="viewcode-block" id="Context.load_verify_locations"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.load_verify_locations">[docs]</a>    <span class="k">def</span> <span class="nf">load_verify_locations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cafile</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">capath</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="c1"># type: (Optional[AnyStr], Optional[AnyStr]) -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Load CA certs into the context.</span>

<span class="sd">        These CA certs are used during verification of the peer&#39;s</span>
<span class="sd">        certificate.</span>

<span class="sd">        :param cafile: File containing one or more PEM-encoded CA</span>
<span class="sd">                       certificates concatenated together.</span>

<span class="sd">        :param capath: Directory containing PEM-encoded CA certificates</span>
<span class="sd">                       (one certificate per file).</span>

<span class="sd">        :return: 0 if the operation failed because CAfile and CApath are NULL</span>
<span class="sd">                  or the processing at one of the locations specified failed.</span>
<span class="sd">                  Check the error stack to find out the reason.</span>

<span class="sd">                1 The operation succeeded.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="n">cafile</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">capath</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;cafile and capath can not both be None.&quot;</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_load_verify_locations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">cafile</span><span class="p">,</span> <span class="n">capath</span><span class="p">)</span></div>

    <span class="c1"># Deprecated.</span>
    <span class="n">load_verify_info</span> <span class="o">=</span> <span class="n">load_verify_locations</span>

<div class="viewcode-block" id="Context.set_session_id_ctx"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_session_id_ctx">[docs]</a>    <span class="k">def</span> <span class="nf">set_session_id_ctx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">):</span>
        <span class="c1"># type: (bytes) -&gt; None</span>
        <span class="sd">&quot;&quot;&quot;Sets the session id for the SSL.Context w/in a session can be reused.</span>

<span class="sd">        :param id: Sessions are generated within a certain context. When</span>
<span class="sd">                   exporting/importing sessions with</span>
<span class="sd">                   i2d_SSL_SESSION/d2i_SSL_SESSION it would be possible,</span>
<span class="sd">                   to re-import a session generated from another context</span>
<span class="sd">                   (e.g. another application), which might lead to</span>
<span class="sd">                   malfunctions. Therefore each application must set its</span>
<span class="sd">                   own session id context sid_ctx which is used to</span>
<span class="sd">                   distinguish the contexts and is stored in exported</span>
<span class="sd">                   sessions. The sid_ctx can be any kind of binary data</span>
<span class="sd">                   with a given length, it is therefore possible to use</span>
<span class="sd">                   e.g. the name of the application and/or the hostname</span>
<span class="sd">                   and/or service name.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">ret</span> <span class="o">=</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_session_id_context</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="nb">id</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">ret</span><span class="p">:</span>
            <span class="k">raise</span> <span class="n">Err</span><span class="o">.</span><span class="n">SSLError</span><span class="p">(</span><span class="n">Err</span><span class="o">.</span><span class="n">get_error_code</span><span class="p">(),</span> <span class="s1">&#39;&#39;</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_default_verify_paths"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_default_verify_paths">[docs]</a>    <span class="k">def</span> <span class="nf">set_default_verify_paths</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># type: () -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Specifies that the default locations from which CA certs are</span>
<span class="sd">        loaded should be used.</span>

<span class="sd">        There is one default directory and one default file. The default</span>
<span class="sd">        CA certificates directory is called &quot;certs&quot; in the default</span>
<span class="sd">        OpenSSL directory. Alternatively the SSL_CERT_DIR environment</span>
<span class="sd">        variable can be defined to override this location. The default</span>
<span class="sd">        CA certificates file is called &quot;cert.pem&quot; in the default OpenSSL</span>
<span class="sd">        directory. Alternatively the SSL_CERT_FILE environment variable</span>
<span class="sd">        can be defined to override this location.</span>

<span class="sd">        @return 0 if the operation failed. A missing default location is</span>
<span class="sd">                  still treated as a success. No error code is set.</span>

<span class="sd">                1 The operation succeeded.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">ret</span> <span class="o">=</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_default_verify_paths</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">ret</span><span class="p">:</span>
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Cannot use default SSL certificate store!&#39;</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_allow_unknown_ca"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_allow_unknown_ca">[docs]</a>    <span class="k">def</span> <span class="nf">set_allow_unknown_ca</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ok</span><span class="p">):</span>
        <span class="c1"># type: (Union[int, bool]) -&gt; None</span>
        <span class="sd">&quot;&quot;&quot;Set the context to accept/reject a peer certificate if the</span>
<span class="sd">        certificate&#39;s CA is unknown.</span>

<span class="sd">        :param ok:       True to accept, False to reject.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">allow_unknown_ca</span> <span class="o">=</span> <span class="n">ok</span></div>

<div class="viewcode-block" id="Context.get_allow_unknown_ca"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.get_allow_unknown_ca">[docs]</a>    <span class="k">def</span> <span class="nf">get_allow_unknown_ca</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># type: () -&gt; Union[int, bool]</span>
        <span class="sd">&quot;&quot;&quot;Get the context&#39;s setting that accepts/rejects a peer</span>
<span class="sd">        certificate if the certificate&#39;s CA is unknown.</span>

<span class="sd">        FIXME 2Bconverted to bool</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_unknown_ca</span></div>

<div class="viewcode-block" id="Context.set_verify"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_verify">[docs]</a>    <span class="k">def</span> <span class="nf">set_verify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">depth</span><span class="p">,</span> <span class="n">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="c1"># type: (int, int, Optional[Callable]) -&gt; None</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Set verify options. Most applications will need to call this</span>
<span class="sd">        method with the right options to make a secure SSL connection.</span>

<span class="sd">        :param mode:     The verification mode to use. Typically at least</span>
<span class="sd">                         SSL.verify_peer is used. Clients would also typically</span>
<span class="sd">                         add SSL.verify_fail_if_no_peer_cert.</span>
<span class="sd">        :param depth:    The maximum allowed depth of the certificate chain</span>
<span class="sd">                         returned by the peer.</span>
<span class="sd">        :param callback: Callable that can be used to specify custom</span>
<span class="sd">                         verification checks.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="n">callback</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
            <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_verify_default</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">mode</span><span class="p">)</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_verify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
        <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_verify_depth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">depth</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.get_verify_mode"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.get_verify_mode">[docs]</a>    <span class="k">def</span> <span class="nf">get_verify_mode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># type: () -&gt; int</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_get_verify_mode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.get_verify_depth"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.get_verify_depth">[docs]</a>    <span class="k">def</span> <span class="nf">get_verify_depth</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># type: () -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Returns the verification mode currently set in the SSL Context.&quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_get_verify_depth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_tmp_dh"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_tmp_dh">[docs]</a>    <span class="k">def</span> <span class="nf">set_tmp_dh</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dhpfile</span><span class="p">):</span>
        <span class="c1"># type: (AnyStr) -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Load ephemeral DH parameters into the context.</span>

<span class="sd">        :param dhpfile: Filename of the file containing the PEM-encoded</span>
<span class="sd">                        DH parameters.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">f</span> <span class="o">=</span> <span class="n">BIO</span><span class="o">.</span><span class="n">openfile</span><span class="p">(</span><span class="n">dhpfile</span><span class="p">)</span>
        <span class="n">dhp</span> <span class="o">=</span> <span class="n">m2</span><span class="o">.</span><span class="n">dh_read_parameters</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">bio_ptr</span><span class="p">())</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_tmp_dh</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">dhp</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_tmp_dh_callback"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_tmp_dh_callback">[docs]</a>    <span class="k">def</span> <span class="nf">set_tmp_dh_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="c1"># type: (Optional[Callable]) -&gt; None</span>
        <span class="sd">&quot;&quot;&quot;Sets the callback function for SSL.Context.</span>

<span class="sd">        :param callback: Callable to be used when a DH parameters are required.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="n">callback</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
            <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_tmp_dh_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_tmp_rsa"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_tmp_rsa">[docs]</a>    <span class="k">def</span> <span class="nf">set_tmp_rsa</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rsa</span><span class="p">):</span>
        <span class="c1"># type: (RSA.RSA) -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Load ephemeral RSA key into the context.</span>

<span class="sd">        :param rsa: RSA.RSA instance.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rsa</span><span class="p">,</span> <span class="n">RSA</span><span class="o">.</span><span class="n">RSA</span><span class="p">):</span>
            <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_tmp_rsa</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">rsa</span><span class="o">.</span><span class="n">rsa</span><span class="p">)</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;Expected an instance of RSA.RSA, got </span><span class="si">%s</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="n">rsa</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_tmp_rsa_callback"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_tmp_rsa_callback">[docs]</a>    <span class="k">def</span> <span class="nf">set_tmp_rsa_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="c1"># type: (Optional[Callable]) -&gt; None</span>
        <span class="sd">&quot;&quot;&quot;Sets the callback function to be used when</span>
<span class="sd">        a temporary/ephemeral RSA key is required.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="n">callback</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
            <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_tmp_rsa_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_info_callback"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_info_callback">[docs]</a>    <span class="k">def</span> <span class="nf">set_info_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="o">=</span><span class="n">cb</span><span class="o">.</span><span class="n">ssl_info_callback</span><span class="p">):</span>
        <span class="c1"># type: (Callable) -&gt; None</span>
        <span class="sd">&quot;&quot;&quot;Set a callback function to get state information.</span>

<span class="sd">        It can be used to get state information about the SSL</span>
<span class="sd">        connections that are created from this context.</span>

<span class="sd">        :param callback: Callback function. The default prints</span>
<span class="sd">                         information to stderr.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_info_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_cipher_list"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_cipher_list">[docs]</a>    <span class="k">def</span> <span class="nf">set_cipher_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cipher_list</span><span class="p">):</span>
        <span class="c1"># type: (str) -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Sets the list of available ciphers.</span>

<span class="sd">        :param cipher_list: The format of the string is described in</span>
<span class="sd">                            ciphers(1).</span>
<span class="sd">        :return: 1 if any cipher could be selected and 0 on complete</span>
<span class="sd">                 failure.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_cipher_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">cipher_list</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.add_session"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.add_session">[docs]</a>    <span class="k">def</span> <span class="nf">add_session</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">session</span><span class="p">):</span>
        <span class="c1"># type: (Session) -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Add the session to the context.</span>

<span class="sd">        :param session: the session to be added.</span>

<span class="sd">        :return: 0 The operation failed. It was tried to add the same</span>
<span class="sd">                   (identical) session twice.</span>

<span class="sd">                 1 The operation succeeded.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_add_session</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">session</span><span class="o">.</span><span class="n">_ptr</span><span class="p">())</span></div>

<div class="viewcode-block" id="Context.remove_session"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.remove_session">[docs]</a>    <span class="k">def</span> <span class="nf">remove_session</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">session</span><span class="p">):</span>
        <span class="c1"># type: (Session) -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Remove the session from the context.</span>

<span class="sd">        :param session: the session to be removed.</span>

<span class="sd">        :return: 0 The operation failed. The session was not found in</span>
<span class="sd">                   the cache.</span>

<span class="sd">                 1 The operation succeeded.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_remove_session</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">session</span><span class="o">.</span><span class="n">_ptr</span><span class="p">())</span></div>

<div class="viewcode-block" id="Context.get_session_timeout"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.get_session_timeout">[docs]</a>    <span class="k">def</span> <span class="nf">get_session_timeout</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># type: () -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Get current session timeout.</span>

<span class="sd">        Whenever a new session is created, it is assigned a maximum</span>
<span class="sd">        lifetime.  This lifetime is specified by storing the creation</span>
<span class="sd">        time of the session and the timeout value valid at this time. If</span>
<span class="sd">        the actual time is later than creation time plus timeout, the</span>
<span class="sd">        session is not reused.</span>

<span class="sd">        Due to this realization, all sessions behave according to the</span>
<span class="sd">        timeout value valid at the time of the session negotiation.</span>
<span class="sd">        Changes of the timeout value do not affect already established</span>
<span class="sd">        sessions.</span>

<span class="sd">        Expired sessions are removed from the internal session cache,</span>
<span class="sd">        whenever SSL_CTX_flush_sessions(3) is called, either directly by</span>
<span class="sd">        the application or automatically (see</span>
<span class="sd">        SSL_CTX_set_session_cache_mode(3))</span>

<span class="sd">        The default value for session timeout is decided on a per</span>
<span class="sd">        protocol basis, see SSL_get_default_timeout(3).  All currently</span>
<span class="sd">        supported protocols have the same default timeout value of 300</span>
<span class="sd">        seconds.</span>

<span class="sd">        SSL_CTX_set_timeout() returns the previously set timeout value.</span>

<span class="sd">        :return: the currently set timeout value.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_get_session_timeout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_session_timeout"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_session_timeout">[docs]</a>    <span class="k">def</span> <span class="nf">set_session_timeout</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="p">):</span>
        <span class="c1"># type: (int) -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Set new session timeout.</span>

<span class="sd">        See self.get_session_timeout() for explanation of the session</span>
<span class="sd">        timeouts.</span>

<span class="sd">        :param timeout: new timeout value.</span>

<span class="sd">        :return: the previously set timeout value.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_session_timeout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_session_cache_mode"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_session_cache_mode">[docs]</a>    <span class="k">def</span> <span class="nf">set_session_cache_mode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mode</span><span class="p">):</span>
        <span class="c1"># type: (int) -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Enables/disables session caching.</span>

<span class="sd">        The mode is set by using m2.SSL_SESS_CACHE_* constants.</span>

<span class="sd">        :param mode: new mode value.</span>

<span class="sd">        :return: the previously set cache mode value.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_session_cache_mode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">mode</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.get_session_cache_mode"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.get_session_cache_mode">[docs]</a>    <span class="k">def</span> <span class="nf">get_session_cache_mode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># type: () -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Gets the current session caching.</span>

<span class="sd">        The mode is set to m2.SSL_SESS_CACHE_* constants.</span>

<span class="sd">        :return: the previously set cache mode value.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_get_session_cache_mode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.set_options"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.set_options">[docs]</a>    <span class="k">def</span> <span class="nf">set_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">):</span>
        <span class="c1"># type: (int) -&gt; int</span>
        <span class="sd">&quot;&quot;&quot;Adds the options set via bitmask in options to the Context.</span>

<span class="sd">        !!! Options already set before are not cleared!</span>

<span class="sd">        The behaviour of the SSL library can be changed by setting</span>
<span class="sd">        several options.  The options are coded as bitmasks and can be</span>
<span class="sd">        combined by a logical or operation (|).</span>

<span class="sd">        SSL.Context.set_options() and SSL.set_options() affect the</span>
<span class="sd">        (external) protocol behaviour of the SSL library. The (internal)</span>
<span class="sd">        behaviour of the API can be changed by using the similar</span>
<span class="sd">        SSL.Context.set_mode() and SSL.set_mode() functions.</span>

<span class="sd">        During a handshake, the option settings of the SSL object are</span>
<span class="sd">        used. When a new SSL object is created from a context using</span>
<span class="sd">        SSL(), the current option setting is copied. Changes to ctx</span>
<span class="sd">        do not affect already created SSL objects. SSL.clear() does not</span>
<span class="sd">        affect the settings.</span>

<span class="sd">        :param op: bitmask of additional options specified in</span>
<span class="sd">                   SSL_CTX_set_options(3) manpage.</span>

<span class="sd">        :return: the new options bitmask after adding options.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_set_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">,</span> <span class="n">op</span><span class="p">)</span></div>

<div class="viewcode-block" id="Context.get_cert_store"><a class="viewcode-back" href="../../../M2Crypto.SSL.html#M2Crypto.SSL.Context.Context.get_cert_store">[docs]</a>    <span class="k">def</span> <span class="nf">get_cert_store</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># type: () -&gt; X509.X509</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Get the certificate store associated with this context.</span>

<span class="sd">        :warning: The store is NOT refcounted, and as such can not be relied</span>
<span class="sd">                  to be valid once the context goes away or is changed.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">return</span> <span class="n">X509</span><span class="o">.</span><span class="n">X509_Store</span><span class="p">(</span><span class="n">m2</span><span class="o">.</span><span class="n">ssl_ctx_get_cert_store</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ctx</span><span class="p">))</span></div></div>
</pre></div>

          </div>
          
        </div>
      </div>
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../../../index.html">M2Crypto</a></h1>








<h3>Navigation</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../M2Crypto.html">M2Crypto Package</a></li>
</ul>

<div class="relations">
<h3>Related Topics</h3>
<ul>
  <li><a href="../../../index.html">Documentation overview</a><ul>
  <li><a href="../../index.html">Module code</a><ul>
  <li><a href="../SSL.html">M2Crypto.SSL</a><ul>
  </ul></li>
  </ul></li>
  </ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="../../../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" />
      <input type="submit" value="Go" />
    </form>
    </div>
</div>
<script>$('#searchbox').show(0);</script>








        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="footer">
      &copy;2017, Matej Cepl <mcepl@cepl.eu>.
      
      |
      Powered by <a href="http://sphinx-doc.org/">Sphinx 3.2.1</a>
      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
      
    </div>

    

    
  </body>
</html>