code: def _sign_threshold_signature_fulfillment(cls, input_, message, key_pairs):
          
          input_ = deepcopy(input_)
          message = sha3_256(message.encode())
          if input_.fulfills:
              message.update('{}{}'.format(
                  input_.fulfills.txid, input_.fulfills.output).encode())
  
          for owner_before in set(input_.owners_before):
              # TODO: CC should throw a KeypairMismatchException, instead of
              #       our manual mapping here
  
              # TODO FOR CC: Naming wise this is not so smart,
              #              `get_subcondition` in fact doesn't return a
              #              condition but a fulfillment
  
              # TODO FOR CC: `get_subcondition` is singular. One would not
              #              expect to get a list back.
              ccffill = input_.fulfillment
              subffills = ccffill.get_subcondition_from_vk(
                  base58.b58decode(owner_before))
              if not subffills:
                  raise KeypairMismatchException('Public key {} cannot be found '
                                                 'in the fulfillment'
                                                 .format(owner_before))
              try:
                  private_key = key_pairs[owner_before]
              except KeyError:
                  raise KeypairMismatchException('Public key {} is not a pair '
                                                 'to any of the private keys'
                                                 .format(owner_before))
  
              # cryptoconditions makes no assumptions of the encoding of the
              # message to sign or verify. It only accepts bytestrings
              for subffill in subffills:
                  subffill.sign(
                      message.digest(), base58.b58decode(private_key.encode()))
          return input_
docs: Signs a ThresholdSha256.
  
              Args:
                  input_ (:class:`~bigchaindb.common.transaction.
                      Input`) The Input to be signed.
                  message (str): The message to be signed
                  key_pairs (dict): The keys to sign the Transaction with.