ECDSA Example

View: New views
2 Messages — Rating Filter:   Alert me  

ECDSA Example

by bobby-47 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Hello,

I am interested in using ECC or more probably ECDSA to verify a string
transmitted by a server. The way I'd like it to work is that the
server will create any arbitrary text string. It'll take the string
and hash it and then calculate a signature using some private key.
Then it will transmit the string and the signature and I'd like the
client to be able to verify that the string and signature match using
only the public key information. My only other requirement is that I
need to be able to generate new private/public key pairs from time to
time. I also need fairly short key sizes (less than 160 bits).

From my limited knowledge, it sounds like ECDSA is what I want.
Unfortunately, I am not very math savvy and I start to get lost once
people start bringing up the formulas. I am also having a somewhat
difficult time understanding how all the Crypto++ code works with
regards to ECDSA.

So does anyone have any example code that shows this kind of
functionality?

Thanks!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscribe@....
More information about Crypto++ and this group is available at http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---


Re: ECDSA Example

by Eugene Zolenko-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


I wanted to put that on the wiki, but registration doesn't quite work
for me there...

Here is code to generate private/public key pair and then sign and
verify a message.

        using namespace CryptoPP;

        AutoSeededRandomPool rng;

        // Generating private key
        ECIES<ECP>::PrivateKey privateKey;
        privateKey.Initialize(rng, ASN1::secp160r1());

        // Generating matching public key
        ECIES<ECP>::PublicKey publicKey;
        privateKey.MakePublicKey(publicKey);

        // Signing a message
        ECDSA<ECP>::Signer signer(privateKey);
        std::string message="message";
        std::string signature;

        StringSource(message, true, new SignerFilter(rng, signer, new
StringSink(signature)));
        // signature contains bytes, not ascii string. Just use base32 or hex
encoder if needed.

        // Verifying message
        ECDSA<ECP>::Verifier verifier(publicKey);
        bool isValid = verifier.VerifyMessage((const byte*)message.data(),
message.size(), (const byte*)signature.data(), signature.size());


Of course for this to be usefull you'll need to load and save keys:

Saving:
        ECIES<ECP>::PrivateKey privateKey;
        // generate key ...

        std::string tmp;
        StringSink sink(tmp);
        privateKey.Save(sink);

        std::string base32encodedKey;
        StringSource(tmp, true, new Base32Encoder(new StringSink
(base32encodedKey)));

Loading:
        ECIES<ECP>::PrivateKey privateKey;
        ByteQueue bq;
        StringSource(base32encodedKey, true, new Base32Decoder(new Redirector
(bq)));
        privateKey.Load(bq);

Same with public keys.

On Jul 18, 2:57 am, bobby <bobby8...@...> wrote:

> Hello,
>
> I am interested in using ECC or more probably ECDSA to verify a string
> transmitted by a server. The way I'd like it to work is that the
> server will create any arbitrary text string. It'll take the string
> and hash it and then calculate a signature using some private key.
> Then it will transmit the string and the signature and I'd like the
> client to be able to verify that the string and signature match using
> only the public key information. My only other requirement is that I
> need to be able to generate new private/public key pairs from time to
> time. I also need fairly short key sizes (less than 160 bits).
>
> From my limited knowledge, it sounds like ECDSA is what I want.
> Unfortunately, I am not very math savvy and I start to get lost once
> people start bringing up the formulas. I am also having a somewhat
> difficult time understanding how all the Crypto++ code works with
> regards to ECDSA.
>
> So does anyone have any example code that shows this kind of
> functionality?
>
> Thanks!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscribe@....
More information about Crypto++ and this group is available at http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---