# version = 1.00 in fixed point _msg_api_ver_v1 = b'M0100' _msg_api_ver_v2 = b'M\x02\x00\x00' _C = curve_secp256k1 # _C = curve_secp384r1 # _C = curve_secp112r1 # _C = curve_bauer9 _masksize = min(32, _C['bits']) _maskbits = (int((_masksize / 3) + 0)) _G = Generator.init(_C['G'][0], _C['G'][1]) ECDSA.set_curve(_C) ECDSA.set_generator(_G) _ecdsa = ECDSA() # convert integer to hex string _pfmt = '%%0%dx' % (((_C['bits'] + 7) >> 3) << 1) _mfmt = '%%0%dx' % (((_masksize + 7) >> 3) << 1) # 256 bit message seed _s_bytes = 32 # 64 bit plaintext length field _l_bytes = 8 _lfmt = '%016x' _header_size_v1 = (5+1+8+1+8+1+66+1+66+1+66) _header_size_w_sig_v1 = (5+1+8+1+8+1+66+1+66+1+66+1+64+1+64)
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from Crypto.Random import random from binascii import hexlify, unhexlify import time import json from ecpy.curves import curve_secp256k1 from ecpy.point import Point, Generator from ecpy.ecdsa import ECDSA _def_curve = curve_secp256k1 Point.set_curve(_def_curve) ECDSA.set_curve(_def_curve) ECDSA.set_generator(Generator.init(_def_curve['G'][0], _def_curve['G'][1])) class NAK(object): n = _def_curve['n'] G = Generator.init(_def_curve['G'][0], _def_curve['G'][1]) ecdsa = ECDSA() def __init__(self, expire=None, pubkey=None, signature=None, privkey=None): self.expire = expire self.pubkey = pubkey self.signature = signature self.privkey = privkey if privkey is not None and pubkey is None: self.pubkey = NAK.G * privkey if self.pubkey is not None: self.pubkeyb = unhexlify(self.pubkey.compress())