Чтение и запись ключей RSA в файл pem в C

Я пишу C-программу для генерации ключей для RSA, записи их в файл и последующего чтения из них. Домашнее задание требует, чтобы я генерировал файлы в формате openssl. Итак, я выбрал PEM. Теперь у меня есть следующая функция для создания файла

rsa = RSA_new();
// These 3 keys are generated beforehand
rsa->e = e;
rsa->n = n;
rsa->d = d;

fp = fopen(pubkey_file, "w");
if(!PEM_write_RSAPublicKey(fp, rsa))
{
    printf("\n%s\n", "Error writing public key");
}
fflush(fp);
fclose(fp);

fp = fopen(privkey_file, "w");
// pRsaKey = EVP_PKEY_new();
// EVP_PKEY_assign_RSA(pRsaKey, rsa);
if(!PEM_write_RSAPrivateKey(fp, rsa, NULL, 0, 0, NULL, NULL))
// if (!PEM_write_PrivateKey(fp, pRsaKey, NULL, NULL, 0, 0, NULL))
{
    printf("\n%s\n", "Error writing private key");
}
fflush(fp);
fclose(fp);

И это функция для чтения файлов

rsa = RSA_new();
fp = fopen(pubkey_file, "r");
if(PEM_read_RSAPublicKey(fp, &rsa, NULL, NULL) == NULL)
{
    printf("\n%s\n", "Error Reading public key");
    return;
}

fclose(fp);
BN_bn2bin(rsa->n, (unsigned char *)modulus);
BN_bn2bin(rsa->e, (unsigned char *)exp);
printf("\n%s\n%s\n", exp, modulus);
RSA_free(rsa);

// pRsaKey = EVP_PKEY_new();
fp = fopen(privkey_file, "r");
if(fp)
    // if((PEM_read_PrivateKey(fp, &pRsaKey, NULL, NULL)) == NULL)
    if((PEM_read_RSAPrivateKey(fp, &rsa, NULL, NULL)) == NULL)
    {
        printf("\n%s\n", "Error Reading private key");
        return;
    }
// rsa = RSA_new();
// rsa = EVP_PKEY_get1_RSA(pRsaKey);
fclose(fp);

Открытый ключ записывается и читается по мере необходимости, но ключ предоставления не работает. Я пробовал писать, используя как rsa, так и evp (что прокомментировано в приведенном выше коде). Но оба терпят неудачу. Я не могу понять, почему это происходит, или попытаться найти, где искать, чтобы решить эту проблему. Кто-нибудь может дать несколько указателей для этого?

Ответы на вопрос(2)

Ваш ответ на вопрос