File: echo.py

package info (click to toggle)
m2crypto 0.46.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,952 kB
  • sloc: python: 22,921; makefile: 213; ansic: 94; sh: 17
file content (60 lines) | stat: -rw-r--r-- 1,363 bytes parent folder | download
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
#!/usr/bin/env python

from __future__ import print_function

"""A simple SSL 'echo' client.

Copyright (c) 1999-2003 Ng Pheng Siong. All rights reserved."""

import getopt, sys
from socket import gethostname
from M2Crypto import Err, Rand, SSL, X509

host = "127.0.0.1"
port = 9999

optlist, optarg = getopt.getopt(sys.argv[1:], "h:p:")
for opt in optlist:
    if "-h" in opt:
        host = opt[1]
    elif "-p" in opt:
        port = int(opt[1])

Rand.load_file("../randpool.dat", -1)

ctx = SSL.Context("sslv3")
ctx.load_cert_chain("client.pem")
# ctx.set_verify(SSL.verify_none, 10)
ctx.set_verify(SSL.verify_peer, 10, SSL.cb.ssl_verify_callback)
ctx.load_verify_locations("ca.pem")
# ctx.set_allow_unknown_ca(1)
ctx.set_info_callback()

s = SSL.Connection(ctx)
s.connect((host, port))
print("Host =", gethostname())
print("Cipher =", s.get_cipher().name())

## 2003-06-28, ngps: Depends on ctx.set_verify() above, RTFM for details.
## v = s.get_verify_result()
## if v != X509.V_OK:
##     s.close()
##     raise SystemExit, 'Server verification failed'

peer = s.get_peer_cert()
print("Server =", str(peer.get_subject()))

while 1:
    data = s.recv()
    if not data:
        break
    sys.stdout.write(data)
    sys.stdout.flush()
    buf = sys.stdin.readline()
    if not buf:
        break
    s.send(buf)

s.close()

Rand.save_file("../randpool.dat")