Exemplo n.º 1
0
    def sec(self, compressed=True):
        '''returns the binary version of the SEC format'''
        if compressed:
            if not self.csec:
                serialized = ffi.new('unsigned char [33]')
                output_len = ffi.new('size_t *', 33)

                lib.secp256k1_ec_pubkey_serialize(
                    GLOBAL_CTX,
                    serialized,
                    output_len,
                    self.c,
                    lib.SECP256K1_EC_COMPRESSED,
                )
                self.csec = bytes(ffi.buffer(serialized, 33))
            return self.csec
        else:
            if not self.usec:
                serialized = ffi.new('unsigned char [65]')
                output_len = ffi.new('size_t *', 65)

                lib.secp256k1_ec_pubkey_serialize(
                    GLOBAL_CTX,
                    serialized,
                    output_len,
                    self.c,
                    lib.SECP256K1_EC_UNCOMPRESSED,
                )
                self.usec = bytes(ffi.buffer(serialized, 65))
            return self.usec
Exemplo n.º 2
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))
Exemplo n.º 3
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))