Получите подпись ECDSA с помощью Crypto++

Мне нужно получить подпись ECDSA в переменной с помощью Crypto++.
Я пытался получить ее после запуска SignMessage, но подпись пуста.
Как мне ее получить?


person user3175204    schedule 09.01.2014    source источник


Ответы (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