Hello,
Unfortunatly I have not made any progress, I did some more tests but
decided to leave it for a while and learn some more basic c++ thinking maybe
I was missing some basic knowledge. What I did do is:
I have tried installing the freebsd port and using the library that way, but
that doesn't work either. I then tried to update the whole system to FreeBSD
6RC2. That helped a bit regarding the compilation errors encountered when
compiling integer.cpp but still I get linking erros. Just a quick recap to
see if I am correct in my methodology:
1. Download and extract the source for cryptopp
/root/code/gsm_control/trunk/cryptopp
2. cp GNUMakefile to Makefile and run gmake
3. Compilation goes fine but cryptotest fails all 16 "Panama validation
suite running..." tests
4. Use small test program from Faq to test
(/root/code/gsm_control/trunk/crypto_test.cpp):
**********************************
#include <iostream>
#include <iomanip>
#include "cryptopp/modes.h"
#include "cryptopp/aes.h"
#include "cryptopp/filters.h"
int main(int argc, char* argv[]) {
//
// Key and IV setup
//
byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[
CryptoPP::AES::BLOCKSIZE ];
memset( key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH );
memset( iv, 0x00, CryptoPP::AES::BLOCKSIZE );
//
// String and Sink setup
//
std::string plaintext = "Now is the time for all good men to come to the
aide...";
std::string ciphertext;
std::string decryptedtext;
//
// Dump Plain Text
//
std::cout << "Plain Text (" << plaintext.size() << " bytes)" <<
std::endl;
std::cout << plaintext;
std::cout << std::endl << std::endl;
//
// Create Cipher Text
//
CryptoPP::AES::Encryption aesEncryption(key,
CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption(
aesEncryption, iv );
CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new
CryptoPP::StringSink( ciphertext ) );
stfEncryptor.Put( reinterpret_cast<const unsigned char*>(
plaintext.c_str() ), plaintext.length() + 1 );
stfEncryptor.MessageEnd();
//
// Dump Cipher Text
//
std::cout << "Cipher Text (" << ciphertext.size() << " bytes)" <<
std::endl;
for( int i = 0; i < ciphertext.size(); i++ ) {
std::cout << "0x" << std::hex << (0xFF &
static_cast<byte>(ciphertext[i])) << " ";
}
std::cout << std::endl << std::endl;
//
// Decrypt
//
CryptoPP::AES::Decryption aesDecryption(key,
CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption(
aesDecryption, iv );
CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new
CryptoPP::StringSink( decryptedtext ) );
stfDecryptor.Put( reinterpret_cast<const unsigned char*>(
ciphertext.c_str() ), ciphertext.size() );
stfDecryptor.MessageEnd();
//
// Dump Decrypted Text
//
std::cout << "Decrypted Text: " << std::endl;
std::cout << decryptedtext;
std::cout << std::endl << std::endl;
return 0;
}
**********************************
5. Compile using
gandalf# pwd
/root/code/gsm_control/trunk
gandalf# g++ -L/root/code/gsm_control/trunk/cryptopp/ -lcryptopp -o test_app
crypt_test.cpp
6. Get lots and lots of errors (here are some):
/var/tmp//ccAX78nC.o(.text+0x27b): In function `main':
: undefined reference to
`CryptoPP::CipherModeFinalTemplate_ExternalCipher<CryptoPP::CBC_Encryption>:
:CipherModeFinalTemplate_ExternalCipher(CryptoPP::SimpleKeyedTransformation<
CryptoPP::BlockTransformation>&, unsigned char const*, int)'
/var/tmp//ccAX78nC.o(.text+0x2a5): In function `main':
: undefined reference to
`CryptoPP::StringSinkTemplate<std::string>::StringSinkTemplate(std::string&)
'
/var/tmp//ccAX78nC.o(.text+0x2ec): In function `main':
: undefined reference to
`CryptoPP::StreamTransformationFilter::StreamTransformationFilter(CryptoPP::
StreamTransformation&, CryptoPP::BufferedTransformation*,
CryptoPP::StreamTransformationFilter::BlockPaddingScheme)'
/var/tmp//ccAX78nC.o(.text+0x465): In function `main':
: undefined reference to
`CryptoPP::CipherModeFinalTemplate_ExternalCipher<CryptoPP::CBC_Decryption>:
:CipherModeFinalTemplate_ExternalCipher(CryptoPP::SimpleKeyedTransformation<
CryptoPP::BlockTransformation>&, unsigned char const*, int)'
/var/tmp//ccAX78nC.o(.text+0x48f): In function `main':
: undefined reference to
`CryptoPP::StringSinkTemplate<std::string>::StringSinkTemplate(std::string&)
'
/var/tmp//ccAX78nC.o(.text+0x4d6): In function `main':
Am I doing anything obviously wrong here?! Do I have to pass any object
files or the like with the compiler statement? Any help greatly appreciated.
Thanks.
// Jorgen
-----Original Message-----
From: Jeffrey Walton [mailto:[EMAIL PROTECTED]
Sent: den 3 november 2005 22:28
To: [email protected]; [EMAIL PROTECTED]
Subject: Re: Newbie help tips please
Hi,
Have you made any progress?
Jeff
>>> [EMAIL PROTECTED] 10/30/2005 8:39 PM >>>
Hello,
I am a complete C++ newbie but I think the best way to learn is to get
stuck into it. Anyhow what I want to do is simply try to use the CryptoPP
library in a small learning program. For example starting out using SHA
hashes or the like. So I downloaded the source, extracted it into cryptopp
directory in my source root. I then copied the GNUmakefile to Makefile, ran
gmake. One thing I had to do thoguh was compile integer.cpp by hand as it
did not compile with -O2 (-O1 worked fine). After this I ran tried compiling
the program from the FAQ entitled "How do I use a block cipher in
Crypto++
5.0?" by 2005-Oct-21 7:38am jeffrey. I only changed the include paths as
below.
#include "cryptopp/modes.h"
#include "cryptopp/aes.h"
#include "cryptopp/filters.h"
However I get lots of errors and the compilation fails. I am running
FreeBSD:
FreeBSD xxx.xxx.xxx 5.4-RELEASE FreeBSD 5.4-RELEASE #0: Sun May 8
10:21:06
UTC 2005 i386
Here are some of the erorrors, as far as I can understand these are linker
errors and not compilation erros right?:
/var/tmp//ccb6QI7E.o(.gnu.linkonce.t._ZN8CryptoPP8Rijndael3EncC2ERKS1_+0x28)
: In function `CryptoPP::Rijndael::Enc::Enc(CryptoPP::Rijndael::Enc
const&)':
: undefined reference to `vtable for CryptoPP::Rijndael::Enc'
/var/tmp//ccb6QI7E.o(.gnu.linkonce.t._ZN8CryptoPP8SecBlockIjNS_20AllocatorWi
thCleanupIjEEEC1ERKS3_+0x25): In function `CryptoPP::SecBlock<unsigned int,
CryptoPP::AllocatorWithCleanup<unsigned int>
>::SecBlock(CryptoPP::SecBlock<unsigned int,
CryptoPP::AllocatorWithCleanup<unsigned int> > const&)':
: undefined reference to `CryptoPP::AllocatorWithCleanup<unsigned
int>::allocate(unsigned int, void const*)'
This is the command I used to compile:
# g++ crypt_test.cpp -o cptest.out
I also tried using for SHA in my own really simple program but get the same
errors.
Am I missing something. Like I said I am VERY new to C++ so maybe I haven't
yet grasped how the libraries are supposed to be used (I have compiled other
OOP programs I've written myself though without problems). I have searched
for code examples on the net but almost all are Windows code. I have tried
the -lcryptopp and -L path switches but still get the same error. Also the
cryptotest v fails on many tests.
Tests complete. Total tests = 16. Failed tests = 16.
SOME TESTS FAILED!
Whirlpool Hash Function validation suite running...
AlgorithmType: MessageDigest
Comment: Message digests of strings of 0-bits and lengths 0-127 bytes
Digest:
470F0409ABAA446E49667D4EBE12A14387CEDBD10DD17B8243CAD550A089DC0F\
Message: r0 0x00
Name: Whirlpool
Source: Tweaked NESSIE submission
CryptoPP::Exception caught: Unexpected error during validation test
Thankful for any tips or nudges in the right direction.
// bobey