Cross-platform Python CFFI bindings for libsecp256k1
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
775 B

7 years ago
import os
from collections import namedtuple
7 years ago
from cffi import FFI
7 years ago
7 years ago
here = os.path.dirname(os.path.abspath(__file__))
7 years ago
Source = namedtuple('Source', ('h', 'include'))
7 years ago
7 years ago
7 years ago
def _mk_ffi(sources, name='_libsecp256k1', **kwargs):
_ffi = FFI()
7 years ago
code = []
7 years ago
7 years ago
for source in sources:
7 years ago
with open(os.path.join(here, source.h), 'rt') as h:
_ffi.cdef(h.read())
7 years ago
code.append(source.include)
7 years ago
7 years ago
code.append('#define PY_USE_BUNDLED')
_ffi.set_source(name, '\n'.join(code), **kwargs)
7 years ago
7 years ago
return _ffi
7 years ago
modules = [
Source('secp256k1.h', '#include <secp256k1.h>'),
Source('secp256k1_ecdh.h', '#include <secp256k1_ecdh.h>'),
Source('secp256k1_recovery.h', '#include <secp256k1_recovery.h>'),
]
7 years ago
ffi = _mk_ffi(modules, libraries=['secp256k1'])