provable-proof 0.1.2

Provable proof envelope format for Rust
Documentation

provable-proof

Rust helpers for the Provable proof envelope format.

This crate owns the canonical proof JSON shape used by Provable form, email, and web proofs. It depends on provable-sdk for Kayros verification.

All proofs use the same JSON shape:

{
  "data": "<base64 payload bytes>",
  "data_format": "web_form",
  "kayros": {
    "hash": "<hex data hash>",
    "hashAlgorithm": "SHA-256",
    "timestamp": {
      "service": "kayrosbot@0.0.2:prove_single_hash",
      "response": {}
    }
  }
}

data is always base64. data_format tells consumers how to decode the payload: web_form, web_page, email, raw_hash, or "". If data_format is empty or missing, consumers can fall back to payload introspection.

Installation

[dependencies]
provable-proof = "0.1.2"
provable-sdk = "0.1.2"

Usage

1. Default usage

use provable_proof::{verify_envelope_with_inclusion, EnvelopeVerifyWithInclusionOverrides, KayrosEnvelope};

let proof_json = std::fs::read_to_string("proof.json").expect("proof.json");
let envelope = KayrosEnvelope::from_json_str(&proof_json).expect("valid proof envelope");

let result = verify_envelope_with_inclusion(
    &envelope,
    &EnvelopeVerifyWithInclusionOverrides {
        verify_batch_existence: true,
        ..Default::default()
    },
);

assert!(result.valid);

2. Creating proofs

use provable_proof::{KayrosData, KayrosEnvelope};

let payload = serde_json::json!({
    "id": "form-1",
    "form": {
        "data": {
            "email": "person@example.com"
        }
    }
});

let kayros = KayrosData::default();
let envelope = KayrosEnvelope::from_json_value(&payload, kayros, "web_form").expect("encode proof");
let proof_json = serde_json::to_string_pretty(&envelope.to_proof()).expect("serialize proof");

3. Usage with API key and custom data type

use provable_proof::{verify_envelope, EnvelopeVerifyOverrides, KayrosEnvelope};

let proof_json = std::fs::read_to_string("proof.json").expect("proof.json");
let envelope = KayrosEnvelope::from_json_str(&proof_json).expect("valid proof envelope");

let result = verify_envelope(
    &envelope,
    &EnvelopeVerifyOverrides {
        api_key: Some(std::env::var("KAYROS_API_KEY").expect("KAYROS_API_KEY")),
        data_type: Some("benchmark_s32".to_string()),
        ..Default::default()
    },
);

assert!(result.valid);

Main API

  • KayrosEnvelope::new(...)
  • KayrosEnvelope::from_bytes(...)
  • KayrosEnvelope::from_text(...)
  • KayrosEnvelope::from_json_value(...)
  • KayrosEnvelope::from_json_str(...)
  • build_envelope_verify_request(...)
  • verify_envelope(...)
  • verify_envelope_with_inclusion(...)

Data formats

  • web_form: decoded bytes are a JSON form snapshot
  • web_page: decoded bytes are a JSON web-proof payload
  • email: decoded bytes are the full raw email content
  • raw_hash: decoded bytes are already the Kayros data_item