cli

Command-line interface for Radroots
git clone https://radroots.dev/git/cli.git
Log | Files | Refs | README | LICENSE

commit 15c708bc49ccf84943384049525427a307beb1f0
parent c7746c1d9565f9b3bba84afc64b05b644a30a724
Author: triesap <tyson@radroots.org>
Date:   Tue, 19 May 2026 23:34:04 +0000

cli: report sp1 receipt metadata failures

- map invalid sp1 proof metadata reasons
- keep sp1 metadata output non-cryptographic
- harden hyf typed-client test timeout
- cover receipt reason-code mappings

Diffstat:
Msrc/runtime/hyf.rs | 7++++---
Msrc/runtime/validation_receipt.rs | 36++++++++++++++++++++++++++++++++++++
2 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/src/runtime/hyf.rs b/src/runtime/hyf.rs @@ -906,9 +906,10 @@ mod tests { None, &HyfEmptyInput::default(), ); - let response = HyfClient::new(executable) - .capabilities() - .expect("capabilities"); + let response = + HyfClient::with_timeouts(executable, Duration::from_secs(5), Duration::from_secs(5)) + .capabilities() + .expect("capabilities"); assert_eq!(request["capability"], "sys.capabilities"); assert_eq!(request["input"], serde_json::json!({})); diff --git a/src/runtime/validation_receipt.rs b/src/runtime/validation_receipt.rs @@ -652,12 +652,24 @@ fn validation_receipt_invalid_reason_code( RadrootsValidationReceiptError::InvalidProofMetadata("proof.material") => { "sp1_proof_material_missing" } + RadrootsValidationReceiptError::InvalidProofMetadata("proof.inline_proof_base64") => { + "sp1_inline_proof_invalid" + } + RadrootsValidationReceiptError::InvalidProofMetadata("proof.proof_reference") => { + "sp1_proof_reference_invalid" + } RadrootsValidationReceiptError::TagMismatch("public_values_hash") => { "public_values_hash_mismatch" } RadrootsValidationReceiptError::ExpectedBindingMismatch("public_values_hash") => { "public_values_hash_mismatch" } + RadrootsValidationReceiptError::ExpectedBindingMismatch("program_hash") => { + "sp1_program_hash_mismatch" + } + RadrootsValidationReceiptError::ExpectedBindingMismatch("verifying_key_hash") => { + "sp1_verifying_key_hash_mismatch" + } _ => "validation_receipt_invalid", } } @@ -768,5 +780,29 @@ mod tests { )), "public_values_hash_mismatch" ); + assert_eq!( + validation_receipt_invalid_reason_code( + &RadrootsValidationReceiptError::InvalidProofMetadata("proof.inline_proof_base64") + ), + "sp1_inline_proof_invalid" + ); + assert_eq!( + validation_receipt_invalid_reason_code( + &RadrootsValidationReceiptError::InvalidProofMetadata("proof.proof_reference") + ), + "sp1_proof_reference_invalid" + ); + assert_eq!( + validation_receipt_invalid_reason_code( + &RadrootsValidationReceiptError::ExpectedBindingMismatch("program_hash") + ), + "sp1_program_hash_mismatch" + ); + assert_eq!( + validation_receipt_invalid_reason_code( + &RadrootsValidationReceiptError::ExpectedBindingMismatch("verifying_key_hash") + ), + "sp1_verifying_key_hash_mismatch" + ); } }