Well, I figured out that adding "a %= p; b %= p; x %= p; y %= p;" to
my source code after the curve I had commented out makes it work (idea
from 
http://www.codeproject.com/cpp/ECIESProductKey.asp?df=100&forumid=359069&exp=0&select=1780315).

But what worries me is that even though it looks like it's working,
signer.GetKey().GetPrivateExponent() returns 1, which seems
suspicious, because if I use the standard ASN1::secp112r1() curve,
signer.GetKey().GetPrivateExponent() returns a huge number.  Can
anyone explain why this would be or what the Private Exponent is
supposed to represent (appears to be the value of h)?

Actually, if I just replace h with x in the call to Initialize, it
still seems to work and I get x back from the call to
signer.GetKey().GetPrivateExponent().  But x is already used in the
point G, so... what is h for?  This is so confusing.

Here's the new top part of the source code:

    CryptoPP::Integer p("147088164709569533");
    CryptoPP::Integer a("6094329446842148");
    CryptoPP::Integer b("-57162508610850246");
    CryptoPP::Integer n("147088163948218061");   // R from ECB
    CryptoPP::Integer h("1");                   // S from ECB, must be
<= 4
    CryptoPP::Integer x("71002669261090523");
    CryptoPP::Integer y("11469141678568184");
    a %= p; b %= p; x %= p; y %= p;

    CryptoPP::ECP ec( p, a, b );
    CryptoPP::ECP::Point G( x, y );
    CryptoPP::ECDSA< CryptoPP::ECP >::PrivateKey    PrivateKey;
    PrivateKey.Initialize( ec, G, n, h );

    CryptoPP::ECDSA< CryptoPP::ECP >::Signer signer(PrivateKey);
    std::cout << "Private Key x = " <<
signer.GetKey().GetPrivateExponent() << "\r\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