Skip to content
Kavachकवच

Secrets: reveal

● Intermediate2 min

reveal(value) lets a secret through on purpose, where review can see it.

type Order {
    id: Int
    secret card: String
}

fn charge(secret card: String, amount: Int) -> String {
    "charged {amount}, card of {card.len()} digits"
}

fn main() {
    const order = Order(id: 7, card: "4242424242421881")
    print(charge(order.card, 499))
    const card = reveal(order.card)
    print("ends in {card.slice(12, 16)}")
}

The program ran and printed:

kavach run secret-param.kav

charged 499, card of 16 digitsends in 1881
secret-param.kav: Kavach code, then what running it prints

reveal(order.card) gives an ordinary String, here used to show the last four digits. kavach audit lists every reveal in a project, so none goes unnoticed:

terminal
kavach audit
unsafe code:
  nothing
revealed secrets:
  src/main.kav:13  reveal(…)
audited calls:
  nothing
capability use:
  src/main.kav:10  fn main: Console