Мне нужно импортировать закрытый ключ (формат .der) в структуру gnutls_x509_privkey_t. Для этого я сначала проанализировал файл закрытого ключа DER в char [], используя файловые операции. Затем я использовал API gnutls_x509_privkey_import2 для импорта закрытого ключа (char []).
При импорте возвращается с ошибкой « Анализатор ASN1: ошибка при разборе DER ».
Примечание: Когда я пытаюсь проанализировать закрытый ключ PEM вместо использования DER, API импорта работает нормально. Я делаю какую-либо ошибку при разборе файла DER на char [] или есть способ разобрать файл DER?
Кроме того, я не хочу использовать gnutls_load_file API для загрузки закрытого ключа DER.
Я приложил приведенный ниже пример кода:
#include <stdio.h>
#include <stdlib.h>
#include <gnutls/gnutls.h>
#include <gnutls/x509.h>
#include <gnutls/abstract.h>
int main()
{
char key_der[1675];
char file_to_char;
FILE *fptr;
int length;
gnutls_x509_privkey_t pkey;
int ret;
gnutls_datum_t key;
ret = gnutls_x509_privkey_init(&pkey);
if (ret < 0) {
printf("gnutls_x509_privkey_init: %d\n", ret);
}
if ((fptr = fopen("<privatekey_filename>.der", "r")) == NULL)
{
printf("Error! opening file\n");
// Program exits if file pointer returns NULL.
exit(1);
}
int i = 0;
file_to_char = fgetc(fptr);
while (file_to_char != EOF)
{
key_der[i] = file_to_char;
i++;
file_to_char = fgetc(fptr);
}
key_der[i] = EOF;
key.data = (void *) key_der;
key.size = i;
ret = gnutls_x509_privkey_import2(pkey, &key, GNUTLS_X509_FMT_DER, NULL, 0);
if (ret < 0) {
printf("\nret value = %d\n", ret);
printf("gnutls_x509_privkey_import2: %s\n", gnutls_strerror(ret));
}
fclose(fptr);
return 0;
}