blob: 230ed714d9177cf379286a16d82bf55fd2c2c309 [file] [log] [blame]
Alexander Afanasyevd36dd552014-06-30 12:42:46 -07001.. _Release Notes:
Alexander Afanasyevabaab522014-04-30 20:42:11 -07002
Alexander Afanasyevd36dd552014-06-30 12:42:46 -07003ndn-cxx Release Notes
4---------------------
5
6ndn-cxx v0.2.0
7++++++++++++++
8
9New features:
10^^^^^^^^^^^^^
11
12- **Base**
13
14 + The license under which the library is released is changed to **Lesser GNU Public
15 License version 3.0**.
16
17 + New ways to use incoming Interest dispatching:
18
19 * New :ndn-cxx:`InterestFilter` abstraction that supports filtering based on name
20 prefixes and regular expressions.
21
22 * Separated :ndn-cxx:`Face::registerPrefix()` and :ndn-cxx:`Face::setInterestFilter()`
23 methods allow distinct operations of registering with the local NDN forwarder and setting
24 up application-specific ``OnInterest`` call dispatch using InterestFilters.
25
26- **Security**
27
28 + Add ``type dir`` :ref:`trust-anchor in ValidatorConfig <validator-conf-trust-anchors>`
29 to add all certificates under the specified directory as trust anchors.
30 The new option also allow periodic reloading trust anchors, allowing dynamic trust
31 models.
32
33 + Added support for multiple signature types to :ndn-cxx:`PublicKey`,
34 :ndn-cxx:`SecPublicInfo` abstractions
35
36 + New :ndn-cxx:`SignatureSha256WithEcdsa` signature type
37
38- **Wire encoding**
39
40 + :ndn-cxx:`Data::getFullName() <getFullName()>` method to get :ndn-cxx:`Data` packet
41 name with implicit digest
42
43 + New :ndn-cxx:`Name::getSuccessor()` method to get `name successor
44 <http://redmine.named-data.net/issues/1677>`_
45
46- **Management**
47
48 + Support for :ndn-cxx:`ChannelStatus`, :ndn-cxx:`StrategyChoice` datasets
49
50- **Build**
51
52 + enabled support of precompiled headers for clang and gcc compilers to speed up compilation
53
54Updates and bug fixes:
55^^^^^^^^^^^^^^^^^^^^^^
56
57- **Wire encoding**
58
59 + Nonce field is now encoded as 4-byte uint8_t value, as defined by NDN-TLV spec.
60
61 + Optimized Data packet signing
62
63 :ndn-cxx:`KeyChain::sign` method now pre-allocates :ndn-cxx:`EncodingBuffer`, requests
64 unsigned portion of :ndn-cxx:`Data` using ``Data::wireEncode(EncodingBuffer, true)``,
65 and then appends the resulting signature and prepends :ndn-cxx:`Data` packet header.
66 This way there is no extra memory allocation after :ndn-cxx:`Data` packet is signed.
67
68- **Security**
69
70 + Allow user to explicitly specify the cert name prefix before 'KEY' component in
71 ``ndnsec-certgen``
72
73 + ``SignatureSha256`` has been renamed to :ndn-cxx:`DigestSha256` to conform with
74 `NDN-TLV specification <http://named-data.net/doc/ndn-tlv/>`_.
75
76 + Add checking of ``Timestamp`` and ``Nonce`` fields in signed Interest within
77 :ndn-cxx:`ValidatorConfig`
78
79 + Allow validator customization using hooks:
80
81 Sub-classes of :ndn-cxx:`Validator` class can use the following hooks to fine-tune the
82 validation process:
83
84 * :ndn-cxx:`Validator::preCertificateValidation <preCertificateValidation>` to
85 process received certificate before validation.
86 * :ndn-cxx:`Validator::onTimeout <onTimeout>` to process interest timeout
87 * :ndn-cxx:`Validator::afterCheckPolicy <afterCheckPolicy>` to process validation requests.
88
89- Other minor fixes and corrections
90
91Deprecated:
92^^^^^^^^^^^
93
94- ``SignatureSha256`` class, use :ndn-cxx:`DigestSha256` instead.
95
96- All :ndn-cxx:`Face` constructors that accept ``shared_ptr<io_service>``.
97
98 Use versions that accept reference to ``io_service`` object.
99
100- ``Face::ioService`` method, use :ndn-cxx:`Face::getIoService` instead.
101
102- :ndn-cxx:`Interest` constructor that accepts name, individual selectors, and individual
103 guiders as constructor parameters.
104
105 Use ``Interest().setX(...).setY(...)`` or use the overload taking ``Selectors``
106
107- ``name::Component::toEscapedString`` method, use :ndn-cxx:`name::Component::toUri` instead.
108
109- ``SecPublicInfo::addPublicKey`` method, use :ndn-cxx:`SecPublicInfo::addKey` instead.
110
111- ``Tlv::ConentType`` constant (typo), use ``Tlv::ContentType`` instead.
112
113Removed:
114^^^^^^^^
115
116- support of ndnd-tlv (only NFD management protocol is supported now)
117
118- ``SecPublicInfoMemory`` and ``SecTpmMemory`` classes that were no longer used
119
120- Removing concept of periodic event from :ndn-cxx:`Scheduler`.
121
122 In applications, periodic events should be just re-scheduled within the callback for
123 single-shot events.
124
125
126
127ndn-cxx v0.1.0
128++++++++++++++
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700129
130Version 0.1.0 is the initial release of ndn-cxx, an NDN C++ library with eXperimental
131eXtensions.
132
133Originally based on `ndn-cpp library <https://github.com/named-data/ndn-cpp>`_ the ndn-cxx
Lixia Zhangc5fdfe72014-04-30 09:33:43 -0700134library adopts a slightly different design philosophy (including an extensive use of Boost
135libraries to facilitate development, as well as the use of Crypto++ library to support
136cryptographic operations), and includes a number of extensions that aim to simplify NDN
137application development.
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700138
139The current features include:
140
141- **Base**
142
Lixia Zhangc5fdfe72014-04-30 09:33:43 -0700143 + Fully asynchronous, event-driven communication model, which is implemented using `Boost.Asio
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700144 <http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio.html>`_
145 + Single-threaded, but thread-safe Face operations
146
147 A single Face object can be safely used in multiple threads to express Interests and
148 publish Data packets
149
150 + Explicit time management for NDN operations using `Boost.Chrono
151 <http://www.boost.org/doc/libs/1_48_0/doc/html/chrono.html>`_
152 + Simplified and extended `NDN API <doxygen/annotated.html>`_
153 + Extensive set of unit-tests based on `Boost.Test framework
154 <http://www.boost.org/doc/libs/1_48_0/libs/test/doc/html/index.html>`_
155
156 - Continuous integration using an in-house installation of Jenkins build bots and the
Lixia Zhangc5fdfe72014-04-30 09:33:43 -0700157 hosted `Travis CI <https://travis-ci.org/named-data/ndn-cxx>`_ continuous
158 integration service compile and verify correctness of the library for each commit
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700159
160- **Wire format**
161
162 + Full support of `NDN-TLV packet format v0.1 <http://named-data.net/doc/NDN-TLV/0.1/>`_
163 + Pure C++ implementation of wire encoding/decoding with simple access to wire format
164 of all NDN packet abstractions via ``wireEncode`` and ``wireDecode`` methods
165
166 In many cases, NDN packet abstractions are just "indices" to the wire format
167
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700168- **Communication with the forwarder**
169
170 + Enable connecting to local forwarder via UNIX and TCP transports and to remote
171 forwarders using TCP transport
172 + Full support for communication with `Named Data Networking Forwarding Daemon (NFD)
173 <https://github.com/named-data/NFD>`_
174
175 - Full support for `NFD management protocols
176 <http://redmine.named-data.net/projects/nfd/wiki/Management>`_ to NFD status
177 information, create and manage NFD Faces, receive NFD Face status change
178 notifications, update StrategyChoice for namespaces, and manage routes in RIB
179 - Support for `LocalControlHeader
180 <http://redmine.named-data.net/projects/nfd/wiki/LocalControlHeader>`_ to implement
181 special NDN applications that need low-level control of NDN packet forwarding
182
Lixia Zhangc5fdfe72014-04-30 09:33:43 -0700183- **Security support**
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700184
Lixia Zhangc5fdfe72014-04-30 09:33:43 -0700185 + A set of security primitives to allowing implementation of secure NDN applications in
186 a simplified manner
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700187
188 - **KeyChain**: provides simple interfaces of packet signing, and key and certificate
189 management
190 - **ValidatorConfig**: validator that implements trust model defined in a configuration
191 file
192 - **CommandInterestGenerator** and **CommandInterestValidator**: convenient helpers to produce
193 and validate command interests, while preventing potential replay attacks
194
195 + Several implementations of trusted platform modules to securely manage private keys
196
197 - **SecTpmOsx**: TPM based on OSX KeyChain (OSX-specific)
198 - **SecTpmFile**: TPM that uses file-based access control to protect keys (cross-platform)
199
200 + Extensive set of security command-line tools to manage security identities and certificates
201
202 - Generating private/public keys
203 - Issuing certificates
204 - Exporting/importing identities
205 - Managing default security settings
206
207- **Miscellaneous tools**
208
209 + Scheduler to support delayed time operations
210 + NDN regular expressions
211 + Simple config file to alter various aspects of the library
212 + **tlvdump**: a simple tool to visualize TLV-encoded blocks