code: def multiply(self, p, e):
          
          e %= self.order()
          if p == self._infinity or e == 0:
              return self._infinity
          pubkey = create_string_buffer(64)
          public_pair_bytes = b'\4' + to_bytes_32(p[0]) + to_bytes_32(p[1])
          r = libsecp256k1.secp256k1_ec_pubkey_parse(
              libsecp256k1.ctx, pubkey, public_pair_bytes, len(public_pair_bytes))
          if not r:
              return False
          r = libsecp256k1.secp256k1_ec_pubkey_tweak_mul(libsecp256k1.ctx, pubkey, to_bytes_32(e))
          if not r:
              return self._infinity
  
          pubkey_serialized = create_string_buffer(65)
          pubkey_size = c_size_t(65)
          libsecp256k1.secp256k1_ec_pubkey_serialize(
              libsecp256k1.ctx, pubkey_serialized, byref(pubkey_size), pubkey, SECP256K1_EC_UNCOMPRESSED)
          x = from_bytes_32(pubkey_serialized[1:33])
          y = from_bytes_32(pubkey_serialized[33:])
          return self.Point(x, y)
docs: Multiply a point by an integer.