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
26 lines
1004 B
C
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 */
|