123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # coding: utf-8
- """miscellaneous zmq_utils wrapping"""
- # Copyright (C) PyZMQ Developers
- # Distributed under the terms of the Modified BSD License.
- from errno import EINTR
- from ._cffi import ffi, C
- from zmq.error import ZMQError, InterruptedSystemCall, _check_rc, _check_version
- from zmq.utils.strtypes import unicode
- def has(capability):
- """Check for zmq capability by name (e.g. 'ipc', 'curve')
-
- .. versionadded:: libzmq-4.1
- .. versionadded:: 14.1
- """
- _check_version((4,1), 'zmq.has')
- if isinstance(capability, unicode):
- capability = capability.encode('utf8')
- return bool(C.zmq_has(capability))
- def curve_keypair():
- """generate a Z85 keypair for use with zmq.CURVE security
-
- Requires libzmq (≥ 4.0) to have been built with CURVE support.
-
- Returns
- -------
- (public, secret) : two bytestrings
- The public and private keypair as 40 byte z85-encoded bytestrings.
- """
- _check_version((3,2), "curve_keypair")
- public = ffi.new('char[64]')
- private = ffi.new('char[64]')
- rc = C.zmq_curve_keypair(public, private)
- _check_rc(rc)
- return ffi.buffer(public)[:40], ffi.buffer(private)[:40]
- def curve_public(private):
- """ Compute the public key corresponding to a private key for use
- with zmq.CURVE security
- Requires libzmq (≥ 4.2) to have been built with CURVE support.
- Parameters
- ----------
- private
- The private key as a 40 byte z85-encoded bytestring
- Returns
- -------
- bytestring
- The public key as a 40 byte z85-encoded bytestring.
- """
- if isinstance(private, unicode):
- private = private.encode('utf8')
- _check_version((4,2), "curve_public")
- public = ffi.new('char[64]')
- rc = C.zmq_curve_public(public, private)
- _check_rc(rc)
- return ffi.buffer(public)[:40]
- def _retry_sys_call(f, *args, **kwargs):
- """make a call, retrying if interrupted with EINTR"""
- while True:
- rc = f(*args)
- try:
- _check_rc(rc)
- except InterruptedSystemCall:
- continue
- else:
- break
- __all__ = ['has', 'curve_keypair', 'curve_public']
|