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.
-~----------~----~----~----~------~----~------~--~---

Reply via email to