Beispiel #1
0
    def __init__(self, p, q, g, y):
        self.p = p
        self.q = q
        self.g = g
        self.y = y

        params = DSAParameterNumbers(p, q, g)
        self._key = DSAPublicNumbers(y, params).public_key(default_backend())
Beispiel #2
0
    def _process_ssh_dss(self, data):
        """Parses ssh-dsa public keys."""
        data_fields = {}
        current_position = 0
        for item in ("p", "q", "g", "y"):
            current_position, value = self._unpack_by_int(data, current_position)
            data_fields[item] = self._parse_long(value)

        q_bits = self._bits_in_number(data_fields["q"])
        p_bits = self._bits_in_number(data_fields["p"])
        if q_bits != self.DSA_N_LENGTH:
            raise InvalidKeyError("Incorrect DSA key parameters: bits(p)=%s, q=%s" % (self.bits, q_bits))
        if self.strict_mode:
            min_length = self.DSA_MIN_LENGTH_STRICT
            max_length = self.DSA_MAX_LENGTH_STRICT
        else:
            min_length = self.DSA_MIN_LENGTH_LOOSE
            max_length = self.DSA_MAX_LENGTH_LOOSE
        if p_bits < min_length:
            raise TooShortKeyError("%s key can not be shorter than %s bits (was %s)" % (self.key_type, min_length, p_bits))
        if p_bits > max_length:
            raise TooLongKeyError("%s key data can not be longer than %s bits (was %s)" % (self.key_type, max_length, p_bits))

        dsa_parameters = DSAParameterNumbers(data_fields["p"], data_fields["q"], data_fields["g"])
        self.dsa = DSAPublicNumbers(data_fields["y"], dsa_parameters).public_key(default_backend())
        self.bits = self.dsa.key_size

        return current_position
Beispiel #3
0
    def __init__(self, p, q, g, y):
        self.p = p
        self.q = q
        self.g = g
        self.y = y

        params = DSAParameterNumbers(p, q, g)
        self._key =  DSAPublicNumbers(y, params).public_key(default_backend())
def _load_ssh_dss_public_key(decoded_data, backend):
    key_type, rest = _read_next_string(decoded_data)
    p, rest = _read_next_mpint(rest)
    q, rest = _read_next_mpint(rest)
    g, rest = _read_next_mpint(rest)
    y, rest = _read_next_mpint(rest)

    if key_type != b'ssh-dss':
        raise ValueError(
            'Key header and key body contain different key type values.')

    if rest:
        raise ValueError('Key body contains extra bytes.')

    parameter_numbers = DSAParameterNumbers(p, q, g)
    public_numbers = DSAPublicNumbers(y, parameter_numbers)

    return public_numbers.public_key(backend)
def _load_ssh_dss_public_key(decoded_data, backend):
    key_type, rest = _read_next_string(decoded_data)
    p, rest = _read_next_mpint(rest)
    q, rest = _read_next_mpint(rest)
    g, rest = _read_next_mpint(rest)
    y, rest = _read_next_mpint(rest)

    if key_type != b'ssh-dss':
        raise ValueError(
            'Key header and key body contain different key type values.')

    if rest:
        raise ValueError('Key body contains extra bytes.')

    parameter_numbers = DSAParameterNumbers(p, q, g)
    public_numbers = DSAPublicNumbers(y, parameter_numbers)

    return public_numbers.public_key(backend)
Beispiel #6
0
    def __init__(self, p, q, g, y, x):
        self.p = p
        self.q = q
        self.g = g
        self.y = y
        self.x = x

        params = DSAParameterNumbers(p, q, g)
        pub = DSAPublicNumbers(y, params)
        self._key = DSAPrivateNumbers(x, pub).private_key(default_backend())
    def test_load_ssh_public_key_dss(self, backend):
        ssh_key = (
            b"ssh-dss AAAAB3NzaC1kc3MAAACBALmwUtfwdjAUjU2Dixd5DvT0NDcjjr69UD"
            b"LqSD/Xt5Al7D3GXr1WOrWGpjO0NE9qzRCvMTU7zykRH6XjuNXB6Hvv48Zfm4vm"
            b"nHQHFmmMg2bI75JbnOwdzWnnPZJrVU4rS23dFFPqs5ug+EbhVVrcwzxahjcSjJ"
            b"7WEQSkVQWnSPbbAAAAFQDXmpD3DIkGvLSBf1GdUF4PHKtUrQAAAIB/bJFwss+2"
            b"fngmfG/Li5OyL7A9iVoGdkUaFaxEUROTp7wkm2z49fXFAir+/U31v50Tu98YLf"
            b"WvKlxdHcdgQYV9Ww5LIrhWwwD4UKOwC6w5S3KHVbi3pWUi7vxJFXOWfeu1mC/J"
            b"TWqMKR91j+rmOtdppWIZRyIVIqLcMdGO3m+2VgAAAIANFDz5KQH5NvoljpoRQi"
            b"RgyPjxWXiE7vjLElKj4v8KrpanAywBzdhIW1y/tzpGuwRwj5ihi8iNTHgSsoTa"
            b"j5AG5HPomJf5vJElxpu/2O9pHA52wcNObIQ7j+JA5uWusxNIbl+pF6sSiP8abr"
            b"z53N7tPF/IhHTjBHb1Ol7IFu9p9A== testkey@localhost")

        key = load_ssh_public_key(ssh_key, backend)

        assert key is not None
        assert isinstance(key, interfaces.DSAPublicKey)

        numbers = key.public_numbers()

        expected_y = int(
            "d143cf92901f936fa258e9a11422460c8f8f1597884eef8cb1252a3e2ff0aae"
            "96a7032c01cdd8485b5cbfb73a46bb04708f98a18bc88d4c7812b284da8f900"
            "6e473e89897f9bc9125c69bbfd8ef691c0e76c1c34e6c843b8fe240e6e5aeb3"
            "13486e5fa917ab1288ff1a6ebcf9dcdeed3c5fc88474e30476f53a5ec816ef6"
            "9f4", 16)
        expected_p = int(
            "b9b052d7f07630148d4d838b17790ef4f43437238ebebd5032ea483fd7b7902"
            "5ec3dc65ebd563ab586a633b4344f6acd10af31353bcf29111fa5e3b8d5c1e8"
            "7befe3c65f9b8be69c740716698c8366c8ef925b9cec1dcd69e73d926b554e2"
            "b4b6ddd1453eab39ba0f846e1555adcc33c5a8637128c9ed61104a45505a748"
            "f6db", 16)
        expected_q = 1230879958723280233885494314531920096931919647917
        expected_g = int(
            "7f6c9170b2cfb67e78267c6fcb8b93b22fb03d895a0676451a15ac44511393a"
            "7bc249b6cf8f5f5c5022afefd4df5bf9d13bbdf182df5af2a5c5d1dc7604185"
            "7d5b0e4b22b856c300f850a3b00bac394b728755b8b7a56522eefc491573967"
            "debb5982fc94d6a8c291f758feae63ad769a5621947221522a2dc31d18ede6f"
            "b656", 16)
        expected = DSAPublicNumbers(
            expected_y, DSAParameterNumbers(expected_p, expected_q,
                                            expected_g))

        assert numbers == expected
Beispiel #8
0
class DSAPublicKey:
    def __init__(self, p, q, g, y):
        self.p = p
        self.q = q
        self.g = g
        self.y = y

        params = DSAParameterNumbers(p, q, g)
        self._key = DSAPublicNumbers(y, params).public_key(default_backend())

    def verify(self, data, sig):
        verifier = self._key.verifier(der_encode(sig), SHA1())
        verifier.update(data)

        try:
            verifier.verify()
            return True
        except InvalidSignature:
            return False
Beispiel #9
0
class DSAPublicKey:
    def __init__(self, p, q, g, y):
        self.p = p
        self.q = q
        self.g = g
        self.y = y

        params = DSAParameterNumbers(p, q, g)
        self._key =  DSAPublicNumbers(y, params).public_key(default_backend())

    def verify(self, data, sig):
        verifier = self._key.verifier(der_encode(sig), SHA1())
        verifier.update(data)

        try:
            verifier.verify()
            return True
        except InvalidSignature:
            return False
Beispiel #10
0
DSA_KEY_1024 = DSAPrivateNumbers(
    public_numbers=DSAPublicNumbers(
        parameter_numbers=DSAParameterNumbers(
            p=int(
                "d38311e2cd388c3ed698e82fdf88eb92b5a9a483dc88005d4b725ef34"
                "1eabb47cf8a7a8a41e792a156b7ce97206c4f9c5ce6fc5ae7912102b6"
                "b502e59050b5b21ce263dddb2044b652236f4d42ab4b5d6aa73189cef"
                "1ace778d7845a5c1c1c7147123188f8dc551054ee162b634d60f097f7"
                "19076640e20980a0093113a8bd73",
                16,
            ),
            q=int("96c5390a8b612c0e422bb2b0ea194a3ec935a281", 16),
            g=int(
                "06b7861abbd35cc89e79c52f68d20875389b127361ca66822138ce499"
                "1d2b862259d6b4548a6495b195aa0e0b6137ca37eb23b94074d3c3d30"
                "0042bdf15762812b6333ef7b07ceba78607610fcc9ee68491dbc1e34c"
                "d12615474e52b18bc934fb00c61d39e7da8902291c4434a4e2224c3f4"
                "fd9f93cd6f4f17fc076341a7e7d9",
                16,
            ),
        ),
        y=int(
            "6f26d98d41de7d871b6381851c9d91fa03942092ab6097e76422070edb71d"
            "b44ff568280fdb1709f8fc3feab39f1f824adaeb2a298088156ac31af1aa0"
            "4bf54f475bdcfdcf2f8a2dd973e922d83e76f016558617603129b21c70bf7"
            "d0e5dc9e68fe332e295b65876eb9a12fe6fca9f1a1ce80204646bf99b5771"
            "d249a6fea627",
            16,
        ),
    ),
    x=int("8185fee9cc7c0e91fd85503274f1cd5a3fd15a49", 16),