Unix Crypto++ Beginner Question

View: New views
2 Messages — Rating Filter:   Alert me  

Unix Crypto++ Beginner Question

by Dark Con :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Hi guys,

I'm just starting out with the crypto++ examples, trying to work through
some examples to understand how everything goes together. All the
complete projects I can find seem to be built for Visual C++ or other
Windows environments, but my coding environment uses the CodeBlocks IDE.
I've set up a build environment (with the crypto++ libraries) on both a
Mac OSX system and a Linux system and seem to be running into the same
snag in both cases. I'm sure my error has something to do with my
includes, or possibly the placement of files, etc. but I can't find a
complete example to compare against so I thought you guys might be able
to help.

I've linked the compiled libcryptopp.a file into the project and added
the /usr/include/cryptopp/ directory to the project so it can find the
included files.

The project I'm compiling is a very slightly modified version of the
Sample 2 project from this page:
http://www.codeproject.com/KB/security/BlockCiphers.aspx

When compiling the code I get a linking error which produces:

Undefined symbols:
   "CryptoPP::Rijndael::Enc::AdvancedProcessBlocks(unsigned char const*,
unsigned char const*, unsigned char*, unsigned long, unsigned int)
const", referenced from:
       vtable for CryptoPP::BlockCipherFinal<(CryptoPP::CipherDir)0,
CryptoPP::Rijndael::Enc>in displayclient.o
       vtable for
CryptoPP::ClonableImpl<CryptoPP::BlockCipherFinal<(CryptoPP::CipherDir)0, CryptoPP::Rijndael::Enc>,
CryptoPP::Rijndael::Enc>in displayclient.o
   "non-virtual thunk to
CryptoPP::Rijndael::Enc::AdvancedProcessBlocks(unsigned char const*,
unsigned char const*, unsigned char*, unsigned long, unsigned int)
const", referenced from:
       vtable for CryptoPP::BlockCipherFinal<(CryptoPP::CipherDir)0,
CryptoPP::Rijndael::Enc>in displayclient.o
       vtable for
CryptoPP::ClonableImpl<CryptoPP::BlockCipherFinal<(CryptoPP::CipherDir)0, CryptoPP::Rijndael::Enc>,
CryptoPP::Rijndael::Enc>in displayclient.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

The code that produces this error is:

// Crypto++ Includes
#include <aes.h>
#include "modes.h"      // xxx_Mode< >
#include "filters.h"    // StringSource and StreamTransformation

// Standard Includes
#include <iostream>
#include <string>

using namespace CryptoPP;
using namespace std;

int main(int argc, char *argv[])
{
     // Key and IV setup
     byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ];
     byte iv[ CryptoPP::AES::BLOCKSIZE ];

     ::memset( key, 0x01, CryptoPP::AES::DEFAULT_KEYLENGTH );
     ::memset( iv, 0x01, CryptoPP::AES::BLOCKSIZE );

     // Message M
     std::string PlainText = "Voltaire said, Prejudices are what fools
use for reason";

     // Cipher Text Sink
     std::string CipherText;

     // Encryptor
     CryptoPP::ECB_Mode< CryptoPP::AES >::Encryption
     //Encryptor( key, sizeof(key), iv );
     Encryptor( key, sizeof(key));

     // Encryption
     CryptoPP::StringSource( PlainText, true,
         new CryptoPP::StreamTransformationFilter( Encryptor,
             new CryptoPP::StringSink( CipherText )
         ) // StreamTransformationFilter
     ); // StringSource

     ///////////////////////////////////////
     // DMZ                               //
     ///////////////////////////////////////

     // Recovered Text Sink
     std::string RecoveredText;

     // Decryptor
     CryptoPP::ECB_Mode< CryptoPP::AES >::Decryption
       // Decryptor( key, sizeof(key), iv );
       Decryptor( key, sizeof(key) );

     // Decryption
     CryptoPP::StringSource( CipherText, true,
         new CryptoPP::StreamTransformationFilter( Decryptor,
             new CryptoPP::StringSink( RecoveredText )
         ) // StreamTransformationFilter
     ); // StringSource

     //////////////////////////////////////////
     // Output //
     //////////////////////////////////////////

     std::cout << "Algorithm:" << std::endl;
     std::cout << " " << Encryptor.AlgorithmName() << std::endl;
     std::cout << "Minimum Key Size:" << std::endl;
     std::cout << " " << Encryptor.MinKeyLength() << " bytes" << std::endl;
     std::cout << std::endl;

     std::cout << "Plain Text (" << PlainText.length() << " bytes)" <<
std::endl;
     std::cout << " '" << PlainText << "'" << std::endl;
     std::cout << std::endl;

     std::cout << "Cipher Text (" << CipherText.length() << " bytes)" <<
std::endl;
     std::cout << std::endl;

     std::cout << "Recovered Text:" << std::endl;
     std::cout << " '" << RecoveredText << "'" << std::endl;
     std::cout << std::endl;

     return 0;
}

Any help would be appreciated. Thanks.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscribe@....
More information about Crypto++ and this group is available at http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---


Re: Unix Crypto++ Beginner Question

by Jeffrey Walton-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Hi Dark Con,

The following may be of help. http://www.cryptopp.com/wiki/Linux.

Jeff

On 6/16/09, Dark Con <d4rkcon@...> wrote:

>
>  Hi guys,
>
>  I'm just starting out with the crypto++ examples, trying to work through
>  some examples to understand how everything goes together. All the
>  complete projects I can find seem to be built for Visual C++ or other
>  Windows environments, but my coding environment uses the CodeBlocks IDE.
>  I've set up a build environment (with the crypto++ libraries) on both a
>  Mac OSX system and a Linux system and seem to be running into the same
>  snag in both cases. I'm sure my error has something to do with my
>  includes, or possibly the placement of files, etc. but I can't find a
>  complete example to compare against so I thought you guys might be able
>  to help.
>
>  I've linked the compiled libcryptopp.a file into the project and added
>  the /usr/include/cryptopp/ directory to the project so it can find the
>  included files.
>
>  The project I'm compiling is a very slightly modified version of the
>  Sample 2 project from this page:
>  http://www.codeproject.com/KB/security/BlockCiphers.aspx
>
>  When compiling the code I get a linking error which produces:
>
>  Undefined symbols:
>    "CryptoPP::Rijndael::Enc::AdvancedProcessBlocks(unsigned char const*,
>  unsigned char const*, unsigned char*, unsigned long, unsigned int)
>  const", referenced from:
>        vtable for CryptoPP::BlockCipherFinal<(CryptoPP::CipherDir)0,
>  CryptoPP::Rijndael::Enc>in displayclient.o
>        vtable for
>  CryptoPP::ClonableImpl<CryptoPP::BlockCipherFinal<(CryptoPP::CipherDir)0, CryptoPP::Rijndael::Enc>,
>  CryptoPP::Rijndael::Enc>in displayclient.o
>    "non-virtual thunk to
>  CryptoPP::Rijndael::Enc::AdvancedProcessBlocks(unsigned char const*,
>  unsigned char const*, unsigned char*, unsigned long, unsigned int)
>  const", referenced from:
>        vtable for CryptoPP::BlockCipherFinal<(CryptoPP::CipherDir)0,
>  CryptoPP::Rijndael::Enc>in displayclient.o
>        vtable for
>  CryptoPP::ClonableImpl<CryptoPP::BlockCipherFinal<(CryptoPP::CipherDir)0, CryptoPP::Rijndael::Enc>,
>  CryptoPP::Rijndael::Enc>in displayclient.o
>  ld: symbol(s) not found
>  collect2: ld returned 1 exit status
>
>  The code that produces this error is:
>
>  [SNIP]
>
>  Any help would be appreciated. Thanks.
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscribe@....
More information about Crypto++ and this group is available at http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---