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