fix crash on signature error

This commit is contained in:
Glenn Maynard
2004-05-13 23:40:55 +00:00
parent a0bfacb774
commit 0e7ba7af0b
+42 -35
View File
@@ -36,8 +36,6 @@ CryptManager::CryptManager()
//
// generate keys if none are available
//
/* This is crashing in crypto51/integer.cpp CryptoPP::RecursiveInverseModPower2
* in Linux. -glenn */
if( PREFSMAN->m_bSignProfileData )
{
if( !DoesFileExist(PRIVATE_KEY_PATH) || !DoesFileExist(PUBLIC_KEY_PATH) )
@@ -86,13 +84,15 @@ void CryptManager::SignFileToFile( CString sPath, CString sSignatureFile )
if( !IsAFile(sMessageFilename) )
return;
// CAREFUL: These classes can throw all kinds of exceptions. Should this
// be wrapped in a try catch?
try {
RageFileSource privFile(sPrivFilename, true);
RSASSA_PKCS1v15_SHA_Signer priv(privFile);
AutoSeededRandomPool rng;
RageFileSource privFile(sPrivFilename, true);
RSASSA_PKCS1v15_SHA_Signer priv(privFile);
AutoSeededRandomPool rng;
RageFileSource f(sMessageFilename, true, new SignerFilter(rng, priv, new RageFileSink(sSignatureFile)));
RageFileSource f(sMessageFilename, true, new SignerFilter(rng, priv, new RageFileSink(sSignatureFile)));
} catch( const CryptoPP::Exception &s ) {
LOG->Warn( "SignFileToFile failed: %s", s.what() );
}
}
bool CryptManager::VerifyFileWithFile( CString sPath, CString sSignatureFile )
@@ -110,24 +110,26 @@ bool CryptManager::VerifyFileWithFile( CString sPath, CString sSignatureFile )
if( !IsAFile(sSignatureFile) )
return false;
// CAREFUL: These classes can throw all kinds of exceptions. Should this
// be wrapped in a try catch?
try {
/* XXX: This is opening sPubFilename for RageFile::WRITE instead of READ. */
RageFileSource pubFile(sPubFilename, true);
RSASSA_PKCS1v15_SHA_Verifier pub(pubFile);
/* XXX: This is opening sPubFilename for RageFile::WRITE instead of READ. */
RageFileSource pubFile(sPubFilename, true);
RSASSA_PKCS1v15_SHA_Verifier pub(pubFile);
RageFileSource signatureFile(sSignatureFile, true);
if (signatureFile.MaxRetrievable() != pub.SignatureLength())
return false;
SecByteBlock signature(pub.SignatureLength());
signatureFile.Get(signature, signature.size());
RageFileSource signatureFile(sSignatureFile, true);
if (signatureFile.MaxRetrievable() != pub.SignatureLength())
VerifierFilter *verifierFilter = new VerifierFilter(pub);
verifierFilter->Put(signature, pub.SignatureLength());
RageFileSource f(sMessageFilename, true, verifierFilter);
return verifierFilter->GetLastResult();
} catch( const CryptoPP::Exception &s ) {
LOG->Warn( "VerifyFileWithFile(%s,%s) failed: %s", sPath.c_str(), sSignatureFile.c_str(), s.what() );
return false;
SecByteBlock signature(pub.SignatureLength());
signatureFile.Get(signature, signature.size());
VerifierFilter *verifierFilter = new VerifierFilter(pub);
verifierFilter->Put(signature, pub.SignatureLength());
RageFileSource f(sMessageFilename, true, verifierFilter);
return verifierFilter->GetLastResult();
}
}
bool CryptManager::Verify( CString sPath, CString sSignature )
@@ -143,20 +145,25 @@ bool CryptManager::Verify( CString sPath, CString sSignature )
// CAREFUL: These classes can throw all kinds of exceptions. Should this
// be wrapped in a try catch?
RageFileSource pubFile(sPubFilename, true);
RSASSA_PKCS1v15_SHA_Verifier pub(pubFile);
try {
RageFileSource pubFile(sPubFilename, true);
RSASSA_PKCS1v15_SHA_Verifier pub(pubFile);
StringSource signatureFile(sSignature, true);
if (signatureFile.MaxRetrievable() != pub.SignatureLength())
StringSource signatureFile(sSignature, true);
if (signatureFile.MaxRetrievable() != pub.SignatureLength())
return false;
SecByteBlock signature(pub.SignatureLength());
signatureFile.Get(signature, signature.size());
VerifierFilter *verifierFilter = new VerifierFilter(pub);
verifierFilter->Put(signature, pub.SignatureLength());
RageFileSource f(sMessageFilename, true, verifierFilter);
return verifierFilter->GetLastResult();
} catch( const CryptoPP::Exception &s ) {
LOG->Warn( "Verify(%s,sig) failed: %s", sPath.c_str(), s.what() );
return false;
SecByteBlock signature(pub.SignatureLength());
signatureFile.Get(signature, signature.size());
VerifierFilter *verifierFilter = new VerifierFilter(pub);
verifierFilter->Put(signature, pub.SignatureLength());
RageFileSource f(sMessageFilename, true, verifierFilter);
return verifierFilter->GetLastResult();
}
}