code: def sign(self, private_keys):
          
          # TODO: Singing should be possible with at least one of all private
          #       keys supplied to this method.
          if private_keys is None or not isinstance(private_keys, list):
              raise TypeError('`private_keys` must be a list instance')
  
          # NOTE: Generate public keys from private keys and match them in a
          #       dictionary:
          #                   key:     public_key
          #                   value:   private_key
          def gen_public_key(private_key):
              # TODO FOR CC: Adjust interface so that this function becomes
              #              unnecessary
  
              # cc now provides a single method `encode` to return the key
              # in several different encodings.
              public_key = private_key.get_verifying_key().encode()
              # Returned values from cc are always bytestrings so here we need
              # to decode to convert the bytestring into a python str
              return public_key.decode()
  
          key_pairs = {gen_public_key(PrivateKey(private_key)):
                       PrivateKey(private_key) for private_key in private_keys}
  
          tx_dict = self.to_dict()
          tx_dict = Transaction._remove_signatures(tx_dict)
          tx_serialized = Transaction._to_str(tx_dict)
          for i, input_ in enumerate(self.inputs):
              self.inputs[i] = self._sign_input(input_, tx_serialized, key_pairs)
  
          self._hash()
  
          return self
docs: Fulfills a previous Transaction's Output by signing Inputs.
  
              Note:
                  This method works only for the following Cryptoconditions
                  currently:
                      - Ed25519Fulfillment
                      - ThresholdSha256
                  Furthermore, note that all keys required to fully sign the
                  Transaction have to be passed to this method. A subset of all
                  will cause this method to fail.
  
              Args:
                  private_keys (:obj:`list` of :obj:`str`): A complete list of
                      all private keys needed to sign all Fulfillments of this
                      Transaction.
  
              Returns:
                  :class:`~bigchaindb.common.transaction.Transaction`