Hi Wei,

Do you have any thoughts on incorrect usage? I'm not convinced it is
Crypto++. Attached is the relevant code of InvokeCommand() and
CalculateHashes(). InvokeCommand() has parallel arrays (vectors of
strings) to keep the logic simple.

Jeff

HRESULT CCreateHash::InvokeCommand (
                                         LPCMINVOKECOMMANDINFO
pCmdInfo )
{
    // Friendly Name: 'MD5'
    std::vector< std::wstring > hashnames;

    // Hash: 47FD4214F5775826FB20FEC1091987A1
    std::vector< std::wstring > hashvalues;

    ...
    for( i = 0; i < files.size(); i++ )
    {
        CalculateFileHashes( files[ i ], hashnames, hashvalues );
    }

    ...

}
bool CCreateHash::CalculateFileHashes(
                                const std::wstring& filename,
                                std::vector< std::wstring >&
hashnames,
                                std::vector< std::wstring >&
hashvalues )
{
    CryptoPP::MD5  hashMD5;
    CryptoPP::HashFilter filterMD5(hashMD5);

    CryptoPP::SHA1 hashSHA1;
    CryptoPP::HashFilter filterSHA1(hashSHA1);

    CryptoPP::SHA256 hashSHA256;
    CryptoPP::HashFilter filterSHA256(hashSHA256);

    CryptoPP::SHA512 hashSHA512;
    CryptoPP::HashFilter filterSHA512(hashSHA512);

    CryptoPP::Whirlpool hashWhirlpool;
    CryptoPP::HashFilter filterWhirlpool(hashWhirlpool);

    std::auto_ptr<CryptoPP::ChannelSwitch>
                  channelSwitch(new CryptoPP::ChannelSwitch);

    channelSwitch->AddDefaultRoute(filterMD5);
    channelSwitch->AddDefaultRoute(filterSHA1);
    channelSwitch->AddDefaultRoute(filterSHA256);
    channelSwitch->AddDefaultRoute(filterSHA512);
    channelSwitch->AddDefaultRoute(filterWhirlpool);

    try {
        CryptoPP::FileSource( StringNarrow( filename ).c_str(),
                              true, channelSwitch.release() );
    }

    catch( CryptoPP::Exception& e ) { e; return false; }   // e.what()
    catch( std::exception& e )      { e; return false; }   // e.what()
    catch( ... )                    {    return false; }

    std::string digest;
    CryptoPP::HexEncoder encoder( new CryptoPP::StringSink( digest ),
                                  true /* uppercase */ );

    hashnames.clear(); hashvalues.clear();

    filterMD5.TransferTo( encoder );
    hashnames.push_back( StringWiden( filterMD5.AlgorithmName() ) );
    hashvalues.push_back( StringWiden( digest ) );
    digest.erase();

    filterSHA1.TransferTo( encoder );
    hashnames.push_back( StringWiden( filterSHA1.AlgorithmName() ) );
    hashvalues.push_back( StringWiden( digest ) );
    digest.erase();

    filterSHA256.TransferTo( encoder );
 
hashnames.push_back( StringWiden( filterSHA256.AlgorithmName() ) );
    hashvalues.push_back( StringWiden( digest ) );
    digest.erase();

    filterSHA512.TransferTo( encoder );
 
hashnames.push_back( StringWiden( filterSHA512.AlgorithmName() ) );
    hashvalues.push_back( StringWiden( digest ) );
    digest.erase();

    filterWhirlpool.TransferTo( encoder );
 
hashnames.push_back( StringWiden( filterWhirlpool.AlgorithmName() ) );
    hashvalues.push_back( StringWiden( digest ) );
    digest.erase();

    return true;
}

---------- Forwarded message ----------
From: "Jim Barry" <[EMAIL PROTECTED]>
Date: Jun 4, 10:14 pm
Subject: Context Menu Extension DLLs Are Mutually Exclusive Under
Vista
To: microsoft.public.platformsdk.shell


Jeffrey Walton wrote:
> I've created a pair of (two separate) extensions: one for creating
> file checksums; and a second for verifying. Reference: A File Checksum
> Shell Menu Extension Dll (http://www.codeproject.com/useritems/
> ShellChecksum.asp).

> It is apparent these are mutually exclusive on Vista (I just retested
> on Windows 2000 - OK):
> * Register both Create and Verify
> - Only Create is available

> * Register only Verify (unregister Create)
> - Verify is available

The problem seems to lie with cryptlib. If you comment out the
InvokeCommand code and remove cryptlib from each project, both menu
items start appearing. Actually I just tried making a debug build of
your project using Crypto++ 5.5.1, and both menu items appeared, but
then it totally crashed Explorer with  heap corruption errors.

--
Jim Barry, MVP (Windows SDK)


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

Reply via email to