What KasWare signs
Exactly what happens when KasWare produces a signature for PolicyVault, and why the wallet's own display matters.
KasWare is the trust anchor for what actually gets signed. Understanding exactly what it does — and does not do — is central to PolicyVault's security model.
Transaction signing
For a spend, an owner operation, or an approval, PolicyVault hands KasWare an unsigned transaction (as a "Safe JSON" structure) and a list of which specific inputs to sign, with the required signature-hash type. KasWare signs exactly those inputs. Critically, KasWare renders its signing popup from the actual transaction bytes it was given — independent of the web page's DOM. A malicious or compromised web page cannot make KasWare display a different recipient, amount, or fee than what is actually about to be signed; KasWare's popup is extension-owned UI, not something the page controls.
This is why reading the wallet popup matters: it is the one place where what you see is guaranteed to be what you're signing, regardless of whether the PolicyVault frontend itself can be trusted at that moment. PolicyVault's own pre-sign review (see Local intent verification) is a second, independent check on top of this — but the wallet's own display is the irreducible anchor.
Approval signing
An external approver is not a transaction input signer in the ordinary sense — the covenant instead checks each approval as a signature over the transaction's committed content. KasWare can produce exactly this kind of signature by signing a specific named input with the appropriate signature-hash type, over the same frozen transaction the spending agent is trying to submit. No generic wallet "message signature" is used or accepted for approvals — a plain message signature would not commit to the exact transaction and would be structurally unusable as covenant approval.
What KasWare never does for PolicyVault
- It never hands PolicyVault a private key, seed phrase, or any secret material.
- It never signs a blanket, open-ended authorization — every signature request names exact, specific transaction inputs.
- It never signs silently; every signature requires the user's explicit approval inside the extension's own UI.
Public key and address handling
Wallet providers return public keys in different wire formats; PolicyVault normalizes whatever a provider returns to the canonical form the covenant requires (or refuses closed if the value can't be safely interpreted — for example, an uncompressed key format is never accepted). You interact with ordinary Kaspa addresses in the PolicyVault UI; the exact cryptographic key representation is derived internally, at one single boundary, using the same authoritative parser Kaspa itself uses.
See also: What wallets and signers do, Covenant enforcement.