'Return a public key object corresponding to this public key blob.
The format of a RSA public key blob is::
string \'ssh-rsa\'
integer e
integer n
The format of a DSA public key blob is::
string \'ssh-dss\'
integer p
integer q
integer g
integer y
The format of ECDSA-SHA2-* public key blob is::
string \'ecdsa-sha2-[identifier]\'
integer x
integer y
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_BLOB(cls, blob):

    (keyType, rest) = common.getNS(blob)
    if (keyType == 'ssh-rsa'):
        (e, n, rest) = common.getMP(rest, 2)
        return cls(rsa.RSAPublicNumbers(e, n).public_key(default_backend()))
    elif (keyType == 'ssh-dss'):
        (p, q, g, y, rest) = common.getMP(rest, 4)
        return cls(dsa.DSAPublicNumbers(y=y, parameter_numbers=dsa.DSAParameterNumbers(p=p, q=q, g=g)).public_key(default_backend()))
    elif (keyType in _curveTable):
        return cls(ec.EllipticCurvePublicNumbers.from_encoded_point(_curveTable[keyType], common.getNS(rest, 2)[1]).public_key(default_backend()))
    else:
        raise BadKeyError(('unknown    blob    type:    %s' % (keyType,)))
