예제 #1
0
파일: kex.c 프로젝트: 2014-class/freerouter
static void
choose_kex(Kex *k, char *client, char *server)
{
	k->name = match_list(client, server, NULL);
	if (k->name == NULL)
		fatal("Unable to negotiate a key exchange method");
	if (strcmp(k->name, KEX_DH1) == 0) {
		k->kex_type = KEX_DH_GRP1_SHA1;
		k->evp_md = EVP_sha1();
	} else if (strcmp(k->name, KEX_DH14) == 0) {
		k->kex_type = KEX_DH_GRP14_SHA1;
		k->evp_md = EVP_sha1();
	} else if (strcmp(k->name, KEX_DHGEX_SHA1) == 0) {
		k->kex_type = KEX_DH_GEX_SHA1;
		k->evp_md = EVP_sha1();
#if OPENSSL_VERSION_NUMBER >= 0x00907000L
	} else if (strcmp(k->name, KEX_DHGEX_SHA256) == 0) {
		k->kex_type = KEX_DH_GEX_SHA256;
		k->evp_md = evp_ssh_sha256();
	} else if (strncmp(k->name, KEX_ECDH_SHA2_STEM,
	    sizeof(KEX_ECDH_SHA2_STEM) - 1) == 0) {
 		k->kex_type = KEX_ECDH_SHA2;
		k->evp_md = kex_ecdh_name_to_evpmd(k->name);
#endif
	} else
		fatal("bad kex alg %s", k->name);
}
예제 #2
0
파일: kex.c 프로젝트: mpitzl/libopenssh
static int
choose_kex(Kex *k, char *client, char *server)
{
	k->name = match_list(client, server, NULL);

	if (k->name == NULL)
		return SSH_ERR_NO_KEX_ALG_MATCH;
	if (strcmp(k->name, KEX_DH1) == 0) {
		k->kex_type = KEX_DH_GRP1_SHA1;
		k->evp_md = EVP_sha1();
	} else if (strcmp(k->name, KEX_DH14) == 0) {
		k->kex_type = KEX_DH_GRP14_SHA1;
		k->evp_md = EVP_sha1();
	} else if (strcmp(k->name, KEX_DHGEX_SHA1) == 0) {
		k->kex_type = KEX_DH_GEX_SHA1;
		k->evp_md = EVP_sha1();
	} else if (strcmp(k->name, KEX_DHGEX_SHA256) == 0) {
		k->kex_type = KEX_DH_GEX_SHA256;
		k->evp_md = EVP_sha256();
	} else if (strncmp(k->name, KEX_ECDH_SHA2_STEM,
	    sizeof(KEX_ECDH_SHA2_STEM) - 1) == 0) {
		k->kex_type = KEX_ECDH_SHA2;
		k->evp_md = kex_ecdh_name_to_evpmd(k->name);
		if (k->evp_md == NULL)
			return SSH_ERR_INTERNAL_ERROR;
	} else
		return SSH_ERR_INTERNAL_ERROR;
	return 0;
}