v0.29.0:
  - curl: Added GNUNET_CURL_job_add_stream, which delivers a response body
    to a GNUNET_CURL_StreamCallback as it arrives instead of buffering it,
    and GNUNET_CURL_job_set_paused, which says which directions of a
    transfer are paused. GNUNET_CURL_job_add_raw keeps everything in one
    buffer and fails past GNUNET_MAX_MALLOC_CHECKED, so it cannot serve a caller that
    relays bodies larger than memory or that has to start passing them on
    before the server has finished sending. The streaming job also reports
    header lines as they arrive, including status lines, the blank line
    ending each section, interim (1xx) responses and trailers.
  - peerstore: GNUNET_PEERSTORE_Processor now has a single, documented
    termination signal: a NULL record ends the iteration, with or without an
    error message, and the GNUNET_PEERSTORE_IterateContext is released before
    the call returns. Handlers must drop their handle and must no longer call
    GNUNET_PEERSTORE_iteration_next() or _stop() on it. Previously a malformed
    response passed NULL while leaving the iteration alive, so the callback ran
    a second time at the end of the iteration.
  - core: Fixed a bug in nonce selection in handshake, among other bugs.
  - util: Added GNUNET_TIME_round_up_utc and GNUNET_TIME_round_down_utc, which
    round to UTC calendar boundaries instead of local time zone ones
  - util: GNUNET_static_assert now really asserts at compile time. Its guard
    tested "#ifdef _Static_assert", which never matches (_Static_assert is a
    keyword, not a macro), so it always degraded to the runtime
    GNUNET_assert and could not be used at file scope. Its argument must now
    be an integer constant expression; use GNUNET_assert for runtime checks.
  - util: Added GNUNET_MQ_try_handle_message, which dispatches exactly like
    GNUNET_MQ_handle_message but does not log at INFO when no handler matches.
    For callers whose handler set deliberately covers only part of what can
    arrive and that act on GNUNET_NO themselves; transport used the logging
    variant that way and printed one line per message it passed to CORE.
  - namecache: Add API to drop cache entries (e.g. from the CLI).

v0.28.0:
  - util:
    - Added new GNUNET_CRYPTO_aead_* APIs for symmetric encryption.
    - Removed usage of deprecated GNUNET_CRYPTO_symmetric_* APIs.
    - Removed GNUNET_CRYPTO_QUALITY_* randomness modifier from APIs.
    - Removed GNUNET_CRYPTO_hash_create_random (was an alias to GNUNET_CRYPTO_random_block)
    - Removed GNUNET_CRYPTO_hash_to_aes_key API
    - Changed various implementations of cryptographic primitives to use libsodium instead of gcrypt
    - Deprecate xsalsa20poly1305 and AES-CTR APIs.
    - Deprecate ECDSA crypto (was non-standard Curve25519 Frankenstein) and converted services to use EdDSA, where applicable
  - gnsrecord: New Seal/Open API for safer use
  - pq: add GNUNET_JSON_pack_conditional
  - pq: Added GNUNET_PQ_query_param_array_int16 and
    GNUNET_PQ_result_spec_array_int16 for signed int16 array parameters
    and results.

v0.27.0:
  - util: Removed GNUNET_CRYPTO_symmetric_derive_iv API
  - util: Deprecate GNUNET_CRYPTO_symmetric_* APIs
  - util: Revise GNUNET_CRYPTO_hkdf_* APIs for safe variadic arguments. Fixes #10898

v0.26.2:
  - pq: fix NULL reporting in arrays
  - util: fix UTF-8 uppercase/lowercase conversion API insanity

v0.26.1:
  - pq: fix consistency check errors that would occur in some cases.

v0.26.0:
  - util: Revise crypto API to prevent misuse of key material.
  - util: Add various TIME related helper APIs.
  - pils: Ship missing header.

v0.25.2:
  - build: Various build system and detection logic improvements incl. compiler warnings.
  - reintroduce some flat file storages

v0.25.1:
  - transport: hotfix incorrect communicator key derivations
  - tests: make failing tests work again
  - util: Change to assigned HPKE codepoint for DHKEM+Elligator. See https://www.iana.org/assignments/hpke/
  - fs: service failed to start because of PILS addition

v0.25.0:
  - util: Removed authkem from HPKE implementation as it is going to be removed from the RFC9180bis spec and is unused in GNUnet anyway.
  - core: New AKE implementation.
  - pils: New service.
  - gns: Various improvements to performance and DNS migration tooling.
  - build: Retired autotools.

v0.24.3:
  - util: Support time specs with 'w' for weeks and 'y' for years as well
  - identity: Delete previously removed GNUNET_IDENTITY_get/set API from header
  - libmhd: Fix critical bug in compression implementation.
  - build: Make gnutls an optional dependency
  - other: Service activation: properly use LISTEN_FDNAMES as per modern systemd specification

v0.24.2:
  - Fix GNUNET_CURL_extend_headers() which failed to actually modify headers.
  - Fix configuration loader to not abort loading configuration files on first non-"*.conf"-file.
  - Fix logging when using timetravel.
  - Fix segfault in gnunet-config.

v0.24.1:
  - Fix crash in libgnunetpq when Postgresql database was restarted
  - Add configure and make functionality for new meson build (https://www.gnu.org/prep/standards/html_node/Configuration.html)

v0.24.0:
  - Meson is new default build system
  - JSON: split off libgnunetmhd from libgnunetjson, renaming various GNUNET_JSON_-symbols to GNUNET_MHD_-. Removes dependency of libgnunetjson on libmicrohttpd

v0.23.0:
  - Add GNUNET_CONFIGURATION_set_value_float
  - util: Float configuration values are no longer locale-dependent, but instead must always be in LC_NUMERIC=C format
  - GNUNET_DISK_internal_file_handle_ changed to always return int
  - Reworked ProjectData handling; Now required as input for various API calls.

v0.22.2:
  - GNUNET_STRINGS_get_utf8_args removed.
  - Removed unsafe and unused functions for 2d/3d array allocation.

v0.22.1:
  - Update HELLO files for new bootstrap peer
  - Fix regression in DHT Bloom filter
  - Fix long-standing regression in HELLO URI expirations

v0.22.0:
  - New logging API to print/parse hex bytes
  - Added RFC9180 HPKE and associated KEMs
  - Replace oneshot PKE and KEM APIs with HPKE
  - New Elligator KEM
  - Namestore API allows multiple records to be inserted in a single transaction (if plugin supports this)
  - New ECDH API that uses KDFs instead of hash
  - Renamed GNUNET_CRYPTO_hkdf to GNUNET_CRYPTO_hkdf_gnunet
  - Added new standard SHA256-based HKDF APIs
  - New hostlist bootstrap domain https://bootstrap.gnunet.org

v0.21.2:
  - Reworked TESTING API
  - Disabled many old-style tests
  - TESTING: introduce GNUNET_TESTING_command_new_ac
  - UTIL: change return type to 'bool' from GNUNET_is_zero()
  - Added GNUNET_GNS_parse_ztld helper API

v0.21.1:
  - Communicator and connectivity bugfixes

v0.21.0:
  - Reworked PEERSTORE API
  - Added record flag for maintenance records
  - ensure traits can be generated with subsystem-specific prefixes for the symbols
  - libgnunettesting first major testing NG refactor towards getting dependency structure streamlined
  - Remove single-use API macro GNUNET_VA_ARG_ENUM
  - major revision of blind signature API
  - Introduced closure to hold store context when calling function to add hello in peerstore.
  - Added DDLs for handling GNUNET_PEERSTORE_StoreHelloContext
  - Removed old hello functionality.
  - Refactoring components under src/ into lib/, plugin/, cli/ and service/
  - add support for encoding/decoding double values as part of JSON to libgnunetjson
  - Changed method GNUNET_HELLO_builder_get_expiration_time to not need parameter GNUNET_HELLO_Builder.
  - Code moved to the core package to get rid of circular dependencies.
  - Moved code to testing to have more generic test setup, which can be used not only from within transport.
  - The old hello design replaced by the new  hello design.
  - Added api to get notified when hellos are stored with peerstore service.
  - Added api to store hellos with peerstore service.
  - Changed new hello uri api to allow to change the expiration time
  - Moved start peer command to testing subsystem.
  - Removed all usage of old transport api, beside peerinfo tool, gnunet-transport cli and usage in transport layer itself.
  - Added __attribute__((deprecated)) to the old transport API

v0.20.0:
  - GNUNET_TESTING_get_testname_from_underscore renamed to GNUNET_STRINGS_get_suffix_from_binary_name and moved from libgnunettesting to libgnuneutil
  - Move GNUNET_s into libgnunetutil.
  - re-introduce compiler annotation for array size in signature
  - function-signature adjustment due to compiler error
  - GNUNET_PQ_get_oid removed, GNUNET_PQ_get_oid_by_name improved
  - Added GNUNET_PQ_get_oid_by_name
  - added GNUNET_PQ_get_oid()
  - Added new CCA-secure KEM and use in IDENTITY encryption
  - Add KEM API to avoid ephemeral private key management
  - Add new GNUNET_PQ_event_do_poll() API to gnunet_pq_lib.h
  - Added API to support arrays in query results
  - Improve PQ API documentation.
  - API for array types extended for times
  - API extended for array query types
  - relevant array-types in queries (not results) in postgresql added
  - just style fixes, int to enum
  - initial steps towards support of array-types in postgresql
  - adds GNUNET_JSON_spec_object_const() and GNUNET_JSON_spec_array_const()

v0.19.4:
  - No changes

v0.19.3:
  - We now detect MySQL's strange, version-dependent my_bool type on configure.
  - Add pkg-config definitions for gnunet messenger.

v0.19.2:
  - New changelog format origin
