rhi

Coordinated trade for connected markets
git clone https://radroots.dev/git/rhi.git
Log | Files | Refs | README | LICENSE

services_hardening_reconciliation_attestation_contract.rs (4970B)


      1 #![forbid(unsafe_code)]
      2 
      3 use rhi::{
      4     RHI_RECONCILIATION_ATTESTATION_CONTRACT_VERSION,
      5     RHI_RECONCILIATION_SIGNED_ATTESTATION_MAX_BYTES,
      6 };
      7 use serde_json::json;
      8 
      9 const CONTRACT: &str =
     10     include_str!("../contracts/services_hardening/reconciliation_attestation.v1.json");
     11 const ROOT: &str = include_str!("../src/lib.rs");
     12 const SOURCE: &str = include_str!("../src/reconciliation_attestation.rs");
     13 const IDENTITY: &str = include_str!("../src/identity_envelope.rs");
     14 const README: &str = include_str!("../README");
     15 const SIGNED_VECTOR: &str = include_str!(
     16     "../contracts/conformance/vectors/reconciliation_attestation_signed_event.v1.json"
     17 );
     18 
     19 #[test]
     20 fn machine_contract_freezes_the_complete_step_196_boundary() {
     21     let contract: serde_json::Value = serde_json::from_str(CONTRACT).expect("contract");
     22     assert_eq!(
     23         contract["schema"],
     24         "radroots.rhi.reconciliation-attestation"
     25     );
     26     assert_eq!(contract["schema_version"], 1);
     27     assert_eq!(
     28         contract["contract_version"],
     29         RHI_RECONCILIATION_ATTESTATION_CONTRACT_VERSION
     30     );
     31     assert_eq!(contract["report"]["maximum_canonical_bytes"], 16_384);
     32     assert_eq!(contract["event"]["kind"], 3_441);
     33     assert_eq!(
     34         contract["event"]["maximum_signed_json_bytes"],
     35         RHI_RECONCILIATION_SIGNED_ATTESTATION_MAX_BYTES
     36     );
     37     assert_eq!(
     38         contract["conformance_vector"],
     39         "contracts/conformance/vectors/reconciliation_attestation_signed_event.v1.json"
     40     );
     41     let vector: serde_json::Value = serde_json::from_str(SIGNED_VECTOR).expect("signed vector");
     42     assert_eq!(
     43         vector["id"],
     44         "f1a2a41d73b42ba54be19c716d6b49a9e5d608ae2a9c96347155d1773b8b8a1b"
     45     );
     46     assert_eq!(vector["kind"], 3_441);
     47     assert_eq!(vector["tags"].as_array().expect("tags").len(), 5);
     48     assert_eq!(
     49         contract["independent_verification"],
     50         json!([
     51             "bounded_original_signed_JSON",
     52             "strict_NIP01_wire_admission_with_no_extra_fields",
     53             "event_id_recomputation",
     54             "Schnorr_signature",
     55             "exact_planned_event_id_author_created_at_kind_tags_and_content",
     56             "typed_RHI_attestation_decode_and_structural_tag_binding",
     57             "canonical_shared_report_reparse",
     58             "exact_manifest_binding",
     59             "complete_report_equality",
     60             "governed_supersession_ordering_when_present"
     61         ])
     62     );
     63     for effect in [
     64         "sqlite",
     65         "filesystem",
     66         "source_or_relay",
     67         "network",
     68         "task_spawn",
     69         "ambient_clock",
     70         "ambient_entropy",
     71         "publication",
     72         "job_finalization",
     73     ] {
     74         assert_eq!(contract["effects"][effect], false, "effect {effect}");
     75     }
     76 }
     77 
     78 #[test]
     79 fn implementation_uses_only_typed_authoring_and_independent_verification() {
     80     assert!(ROOT.contains("mod reconciliation_attestation;"));
     81     assert!(!ROOT.contains("pub mod reconciliation_attestation;"));
     82     for required in [
     83         "RhiSignedEvidenceAttestation",
     84         "RhiEvidenceAttestationSupersession",
     85         "RhiReconciliationAttestationErrorKind",
     86         "build_rhi_signed_evidence_attestation",
     87         "RHI_RECONCILIATION_SIGNED_ATTESTATION_MAX_BYTES",
     88     ] {
     89         assert!(ROOT.contains(required), "root API is missing {required}");
     90     }
     91     for required in [
     92         "RadrootsRhiEvidenceReportV1::new(",
     93         "RadrootsRhiEvidenceAttestationV1::from_canonical_content(",
     94         "validate_rhi_evidence_attestation_supersession(",
     95         "AuthoredEventBody::from_rhi_evidence_attestation(",
     96         "AuthoredEventPlan::bind(",
     97         ".fill_bytes(&mut auxiliary[..])",
     98         "sign_nostr_event(unsigned, auxiliary)",
     99         "Nip01EventWire::parse_json_unverified_with_limits(",
    100         "verify_id(&event)",
    101         "verify(&event)",
    102         "rhi_evidence_attestation_from_event(&event)",
    103         "validate_against_manifest(manifest)",
    104     ] {
    105         assert!(
    106             SOURCE.contains(required),
    107             "implementation is missing {required}"
    108         );
    109     }
    110     for required in [
    111         "sign_schnorr_with_aux_rand",
    112         "non_secure_erase()",
    113         "actual.to_hex() != self.public_identity.as_hex()",
    114     ] {
    115         assert!(IDENTITY.contains(required), "signer is missing {required}");
    116     }
    117     for forbidden in [
    118         "std::fs",
    119         "std::net",
    120         "sqlx::",
    121         "tokio::",
    122         "SystemTime",
    123         "SystemEntropy",
    124         "OsRng",
    125         "thread_rng",
    126         "INSERT ",
    127         "UPDATE ",
    128         "DELETE ",
    129         "pub fn new(",
    130         "pub const fn new(",
    131     ] {
    132         assert!(
    133             !SOURCE.contains(forbidden),
    134             "attestation boundary gained forbidden authority {forbidden}"
    135         );
    136     }
    137     assert!(README.contains("## Canonical signed reconciliation attestation"));
    138     assert!(README.contains(
    139         "[`reconciliation_attestation.v1.json`](contracts/services_hardening/reconciliation_attestation.v1.json)"
    140     ));
    141 }