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;
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)
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;
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;