Hello!
I need to check DSA digital signature on some data. I have next parameters:
Signature Part R
Signature Part S
Big P
Big Q
Big G
Big Y (public key of signer)
I can't understand how to use Crypto++. I wrote such function:
bool checkDsaSignature( const ::std::string &message
, const ::std::string &signaturePartR
, const ::std::string &signaturePartS
, const ::std::string &saBigP // BigP
, const ::std::string &saBigQ // BigQ
, const ::std::string &saBigG // BigG
, const ::std::string &saPublicKey // BigY
)
{
try{
using namespace CryptoPP;
DSA::PublicKey publicKey;
publicKey.Initialize( Integer( (const byte*)saBigP.data(),
saBigP.size(), Integer::UNSIGNED)
, Integer( (const byte*)saBigQ.data(),
saBigQ.size(), Integer::UNSIGNED)
, Integer( (const byte*)saBigG.data(),
saBigG.size(), Integer::UNSIGNED)
, Integer( (const byte*)saPublicKey.data(),
saPublicKey.size(), Integer::UNSIGNED)
);
DSA::Verifier verifier( publicKey );
SignatureVerificationFilter svf( verifier, 0,
SignatureVerificationFilter::SIGNATURE_AT_BEGIN |
SignatureVerificationFilter::PUT_RESULT );
StringSource( signaturePartR+signaturePartS+message, true, new
Redirector( svf ) );
return svf.GetLastResult();
}
catch(...)
{
return false;
}
}
but I think it's wrong, it' fails on any combinations of input. Possible, I
don't undestand something in DSS/DSA usage, and|or in Crypto++ usage.
DSA parameters are readed from file such this:
// Big p
C16C BAD3 4D47 5EC5 3966 95D6 94BC 8BC4 7E59 8E23 B5A9 D7C5 CEC8 2D65 B682
7D44 E953 7848 4730 C0BF F1F4 CB56 F47C 6E51 054B E892 00F3 0D43 DC4F EF96
24D4 665B.
// Big q
B7B8 10B5 8C09 34F6 4287 8F36 0B96 D7CC 26B5 3E4D.
// Big g
4C53 C726 BDBF BBA6 549D 7E73 1939 C6C9 3A86 9A27 C5DB 17BA 3CAC 589D 7B3E
003F A735 F290 CFD0 7A3E F10F 3515 5F1A 2EF7 0335 AF7B 6A52 11A1 1035 18FB
A44E 9718.
// Big y
063A C955 F639 B2F9 202E 070C 4A10 E82F 877A BC7F D928 D5F4 55C2 A3BF E928
92C5 9EB5 5DB0 ED6A 9555 ED8F 1C6E F218 DB62 FFFD F74E 5755 A989 44C7 6B50
9C41 B022.
All of them converted into string that contains binary (not ascii hex)
representation - bigP looks in debugger as string like "C1 6C BA D3 4D 47 5E
C5...", R and S has the same format and representation. My docs tells me
that message must be SHA-1 digest of data, I try to use both variants - put
SHA-1 digest and put data as is (I guess that makeing SHA-1 hash is a part
of DSA algoritm and Crypto++ will make it for me), but both versions not
works.
Can anybody take hints for me how it can be solved?
--
You received this message because you are subscribed to the "Crypto++ Users"
Google Group.
To unsubscribe, send an email to [email protected].
More information about Crypto++ and this group is available at
http://www.cryptopp.com.