]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - crypt.c
crypto: Remove support for ASN public keys.
[paraslash.git] / crypt.c
diff --git a/crypt.c b/crypt.c
index c15768a3d954c6e0489b0527bd9415432c4517aa..34b78798cc764451e71d1a61353e52485cbd92e0 100644 (file)
--- 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;