diff options
-rw-r--r-- | netlib/__init__.py | 1 | ||||
-rw-r--r-- | netlib/certffi.py | 9 | ||||
-rw-r--r-- | netlib/certutils.py | 15 | ||||
-rw-r--r-- | netlib/http.py | 3 | ||||
-rw-r--r-- | netlib/http_auth.py | 3 | ||||
-rw-r--r-- | netlib/http_status.py | 1 | ||||
-rw-r--r-- | netlib/http_uastrings.py | 2 | ||||
-rw-r--r-- | netlib/odict.py | 1 | ||||
-rw-r--r-- | netlib/socks.py | 17 | ||||
-rw-r--r-- | netlib/tcp.py | 3 | ||||
-rw-r--r-- | netlib/test.py | 3 | ||||
-rw-r--r-- | netlib/utils.py | 2 | ||||
-rw-r--r-- | netlib/version.py | 2 | ||||
-rw-r--r-- | netlib/wsgi.py | 3 | ||||
-rw-r--r-- | test/test_tcp.py | 3 | ||||
-rwxr-xr-x | tools/getcertnames | 15 |
16 files changed, 50 insertions, 33 deletions
diff --git a/netlib/__init__.py b/netlib/__init__.py index e69de29b..9b4faa33 100644 --- a/netlib/__init__.py +++ b/netlib/__init__.py @@ -0,0 +1 @@ +from __future__ import (absolute_import, print_function, division) diff --git a/netlib/certffi.py b/netlib/certffi.py index c5d7c95e..81dc72e8 100644 --- a/netlib/certffi.py +++ b/netlib/certffi.py @@ -1,7 +1,9 @@ +from __future__ import (absolute_import, print_function, division) import cffi import OpenSSL + xffi = cffi.FFI() -xffi.cdef (""" +xffi.cdef(""" struct rsa_meth_st { int flags; ...; @@ -18,6 +20,7 @@ xffi.verify( extra_compile_args=['-w'] ) + def handle(privkey): new = xffi.new("struct rsa_st*") newbuf = xffi.buffer(new) @@ -26,11 +29,13 @@ def handle(privkey): newbuf[:] = oldbuf[:] return new + def set_flags(privkey, val): hdl = handle(privkey) - hdl.meth.flags = val + hdl.meth.flags = val return privkey + def get_flags(privkey): hdl = handle(privkey) return hdl.meth.flags diff --git a/netlib/certutils.py b/netlib/certutils.py index 308d6cf8..18179917 100644 --- a/netlib/certutils.py +++ b/netlib/certutils.py @@ -1,11 +1,10 @@ +from __future__ import (absolute_import, print_function, division) import os, ssl, time, datetime import itertools from pyasn1.type import univ, constraint, char, namedtype, tag from pyasn1.codec.der.decoder import decode from pyasn1.error import PyAsn1Error import OpenSSL -import tcp -import UserDict DEFAULT_EXP = 62208000 # =24 * 60 * 60 * 720 # Generated with "openssl dhparam". It's too slow to generate this on startup. @@ -255,7 +254,7 @@ class CertStore: return c[0], (c[1] or self.privkey) def gen_pkey(self, cert): - import certffi + from . import certffi certffi.set_flags(self.privkey, 1) return self.privkey @@ -360,12 +359,4 @@ class SSLCert: continue for i in dec[0]: altnames.append(i[0].asOctets()) - return altnames - - - -def get_remote_cert(host, port, sni): - c = tcp.TCPClient((host, port)) - c.connect() - c.convert_to_ssl(sni=sni) - return c.cert + return altnames
\ No newline at end of file diff --git a/netlib/http.py b/netlib/http.py index 774bac6c..a49f0588 100644 --- a/netlib/http.py +++ b/netlib/http.py @@ -1,6 +1,7 @@ +from __future__ import (absolute_import, print_function, division) import string, urlparse, binascii import sys -import odict, utils +from . import odict, utils class HttpError(Exception): diff --git a/netlib/http_auth.py b/netlib/http_auth.py index 937b66f0..49f5925f 100644 --- a/netlib/http_auth.py +++ b/netlib/http_auth.py @@ -1,6 +1,7 @@ +from __future__ import (absolute_import, print_function, division) from passlib.apache import HtpasswdFile -import http from argparse import Action, ArgumentTypeError +from . import http class NullProxyAuth(): diff --git a/netlib/http_status.py b/netlib/http_status.py index 9f3f7e15..7dba2d56 100644 --- a/netlib/http_status.py +++ b/netlib/http_status.py @@ -1,3 +1,4 @@ +from __future__ import (absolute_import, print_function, division) CONTINUE = 100 SWITCHING = 101 diff --git a/netlib/http_uastrings.py b/netlib/http_uastrings.py index 826c31a5..d0d145da 100644 --- a/netlib/http_uastrings.py +++ b/netlib/http_uastrings.py @@ -1,3 +1,5 @@ +from __future__ import (absolute_import, print_function, division) + """ A small collection of useful user-agent header strings. These should be kept reasonably current to reflect common usage. diff --git a/netlib/odict.py b/netlib/odict.py index ea95a586..a0e1f694 100644 --- a/netlib/odict.py +++ b/netlib/odict.py @@ -1,3 +1,4 @@ +from __future__ import (absolute_import, print_function, division) import re, copy diff --git a/netlib/socks.py b/netlib/socks.py index 97df3478..1da5b6cc 100644 --- a/netlib/socks.py +++ b/netlib/socks.py @@ -1,7 +1,8 @@ +from __future__ import (absolute_import, print_function, division) import socket import struct -from array import array -from . import tcp, utils +import array +from . import tcp class SocksError(Exception): @@ -10,24 +11,24 @@ class SocksError(Exception): self.code = code -class VERSION: +class VERSION(object): SOCKS4 = 0x04 SOCKS5 = 0x05 -class CMD: +class CMD(object): CONNECT = 0x01 BIND = 0x02 UDP_ASSOCIATE = 0x03 -class ATYP: +class ATYP(object): IPV4_ADDRESS = 0x01 DOMAINNAME = 0x03 IPV6_ADDRESS = 0x04 -class REP: +class REP(object): SUCCEEDED = 0x00 GENERAL_SOCKS_SERVER_FAILURE = 0x01 CONNECTION_NOT_ALLOWED_BY_RULESET = 0x02 @@ -39,7 +40,7 @@ class REP: ADDRESS_TYPE_NOT_SUPPORTED = 0x08 -class METHOD: +class METHOD(object): NO_AUTHENTICATION_REQUIRED = 0x00 GSSAPI = 0x01 USERNAME_PASSWORD = 0x02 @@ -56,7 +57,7 @@ class ClientGreeting(object): @classmethod def from_file(cls, f): ver, nmethods = struct.unpack("!BB", f.read(2)) - methods = array("B") + methods = array.array("B") methods.fromstring(f.read(nmethods)) return cls(ver, methods) diff --git a/netlib/tcp.py b/netlib/tcp.py index 9c92ce38..f49346a1 100644 --- a/netlib/tcp.py +++ b/netlib/tcp.py @@ -1,6 +1,7 @@ +from __future__ import (absolute_import, print_function, division) import select, socket, threading, sys, time, traceback from OpenSSL import SSL -import certutils +from . import certutils EINTR = 4 diff --git a/netlib/test.py b/netlib/test.py index bb0012ad..31a848a6 100644 --- a/netlib/test.py +++ b/netlib/test.py @@ -1,6 +1,7 @@ +from __future__ import (absolute_import, print_function, division) import threading, Queue, cStringIO -import tcp, certutils import OpenSSL +from . import tcp, certutils class ServerThread(threading.Thread): def __init__(self, server): diff --git a/netlib/utils.py b/netlib/utils.py index 69ba456a..79077ac6 100644 --- a/netlib/utils.py +++ b/netlib/utils.py @@ -1,4 +1,4 @@ -import socket +from __future__ import (absolute_import, print_function, division) def isascii(s): diff --git a/netlib/version.py b/netlib/version.py index 25565d40..913f753a 100644 --- a/netlib/version.py +++ b/netlib/version.py @@ -1,3 +1,5 @@ +from __future__ import (absolute_import, print_function, division) + IVERSION = (0, 11) VERSION = ".".join(str(i) for i in IVERSION) MINORVERSION = ".".join(str(i) for i in IVERSION[:2]) diff --git a/netlib/wsgi.py b/netlib/wsgi.py index b576bdff..492803ab 100644 --- a/netlib/wsgi.py +++ b/netlib/wsgi.py @@ -1,5 +1,6 @@ +from __future__ import (absolute_import, print_function, division) import cStringIO, urllib, time, traceback -import odict, tcp +from . import odict, tcp class ClientConn: diff --git a/test/test_tcp.py b/test/test_tcp.py index 911beccc..bf681811 100644 --- a/test/test_tcp.py +++ b/test/test_tcp.py @@ -129,9 +129,6 @@ class TestServerSSL(test.ServerTestBase): c.wfile.flush() assert c.rfile.readline() == testval - def test_get_remote_cert(self): - assert certutils.get_remote_cert("127.0.0.1", self.port, None).digest("sha1") - def test_get_current_cipher(self): c = tcp.TCPClient(("127.0.0.1", self.port)) c.connect() diff --git a/tools/getcertnames b/tools/getcertnames index f39fc635..d22f4980 100755 --- a/tools/getcertnames +++ b/tools/getcertnames @@ -1,14 +1,25 @@ #!/usr/bin/env python import sys sys.path.insert(0, "../../") -from netlib import certutils +from netlib import tcp + + +def get_remote_cert(host, port, sni): + c = tcp.TCPClient((host, port)) + c.connect() + c.convert_to_ssl(sni=sni) + return c.cert if len(sys.argv) > 2: port = int(sys.argv[2]) else: port = 443 +if len(sys.argv) > 3: + sni = sys.argv[3] +else: + sni = None -cert = certutils.get_remote_cert(sys.argv[1], port, None) +cert = get_remote_cert(sys.argv[1], port, sni) print "CN:", cert.cn if cert.altnames: print "SANs:", |