def load_openssl(crypto_path=None): global loaded, libcrypto, libsodium, buf, ctx_cleanup crypto_path = dict(crypto_path) if crypto_path else dict() path = crypto_path.get('openssl', None) libcrypto = util.find_library(('crypto', 'eay32'), 'EVP_get_cipherbyname', 'libcrypto', path) if libcrypto is None: raise Exception('libcrypto(OpenSSL) not found with path %s' % path) libcrypto.EVP_get_cipherbyname.restype = c_void_p libcrypto.EVP_CIPHER_CTX_new.restype = c_void_p libcrypto.EVP_CipherInit_ex.argtypes = (c_void_p, c_void_p, c_char_p, c_char_p, c_char_p, c_int) libcrypto.EVP_CIPHER_CTX_ctrl.argtypes = (c_void_p, c_int, c_int, c_void_p) libcrypto.EVP_CipherUpdate.argtypes = (c_void_p, c_void_p, c_void_p, c_char_p, c_int) libcrypto.EVP_CipherFinal_ex.argtypes = (c_void_p, c_void_p, c_void_p) try: libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p, ) ctx_cleanup = libcrypto.EVP_CIPHER_CTX_cleanup except AttributeError: libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p, ) ctx_cleanup = libcrypto.EVP_CIPHER_CTX_reset libcrypto.EVP_CIPHER_CTX_free.argtypes = (c_void_p, ) if hasattr(libcrypto, 'OpenSSL_add_all_ciphers'): libcrypto.OpenSSL_add_all_ciphers() buf = create_string_buffer(buf_size) loaded = True
def load_openssl(): global loaded, libcrypto, buf libcrypto = util.find_library(('crypto', 'eay32'), 'EVP_get_cipherbyname', 'libcrypto') if libcrypto is None: raise Exception('libcrypto(OpenSSL) not found') libcrypto.EVP_get_cipherbyname.restype = c_void_p libcrypto.EVP_CIPHER_CTX_new.restype = c_void_p libcrypto.EVP_CipherInit_ex.argtypes = (c_void_p, c_void_p, c_char_p, c_char_p, c_char_p, c_int) libcrypto.EVP_CipherUpdate.argtypes = (c_void_p, c_void_p, c_void_p, c_char_p, c_int) libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,) libcrypto.EVP_CIPHER_CTX_free.argtypes = (c_void_p,) if hasattr(libcrypto, 'OpenSSL_add_all_ciphers'): libcrypto.OpenSSL_add_all_ciphers() buf = create_string_buffer(buf_size) loaded = True
def load_libsodium(): global loaded, libsodium, buf libsodium = util.find_library('sodium', 'crypto_stream_salsa20_xor_ic', 'libsodium') if libsodium is None: raise Exception('libsodium not found') libsodium.crypto_stream_salsa20_xor_ic.restype = c_int libsodium.crypto_stream_salsa20_xor_ic.argtypes = (c_void_p, c_char_p, c_ulonglong, c_char_p, c_ulonglong, c_char_p) libsodium.crypto_stream_chacha20_xor_ic.restype = c_int libsodium.crypto_stream_chacha20_xor_ic.argtypes = (c_void_p, c_char_p, c_ulonglong, c_char_p, c_ulonglong, c_char_p) buf = create_string_buffer(buf_size) loaded = True
class ip6t_entry(ct.Structure): """This class is a representation of the C struct ip6t_entry.""" _fields_ = [ ("ipv6", ip6t_ip6), ("nfcache", ct.c_uint), # fields that we care about ("target_offset", ct.c_uint16), # size of ip6t_entry + matches ("next_offset", ct.c_uint16), # size of e + matches + target ("comefrom", ct.c_uint), # back pointer ("counters", xt_counters), # packet and byte counters ("elems", ct.c_ubyte * 0) ] # the matches then the target _libiptc, _ = find_library("ip6tc", "iptc") # old iptables versions use iptc class ip6tc(object): """This class contains all libip6tc API calls.""" iptc_init = _libiptc.ip6tc_init iptc_init.restype = ct.POINTER(ct.c_int) iptc_init.argstype = [ct.c_char_p] iptc_free = _libiptc.ip6tc_free iptc_free.restype = None iptc_free.argstype = [ct.c_void_p] iptc_commit = _libiptc.ip6tc_commit iptc_commit.restype = ct.c_int iptc_commit.argstype = [ct.c_void_p]
("v2", _xtables_target_v2), # Apparently v3 was skipped ("v4", _xtables_target_v4), ("v5", _xtables_target_v5), ("v6", _xtables_target_v6), ("v7", _xtables_target_v7), # Apparently v8 was skipped ("v9", _xtables_target_v9), ("v10", _xtables_target_v10)] class XTablesError(Exception): """Raised when an xtables call fails for some reason.""" _libc, _ = find_library("c") _optind = ct.c_long.in_dll(_libc, "optind") _optarg = ct.c_char_p.in_dll(_libc, "optarg") _lib_xtables, _xtables_version = find_library("xtables") _xtables_libdir = os.getenv("XTABLES_LIBDIR") if _xtables_libdir is None: import os.path for xtdir in ["/lib/xtables", "/lib64/xtables", "/usr/lib/xtables", "/usr/lib/iptables", "/usr/lib64/xtables", "/usr/lib64/iptables", "/usr/local/lib/xtables"]: if os.path.isdir(xtdir): _xtables_libdir = xtdir break if _xtables_libdir is None: raise XTablesError("can't find directory with extensions; "
# default: full netmask self.smsk.s6_addr = self.dmsk.s6_addr = 0xff * 16 class ip6t_entry(ct.Structure): """This class is a representation of the C struct ip6t_entry.""" _fields_ = [("ipv6", ip6t_ip6), ("nfcache", ct.c_uint), # fields that we care about ("target_offset", ct.c_uint16), # size of ip6t_entry + matches ("next_offset", ct.c_uint16), # size of e + matches + target ("comefrom", ct.c_uint), # back pointer ("counters", xt_counters), # packet and byte counters ("elems", ct.c_ubyte * 0)] # the matches then the target _libiptc, _ = find_library("ip6tc", "iptc") # old iptables versions use iptc class ip6tc(object): """This class contains all libip6tc API calls.""" iptc_init = _libiptc.ip6tc_init iptc_init.restype = ct.c_void_p iptc_init.argstype = [ct.c_char_p] iptc_free = _libiptc.ip6tc_free iptc_free.restype = None iptc_free.argstype = [ct.c_void_p] iptc_commit = _libiptc.ip6tc_commit iptc_commit.restype = ct.c_int iptc_commit.argstype = [ct.c_void_p]