'Produce the PKCS#1 PSS signature of a message.
This function is named ``RSASSA-PSS-SIGN``, and is specified in
section 8.1.1 of RFC3447.
:Parameters:
mhash : hash object
The hash that was carried out over the message. This is an object
belonging to the `Crypto.Hash` module.
:Return: The PSS signature encoded as a string.
:Raise ValueError:
If the RSA key length is not sufficiently long to deal with the given
hash algorithm.
:Raise TypeError:
If the RSA key has no private half.
:attention: Modify the salt length and the mask generation function only
if you know what you are doing.
The receiver must use the same parameters too.'

def sign(self, mhash):

    randfunc = self._key._randfunc
    if (self._saltLen == None):
        sLen = mhash.digest_size
    else:
        sLen = self._saltLen
    if self._mgfunc:
        mgf = self._mgfunc
    else:
        mgf = (lambda x, y: MGF1(x, y, mhash))
    modBits = Crypto.Util.number.size(self._key.n)
    k = ceil_div(modBits, 8)
    em = EMSA_PSS_ENCODE(mhash, (modBits - 1), randfunc, mgf, sLen)
    m = self._key.decrypt(em)
    S = ((bchr(0) * (k - len(m))) + m)
    return S
