Мне нужно получить подпись ECDSA в переменной с помощью Crypto++.
Я пытался получить ее после запуска SignMessage, но подпись пуста.
Как мне ее получить?
Получите подпись ECDSA с помощью Crypto++
Ответы (1)
Вы смотрели вики Crypto++? Об алгоритме цифровой подписи на основе эллиптических кривых написано много материала.
Не совсем понятно, что вы делаете или где что-то пошло не так, поэтому вот копия и вставка из вики:
Подписание:
ECDSA<ECP, SHA1>::PrivateKey privateKey;
privateKey.Load(...);
AutoSeededRandomPool prng;
string message = "Yoda said, Do or do not. There is no try.";
string signature;
StringSource ss1( message, true /*pump all*/,
new SignerFilter( prng,
ECDSA<ECP,SHA1>::Signer( privateKey ),
new StringSink( signature )
) // SignerFilter
); // StringSource
Проверка:
ECDSA<ECP, SHA1>::PublicKey publicKey;
publicKey.Load(...);
// Result of the verification process
bool result = false;
// Exactly what was signed in the previous step
string message = ...;
// Output from the signing operation in the previous step
string signature = ...;
StringSource ss2( signature+message, true /*pump all*/,
new SignatureVerificationFilter(
ECDSA<ECP,SHA1>::Verifier(publicKey),
new ArraySink( (byte*)&result, sizeof(result) )
) // SignatureVerificationFilter
);
// Verification failure?
if( !result ) {...}
Если вы хотите, чтобы проверка завершилась ошибкой, попробуйте:
static const int VERIFICATION_FLAGS = SIGNATURE_AT_BEGIN | THROW_EXCEPTION;
StringSource ss3( signature+message, true /*pump all*/,
new SignatureVerificationFilter(
ECDSA<ECP,SHA1>::Verifier(publicKey),
NULL, /* No need for attached filter */
VERIFICATION_FLAGS
) // SignatureVerificationFilter
);
person
jww
schedule
10.01.2014