ChecksumVerifier

Struct ChecksumVerifier 

Source
pub struct ChecksumVerifier;
Expand description

Verifies the integrity of a downloaded binary using SHA256 checksum.

This module provides checksum verification functionality for downloaded binaries to ensure they haven’t been corrupted or tampered with during download.

§Security Benefits

  • Download Integrity: Detects corrupted or incomplete downloads
  • Tamper Detection: Identifies potentially modified binaries
  • Supply Chain Security: Helps ensure binary authenticity
  • Network Reliability: Catches network-induced corruption

Implementations§

Source§

impl ChecksumVerifier

Source

pub async fn compute_sha256(file_path: &Path) -> Result<String>

Compute the SHA256 checksum of a file.

§Arguments
  • file_path - Path to the file to compute checksum for
§Returns

The hex-encoded SHA256 checksum string

§Examples
use agpm_cli::upgrade::verification::ChecksumVerifier;
use std::path::Path;

let checksum = ChecksumVerifier::compute_sha256(Path::new("/path/to/binary")).await?;
println!("SHA256: {}", checksum);
Source

pub async fn verify_checksum( file_path: &Path, expected_checksum: &str, ) -> Result<()>

Verify a file against an expected checksum.

§Arguments
  • file_path - Path to the file to verify
  • expected_checksum - The expected SHA256 checksum (hex-encoded)
§Returns
  • Ok(()) if checksums match
  • Err if checksums don’t match or verification fails
§Examples
use agpm_cli::upgrade::verification::ChecksumVerifier;
use std::path::Path;

let file_path = Path::new("/path/to/binary");
let expected = "abc123...";

ChecksumVerifier::verify_checksum(file_path, expected).await?;
println!("Checksum verified successfully!");
Source

pub async fn fetch_expected_checksum( checksums_url: &str, binary_name: &str, ) -> Result<Option<String>>

Download and parse a checksums file from a GitHub release.

GitHub releases often include a checksums.txt or SHA256SUMS file containing checksums for all release artifacts. This function downloads and parses such files.

§Arguments
  • checksums_url - URL to the checksums file
  • binary_name - Name of the binary to find checksum for
§Returns

The expected checksum for the specified binary, or None if not found

§Checksum File Format

Expected format (one per line):

abc123def456...  agpm-linux-x86_64
789ghi012jkl...  agpm-macos-aarch64
Source

pub async fn verify_from_release( file_path: &Path, checksums_url: &str, binary_name: &str, ) -> Result<bool>

Verify a downloaded binary using checksums from GitHub release.

This is a convenience method that combines fetching the expected checksum and verifying the downloaded file.

§Arguments
  • file_path - Path to the downloaded binary
  • checksums_url - URL to the checksums file in the GitHub release
  • binary_name - Name of the binary in the checksums file
§Returns
  • Ok(true) if verification succeeded
  • Ok(false) if no checksum was available (verification skipped)
  • Err if verification failed

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more