Changes
=======

Version 0.3
-----------

- Rewrite TLV syntax specifications using IETF Augmented BNF (:rfc:`5234`)

- Require shortest encoding for TLV-TYPE and TLV-LENGTH numbers

- Add ``Certificate`` specification

- **Name**

  + Lift restriction on name component types, allowing types in the range [1, 65535]
  + Correct definition of name URI encoding: disallow unescaped encoding of PLUS (``+``) and allow TILDE (``~``)
  + Add well-known special-use component types:

    - ``ParametersSha256DigestComponent`` (type 2)
    - ``KeywordNameComponent`` (type 32)
    - ``SegmentNameComponent`` (type 50)
    - ``ByteOffsetNameComponent`` (type 52)
    - ``VersionNameComponent`` (type 54)
    - ``TimestampNameComponent`` (type 56)
    - ``SequenceNumNameComponent`` (type 58)

- **Interest**

  + Remove ``Selectors`` element
  + Add optional ``CanBePrefix`` element after Name
  + Move optional ``MustBeFresh`` element after ``CanBePrefix``
  + Move optional ``ForwardingHint`` element after ``MustBeFresh`` (before ``Nonce``)
  + Redefine the contents of the ``ForwardingHint`` (remove numerical preference and nesting inside the ``Delegation`` TLV)
  + Add optional ``HopLimit`` element
  + Add optional ``ApplicationParameters`` element
  + Define a new specification for Signed Interest using two new elements: ``InterestSignatureInfo`` and ``InterestSignatureValue``

- **Data**

  + Make ``MetaInfo`` and ``Content`` elements optional
  + Change semantics of omitted (or set to zero) ``FreshnessPeriod`` element: it cannot be used to satisfy Interests with ``MustBeFresh`` during content store lookup

- **Signature**

  + Require all compliant implementations to support the ``SignatureSha256WithEcdsa`` signature type using NIST curve P-256
  + Redefine the signed portion of Data packets to be more future-proof
  + Add ``SignatureEd25519`` signature type

- **LinkObject**

  + The content is now just a list of names (remove numerical preference)


Version 0.2.1
-------------

- Add definition of Link Object

- **Interest**

  + Add default of leftmost child if ``ChildSelector`` element not present
  + Add specification of ``ForwardingHint`` element

- **Data**

  + Updated Content Store semantics for Data packets that do not carry ``FreshnessPeriod``.


Version 0.2
-----------

- **Name**

  + Allow zero-length name component
  + Require implicit digest to be specified using ``ImplicitSha256Digest`` name component

- **Interest**

  + Delete deprecated ``Scope`` guider
  + Restrict Interest to have name with at least one name component

- **Data**

  + Redirect ``ContentType`` number assignments to the `wiki page <https://redmine.named-data.net/projects/ndn-tlv/wiki/ContentType>`__

- **Signature**

  + Add spec for ``SignatureHmacWithSha256``

- **TLV-TYPE**

  + Reserve range [800, 1000] for link protocol


Version 0.1.1
-------------

- **Signature**

  + New ``SignatureSha256WithEcdsa`` signature type for Elliptic Curve Digital Signature Algorithm (ECDSA).
  + ``KeyLocatorDigest`` renamed to ``KeyDigest``.  The specification now explicitly allows KeyDigest to be a SHA256 of any type of the key.
  + ``KeyLocator`` element is now defined to be optionally present in generic ``SignatureInfo`` element.
    ``SignatureSha256WithRsa`` and ``SignatureSha256WithEcdsa`` still require ``KeyLocator`` to be always present.


Version 0.1
-----------

- **General**

  + XML-based ccnb packet encoding is replaced by TLV encoding

- **Name**

  + The name encoding is changed from binary XML to TLV format
  + The discussions on naming conventions and the use of special markers inside NameComponents are removed from packet specification, and will be covered by a separate technical document
  + Deprecated zero-length name component

- **Interest Packet**

  + ``Nonce`` is changed from optional to required
  + ``PublisherPublicKeyDigest`` is replaced by ``PublisherPublicKeyLocator``
  + ``AnswerOriginKind`` is simplified from 4bits to a 1-bit ``MustBeFresh``
  + ``FaceID`` has been removed
  + ``InterestLifetime`` changes the unit to the number of milliseconds
  + Removed Bloom Filter from Exclude
  + Changed default semantics of staleness

    Specifically, NDN-TLV Interest without any selectors will bring any data that matches the name, and only when ``MustBeFresh`` selector is enabled it will try to honor freshness, specified in Data packets.
    With Binary XML encoded Interests, the default behavior was to bring "fresh" data and return "stale" data only when ``AnswerOriginKind`` was set to 3.

    Application developers must be aware of this change, reexamine the Interest expression code, and enable ``MustBeFresh`` selector when necessary.

- **Data Packet**

  + The structure of Data packet is changed:

    * ``Name``, ``MetaInfo``, ``Content``, ``Signature{SignatureInfo, SignatureValue}``

  + ``SignedInfo`` is renamed to ``MetaInfo`` and its content is changed
  + ``PublisherPublicKeyDigest`` and ``ExtOpt`` are removed.
  + ``Timestamp`` is removed
  + ``KeyLocator`` is moved to be inside the ``Signature`` (``SignatureInfo``) element
  + Three content types, ENCR, GONE, and NACK are removed
  + ``FreshnessSeconds`` is renamed to ``FreshnessPeriod`` and is expressed in units of milliseconds

- **Signature**

  + ``Signature`` is moved to the end of Data packet.
  + ``KeyLocator`` is moved to be a part of the ``SignatureInfo`` element, if it is applicable for the specific signature type.

    The rationale for the move is to make Signature (sequence of ``SignatureInfo`` and ``SignatureValue`` TLVs) self-contained and self-sufficient.

  + Signature type (or signing method information) is expressed as an assigned integer value (with no assumed default), rather than OID.
  + Added support for hash-only "signature"
  + The current specification does not define Merkle Hash Tree Aggregated Signatures, but it is expected that such (or similar) signatures will be defined in future version of this specification
