ndn-cxx version 0.6.0

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
    export NDN_LOG=ndn.security=DEBUG:ndn.TcpTransport=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)