Laan Tungir
0b1c3ea382
v0.1.24 - Migrate Teensy 4.1 signer to role+path authorization model (deprecate nostr_index)
v0.1.25
2026-08-08 13:55:02 -04:00
Laan Tungir
fd895db0c9
v0.1.23 - Make role-as-password the default authorization model; remove interactive approval prompts from wizard; add Makefile guard to direct agents to build_static.sh; optimize build_static.sh with content-hash skip and fix .dockerignore to exclude 1.3GB of unnecessary files from Docker context
v0.1.24
2026-08-08 08:09:56 -04:00
Laan Tungir
e4087441a5
v0.1.22 - Fix connections display EINTR handling with tui_get_key; add qrexec usage example to client help; simplify deploy_local.sh by removing confirmation prompt
v0.1.23
2026-08-06 17:41:10 -04:00
Laan Tungir
5a16c4e1bf
v0.1.21 - Refactor n_signer_client to use nostr_core_lib high-level wrappers; sync vendored lib with selector rewrite + 10 new algorithm-verb wrappers + from_client/last_error APIs
v0.1.22
2026-08-06 11:41:08 -04:00
Laan Tungir
9afbb8fcbd
Refactor n_signer_client to use nostr_core_lib high-level wrappers
...
The CLI was hand-building cJSON params and calling the low-level
nsigner_client_call for all 16 verbs. Now it uses the high-level
nostr_signer_t typed wrappers from nostr_core_lib for 14 of 16 verbs:
get_info, get_public_key (alg + nostr), sign_event, mine_event,
nip04/44 encrypt+decrypt, sign, verify, derive, encapsulate,
decapsulate, derive_shared_secret, otp encrypt/decrypt.
The 'call' verb (raw passthrough) and 'derive --algorithm' still use
the low-level nsigner_client_call on the shared connection (created via
nostr_signer_nsigner_from_client). The 'list' verb uses
nsigner_transport_list_unix directly.
The client shrank from 945 to ~840 lines, with the per-verb cJSON
building logic now in the library. Error messages use
nostr_signer_last_error() to surface the raw n_signer RPC error text
(path_not_allowed, unknown_role, etc.).
Also adds two plan docs:
- plans/client_breaking_change_audit.md: audit of n_signer breaking
changes vs all ~/lt/ client repos
- plans/nostr_core_lib_full_verb_coverage.md: analysis of the library
verb coverage gap that motivated this refactor
Tests: 45/45 pass, 0 fail, 2 skip (test_n_signer_client.sh).
v0.1.21
2026-08-06 10:17:47 -04:00
Laan Tungir
fa98de12e4
v0.1.20 - Removed @ prefix from all user-facing socket name output (startup message, list command, error messages, connection display)
2026-08-06 09:19:13 -04:00
Laan Tungir
e459e98beb
v0.1.19 - Added --register-role CLI flag for non-interactive template-role registration; expanded CLI test suite with template-role distinct-pubkey, path-rejection, ml-dsa-65 and slh-dsa-128s sign/verify tests (45 pass, 0 fail)
v0.1.20
2026-08-06 09:11:46 -04:00
Laan Tungir
32151b3ffd
v0.1.18 - Fixed template-role pubkey caching: re-derive on each concrete path request (nostr_range wildcard was returning the same key for all account indices)
v0.1.19
2026-08-06 08:00:25 -04:00
Laan Tungir
75dddac223
v0.1.17 - Changed role menu option 2 to NIP-06 compatible Nostr range m/44'/1237'/*'/0/0
v0.1.18
2026-08-06 07:44:16 -04:00
Laan Tungir
697a79dc25
v0.1.16 - Re-upload release with new Gitea token - nsigner + nsigner_client static binaries
v0.1.17
2026-08-05 19:28:32 -04:00
Laan Tungir
e65ed5c5d6
v0.1.15 - Rename binaries to nsigner/nsigner_client, integrate client into release pipeline, update role+path authorization model with wizard presets and wildcard path support
v0.1.16
2026-08-05 18:59:47 -04:00
Laan Tungir
821245ac1d
v0.1.14 - Update README with named path-roles documentation, wizard changes, set syntax, fixed paths
v0.1.15
2026-08-04 21:31:18 -04:00
Laan Tungir
7cbefe13ec
v0.1.13 - Change default index to 0 in wizard (when 0 is in range/set)
v0.1.14
2026-08-04 21:29:58 -04:00
Laan Tungir
d7fb3787e6
v0.1.12 - Fix if-else chain bug preventing SELECTOR_ROLE_PATH derivation; fix parser to not treat 44' as variable; handle hardened markers on range/set segments
v0.1.13
2026-08-04 21:21:33 -04:00
Laan Tungir
f0e90e0ea6
v0.1.11 - Fix named path-role display and allow fixed paths without range/set
v0.1.12
2026-08-04 20:53:12 -04:00
Laan Tungir
86a97aee01
v0.1.10 - Add unified hardware-signer broker plan for Qubes OS sharing across qubes
v0.1.11
2026-08-04 09:31:52 -04:00
Laan Tungir
d7eb6b5ec0
v0.1.9 - Add AGENT_CLIENT.md reference doc and n_signer_client.roo skill for agent access to n_signer
v0.1.10
2026-08-01 21:09:05 -04:00
Laan Tungir
e04196f1f1
v0.1.8 - Consolidated USB test page, fixed OTP round-trip, reformatted SD card, added pad checksum logging
v0.1.9
2026-08-01 05:26:42 -04:00
Laan Tungir
0ea3e60391
v0.1.7 - Teensy 4.1 OTP SD pad: complete implementation with UI pad selection
...
Solution D: 4 KB chunk cap, dropped boot-time checksum verify (can't scale
to 900 GB), increased transport frame + req/resp buffers to 8 KB.
test_otp_sd.py: 10/10 pass (ASCII + binary round-trips, offset advance,
2 KB large plaintext, tamper detection).
Phase 6: ui_pick_pad() LVGL pad-selection screen with chksum prefix + size
display, Skip button, 30s timeout. otp_pad_sd_list_pads() scans /pads and
returns chksums + sizes. Wired into the non-debug boot flow in signer.ino
(DEBUG_AUTO_GENERATE=0 path). DEBUG_AUTO_GENERATE=1 stays headless with
auto-bind_first.
README: added comprehensive memory management section documenting the
FlexRAM architecture, custom linker script, .rodata-to-FLASH move,
build-time stack gauge, and current memory layout.
v0.1.8
2026-07-30 18:20:30 -04:00
Laan Tungir
ac2e6347a2
v0.1.6 - Teensy 4.1 SD-card OTP pad: real implementation working on hardware
...
- otppad_embedded: bit-compatible port of libotppad (2386/2386 host tests pass)
- otp_pad_sd: SdFat-direct SD card pad reader (FAT-only, ASCII armor + binary .otp)
- pad_gen.ino: TRNG-sourced 1 MB pad generator using i.MX RT1062 TRNG registers
- Linker script: moved .rodata from DTCM to FLASH (EXCLUDE_FILE ed25519),
reclaiming 124 KB DTCM, free stack 5.9 KB -> 130.9 KB
- check_stack.sh: build-time FlexRAM stack gauge, wired into build_signer.sh
- test_otp_sd.py: 8/9 hardware tests pass (ASCII + binary round-trips,
offset advance, tamper detection; 10 KB plaintext times out on perf)
- test_classical.py: 16/16 pass with new memory layout (ed25519 OK)
- Memory evaluation document: plans/teensy41_memory_evaluation.md
v0.1.7
2026-07-30 17:10:50 -04:00
Laan Tungir
d7369646fb
Added remaining-todo document for Teensy 4.1 signer: captures v0.1.1-v0.1.5 fixes, current 20/24 suite score, and next steps for ml-dsa-65 sign hang (NTT correctness in matvec/scalar wrappers) and OTP decrypt mismatch
v0.1.6
2026-07-27 19:14:22 -04:00
Laan Tungir
b1f8076b1d
v0.1.5 - Fixed ml-dsa-65 SHAKE re-squeeze domain separation bug: poly_challenge, poly_eta, and poly_uniform_gamma1 re-absorbed the same seed on buffer exhaustion, producing identical output and potentially hanging the SampleInBall rejection loop; added a monotonic re-squeeze counter to the absorb buffer so each re-squeeze produces fresh bytes; note: ml-dsa-65 sign still hangs because the rejection loop never accepts a candidate — this is a separate NTT-correctness bug in the matvec/scalar multiplication wrappers that requires comparison against a PQClean reference implementation
2026-07-27 19:07:51 -04:00
Laan Tungir
314f1c520a
v0.1.4 - Teensy 4.1 PQ stack fixes: moved ml-kem-768 NTT working polys (polyvec_matrix_pointwise 6656B, indcpa enc 9728B, indcpa dec 5120B, poly_mul_negacyclic 1024B) and ml-dsa-65 sign poly c (1024B) + SHAKE out buffers (2688B) from DTCM stack to DMAMEM (RAM2) static workspace; fixed ml-kem-768 keygen crash (verified on hardware); added ml-dsa-65 rejection-loop DMAMEM counter diagnostic; ml-dsa-65 sign no longer crashes but hangs due to pre-existing NTT correctness bug (rejection loop runs to exhaustion) — next milestone is to compare NTT output against host reference
v0.1.5
2026-07-27 18:46:09 -04:00
Laan Tungir
ea2f1cd78e
v0.1.3 - Fixed Teensy 4.1 ed25519 sign/verify stack overflow: moved ed_add's 12 gf arrays (1536B), ed_frombytes' 9 gf arrays (1152B), sc_reduce/sc_muladd int64_t x[64] (512B), and ed25519_sign/verify SHA-512 ctx (328B) from DTCM stack to DMAMEM (RAM2) workspace; added persistent crash diagnostics (DMAMEM op marker + stack/heap measurement); full classical+Nostr suite now passes 16/16 in one uninterrupted boot (get_info, secp256k1/ed25519/x25519 pubkeys, schnorr+ecdsa sign/verify, ed25519 sign/verify, x25519 shared secret, derive, nostr pubkey/sign_event, nip04+nip44 round-trips)
v0.1.4
2026-07-27 16:34:02 -04:00
Laan Tungir
9282e22b00
v0.1.2 - Teensy 4.1 secp256k1 stack reductions + shared context: reduced WINDOW_A 5->4 (Strauss ecmult tables 8->4 entries, fixes schnorr verify stack overflow) and ECMULT_CONST_GROUP_SIZE 5->4 (ECDH tables 16->8, fixes nip04 crash); added secp256k1_get_shared_context() and reused it in dispatch.cpp ECDSA/schnorr helpers to eliminate per-request secp256k1_context_create/destroy heap fragmentation; reordered test_signer.py to test classical+nostr verbs before PQ verbs and added nostr_sign_event/nip04/nip44 round-trip tests
v0.1.3
2026-07-27 12:18:38 -04:00
Laan Tungir
2ba81c4bc8
v0.1.1 - Fixed Teensy 4.1 NIP-04 crash and NIP-44 dispatch bug: reduced secp256k1 ECMULT_CONST_GROUP_SIZE 5->4 to halve ECDH stack usage (~3.5KB->~1.7KB) preventing DTCM stack overflow in secp256k1_ecmult_const during nip04/nip44 ECDH; fixed is_nip44 selector in dispatch.cpp (method[7] was always 'i', digit is at method[9]) so nostr_nip44_* verbs now reach the nip44 implementation instead of silently calling nip04; verified nip04+nip44 round-trip on hardware
v0.1.2
2026-07-27 07:16:53 -04:00
Laan Tungir
64fbd5c874
v0.1.0 - CYD firmware v0.0.2: algorithm-based API upgrade (all verbs, all algorithms), vendored Keccak/SHAKE + PSA ed25519/x25519 for IDF v5.4, Web Serial test page, CYD docs, Teensy 4.1 port plan (1TB SDXC OTP pad), brainstorming READMEs for BLE/IR/NFC/FPGA signer concepts
v0.1.1
2026-07-21 13:16:04 -04:00
Laan Tungir
ca18e1e42d
v0.0.58 - Added derive verb: HMAC-SHA256(privkey, data) for secp256k1, enabling opaque d-tag derivation via nsigner remote backend without exposing the privkey
v0.1.0
2026-07-20 19:56:51 -04:00
Laan Tungir
b3421c3e40
v0.0.57 - Migrated to unified nostr_ prefixed verb names; removed legacy verb aliases (sign_data, ssh_sign, verify_signature, kem_encapsulate, kem_decapsulate, otp_encrypt, otp_decrypt); split get_public_key into algorithm-based get_public_key and role-based nostr_get_public_key; OTP now selected via algorithm:otp instead of curve:otp; consolidated API docs from api.md into README.md
v0.0.58
2026-07-20 17:29:45 -04:00
Laan Tungir
96ab9741ef
v0.0.56 - Fix connection display scroll issue: use full screen clear instead of tui_clear_continuous for modal connections view
v0.0.57
2026-07-20 10:11:09 -04:00
Laan Tungir
2af12868e2
v0.0.55 - Remove redundant 'Press d for connection instructions' hint line from TUI (already in hotkey menu)
v0.0.56
2026-07-20 09:55:10 -04:00
Laan Tungir
a0a5987ffa
v0.0.54 - TUI: show full derivation path in Roles table, move connection instructions to on-demand 'd' hotkey display with spaced transport blocks
v0.0.55
2026-07-20 09:49:20 -04:00
Laan Tungir
0b0ec5eb1a
v0.0.53 - Fixed SIGILL crash in multi-listen mode: pfds array was too small (3) for 3 listeners + stdin (4), causing stack buffer overflow
v0.0.54
2026-07-20 09:13:18 -04:00
Laan Tungir
0355744103
v0.0.52 - Added api.md with unified verb scheme, fixed TUI status display in README, added TCP/HTTP port auto-increment on EADDRINUSE (up to 5 tries)
v0.0.53
2026-07-20 09:07:21 -04:00
Laan Tungir
db274ce487
v0.0.51 - Document memfd_secret as future secret-memory backing in README §2.5 (mlock remains current path; memfd_secret unusable on Qubes Xen guests due to SIGBUS on page materialization)
v0.0.52
2026-07-19 14:35:00 -04:00
Laan Tungir
56f37e092d
v0.0.50 - Clean up README: rename 4c.1 to 'Verbs' (no past-tense references), remove section 11 (Implemented adjuncts and future work) and section 12 (Document map)
v0.0.51
2026-07-19 14:07:04 -04:00
Laan Tungir
a017dc40e0
v0.0.49 - Added general encrypt/decrypt verbs with curve-based routing (otp, secp256k1 NIP-04/44, x25519, ml-kem-768) and updated README documentation
v0.0.50
2026-07-19 11:38:44 -04:00
Laan Tungir
05c055503d
v0.0.48 - Added OTP one-time pad encryption (otp_encrypt/otp_decrypt verbs), HTTP listener mode (--listen http:HOST:PORT), interactive OTP pad auto-scan on USB drives, raised SERVER_MAX_MSG_SIZE to 16MB, updated README with curl examples and current API documentation
v0.0.49
2026-07-19 11:07:07 -04:00
Laan Tungir
a7c6de2dcd
v0.0.47 - Clean up main menu layout and hotkeys
v0.0.48
2026-07-16 17:59:58 -04:00
Laan Tungir
16a6da817c
Auto-fix Gitea release timestamp via SSH after release creation (workaround for Gitea created_unix=0 bug)
v0.0.47
2026-07-16 16:30:15 -04:00
Laan Tungir
1cf541b02d
Fix install script: use git tags API with version sorting instead of releases API (works around Gitea epoch-zero timestamp bug)
2026-07-16 16:13:11 -04:00
Laan Tungir
8015742e29
v0.0.46 - Post-quantum crypto expansion: ML-DSA-65, SLH-DSA-128s, ML-KEM-768, ed25519, x25519, algorithm-based API
v0.0.46
2026-07-16 16:11:46 -04:00
Laan Tungir
09f3ec2f7c
Fix Gitea release creation: include created_at timestamp to work around Gitea bug where releases get epoch zero timestamp
2026-07-16 16:10:00 -04:00
Laan Tungir
5744b83288
v0.0.47 - Fix increment_and_push.sh build output visibility
2026-07-16 15:38:52 -04:00
Laan Tungir
21892c108e
Fix increment_and_push.sh hanging by showing build output instead of suppressing it
2026-07-16 15:37:10 -04:00
Laan Tungir
344add841c
v0.0.48 - .
2026-07-16 15:35:20 -04:00
Laan Tungir
3e3013dde1
v0.0.47 - .
2026-07-16 15:33:25 -04:00
Laan Tungir
11d3760d7b
v0.0.46 - Fix release tagging for post-quantum crypto expansion
2026-07-16 15:27:34 -04:00
Laan Tungir
c5f1a70658
v0.0.47 - Added post-quantum cryptography (ML-DSA-65, SLH-DSA-128s, ML-KEM-768) and standard ECC (ed25519, x25519) support with algorithm-based API
2026-07-16 15:14:57 -04:00
Laan Tungir
6fd7b8ce1f
v0.0.45 - Display qrexec service name (qubes.NsignerRpc) in signer connection info; use human-readable timestamps in activity log; fix static release build by adding miner.c to Dockerfile.alpine-musl
2026-07-11 19:12:34 -04:00