Struct ProofBuilder

Source
pub struct ProofBuilder { /* private fields */ }
Expand description

A simple state machine which will generate a series of queries and process the responses until it has built a DNSSEC proof.

A ProofBuilder driver starts with ProofBuilder::new, fetching the state machine and initial query. As long as ProofBuilder::awaiting_responses returns true, responses should be read from the resolver. For each query response read from the DNS resolver, ProofBuilder::process_response should be called, and each fresh query returned should be sent to the resolver. Once ProofBuilder::awaiting_responses returns false, ProofBuilder::finish_proof should be called to fetch the resulting proof.

To build a DNSSEC proof using a DoH server, take each QueryBuf, encode it as base64url, and make a query to https://doh-server/endpoint?dns=base64url_encoded_query with an Accept header of application/dns-message. Each response, in raw binary, can be fed directly into ProofBuilder::process_response.

Implementations§

Source§

impl ProofBuilder

Source

pub fn new(name: &Name, ty: u16) -> (ProofBuilder, QueryBuf)

Constructs a new ProofBuilder and an initial query to send to the recursive resolver to begin the proof building process.

Given a correctly-functioning resolver the proof will ultimately be able to prove the contents of any records with the given type at the given name (as long as the given type is supported by this library).

You can find constants for supported standard types in the crate::rr module.

Source

pub fn awaiting_responses(&self) -> bool

Returns true as long as further responses are expected from the resolver.

As long as this returns true, responses should be read from the resolver and passed to Self::process_response. Once this returns false, Self::finish_proof should be used to (possibly) get the final proof.

Source

pub fn process_response( &mut self, resp: &QueryBuf, ) -> Result<Vec<QueryBuf>, ProofBuildingError>

Processes a query response from the recursive resolver, returning a list of new queries to send to the resolver.

Source

pub fn finish_proof(self) -> Result<(Vec<u8>, u32), ()>

Finalizes the proof, if one is available, and returns it as well as the TTL that should be used to cache the proof (i.e. the lowest TTL of all records which were used to build the proof).

Only fails if too many queries have been made or there are still some pending queries.

Trait Implementations§

Source§

impl Clone for ProofBuilder

Source§

fn clone(&self) -> ProofBuilder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.