-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Description
I think the following should not pass ECDSA verification (invalid pubkey), but it does. Tested on Linux 64 bit, latest master branch checkout.
#include <eccrypto.h>
#include <ecp.h>
#include <oids.h>
int main(void)
{
::CryptoPP::ECDSA<::CryptoPP::ECP, ::CryptoPP::SHA256>::PublicKey publicKey;
publicKey.Initialize(
::CryptoPP::ASN1::secp256k1(),
CryptoPP::ECP::Point(
CryptoPP::Integer("83326269377737301187045338455478996967104803243941757917076354219390730898031"),
CryptoPP::Integer("108911706275326467973600132368983151825997206660859431906025905780521963107049")
));
::CryptoPP::ECDSA<::CryptoPP::ECP, ::CryptoPP::SHA256>::Verifier verifier(publicKey);
const CryptoPP::Integer R("58459610944154385406267492095069703630366579530687393858060946682600281547621");
const CryptoPP::Integer S("166425580247629610000042226331335729376739920034019158271667950393311552549306");
uint8_t ct[] = {0x31, 0x32, 0x33, 0x34, 0x30, 0x30};
const size_t siglen = verifier.SignatureLength();
uint8_t signature[siglen];
R.Encode(signature + 0, siglen / 2);
S.Encode(signature + (siglen / 2), siglen / 2);
printf("%d\n", verifier.VerifyMessage(ct, sizeof(ct), signature, siglen));
return 0;
}
Metadata
Metadata
Assignees
Labels
No labels