X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=crypt.c;h=34b78798cc764451e71d1a61353e52485cbd92e0;hp=c15768a3d954c6e0489b0527bd9415432c4517aa;hb=d9f54f439c98aed8b974f55acd468bdae424683f;hpb=f553ab861efaa14f3a07ffb074c9e640b9fc776a diff --git a/crypt.c b/crypt.c index c15768a3..34b78798 100644 --- a/crypt.c +++ b/crypt.c @@ -61,7 +61,7 @@ void init_random_seed_or_die(void) srandom(seed); } -static EVP_PKEY *load_key(const char *file, int private) +static EVP_PKEY *load_key(const char *file) { BIO *key; EVP_PKEY *pkey = NULL; @@ -69,23 +69,18 @@ static EVP_PKEY *load_key(const char *file, int private) key = BIO_new(BIO_s_file()); if (!key) return NULL; - if (BIO_read_filename(key, file) > 0) { - if (private == LOAD_PRIVATE_KEY) - pkey = PEM_read_bio_PrivateKey(key, NULL, NULL, NULL); - else - pkey = PEM_read_bio_PUBKEY(key, NULL, NULL, NULL); - } + if (BIO_read_filename(key, file) > 0) + pkey = PEM_read_bio_PrivateKey(key, NULL, NULL, NULL); BIO_free(key); return pkey; } -static int get_openssl_key(const char *key_file, RSA **rsa, int private) +static int get_private_key(const char *key_file, RSA **rsa) { - EVP_PKEY *key = load_key(key_file, private); + EVP_PKEY *key = load_key(key_file); if (!key) - return (private == LOAD_PRIVATE_KEY)? -E_PRIVATE_KEY - : -E_PUBLIC_KEY; + return -E_PRIVATE_KEY; *rsa = EVP_PKEY_get1_RSA(key); EVP_PKEY_free(key); if (!*rsa) @@ -170,12 +165,8 @@ int get_public_key(const char *key_file, struct asymmetric_key **result) goto out; ret = is_ssh_rsa_key(map, map_size); if (!ret) { - ret = para_munmap(map, map_size); - map = NULL; - if (ret < 0) - goto out; - ret = get_openssl_key(key_file, &key->rsa, LOAD_PUBLIC_KEY); - goto out; + para_munmap(map, map_size); + return -E_SSH_PARSE; } cp = map + ret; encoded_size = map_size - ret; @@ -225,7 +216,7 @@ int priv_decrypt(const char *key_file, unsigned char *outbuf, if (inlen < 0) return -E_RSA; priv = para_malloc(sizeof(*priv)); - ret = get_openssl_key(key_file, &priv->rsa, LOAD_PRIVATE_KEY); + ret = get_private_key(key_file, &priv->rsa); if (ret < 0) { free(priv); return ret;