feat(api): Add Get Signed Tree Head endpoint
This commit is contained in:
parent
b718fe2792
commit
d4762205dc
3 changed files with 51 additions and 1 deletions
|
@ -60,3 +60,21 @@ pub const ADD_CHAIN: Endpoint = (reqwest::Method::POST, "/ct/v1/add-chain");
|
||||||
/// Outputs are the same as in Section 4.1.
|
/// Outputs are the same as in Section 4.1.
|
||||||
/// ```
|
/// ```
|
||||||
pub const ADD_PRE_CHAIN: Endpoint = (reqwest::Method::POST, "/ct/v1/add-pre-chain");
|
pub const ADD_PRE_CHAIN: Endpoint = (reqwest::Method::POST, "/ct/v1/add-pre-chain");
|
||||||
|
|
||||||
|
/// Reference: https://datatracker.ietf.org/doc/html/rfc6962#section-4.3
|
||||||
|
/// ```txt
|
||||||
|
/// GET https://<log server>/ct/v1/get-sth
|
||||||
|
///
|
||||||
|
/// No inputs.
|
||||||
|
///
|
||||||
|
/// Outputs:
|
||||||
|
///
|
||||||
|
/// tree_size: The size of the tree, in entries, in decimal.
|
||||||
|
///
|
||||||
|
/// timestamp: The timestamp, in decimal.
|
||||||
|
///
|
||||||
|
/// sha256_root_hash: The Merkle Tree Hash of the tree, in base64.
|
||||||
|
///
|
||||||
|
/// tree_head_signature: A TreeHeadSignature for the above data.
|
||||||
|
/// ```
|
||||||
|
pub const GET_STH: Endpoint = (reqwest::Method::GET, "/ct/v1/get-sth");
|
|
@ -1,5 +1,5 @@
|
||||||
use reqwest::Url;
|
use reqwest::Url;
|
||||||
use responses::{AddChainRequest, AddChainResponse};
|
use responses::{AddChainRequest, AddChainResponse, GetSthResponse};
|
||||||
|
|
||||||
pub mod endpoints;
|
pub mod endpoints;
|
||||||
pub mod responses;
|
pub mod responses;
|
||||||
|
@ -77,4 +77,25 @@ impl CtApiClient {
|
||||||
.json()
|
.json()
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// /// Fetches the Signed Tree Head information for the current CT log tree
|
||||||
|
///
|
||||||
|
/// See: [`endpoints::GET_STH`]
|
||||||
|
///
|
||||||
|
/// ## Errors
|
||||||
|
///
|
||||||
|
/// This may error if either the request failed (due to lack of internet or
|
||||||
|
/// invalid domain, for example).
|
||||||
|
pub async fn get_signed_tree_head(&self) -> reqwest::Result<GetSthResponse> {
|
||||||
|
self.inner_client
|
||||||
|
.request(
|
||||||
|
endpoints::GET_STH.0,
|
||||||
|
self.log_url.to_string() + endpoints::GET_STH.1
|
||||||
|
)
|
||||||
|
.send()
|
||||||
|
.await?
|
||||||
|
.error_for_status()?
|
||||||
|
.json()
|
||||||
|
.await
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,3 +21,14 @@ pub struct AddChainResponse {
|
||||||
pub extensions: String,
|
pub extensions: String,
|
||||||
pub signature: String
|
pub signature: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A response given when fetching the Signed Tree Head of a CT log
|
||||||
|
///
|
||||||
|
/// See: [`super::endpoints::GET_STH`]
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
pub struct GetSthResponse {
|
||||||
|
pub tree_size: u64,
|
||||||
|
pub timestamp: u64,
|
||||||
|
pub sha256_root_hash: String,
|
||||||
|
pub tree_head_signature: String
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue