Files
2026-09-27 18:10:56 -04:00

4.8 KiB

Changelog

All notable changes to this project are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

[0.1.3] - 2026-09-27

Fixed

  • Signer (CRITICAL): LocalSigner::nip04_encrypt/decrypt still used a private copy of the pre-0.1.1 NIP-04 code (SHA-256-hashed ECDH key, base64(iv||ct) layout), so it could neither read nor produce standard NIP-04 DMs. NIP-04 now lives in one place (nostr_core::crypto::nip04); nostr_nips::nip004 re-exports it and LocalSigner delegates to it.
  • NIP-44: Empty plaintext is now rejected on encrypt and on decrypt (length prefix 0), per spec. Previously we emitted payloads nak rejects with "invalid padding". Payload length is now bounded to the spec range (99..=65603 bytes).
  • NIP-42 (security): verify_auth_event now recomputes the event id. Previously tags/content could be altered after signing and the event still verified, because only the signature over the claimed id was checked.

Tests

  • Added nak-generated known-answer vectors for NIP-04, NIP-44 and the LocalSigner; the integration NIP-04 "known_vectors" test (which only round-tripped) now checks real ciphertext byte-for-byte.
  • Added official NIP-06 spec vectors, RFC 5869 HKDF and real HMAC-SHA512 / PBKDF2 values (these previously asserted only output length); fixed mistyped BIP-32 chain codes in test comments.
  • Added negative tests: tampered MAC/ciphertext, malformed NIP-04 input, NIP-42 tampered body / bad sig / wrong relay / stale timestamp.

[0.1.2] - 2026-09-27

[0.1.1] - 2026-09-24

[0.1.0] - 2026-08-27

[0.0.3] - 2026-08-19

[0.0.2] - 2026-08-17

[0.0.1] - 2026-08-17

Added

  • NIP-06: Full BIP-32 HD path derivation (m/44'/1237'/0'/0/0) with bip32_master_key, bip32_derive_child (hardened + non-hardened), bip32_derive_path, parse_bip44_path. Restores C/Rust key compatibility.
  • NIP-06: SLIP-0010 ed25519/x25519 derivation (slip10_master_key, slip10_derive_child, slip10_derive_path, keypair_from_seed_ed25519).
  • NIP-06: 13 test vectors including official BIP-32 vectors and a pinned mnemonic vector cross-verified against a Python reference.
  • NIP-03: Real OpenTimestamps verification — OTS binary file parser, Merkle proof execution (append/prepend/SHA-256/RIPEMD-160/SHA-1/double SHA-256), Bitcoin block header attestation comparison. Replaces the Ok(true) placeholder stub.
  • NIP-03: 10 tests including tampered-root and malformed-file cases.
  • Validator: Enforce all 8 AuthRuleType variants — HashBlacklist, MimeWhitelist (OR-combined), MimeBlacklist, SizeLimit, RateLimit (stateful per-IP windowed counter), Custom. The _ => {} fallthrough that silently allowed denied requests is removed.
  • Validator: 12 new tests covering every rule type.
  • Nsigner: Three new transports — SerialTransport (CDC-ACM via serialport), FdTransport (Unix FD-pair via FromRawFd), QrexecTransport (Qubes qrexec via qrexec-client-vm).
  • Nsigner: Algorithm-based verbs — ed25519 sign/get_public_key, x25519 get_public_key/ecdh, ML-DSA-65 sign/verify, ML-KEM-768 encapsulate/decapsulate, OTP encrypt/decrypt.
  • Nsigner: derive_hmac now uses a configurable algorithm (default secp256k1); role_path is now sent in all RPC calls when set.
  • Nsigner: MockTransport test helper and 16 new tests.
  • Cashu: Five new mint operations — request_melt_quote, check_melt_quote, mint_tokens, swap_tokens, check_spent, restore_keysets. get_mint_keys now returns typed CashuKeysResponse.
  • Cashu: Typed structs CashuKeysetKeys, BlindedMessage, BlindSignature, MintResponse, Proof, CheckStateResponse, RestoreResponse. 11 tests.
  • Blossom: head_blob (HEAD request with header metadata extraction), upload_file (from file path), download_to_file (to file path).
  • Blossom: BlossomSigner trait for remote-signer support with create_auth_header_with_signer, upload_with_signer, delete_with_signer. 5 tests.
  • Versioning: VERSION file, CHANGELOG.md, increment_and_push.sh script for semantic version bumps with git tagging and pushing.

Fixed

  • NIP-06 (CRITICAL): keypair_from_seed no longer skips BIP-32 path derivation. The same mnemonic + path now produces identical keypairs in C and Rust, restoring identity portability.
  • NIP-03 (HIGH): verify_ots no longer returns Ok(true) for any non-empty input. It now performs real Merkle proof verification.
  • Validator (HIGH): 6 of 8 auth rule types are no longer silently allowed via a _ => {} fallthrough. Configured deny rules are now enforced.