After some attempts I solved my problems with the key pair. At now, I can
save/load and pass them to Signer/Verifier without faults.
The Verifiy functions fails:
void Signature::VerifySignature()
{
[...] //load the public key, calculate the digest of the file (checked
equal to that calculated in "signin function" ), load the signature
try
{
StringSource SS( digest + signature, true, new
SignatureVerificationFilter(Verifier, new StringSink(recovered),
SignatureVerificationFilter::THROW_EXCEPTION |
SignatureVerificationFilter::PUT:MESSAGE));
}
catch(Exception e)
{
cerr << "error: " << e.what() << endl;
}
}
It fails because: "digital signature not valid". I'm sure signature is
valid because, at now, I run the program with only one file (testing). The
variables signature, digest and recovered are public class members.
The variable signature, the one that causes the fault, is first saved in a
file, when my "signing function" ends, by a "saving function":
void Signature::SaveSignature(string signed)
{
SIGNATURE = signed;
fstream savingfile;
savingfile.open("./Signatures", fstream::out | fstream::binary);
//SIGNATURE is local variable of a "saving function"
savingfile.write(SIGNATURE.c_str(), SIGNATURE.size());
savingfile.close();
}
Then is assigned to the variable signature , by a "loading function":
string Signature::LoadSignature()
{
fstream loadingfile;
loadingfile.open("./Signatures", fstream::in | fstream::binary);
getline(loadingfile, SIGNATURE);
loadingfile.close();
}
I think that troubles could derive from saving and loadind the signature,
something about its format
I really need to fix this. So I will appreciate every suggestion that could
take me on the right track.......
Il giorno lunedì 16 luglio 2012 15:49:28 UTC+2, David Irvine ha scritto:
>
> PV.Save(your transfomration); should do the trick.
> See this page
>
> http://www.cryptopp.com/docs/ref/class_crypto_material.html#a690c7ce3e765a502b29b47a08c1a4e7b
>
> Best Regards
> David Irvine
>
>
> On Mon, Jul 16, 2012 at 2:39 PM, Michele Gucciardo <
> [email protected]> wrote:
>
>> Done, now my class have this new member
>>
>> class Signature
>> {
>> [..]
>> static RSA::PrivateKey PV;
>> [..]
>> }
>> But this line
>>
>> Save(saving,queue);
>>
>> doesn't compile, because "Save is not in this scope" (i tried to make
>> SavePV a static class function but it doesn't work). Maybe I have not
>> understand your advice...
>>
>> 2012/7/16 David Irvine <[email protected]>
>>
>>> PV.Save(queue);
>>>
>>> This item is not available in the scope you are calling it in. PV is in
>>> the KeyGen scope, you should make it a static class member in this case.
>>>
>>>
>>> Best Regards
>>> David Irvine
>>>
>>>
>>>
>>> On Mon, Jul 16, 2012 at 1:32 PM, Michele
>>> <[email protected]>wrote:
>>>
>>>> After some attempts I modified the general structure of the project. In
>>>> summary:
>>>>
>>>> int main()
>>>> {
>>>> Signature Keys;
>>>> Keys.KeyGen();
>>>>
>>>> Menu Start; //object with options for creating/filling files
>>>> Start.FileGen();
>>>> }
>>>>
>>>> //FileGen() save file and calls CalcHash();CalcHash() calls
>>>> SignHash();SignHash() calls LoadPrivate(), gets the private key and
>>>> finally
>>>> signs the digest calculated.
>>>>
>>>> class Signature //in signature.h
>>>> {public:
>>>> string Digest;
>>>> string DigSignature;
>>>> constructor
>>>> destructor
>>>> static void KeyGen();
>>>> void SavePrivate(string,RSA::PrivateKey);
>>>> void LoadPrivate();
>>>> void CalcHash(string);
>>>> void SignHash();
>>>> };
>>>> //I will define also SavePublic() , LoadPublic() and VerifySignature()
>>>> (when signing process will work)
>>>>
>>>> static AutoSeededRandomPool rng;
>>>> void Signature::KeyGen()
>>>> {
>>>> static RSA::PrivateKey PV;
>>>> PV.GenerateRandomWithKeySize(rng,1536);
>>>> static RSA;;PublicKey PU;
>>>> // validation code
>>>> string saving;
>>>> saving = "//path";
>>>> Signature Saving;
>>>> Saving.SavePV(saving, PV);
>>>> }
>>>> void Signature::SavePV(const string saving, RSA::PrivateKey PV)
>>>> {
>>>> ByteQueue queue;
>>>> PV.Save(queue);
>>>> Save(saving, queue);
>>>> }
>>>>
>>>> Now I'm in troubles because SavePV doesn't compile and I don't know
>>>> why. I think that I pass the parameters in a wrong way...... I need some
>>>> advices....
>>>>
>>>>
>>>> Il giorno domenica 15 luglio 2012 16:13:48 UTC+2, David Irvine ha
>>>> scritto:
>>>>
>>>>> No worries.
>>>>>
>>>>> If you want the same keys though you could create a static method to
>>>>> return the generated key. As it stands you will be regenerating the key
>>>>> every time (I tink, at least if you always run GenerateKeys method which
>>>>> will overwrite the contents of the static keys). It's maybe best to
>>>>> create
>>>>> keys and pass them into your object (const) if you want to use them as I
>>>>> think you do. That way you can control which keys are in use by the
>>>>> object
>>>>> and recreate additional objects when you work with multiple keys.
>>>>>
>>>>> You will, perhaps then find it easier to create checking objects etc.
>>>>> with the same key pair.
>>>>>
>>>>> Best Regards
>>>>> David Irvine
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Sun, Jul 15, 2012 at 1:37 PM, Michele <[email protected]
>>>>> > wrote:
>>>>>
>>>>>> Done!! Now item 4) of my first post works fine.
>>>>>>
>>>>>> Here is a part of my Signature.cpp :
>>>>>>
>>>>>> static CryptoPP::AutoSeededRandomPool rng; //this fixed
>>>>>> rng troblues as David Irvine suggested
>>>>>>
>>>>>> void Signature::SignHash() //method declared in my
>>>>>> Signature.h file
>>>>>> {
>>>>>> [...]
>>>>>> static RSA::PrivateKey RSAprivate;
>>>>>> RSAprivate.**GenerateRandomWithKeySize(rng,**1536);
>>>>>>
>>>>>> static RSA::PublicKey RSApublic;
>>>>>> //keys created inside the method as Fraser suggested
>>>>>>
>>>>>> //and not declared inside the class as Ingo Naumann
>>>>>> suggested
>>>>>> [...]
>>>>>> }
>>>>>> I'm not sure that the key pair is generated only once ( as I want).
>>>>>> I'm going to verify that key pair is not re-generated every time i call
>>>>>> the
>>>>>> method , because I have to sign every file with the same RSAprivate.
>>>>>>
>>>>>> Thanks Everybody!!
>>>>>> Now I'm going to work on item 5) of my first post: perform the
>>>>>> integrity check of files (created/hashed/signed). I think that, because
>>>>>> of
>>>>>> I declared my key pair as local static variables, I must implement a
>>>>>> method
>>>>>> Signature::IntegrityCheck() inside my Signature.cpp, because outside of
>>>>>> it
>>>>>> the keys will not be visible.......
>>>>>>
>>>>>> Il giorno sabato 14 luglio 2012 21:44:24 UTC+2, Michele ha scritto:
>>>>>>
>>>>>>> Ok David, now i'm deleting RNG from class members. I'm not sure that
>>>>>>> I've understand your example but i will try...
>>>>>>>
>>>>>>> Il giorno sabato 14 luglio 2012 19:08:07 UTC+2, David Irvine ha
>>>>>>> scritto:
>>>>>>>>
>>>>>>>> It seems you may not be using the RNG correctly. It's generally
>>>>>>>> preferred to have on per thread at least (or a global if you like).
>>>>>>>> i.e.
>>>>>>>> in test.cpp you will see how this was done. In your case I am not sure
>>>>>>>> you
>>>>>>>> should have a class member RNG used as you have. This can cause all
>>>>>>>> sorts
>>>>>>>> of issues with threading and protection of the os provided generator
>>>>>>>> etc.
>>>>>>>>
>>>>>>>> static OFB_Mode<AES>::Encryption s_globalRNG;
>>>>>>>>
>>>>>>>> RandomNumberGenerator & GlobalRNG()
>>>>>>>> {
>>>>>>>> return s_globalRNG;
>>>>>>>> }
>>>>>>>>
>>>>>>>> See the docs here http://www.cryptopp.com/**w**
>>>>>>>> iki/RandomNumberGenerator<http://www.cryptopp.com/wiki/RandomNumberGenerator>
>>>>>>>>
>>>>>>>> Best Regards
>>>>>>>> David Irvine
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sat, Jul 14, 2012 at 5:53 PM, Michele <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> RSA::PrivateKey RSAprivate;
>>>>>>>>> string DigitalSIgn;
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>> You received this message because you are subscribed to the "Crypto++
>>>>>> Users" Google Group.
>>>>>> To unsubscribe, send an email to cryptopp-users-unsubscribe@**
>>>>>> googlegroups.com <[email protected]>.
>>>>>> More information about Crypto++ and this group is available at
>>>>>> http://www.cryptopp.com.
>>>>>>
>>>>>
>>>>> --
>>>> 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.
>>>>
>>>
>>>
>>
>
--
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.