@@ -48,7 +48,49 @@ impl LogInfo {
4848 inactive_shards : None ,
4949 }
5050 }
51-
51+ /// Verify the consistency of the proof provided by the log.
52+ ///
53+ /// Example:
54+ /// ```rust
55+ /// use sigstore::crypto::{CosignVerificationKey, SigningScheme};
56+ /// use sigstore::rekor::apis::configuration::Configuration;
57+ /// use sigstore::rekor::apis::pubkey_api::get_public_key;
58+ /// use sigstore::rekor::apis::tlog_api::{get_log_info, get_log_proof};
59+ ///
60+ /// #[tokio::main]
61+ /// async fn main() {
62+ /// let rekor_config = Configuration::default();
63+ ///
64+ /// // Important: in practice obtain the rekor key via TUF repo or another secure channel!
65+ /// let rekor_key = get_public_key(&rekor_config, None)
66+ /// .await
67+ /// .expect("failed to fetch pubkey from remote log");
68+ /// let rekor_key = CosignVerificationKey::from_pem(
69+ /// rekor_key.as_bytes(),
70+ /// &SigningScheme::ECDSA_P256_SHA256_ASN1,
71+ /// ).expect("failed to parse rekor key");
72+ /// // fetch log info twice and run consistency proof
73+ /// let log_info1 = get_log_info(&rekor_config)
74+ /// .await
75+ /// .expect("failed to fetch data from remote");
76+ /// let log_info2 = get_log_info(&rekor_config)
77+ /// .await
78+ /// .expect("failed to fetch data from remote");
79+ ///
80+ /// // get a proof using log_info1 as the previous tree state
81+ /// let proof = get_log_proof(
82+ /// &rekor_config,
83+ /// log_info2.tree_size as _,
84+ /// Some(&log_info1.tree_size.to_string()),
85+ /// None,
86+ /// )
87+ /// .await.expect("failed to fetch data from remote");
88+ /// log_info2
89+ /// .verify_consistency(log_info1.tree_size as usize, &log_info1.root_hash, &proof, &rekor_key)
90+ /// .expect("failed to verify log consistency");
91+ /// }
92+ ///
93+ /// ```
5294 pub fn verify_consistency (
5395 & self ,
5496 old_size : usize ,
0 commit comments