def test_genparam_setparam_genkey(self): dsa = DSA.gen_params(1024, self.callback) assert len(dsa) == 1024 p = dsa.p q = dsa.q g = dsa.g dsa2 = DSA.set_params(p,q,g) assert not dsa2.check_key() dsa2.gen_key() assert dsa2.check_key() r,s = dsa2.sign(self.data) assert dsa2.verify(self.data, r, s)
def test_genparam_setparam_genkey(self): dsa = DSA.gen_params(1024, self.callback) self.assertEqual(len(dsa), 1024) p = dsa.p q = dsa.q g = dsa.g dsa2 = DSA.set_params(p, q, g) assert not dsa2.check_key() dsa2.gen_key() assert dsa2.check_key() r, s = dsa2.sign(self.data) assert dsa2.verify(self.data, r, s)
def convert(fin, fout): key = decode_key(fin) ret = read_key(key) key_type = ret[0] if key_type == "ssh-rsa": e, n = ret[1:] rsa = rsa_new_pub_key((e, n)) rsa.save_pem(fout) elif key_type == "ssh-dss": p, q, g, y = ret[1:] dsa = DSA.set_params(p, q, g) dsa.gen_key() dsa.save_pub_key(fout) # FIXME: This is wrong. # M2Crypto doesn't allow us to set the public key parameter raise Exception("DSA keys are not supported yet: M2Crypto doesn't allow us to set the public key parameter")
def from_string(cls, key): """ Loads an RFC 4716 formatted public key. """ pubkey = cls() if key.startswith('ssh-'): pubkey.hashed = key.split()[1] else: pubkey.hashed = key pubkey.key_type, remainder = unpack_string(pubkey.blob) if pubkey.key_type == 'ssh-rsa': e, n = get_packed_mp_ints(remainder, 2) pubkey.instance = RSA.new_pub_key((e, n)) elif pubkey.key_type == 'ssh-dss': p, q, g, y = get_packed_mp_ints(remainder, 4) pubkey.instance = DSA.set_params(p, q, g) return pubkey