Hi,
I have a signature that was generated in Java using the "SHA1withDSA"
signature scheme. I have been unsuccessful verifying the message
against the signature using Crypto++ in C++. The public key I'm using
was generated in Java and I believe it is already in X509 format. I
would really appreciate any help anyone can give me to get the
signature and message to verify. Below is my code:
const byte KEY[] = {
48, -126, 1, -72, 48, -126, 1, 44, 6, 7, 42, -122, 72, -50,
56,
4, 1, 48, -126, 1, 31, 2, -127, -127, 0, -3, 127, 83, -127,
29,
117, 18, 41, 82, -33, 74, -100, 46, -20, -28, -25, -10, 17,
-73,
82, 60, -17, 68, 0, -61, 30, 63, -128, -74, 81, 38, 105, 69,
93,
64, 34, 81, -5, 89, 61, -115, 88, -6, -65, -59, -11, -70, 48,
-10, -53, -101, 85, 108, -41, -127, 59, -128, 29, 52, 111,
-14,
102, 96, -73, 107, -103, 80, -91, -92, -97, -97, -24, 4, 123,
16, 34, -62, 79, -69, -87, -41, -2, -73, -58, 27, -8, 59, 87,
-25, -58, -88, -90, 21, 15, 4, -5, -125, -10, -45, -59, 30,
-61, 2,
53, 84, 19, 90, 22, -111, 50, -10, 117, -13, -82, 43, 97, -41,
42,
-17, -14, 34, 3, 25, -99, -47, 72, 1, -57, 2, 21, 0, -105, 96,
80,
-113, 21, 35, 11, -52, -78, -110, -71, -126, -94, -21, -124,
11,
-16, 88, 28, -11, 2, -127, -127, 0, -9, -31, -96, -123, -42,
-101,
61, -34, -53, -68, -85, 92, 54, -72, 87, -71, 121, -108, -81,
-69,
-6, 58, -22, -126, -7, 87, 76, 11, 61, 7, -126, 103, 81, 89,
87,
-114, -70, -44, 89, 79, -26, 113, 7, 16, -127, -128, -76, 73,
22,
113, 35, -24, 76, 40, 22, 19, -73, -49, 9, 50, -116, -56, -90,
-31, 60, 22, 122, -117, 84, 124, -115, 40, -32, -93, -82, 30,
43, -77, -90, 117, -111, 110, -93, 127, 11, -6, 33, 53, 98,
-15, -5, 98, 122, 1, 36, 59, -52, -92, -15, -66, -88, 81,
-112, -119, -88, -125, -33, -31, 90, -27, -97, 6, -110, -117,
102, 94, -128, 123, 85, 37, 100, 1, 76, 59, -2, -49, 73, 42,
3, -127, -123, 0, 2, -127, -127, 0, -39, -79, 23, 79, -70, 46,
-20, 66, 123, 4, -81, -32, 32, 98, -41, -84, -12, 35, -85, 44,
-7,
-42, 94, -43, -107, 16, 109, -56, 14, -84, -56, 74, 117, 49,
-38, 78,
-9, -10, 75, -78, 7, -2, -1, 65, 98, -21, 117, 22, -101, 40,
8, -43,
35, -36, -109, 25, 96, -117, 106, -18, -70, -58, 45, -76, -76,
110,
126, 33, -105, -54, -56, 33, -3, 124, 12, -84, -72, 73, 4, -9,
78,
-31, 85, -107, -87, 23, 116, -55, 117, -53, -46, -76, -28,
-60, -98,
-104, -49, -126, -78, 77, -102, 96, 112, -102, -121, -113,
-112, -12,
5, 7, 2, -66, 75, -60, -83, -9, -27, -64, 7, -52, 43, -25,
-49, 88,
-49, 122, 94, 118 };
void test()
{
string strMsg = "00:0d:56:89:cd:c012060369693041203444969304";
string strB64Sig =
"MC0CFQCGETPy4vOhTUwtTXVWPC8416WOoAIUQAOAEpluqH7aHuyzRNuty0qndMg=";
byte abRawSig[1024] = {0};
StringStore ssPubKey((byte*)KEY, sizeof(KEY));
StringSource ss(strB64Sig, true, new Base64Decoder(new
ArraySink(abRawSig, 1024)));
bool bResult;
int iSigSize = 0;
GDSA<SHA1>::Verifier verifier;
try
{
verifier.AccessMaterial().Load(ssPubKey);
byte mybuf[512];
iSigSize = DSAConvertSignatureFormat(mybuf,
verifier.SignatureLength(),
DSA_P1363, abRawSig, 1024, DSA_DER);
bResult = verifier.VerifyMessage((byte*)strMsg.c_str(),
strMsg.size(),
mybuf, iSigSize);
//bResult = verifier.VerifyMessage((byte*)strMsg.c_str(),
strMsg.size(),
// abRawSig, verifier.SignatureLength());
}
catch( ... )
{
printf("Exception occurred.\n");
}
}
--~--~---------~--~----~------------~-------~--~----~
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.
-~----------~----~----~----~------~----~------~--~---