Hi,
I think the only methods available (of interest) are Update() and
Final(). See
http://cryptopp.sourceforge.net/docs/ref521/class_hash_transformation.html
You might also try including cryptlib.h.
Finally, does a pointer make a difference? When I move amoung Random
Number Generators, I generall hold a pointer to a base class, and not
a
reference.
Jeff
>>> [EMAIL PROTECTED] 11/15/2005 3:08 PM >>>
I followed your lead but still can not figure out why its not taking
SHA() as the algorithm. Here is my complete code. Kindly see if you
couls figure something out.
// Crypto++
#include "/util/crypto++-5.2.1/hex.h" // HexEncoder
#include "/util/crypto++-5.2.1/sha.h" // SHA-1, SHA-256,
SHA-384,
SHA-512
#include "/util/crypto++-5.2.1/ripemd.h" // RIPEMD160
#include "/util/crypto++-5.2.1/md5.h" // MD5
#include "/util/crypto++-5.2.1/crc.h" // CRC-32
// std
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
std::fstream fout("hash.txt", std::ios::out | std::ios::app);
void ReadInput(std::vector<std::string>& vecText, unsigned int
nNrPlaintexts)
{
// delare namespaces in use
using namespace std;
using namespace CryptoPP;
char str[200];
// resize vector so that it references the 0th element
vecText.resize(0);
// open the input file to read plaintext from
fstream fin("plaintext.txt", ios::in);
while (nNrPlaintexts--)
{
if(!fin.eof())
{// while end of file is not reached read each line of data
fin.getline(str,200);
vecText.push_back(str);
}
else
{
cout << "The file does not have sufficient data";
break;
}
}
// close the file
fin.close();
}
void HashDump(CryptoPP::HashTransformation& hash, char const*
szModuleName, std::string const& strData)
{
// declare namespaces in use
using namespace std;
using namespace CryptoPP;
string strHash;
// byte hashOutputBuffer[SHA::DIGESTSIZE];
// memset(hashOutputBuffer, 0x00, SHA::DIGESTSIZE);
// Cannot use std::string for buffer;
// its internal storage might not be contiguous
SecByteBlock sbbDigest(hash.DigestSize());
// calculate the requisite hash
hash.CalculateDigest(sbbDigest, (byte const*) strData.data(),
strData.size());
// HexEncode the hash and store in a string
StringSource(sbbDigest.begin(), true, new HexEncoder(new
StringSink(strHash)));
// display the generated hash
fout << szModuleName << ": " << strHash << endl;
}
int main()
{
// declares namespaces in use
using namespace std;
using namespace CryptoPP;
try
{
unsigned int nText = 10;
vector<string> vecText;
// populate vector with the plaintexts
ReadInput(vecText, nText);
for (unsigned int i=0; i!=nText; ++i)
{
cout << "(" << i << ") ";
cout << vecText[i] << endl;
// calculate SHA digest
HashDump(CryptoPP::SHA(), SHA::StaticAlgorithm, vecText[i]);
//calculate 256 bit hash digest
//HashDump(CryptoPP::SHA256(), "SHA256 ", vecText[i]);
// calculate RIPEMD digest
//HashDump(CryptoPP::RIPEMD160(), "RIPEMD160 ", vecText[i]);
// calculate MD5 hash digest
HashDump(CryptoPP::MD5(), "MD5 ", vecText[i]);
// calculaye CRC digest
// HashDump(CryptoPP::CRC32(), "CRC32 ", vecText[i]);
}
}
catch (CryptoPP::Exception const& e)
{// catch CryptoPP exceptions
cout << "CryptoPP::Exception caught: " << endl
<< e.what() << endl;
return 1;
}
fout.close();
return 0;
}
Quoting Cornel Maftuleac <[EMAIL PROTECTED]>:
> Manik Taneja wrote:
>
> >I am trying to write a hash program which could
> >compute the Hash for all the different types -
> >SHA1, SHA256, MD5, ....
> >
> >As such, I wrote the following function that
> >computes the hash for different algorithms
> >
> >i coded the function as -
> >
> >void HashDump(CryptoPP::HashTransformation& hash, char const*
> Module,
> >std::string const& strData)
> >{
> >....
> >...
> >....
> >...
> >
> >
> >}
> >
> >However, when I call the function as -
> >
> >HashDump(SHA(), "SHA 1", strData);
> >
> >the compiler generates an error saying -
> >
> >could not convert 'SHA()' to 'CryptoPP::HashTransformation&'
> >
> >I really wish to figure out which **interface** to use so that I
> could
> >just pass the requisite arguments and the function computes the
> >appropriate hash for me.
> >
> >
> I think CryptoPP::HashTransformation is just what you need.
> But are you sure that compiler knows what is SHA()?
> Maybe you should write CryptoPP::SHA?
> A little hint: you can replace the second hard-coded parameter by
> CryptoPP::SHA::StaticAlgorithmName(), this way you'll get the
> algorithm
> name from cryptopp inside. ;)