Files
LithosAnanke/kernel/include/starkernel/v4/sk_v4_mint.h
T
Claude 2bac2ac8fc fix(v4): MINT-ZUSE wipes Zuse's seed on every return, not only on success (#176, the mint)
sk_v4_mint_zuse wiped seed and rseed only when the real Zuse was minted; its
refusals and every failure after YES left them in stack memory.

Option 1 (Captain Bob, 2026-11-12: "1 is great"): the seeds are in a 64-byte
buffer the caller owns. sk_v4_mint_zuse_with(seeds) runs the mint (now a
private mint()) and then wipes the buffer, whichever way it returned -- one
place, every exit; sk_v4_mint_zuse() gives it a buffer of its own.

kernel/tests/test_sk_v4_mint.c, 17 checks: the real gpt.c on the RAM disk, the
identity code, key mint, signature checks, marker and keyboard faked; each of
the mint's eight exits run with the buffer filled with 0xEE first -- no stick,
under 64 MiB, not YES, the key mint failing, the read-back not hers, no
marker, the marker write failing, and minted. Against the mint as it was: 7
failures (every exit but success). Now: 0. Both runs in logs/20261112-181719/. Built for
amd64, aarch64, riscv64. The identity code's two (sk_v4_genesis,
sk_v4_real_zuse_arrived) follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RzZgrf7V7Zk2iczBXDRbm
2026-11-12 18:17:19 +00:00

26 lines
1004 B
C

/* SPDX-License-Identifier: LicenseRef-Starship-1.0
* Copyright (c) 2023-2026 Robert A. James
*/
/* sk_v4_mint.h -- MINT-ZUSE: the real Zuse minted onto a second stick
* (docs/v4.0.0/STICK.md 6a; plan 2026-10-29-stick-5, Task 4).
*
* Built only with STARFORTH_V4=1 (Kconfig.kernel).
*/
#ifndef STARKERNEL_V4_SK_V4_MINT_H
#define STARKERNEL_V4_SK_V4_MINT_H
#include <stdint.h>
/* The whole of STICK.md 6a's minting: asks for a stick, shows its size, writes
* nothing until YES, then a GPT and a fresh Zuse identity on it, read back,
* and only then the real key in the genesis marker. 0 when she is minted;
* -1 otherwise, with its line said and the marker as it was. Run by the
* MINT-ZUSE word, and (Task 5) the fixed screen's R. */
int sk_v4_mint_zuse(void);
/* The same, with Zuse's seed and its read-back in `seeds` (64 bytes), owned by the caller: on every
* return the 64 bytes are zero (#176). */
int sk_v4_mint_zuse_with(uint8_t seeds[64]);
#endif /* STARKERNEL_V4_SK_V4_MINT_H */