"Begin" and "Size" need to be in lower case, like "begin" and "size".
BTW, denis bider just gave me permission to import his Guide into the Wiki and let us update it. I'll get started with the import. -------------------------------------------------- From: "Gary" <[email protected]> Sent: Sunday, February 08, 2009 10:34 AM To: "Crypto++ Users" <[email protected]> Subject: Could any one help me with compiling this code correctly please? > > Hi there! > > I'm using Visual C++ 2008 and "CryptoPP 5.5.2" version! > I have added this library to visual studio environment with the below > instructions and > > built some sample codes succesfully: > > 1.Rename the library file from cryptlib.lib to cryptlibd.lib (notice > the addition of the > > "d" for Debug). > 2.Move the Debug Library to the location of the Header and Source > Files. Also, move > > (without renaming) the Release version to the same folder. > > 3-Add the location of the Header Files, Source Files, and Libraries to > the VC++ > > Environment. Select Tools | Options, Directories Tab. > > 4- Add the location of the Header Files, Source Files, and Libraries > to the VC++ Project. > > > I've compiled the code below and got 6 errors: > > > The Code: > > // Crypto++ > #include "sha.h" // SHA-1, SHA-256, SHA-384, SHA-512 > #include "hex.h" // HexEncoder > #include "files.h" > > // std > #include <iostream> > #include <string.h> > void DumpHash_SingleStep( > CryptoPP::HashTransformation& hash, > char const* szModuleName, > std::string const& strData) > { > using namespace std; > using namespace CryptoPP; > > // Cannot use std::string for buffer; > // its internal storage might not be contiguous > AlignedSecByteBlock sbbDigest(hash.DigestSize()); > > hash.CalculateDigest( > sbbDigest.Begin(), > (byte const*) strData.data(), > strData.size()); > > cout << szModuleName << " SS: "; > HexEncoder(new FileSink(cout)).Put(sbbDigest.Begin(), > sbbDigest.Size()); > cout << endl; > } > void DumpHash_MultiStep( > CryptoPP::HashTransformation& hash, > char const* szModuleName, > std::string const& strDataPart1, > std::string const& strDataPart2, > std::string const& strDataPart3) > { > using namespace std; > using namespace CryptoPP; > > hash.Update((byte const*) strDataPart1.data(), strDataPart1.size > ()); > hash.Update((byte const*) strDataPart2.data(), strDataPart2.size > ()); > hash.Update((byte const*) strDataPart3.data(), strDataPart3.size > ()); > > // Cannot use std::string for buffer; > // its internal storage might not be contiguous > AlignedSecByteBlock sbbDigest(hash.DigestSize()); > > hash.Final(sbbDigest.Begin()); > > cout << szModuleName << " MS: "; > HexEncoder(new FileSink(cout)).Put(sbbDigest.Begin(), > sbbDigest.Size()); > cout << endl; > } > void DumpHash_HashFilter( > CryptoPP::HashTransformation& hash, > char const* szModuleName, > std::string const& strDataPart1, > std::string const& strDataPart2, > std::string const& strDataPart3) > { > using namespace std; > using namespace CryptoPP; > > // Here, we are free to use std::string as the destination, > // because StringSink uses the correct std::string interface to > append data > string strDigest; > HashFilter hashFilter(hash, new StringSink(strDigest)); > hashFilter.Put((byte const*) strDataPart1.data(), > strDataPart1.size()); > hashFilter.Put((byte const*) strDataPart2.data(), > strDataPart2.size()); > hashFilter.Put((byte const*) strDataPart3.data(), > strDataPart3.size()); > hashFilter.MessageEnd(); > > cout << szModuleName << " HF: "; > StringSource(strDigest, true, > new HexEncoder( > new FileSink(cout))); > cout << endl; > } > void DumpHash( > CryptoPP::HashTransformation& hash, > char const* szModuleName, > std::string const& strDataPart1, > std::string const& strDataPart2, > std::string const& strDataPart3) > { > DumpHash_SingleStep(hash, szModuleName, strDataPart1 + > strDataPart2 + strDataPart3); > DumpHash_MultiStep(hash, szModuleName, strDataPart1, > strDataPart2, strDataPart3); > DumpHash_HashFilter(hash, szModuleName, strDataPart1, > strDataPart2, strDataPart3); > } > int main() > { > using namespace std; > using namespace CryptoPP; > > std::string strDataPart1 = "part 1; "; > std::string strDataPart2 = "part two; "; > std::string strDataPart3 = "PART THREE."; > > try > { > DumpHash(SHA(), "SHA ", strDataPart1, > strDataPart2, strDataPart3); > DumpHash(SHA256(), "SHA256 ", strDataPart1, > strDataPart2, strDataPart3); > } > catch (CryptoPP::Exception const& e) > { > cout << "CryptoPP::Exception caught: " << endl > << e.what() << endl; > return 1; > } > > return 0; > } > > > > > The 6 errors: > > > ------ Build started: Project: cryptopp(hashmodule), Configuration: > Debug Win32 ------ > Compiling... > 1.cpp > d:\1.cpp(22) : error C2039: 'Begin' : is not a member of > 'CryptoPP::SecBlock<T,A>' > with > [ > T=byte, > A=CryptoPP::AllocatorWithCleanup<byte,true> > ] > d:\1.cpp(27) : error C2039: 'Begin' : is not a member of > 'CryptoPP::SecBlock<T,A>' > with > [ > T=byte, > A=CryptoPP::AllocatorWithCleanup<byte,true> > ] > d:\1.cpp(27) : error C2039: 'Size' : is not a member of > 'CryptoPP::SecBlock<T,A>' > with > [ > T=byte, > A=CryptoPP::AllocatorWithCleanup<byte,true> > ] > d:\1.cpp(48) : error C2039: 'Begin' : is not a member of > 'CryptoPP::SecBlock<T,A>' > with > [ > T=byte, > A=CryptoPP::AllocatorWithCleanup<byte,true> > ] > d:\1.cpp(51) : error C2039: 'Begin' : is not a member of > 'CryptoPP::SecBlock<T,A>' > with > [ > T=byte, > A=CryptoPP::AllocatorWithCleanup<byte,true> > ] > d:\1.cpp(51) : error C2039: 'Size' : is not a member of > 'CryptoPP::SecBlock<T,A>' > with > [ > T=byte, > A=CryptoPP::AllocatorWithCleanup<byte,true> > ] > > > cryptopp(hashmodule) - 6 error(s), 0 warning(s) > ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped > ========== > > > > In your opinion, why do I get these errors? > Whereas I think errors are not reasonable,because > "AlignedSecByteBlock" is a typedef for > "SecBlock<byte, AllocatorWithCleanup<byte, CRYPTOPP_BOOL_X86 | > CRYPTOPP_BOOL_X64>>" > where "Begin" and "Size" are it's member functions! > > Any help will be greatly appreciated! > Gary > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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. -~----------~----~----~----~------~----~------~--~---
