Installing crypto++ (libcryptopp) on Ubuntu
sudo apt-get install libcrypto++-dev libcrypto++-doc libcrypto++-utils
On distributions which use yum (such as Fedora):
yum install cryptopp cryptopp-devel
More details on: http://stackoverflow.com/questions/19187990/installing-crypto-libcryptopp-on-ubuntu and https://www.cryptopp.com/wiki/Linux
Then compile and run some test.cc source file
Make testcode.cc which contains following:
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ #include <iostream> int main (int argc, char **argv) { std::cout << "Hello\n"; return 0; }
Execute in the same folder:
g++ -Wall testcode.cc -o testcode ./test
More details on : http://pages.cs.wisc.edu/~beechung/ref/gcc-intro.html
To integrate qcrypto in ns3 open the scriptfile wscript in your ns3 root directory and find “env = conf.env” code. In next line add following code:
conf.env['lpp'] crypto= conf.check(mandatory=True, lib='cryptopp', uselib_store='cryptopp') conf.env.append_value('CXXDEFINES', 'ENABLE_CRYPTOPP') conf.env.append_value('CCDEFINES', 'ENABLE_CRYPTOPP')
Then find the code “if program.env[‘ENABLE_STATIC_NS3’]:”
if program.env['ENABLE_STATIC_NS3']: if sys.platform == 'darwin': program.env.STLIB_MARKER = '-Wl,-all_load' else: program.env.STLIB_MARKER = '-Wl,-Bstatic,--whole-archive' program.env.SHLIB_MARKER = '-Wl,-Bdynamic,--no-whole-archive' else: if program.env.DEST_BINFMT == 'elf': # All ELF platforms are impacted but only the gcc compiler has a flag to fix it. if 'gcc' in (program.env.CXX_NAME, program.env.CC_NAME): program.env.append_value ('SHLIB_MARKER', '-Wl,--no-as-needed') return program
and replace it with following:
if program.env['ENABLE_STATIC_NS3']: if sys.platform == 'darwin': program.env.STLIB_MARKER = '-Wl,-all_load,-lcryptopp' else: program.env.STLIB_MARKER = '-Wl,-Bstatic,--whole-archive,-lcryptopp' program.env.SHLIB_MARKER = '-Wl,-Bdynamic,--no-whole-archive,-lcryptopp' else: if program.env.DEST_BINFMT == 'elf': # All ELF platforms are impacted but only the gcc compiler has a flag to fix it. if 'gcc' in (program.env.CXX_NAME, program.env.CC_NAME): program.env.append_value ('SHLIB_MARKER', '-Wl,--no-as-needed,-lcryptopp') return program
Then find lines with code “obj.install_path = None”, there should be two such lines and after both of them add “obj.uselib = ‘CRYPTOPP'”. It should look like this:
if os.path.isdir(os.path.join("scratch", filename)): obj = bld.create_ns3_program(filename, all_modules) obj.path = obj.path.find_dir('scratch').find_dir(filename) obj.source = obj.path.ant_glob('*.cc') obj.target = filename obj.name = obj.target obj.install_path = None obj.uselib = 'CRYPTOPP' elif filename.endswith(".cc"): name = filename[:-len(".cc")] obj = bld.create_ns3_program(name, all_modules) obj.path = obj.path.find_dir('scratch') obj.source = filename obj.target = name obj.name = obj.target obj.install_path = None obj.uselib = 'CRYPTOPP'
Finally reconfigure your ns3
sudo ./waf distclean sudo ./waf configure (with any other options that you normally would add) sudo ./waf
In your scripts simple include required library such as:
#include <crypto++/aes.h>; #include <crypto++/modes.h>; #include <crypto++/filters.h>;
Enjoy!
Update on 10.10.2016: Please find my wscript connected with crypto++ for ns3.26 here: wscript3.26