Пример #1
0
 def __rmul__(self, coefficient):
     coef = coefficient % N
     new_key = ffi.new('secp256k1_pubkey *')
     s = self.sec(compressed=False)
     lib.secp256k1_ec_pubkey_parse(GLOBAL_CTX, new_key, s, len(s))
     lib.secp256k1_ec_pubkey_tweak_mul(GLOBAL_CTX, new_key,
                                       coef.to_bytes(32, 'big'))
     serialized = ffi.new('unsigned char [65]')
     output_len = ffi.new('size_t *', 65)
     lib.secp256k1_ec_pubkey_serialize(GLOBAL_CTX, serialized, output_len,
                                       new_key,
                                       lib.SECP256K1_EC_UNCOMPRESSED)
     return self.__class__(usec=bytes(serialized))
Пример #2
0
 def __add__(self, scalar):
     '''Multiplies scalar by generator, adds result to current point'''
     coef = scalar % N
     new_key = ffi.new('secp256k1_pubkey *')
     s = self.sec(compressed=False)
     lib.secp256k1_ec_pubkey_parse(GLOBAL_CTX, new_key, s, len(s))
     lib.secp256k1_ec_pubkey_tweak_add(GLOBAL_CTX, new_key,
                                       coef.to_bytes(32, 'big'))
     serialized = ffi.new('unsigned char [65]')
     output_len = ffi.new('size_t *', 65)
     lib.secp256k1_ec_pubkey_serialize(GLOBAL_CTX, serialized, output_len,
                                       new_key,
                                       lib.SECP256K1_EC_UNCOMPRESSED)
     return self.__class__(usec=bytes(serialized))
Пример #3
0
 def __init__(self, csec=None, usec=None):
     if usec:
         self.usec = usec
         self.csec = None
         sec_cache = usec
     elif csec:
         self.csec = csec
         self.usec = None
         sec_cache = csec
     else:
         raise RuntimeError('need a serialization')
     self.c = ffi.new('secp256k1_pubkey *')
     if not lib.secp256k1_ec_pubkey_parse(GLOBAL_CTX, self.c, sec_cache,
                                          len(sec_cache)):
         raise RuntimeError('libsecp256k1 produced error')