'Return a private key object corresponding to this private key blob.
The blob formats are as follows:
RSA keys::
string \'ssh-rsa\'
integer n
integer e
integer d
integer u
integer p
integer q
DSA keys::
string \'ssh-dss\'
integer p
integer q
integer g
integer y
integer x
EC keys::
string \'ecdsa-sha2-[identifier]\'
integer x
integer y
integer privateValue
identifier is the standard NIST curve name.
@type blob: L{bytes}
@param blob: The key data.
@return: A new key.
@rtype: L{twisted.conch.ssh.keys.Key}
@raises BadKeyError: if the key type (the first string) is unknown.'

@classmethod
def _fromString_PRIVATE_BLOB(cls, blob):

    (keyType, rest) = common.getNS(blob)
    if (keyType == 'ssh-rsa'):
        (n, e, d, u, p, q, rest) = common.getMP(rest, 6)
        return cls._fromRSAComponents(n=n, e=e, d=d, p=p, q=q)
    elif (keyType == 'ssh-dss'):
        (p, q, g, y, x, rest) = common.getMP(rest, 5)
        return cls._fromDSAComponents(y=y, g=g, p=p, q=q, x=x)
    elif (keyType in [curve for curve in list(_curveTable.keys())]):
        (x, y, privateValue, rest) = common.getMP(rest, 3)
        return cls._fromECComponents(x=x, y=y, curve=keyType, privateValue=privateValue)
    else:
        raise BadKeyError(('unknown    blob    type:    %s' % (keyType,)))
