В моем C ++ проекте я использую библиотеку libsodium для создания и проверки подписи сообщения.
Для проверки подписи я использую функцию libsodium crypto_sign_open
таким образом
bool Signature::signatureVerification(const char* content, unsigned char* unsigned_message)
{
bool verified;
unsigned long long unsigned_message_len;
if (crypto_sign_open(unsigned_message, &unsigned_message_len, (const unsigned char *)content, signed_message_len, pk) != 0)
{
verified = false;
std::cout << "incorrect signature " << std::endl;
}
else{
verified = true;
}
//print variable unsigned_message
return verified;
}
Если я «распечатаю» переменную unsigned_message
, я получаю сообщение без знака, за которым следуют некоторые символы из подписи.Например, если сообщение «Привет», после проверки подписи я получаю «Привет» * �.
Пока я «решил» проблему, используя исходную длину сообщения (сохраненную в переменной unsigned_message_len
), чтобы обрезать сообщение, возвращаемое функцией.
В чем может быть проблема?Почему в переменной unsigned_message
есть некоторые дополнительные символы, а не только исходное сообщение?
Спасибо