Release Notes

ndn-cxx version 0.5.1

Release date: October 16, 2017

Changes since version 0.5.1:

New features:

  • breaking change Security framework version 2 (Issue #3098, Issue #3920,

    Issue #3644, Issue #4085, Issue #4323, Issue #4339)

    The released version of the library only supports the new version of the security (v2 certificate format) and features a number of updates of KeyChain and Validator interfaces. At the same time, management APIs for ValidatorConfig remained intact; transition to the new framework would require only adjusting Validator::validate() calls and updating configuration files to follow the new naming conventions of NDN Certificate Format Version 2.0.

  • Integration of fetching certificates using Certificate Bundle as part of specialized CertificateFetcher (Issue #3891)

  • ForwardingHint, Delegation, and DelegationList; refactoring of Interest encoding to include ForwardingHint instead of LinkObject, following the latest NDN specification updates (Issue #4054, Issue #4055)

  • Fine-grained signals on interface/address changes in NetworkMonitor for all supported platforms (Issue #3353, Issue #4025, Issue #3817, Issue #4024)

  • Addition of TxSequence field and Ack, the first repeatable field in NDNLPv2 (Issue #3931)

  • Optional LocalUri as part of ControlParameters and adjusting face creation command and responses to handle the new optional field (Issue #4014, Issue #4015, Issue #3956)

  • LpReliability flag in Face management data structures (Issue #4003)

  • Backported implementation of C++17 classes ostream_joiner and optional (Issue #3962, Issue #3753)

Improvements and bug fixes

  • Removed dependency on CryptoPP library. All cryptographic operations are now realized using OpenSSL library routines and/or with the help of security::transform framework (Issue #3006, Issue #3946, Issue #3924, Issue #3886).

  • Improved APIs for NFD management data structures, including equality comparators, formatted output, etc. (Issue #3932, Issue #3903, Issue #3864)

  • FaceUri now accepts link-local IPv6 addresses (Issue #1428)

  • Rename variables in FaceStatus and ForwarderStatus (‘datas’ => ‘data’) (Issue #3955)

  • Improve logging framework and its uses

    • Add API to enumerate Logger modules (Issue #4013)
    • Advanced filtering of the logging modules (Issue #3918)
    • Add logging capabilities to Face, UnixTransport, TcpTransport, and the new security framework (Issue #3563)

    To enable logging, set environment variable NDN_LOG to enable specific, subset, or all logging module at appropriate levels. Examples:

    export NDN_LOG=*=ALL
    export NDN_LOG=ndn.*=ALL
  • Ensure that Face sends Nack only after every InterestCallback has responded (Issue #4228)

  • Fix potential overflow in time::toIsoString (Issue #3915)

  • Fix potentially misaligned memory accesses (Issue #4172, Issue #4097, Issue #4175, Issue #4190, Issue #4191)

  • Fix potential memory access error in Face/PendingInterest (Issue #4228)

  • Improvements and streamlining of the security::transform framework

  • Source/header reorganization (Issue #3940)

    • Move network-related files to src/net


      Namespace changes

      • ndn::util::FaceUri is now ndn::FaceUri
      • ndn::util::ethernet is now ndn::ethernet
      • ndn::util::NetworkMonitor and related classes are now in ndn::net
    • Move signal-related files into src/util/signal/ directory, except for the main include signal.hpp

    • Move InMemoryStorage to src/ims

    • Rename digest.hpp to sha256.hpp to match the Sha256 class declared within


  • Old security framework.
    • v1::KeyChain, use v2::KeyChain instead
    • v1::Validator interface and ValidatorRegex implementation of this interface. ValidatorConfig, ValidatorNull implementation refactored to be based on the new validation framework.
    • v1::SecPublicInfo and its implementation (SecPublicInfoSqlite), SecTpm and its implementations (SecTpmFile, SecTpmOsx). These classes are internal implementation and not intended to be used without v1::KeyChain. v2::KeyChain internally uses the newly introduced Pib and Tpm interfaces with their corresponding implementations.
    • v1::Certificate, v1::IdentityCertificate, v1::CertificateExtension, v1::CertificateSubjectDescription, use v2::Certificate and AdditionalDescription
    • v1::SecuredBag, use v2::SafeBag instead
  • Constant io::BASE_64, use io::BASE64 instead (Issue #3741)
  • Headers management/nfd-*, use mgmt/nfd/* instead (Issue #3760)
  • security/cryptopp.hpp header
  • security/identity-certificate.hpp header
  • ndn::PublicKey, ndn::Certificate, ndn::IdentityCertificate, ndn::CertificateExtension, ndn::CertificateSubjectDescription.
  • Link and SelectedDelegation fields in Interest, replaced by ForwardingHint following the latest version of NDN specification (Issue #4055)
  • LocalControlHeader constants (Issue #3755)
  • NInDatas and NOutDatas (Issue #3955)
  • Overload of Block::Block that parses a Block from a void* buffer
  • Duplicate buf() and get() methods from Buffer class in favor of data()
  • util/crypto.hpp, crypto::sha256(), and crypto::computeSha256Digest() in favor of Sha256::computeDigest()
  • Previously deprecated functions (Issue #4055)