OpenSSL - почти то, что вам нужно.У него нет двух таких функций, но это почти так же просто.Прежде всего, каждая цифровая подпись требует алгоритма хеширования.Причина в том, что вы не шифруете файл, вы только шифруете хеш файла (это займет слишком много времени, чтобы проверить иное).
С OpenSSL вы можете использовать что-то вроде этого:
#include <openssl/evp.h>
EVP_MD_CTX ctx;
unsigned char signature[SIGNATURE_LEN];
int signature_len;
EVP_SignInit(&ctx, EVP_sha1());
EVP_SignUpdate(&ctx, data, size);
EVP_SignFinal(&ctx, signature, &signature_len, pkey);
И почти то же самое для проверки подписи, только с использованием EVP_ValidateInit
, EVP_ValidateUpdate
и EVP_ValidateFinal
.Последняя функция возвращает 0/1, чтобы сказать, была ли проверка успешной или нет.
Вам все еще нужно получить ключ в приложение, для этого есть довольно много функций, в зависимости от того, откуда вы его читаете (файл / память / сертификат и т. д.)