У меня есть файл с отдельной подписью pkcs # 7 размером 267 байт.Я создаю его после выполнения функции
CryptSignMessage(
&SigParams,
TRUE,
1,
MessageArray,
MessageSizeArray,
pbSignedMessageBlob,
&cbSignedMessageBlob)
и затем пишу содержимое pbSignedMessageBlob:
pbSignedMessageBlob[cbSignedMessageBlob] = '\0';
FILE *file;
file = fopen("c:\\path\\sign_pkcs7.pk7", "wb");
fwrite(pbSignedMessageBlob, sizeof(BYTE), cbSignedMessageBlob, file);
fclose(file);
Затем я пытаюсь проверить эту подпись и прочитать этот файл:
BYTE *pkcsContent;
FILE *file3;
file3 = fopen("c:\\users\\timur\\desktop\\sign_pkcs7.pk7", "rb");
pkcsContent = MyReadFile(file3, cbArray);
BYTE* MyReadFile(FILE *f, DWORD &len)
{
size_t result;
BYTE *buffer;
if (f == NULL)
{
fputs ("File error", stderr);
exit (1);
}
fseek (f, 0, SEEK_END);
len = ftell (f);
rewind (f);
//buffer = (BYTE*) malloc (sizeof(char)*lSize);
buffer = new BYTE[len + 1];
if (buffer == NULL)
{
fputs ("Memory error", stderr);
exit (2);
}
result = fread (buffer, 1, len, f);
if (result != len)
{
fputs ("Reading error",stderr);
exit (3);
}
buffer[len] = '\0';
fclose (f);
return buffer;
}
Но содержимое файла, которое я получаю в pkcsContent, имеет длину всего 37 байтов.Я также пытался управлять файлами, используя std :: fstream, но результат тот же.Может быть, неправильный способ записи файла на диск?