ndn-cxx version 0.5.0

Release date: October 4, 2016


As of version 0.5.0, ndn-cxx requires a modern compiler (gcc >= 4.8.2, clang >= 3.4) and a relatively new version of Boost libraries (>= 1.54). This means that the code no longer compiles with the packaged version of gcc and boost libraries on Ubuntu 12.04. ndn-cxx can still be compiled on such systems, but requires separate installation of a newer version of the compiler (e.g., clang-3.4) and dependencies.


The library now has a dependency on OpenSSL >= 1.0.1

Changes since version 0.4.1:

New features:

  • New transformation API (issue #3009)

    • base64 and hex encoding/decoding
    • digest calculation (SHA256)
    • HMAC calculation
    • block cipher operations (AES in CBC mode)
    • public key signing/verification
  • Introduce environment variables to set/override transport, pib, and tpm configurations (issue #2925, issue #2514)

    • NDN_CLIENT_TRANSPORT: equivalent of transport in client.conf
    • NDN_CLIENT_PIB: equivalent of pib in client.conf
    • NDN_CLIENT_TPM: equivalent of tpm in client.conf

    Whenever an environment variable is set, it takes precedence over any values specified in the configuration file.

  • Introduce logging facility based on Boost.Log (issue #3562)

    The logging can be enabled on selected moduled at the selected log level through NDN_LOG environment variable. For example,

    export NDN_LOG=ndn.mgmt.Dispatcher=TRACE
  • Introduce Name::deepCopy to allow memory optimizations when working with Name objects (issue #3618)

  • New ndn::security::CommandInterestValidator class (issue #2376)

  • Add StatusDataset client functionality into ndn::nfd::Controller (issue #3329)

  • New FaceUpdateCommand structure for NFD management protocols (issue #3232)

  • breaking change Add Flags and Mask fields to faces/create and faces/update, add Flags field to FaceStatus (issue #3731, issue #3732)

  • New SafeBag structure for private key export/import (issue #3048)

  • ndn::io::loadBlock and saveBlock (issue #3741)

  • Backport of C++17 std::clamp and std::optional (issue #3636, issue #3753)

Improvements and bug fixes

  • breaking change Expose ControlResponse as part of Controller::CommandFailCallback (issue #3739)
  • breaking change Change security constants to corresponding strongly typed enumerations (issue #3083)
  • Fix SegmentFetcher restarting from segment 0 upon Nack (issue #3554)
  • Fix support for ImplicitSha256Digest name component in Exclude selector (issue #3665)
  • Enable KeyChain customization in DummyClientFace (issue #3435)
  • Make ValidatorConfig to evaluate all checkers inside a rule (issue #3645)
  • Add validation of StatusDataset and ControlCommand responses in ndn::nfd::Controller (issue #3653)
  • Enable handling of NACKs in Validator and NotificationSubscriber classes (issue #3332, issue #3662)
  • Several fixes in Scheduler class (issue #3722, issue #3691)
  • Add option to override processEvents method in DummyClientFace class (issue #3769)
  • Several other improvements, including fixes of potential segmentation faults and memory leaks (issue #3136, issue #3248, issue #3723, issue #3727)


  • Constant io::BASE_64, use io::BASE64 instead (issue #3741)
  • Headers management/nfd-*, use mgmt/nfd/* instead (issue #3760)
  • ndn::crypto::sha256 in favor of ndn::crypto::computeSha256Digest
  • security/cryptopp.hpp header. Use security/v1/cryptopp.hpp when needed, avoid direct include as CryptoPP dependency may be removed from future versions of the library.
  • security/identity-certificate.hpp header. Use security/v1/identity-certificate.hpp instead.
  • ndn::PublicKey, ndn::Certificate, ndn::IdentityCertificate, ndn::CertificateExtension, ndn::CertificateSubjectDescription. When necessary, use security::v1::PublicKey, security::v1::Certificate, security::v1::IdentityCertificate, security::v1::CertificateExtension, security::v1::CertificateSubjectDescription instead. The next release will feature a new version of NDN Certificate format.


  • Previously deprecated LocalControlHeader (issue #3755)
  • Previously deprecated makeDummyClientFace function, use DummyClientFace constructors directly (issue #3383)
  • Previously deprecated Name::set, use constructors directly (issue #2506)
  • Previously deprecated Block::fromBuffer and block helpers (issue #2950, issue #2636)
    • Block::fromBuffer overloads with output parameter
    • ndn::encoding::prependBlock
    • ndn::encoding::prependByteArrayBlock
    • ndn::encoding::nonNegativeIntegerBlock
    • ndn::encoding::prependBooleanBlock
    • ndn::encoding::booleanBlock
    • ndn::encoding::dataBlock
    • ndn::encoding::nestedBlock
  • Previously deprecated Command Interest classes (issue #2008)
    • CommandInterestGenerator, replaced by KeyChain::sign
    • ndn::util::CommandInterestValidator, replaced by ndn::security::CommandInterestValidator
  • ndncatchunks3 and ndnputchunks3 apps. Use ndncatchunks and ndnputchunks from NDN Essential Tools (ndn-tools) (issue #3547)
  • ndn::ndn_digestSha256 function. Use ndn::crypto::computeSha256Digest instead.
  • potentially breaking change Headers security/certificate-extension.hpp, security/certificate-subject-description.hpp, and security/certificate.hpp. When necessary, use the corresponding headers in security/v1/* or security/v1/identity-certificate.hpp.