The sizes are doubled because you're using HexEncoder. For the private key, 
you can save a few more bytes by using the Encode() method instead of 
DEREncode().

----- Original Message ----- 
From: "Harry" <[EMAIL PROTECTED]>
To: "Crypto++ Users" <[EMAIL PROTECTED]>
Sent: Sunday, April 15, 2007 11:49 PM
Subject: Re: How to save public key and private key for ECC?


>
> Dear Wei,
> Thank you for your quick reply.
>
> The code you posted did a greate job!
>
> Now the length for public.key file is 42 byte, and the length for the
> private.key is 46 byte.  They are much smaller than before, but i
> still don't know why these two length show that we use a ecc 160 bit
> crypography. I thought in a very stupid way that a key length of 20
> byte shows that we use a 160 bit crypography.
>
> Any suggestion or explanation from you is greatly apprieciated.
>
> Best Wishes,
>
> Harry
>
> On Apr 16, 1:16 pm, "Wei Dai" <[EMAIL PROTECTED]> wrote:
>> To minimize the size of public and private keys, what you need to do is
>> encode only the private exponent of the private key, and the public point 
>> of
>> the public key. Try this:
>>
>>  // save private exponent
>>  PrivateKey.GetPrivateExponent().DEREncode(privFile);
>>
>>  // load private exponent
>>  Integer x;
>>  x.BERDecode(privFile);
>> 
>> PrivateKey.AccessGroupParameters().Initialize(CryptoPP::ASN1::secp160k1());
>>  PrivateKey.SetPrivateExponent(x);
>>
>>  // save public element
>>  PublicKey.GetGroupParameters().GetCurve().EncodePoint(pubFile,
>> PublicKey.GetPublicElement(), true);
>>
>>  // load public element
>>  ECP::Point p;
>> 
>> PublicKey.AccessGroupParameters().Initialize(CryptoPP::ASN1::secp160k1());
>>  PublicKey.GetGroupParameters().GetCurve().DecodePoint(p, pubFile,
>> PublicKey.GetGroupParameters().GetCurve().EncodedPointSize(true));
>>  PublicKey.SetPublicElement(p);
>>
>>
>>
>> ----- Original Message -----
>> From: "Harry" <[EMAIL PROTECTED]>
>> To: "Crypto++ Users" <[EMAIL PROTECTED]>
>> Sent: Sunday, April 15, 2007 9:18 PM
>> Subject: How to save public key and private key for ECC?
>>
>> > Hi, all Crypto++ Users,
>>
>> > I used secp160k1 to create a pair of publick/private key into files,
>> > the length for private.key is 408 byte and for public.key is 428 byte.
>> > How can I convert the file into a 160bit length, that is, 20 byte
>> > lengthstring?
>>
>> > This is the code:
>> > char* seed = "1234567890";
>> >        char* privFilename = "Private.key";
>> > char* pubFilename = "Public.key";
>>
>> > CryptoPP::ECIES< CryptoPP::ECP >::PrivateKey    PrivateKey;
>> >        CryptoPP::ECIES< CryptoPP::ECP >::PublicKey     PublicKey;
>> >        CryptoPP::AutoSeededRandomPool                  rng;
>>
>> > rng.Put((byte *)seed, strlen(seed));
>>
>> > PrivateKey.Initialize( rng, CryptoPP::ASN1::secp160k1() );
>> >        PrivateKey.MakePublicKey( PublicKey );
>>
>> > CryptoPP::HexEncoder privFile(new CryptoPP::FileSink(privFilename));
>> > PrivateKey.Save(privFile);
>> > privFile.MessageEnd();
>>
>> > CryptoPP::HexEncoder pubFile(new CryptoPP::FileSink(pubFilename));
>> > PublicKey.Save(pubFile);
>> > pubFile.MessageEnd();- Hide quoted text -
>>
>> - Show quoted text -
>
>
> > 



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