Derive the human-facing 24-char fingerprint from an Ed25519 public key.
Format: xxxx-xxxx-xxxx-xxxx-xxxx-xxxx (6 groups of 4 hex chars, 24 hex
chars total = 12 bytes = 96 bits of SHA-256 over the pubkey). Public so
crypto::verify_signed can re-derive it from a signed envelope’s pubkey
and check that it matches the asserted fingerprint.
huddle 0.7.8: 12-hex Safety Code derived from the same SHA-256 of the
Ed25519 pubkey that backs compute_fingerprint. Format
SAFE-XXXX-XXXX-XXXX (uppercase, dash-separated). Display-only — a
shorter, less ambiguous handle to compare against a friend at the
start of a session. SAS-via-emoji is still the real verification
primitive; this is the visual analogue of DirectChat’s
accountSafetyCode.