'Decrypt a string and return a string'

def decrypt(self, cipherText, more=None):

    self.bytesToDecrypt += cipherText
    (numBlocks, numExtraBytes) = divmod(len(self.bytesToDecrypt), self.blockSize)
    if (more == None):
        if (numExtraBytes != 0):
            raise DecryptNotBlockAlignedError, 'Data    not    block    aligned    on    decrypt'
    if ((more != None) and (numExtraBytes == 0) and (numBlocks > 0)):
        numBlocks -= 1
        numExtraBytes = self.blockSize
    plainText = ''
    for i in range(numBlocks):
        bStart = (i * self.blockSize)
        ptBlock = self.decryptBlock(self.bytesToDecrypt[bStart:(bStart + self.blockSize)])
        self.decryptBlockCount += 1
        plainText += ptBlock
    if (numExtraBytes > 0):
        self.bytesToEncrypt = self.bytesToEncrypt[(- numExtraBytes):]
    else:
        self.bytesToEncrypt = ''
    if (more == None):
        plainText = self.padding.removePad(plainText, self.blockSize)
        self.resetDecrypt()
    return plainText
