def sign(self, key, data):
        # type: (Any, bytes) -> bytes
        # narrow down the key type
        # https://github.com/aws/aws-dynamodb-encryption-python/issues/66
        """Sign ``data`` using loaded ``key``.

        :param key: Loaded key
        :param bytes data: Data to sign
        :returns: Calculated signature
        :rtype: bytes
        :raises SigningError: if unable to sign ``data`` with ``key``
        """
        if hasattr(key, "public_bytes"):
            raise SigningError('"sign" is not supported by public keys')
        try:
            return key.sign(data, self.padding_type(), self.hash_type())
        except Exception:
            message = "Unable to sign data"
            _LOGGER.exception(message)
            raise SigningError(message)
    def sign(self, key, data):
        # type: (Any, bytes) -> bytes
        # TODO: narrow down the key type
        """Sign ``data`` using loaded ``key``.

        :param key: Loaded key
        :type key: TODO:
        :param bytes data: Data to sign
        :returns: Calculated signature
        :rtype: bytes
        :raises SigningError: if unable to sign ``data`` with ``key``
        """
        if hasattr(key, 'public_bytes'):
            raise SigningError('"sign" is not supported by public keys')
        try:
            return key.sign(data, self.padding_type(), self.hash_type())
        except Exception:
            message = 'Unable to sign data'
            _LOGGER.exception(message)
            raise SigningError(message)
    def sign(self, key, data):
        # type: (bytes, bytes) -> bytes
        """Sign ``data`` using loaded ``key``.

        :param bytes key: Loaded key
        :param bytes data: Data to sign
        :returns: Calculated signature
        :rtype: bytes
        :raises SigningError: if unable to sign ``data`` with ``key``
        """
        try:
            signer = self._build_hmac_signer(key)
            signer.update(data)
            return signer.finalize()
        except Exception:
            message = "Unable to sign data"
            _LOGGER.exception(message)
            raise SigningError(message)