Skip to content

KasSigner v1.0.1 — P2SH Multisig & KasSee Web

Choose a tag to compare

@InKasWeRust InKasWeRust released this 06 Apr 12:23
· 92 commits to main since this release

KasSigner v1.0.1

Air-gapped offline signing device for the Kaspa blockchain. ~45,000 lines of bare-metal no_std Rust on ESP32-S3.

Highlights

  • P2SH multisig — first air-gapped multisig on Kaspa mainnet
  • KasSee Web — browser-based watch-only companion wallet (Pure Rust → WASM), deployed at inkaswerust.github.io/KasSigner
  • Critical signing fixes — sighash keyed Blake2b, BIP-340 tagged Schnorr challenge, change address chain search
  • Docker toolchain v2 — Rust 1.85.0, espup 0.16.0, espflash 3.3.0
  • One-step installer — macOS script: scan, install toolchain, build from source, flash
  • Secure Boot V2 verified on eFuse hardware

Reproducible Build Hashes

Built from tag v1.0.1 using docker build --no-cache.

Target SHA-256 Size
Waveshare e453cbcb3af913284fd3ff68952640b00125b902abfe5af32862645fb8209ab1 818 KB
M5Stack d0390ca473a8afb07a069e0a3e122b154f4acdd8f36519c8ec5d4b4aecf98fd9 831 KB
# Verify yourself
docker build --platform linux/amd64 -f Dockerfile.base -t kassigner-toolchain:v2 .
docker build --platform linux/amd64 -t kassigner-build:v1.0.1 .
docker run --rm kassigner-build:v1.0.1

Verified on Mainnet

TX ID Type
8a6652fb... First P2SH multisig funding
d1ffdb9f... First P2SH multisig spend (direct device-to-device)
2b53e35a... Second funding (sorted keys verified)
2b718bd5... Second P2SH spend (via KasSee relay)
2faa58b2... First air-gapped broadcast (P2PK)
277517da... Multi-UTXO across receive + change chains

What's New — Device Firmware

Added

  • P2SH script detection, redeem script field, v2 KSPT serializer/parser
  • ShowQR signature status overlay — "PARTIAL 1/2" (orange) / "FULLY SIGNED 2/2" (teal)
  • Multi-frame v2 KSPT detection in camera
  • BIP85 auto-load + success sound
  • SD backup delete with hold-to-confirm (4s)
  • SD file list fingerprint matching ("Seed #1", "Seed #2")
  • SD progress bars on decrypt and xprv import
  • Pre-signing size check: rejects TX exceeding 5 inputs with warning
  • One-step macOS installer (KasSigner_Install_v1_0_1.sh)

Fixed

  • Sighash: all sub-hashes now use keyed Blake2b-256 with TransactionSigningHash domain key
  • Output hash: added script_len (u64 LE) prefix before script bytes
  • Schnorr challenge: switched to BIP-340 tagged hash
  • Change address signing: searches both receive and change chains
  • MAX_SCRIPT_SIZE bumped to 170 bytes (supports 5-of-5 multisig)
  • QR frame payload reduced to 53 bytes for reliable device-to-device scanning
  • Stego export loop fix, SD read screen labels, multisig slot label overlap

What's New — KasSee Web

Browser-based watch-only companion wallet. Pure Rust compiled to WASM.

  • Import kpub via QR scan or paste
  • Derive receive and change addresses, track UTXOs and balance
  • Build unsigned KSPT transactions with fee estimation
  • Send Max (sweep all UTXOs)
  • Broadcast signed transactions
  • P2SH multisig address creation and spend
  • UTXO explorer with manual selection
  • Address verification with QR + derivation path
  • PWA installable on mobile
  • Custom node connection (WebSocket)

Build Environment

Component Version
Docker base kassigner-toolchain:v2
Host Rust 1.85.0
espup 0.16.0
espflash 3.3.0
Base OS Ubuntu 24.04 (x86_64)

Security Layers

Layer Verified by
RSA-3072 Secure Boot ESP32-S3 ROM (eFuse devices)
SHA-256 firmware hash KasSigner app (every boot)
Schnorr signature KasSigner app (production builds)
Docker reproducibility Anyone (docker build --no-cache)

Full Changelog

See CHANGELOG.md for the complete list of changes.