On Wed, Feb 6, 2019 at 6:24 AM <[email protected]> wrote:
>
> I called the method SetPublicElement and I performed trials with both "02" 
> and "03", but the verification stil return error.
>
> Code is:
> int main () {
>     using namespace CryptoPP;
>     AutoSeededRandomPool rnd;
>
> ECDSA<ECP, SHA256>::PublicKey pubKey;
>     HexDecoder decoder;
>     string compactPoint;
>     string message  = 
> "4003805520500000003101001400ba749705a41d251799c60000000000000000000000000000000007d1000001029705"
>                      
> "a41d99c6405d693a403ad274803ffffffc23b7743e40e11fdffffe3fe9ed073753085fffa0000000004001240000006d251a3fe2";
>     string signature = 
> "26413d411d233adc8baf8d4401036ffd511ed996d862ce4e106275d9851339d7";
>     compactPoint = "02" 
> "937120662418500f3ad7c892b1db7e7c2d85ec48c74e99d64dcb7083082bb4f3";
>     //compactPoint = "03" 
> "937120662418500f3ad7c892b1db7e7c2d85ec48c74e99d64dcb7083082bb4f3";
>
> pubKey.AccessGroupParameters().Initialize(ASN1::secp256r1());
> StringSource ss (compactPoint, true, new CryptoPP::HexDecoder);
> ECP::Point point;
>
> pubKey.GetGroupParameters().GetCurve().DecodePoint (point, ss, 
> ss.MaxRetrievable());
>
> std::cout << "Result after decompression X: " << std::hex << point.x << 
> std::endl;
> std::cout << "Result after decompression Y: " << std::hex << point.y << 
> std::endl;
>
>     pubKey.SetPublicElement (point);
>
>     cout << "Is valid? " << pubKey.Validate (rnd, 3) << std::endl;
>
>     cout << 
> "\n\n==================================================\n==================================================\n";
>
>     ECDSA<ECP,SHA256>::Verifier verifier(pubKey);
>     bool result;
>     StringSource ss1( signature+message, true, new 
> SignatureVerificationFilter (verifier,new ArraySink( (byte*)&result, 
> sizeof(result))));
>
>     // Verification failure?
>     if (!result)
>         cout << "Error on verify: " << result << endl << endl;
>     else
>         cout << "Success on verify: " << result << endl << endl;
>
> return 0;
> }

You need to HexDecode the signature and message Something like:

    std::string m, s;
    StringSource(message, true, new HexDecoder(new StringSink(m)));
    StringSource(signature, true, new HexDecoder(new StringSink(s)));

Then use  something like:

  StringSource ss( s+m, true, new SignatureVerificationFilter (...));

But the signature length looks wrong to me. secp256 and SHA256 should
be producing 64-byte signatures, not 32-byte signatures:

    $ echo -n 26413d411d233adc8baf8d4401036ffd511ed996d862ce4e106275d9851339d7
| wc -c
    64

Because it is hex encoded, 64/2 = 32 bytes.

You need to get the specs from the folks who are providing the keys,
message and signature.

Jeff

-- 
You received this message because you are subscribed to "Crypto++ Users". More 
information about Crypto++ and this group is available at 
http://www.cryptopp.com and 
http://groups.google.com/forum/#!forum/cryptopp-users.
--- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to