Crate chksum

source ·
Expand description

This crate provides an implementation of various hash functions with a straightforward interface for computing digests of bytes, files, directories, and more.

For a low-level interface, you can explore the chksum_hash crate.

Setup

To use this crate, add the following entry to your Cargo.toml file in the dependencies section:

[dependencies]
chksum = "0.3.0"

Alternatively, you can use the cargo add subcommand:

cargo add chksum

Usage

Use the chksum function to calcualate digest of file, directory and so on.

use std::fs::File;

use chksum::sha2_256;

let file = File::open(path)?;
let digest = sha2_256::chksum(file)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

Input Types

Bytes

Array

use chksum::sha2_256;

let data = [0, 1, 2, 3];
let digest = sha2_256::chksum(data)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

Vec

use chksum::sha2_256;

let data = vec![0, 1, 2, 3];
let digest = sha2_256::chksum(data)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

Slice

use chksum::sha2_256;

let data = &[0, 1, 2, 3];
let digest = sha2_256::chksum(data)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

Strings

str

use chksum::sha2_256;

let data = "&str";
let digest = sha2_256::chksum(data)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

String

use chksum::sha2_256;

let data = String::from("String");
let digest = sha2_256::chksum(data)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

File

use std::fs::File;

use chksum::sha2_256;

let file = File::open(path)?;
let digest = sha2_256::chksum(file)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

Directory

use std::fs::read_dir;

use chksum::sha2_256;

let readdir = read_dir(path)?;
let digest = sha2_256::chksum(readdir)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

Path

use std::path::PathBuf;

use chksum::sha2_256;

let path = PathBuf::from(path);
let digest = sha2_256::chksum(path)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

Standard Input

use std::io::stdin;

use chksum::sha2_256;

let stdin = stdin();
let digest = sha2_256::chksum(stdin)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

Algorithms

MD5

use std::fs::File;

use chksum::md5;

let file = File::open(path)?;
let digest = md5::chksum(file)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "5c71dbb287630d65ca93764c34d9aa0d"
);

SHA-1

use std::fs::File;

use chksum::sha1;

let file = File::open(path)?;
let digest = sha1::chksum(file)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "9fc42adac31303d68b444e6129f13f6093a0e045"
);

SHA-2 224

use std::fs::File;

use chksum::sha2_224;

let file = File::open(path)?;
let digest = sha2_224::chksum(file)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "90382cbfda2656313ad61fd74b32ddfa4bcc118f660bd4fba9228ced"
);

SHA-2 256

use std::fs::File;

use chksum::sha2_256;

let file = File::open(path)?;
let digest = sha2_256::chksum(file)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);

SHA-2 384

use std::fs::File;

use chksum::sha2_384;

let file = File::open(path)?;
let digest = sha2_384::chksum(file)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "12ecdfd463a85a301b7c29a43bf4b19cdfc6e5e86a5f40396aa6ae3368a7e5b0ed31f3bef2eb3071577ba610b4ed1cb8"
);

SHA-2 512

use std::fs::File;

use chksum::sha2_512;

let file = File::open(path)?;
let digest = sha2_512::chksum(file)?;
assert_eq!(
    digest.to_hex_lowercase(),
    "ed59c5759a9ece516cec0c0623142d0e9fe70a27d750eee7fd38f4550d50addd873d0fa1a51fc823c1e3d5cada203f4a05d8325caacb7d3e0727a701f3f07e5f"
);

Features

Algorithms

Cargo features are utilized to enable or disable specific hash algorithms.

  • md5 enables MD5, accessible via the md5 module.
  • sha1 enables SHA-1, accessible via the sha1 module.
  • sha2-224 enables SHA-2 224, accessible via the [sha2_224] module.
  • sha2-256 enables SHA-2 256, accessible via the [sha2_256] module.
  • sha2-384 enables SHA-2 384, accessible via the [sha2_384] module.
  • sha2-512 enables SHA-2 512, accessible via the [sha2_512] module.

By default, all of these features are enabled.

To customize your setup, disable the default features and enable only those that you need in your Cargo.toml file:

[dependencies]
chksum = { version = "0.3.0", default-features = false, features = ["sha1", "sha2-256", "sha2-512"] }

Alternatively, you can use the cargo add subcommand:

cargo add chksum --no-default-features --features sha1,sha2-256,sha2-512

Extra Options

Cargo features are also utilized to enable extra options.

  • reader enables the reader module with the Reader struct within each variant module.
  • writer enables the writer module with the Writer struct within each variant module.

By default, neither of these features is enabled.

To customize your setup, disable the default features and enable only those that you need in your Cargo.toml file:

[dependencies]
chksum = { version = "0.3.0", features = ["reader", "writer"] }

Alternatively, you can use the cargo add subcommand:

cargo add chksum --features reader,writer

License

This crate is licensed under the MIT License.

Re-exports

  • pub use chksum_core::chksum;
  • pub use chksum_core::hash;
  • pub use chksum_core::hash;
  • pub use chksum_core::Chksumable;
  • pub use chksum_core::Digest;
  • pub use chksum_core::Error;
  • pub use chksum_core::Hash;
  • pub use chksum_core::Hashable;
  • pub use chksum_core::Result;
  • pub use chksum_md5 as md5;
    md5
  • pub use chksum_md5::MD5;
    md5
  • pub use chksum_reader as reader;
    reader
  • pub use chksum_reader::Reader;
    reader
  • pub use chksum_sha1 as sha1;
    sha1
  • pub use chksum_sha1::SHA1;
    sha1
  • pub use chksum_sha2 as sha2;
    sha2-224 or sha2-256 or sha2-384 or sha2-512
  • pub use chksum_sha2::sha2_224;
    sha2-224
  • pub use chksum_sha2::sha2_256;
    sha2-256
  • pub use chksum_sha2::sha2_384;
    sha2-384
  • pub use chksum_sha2::sha2_512;
    sha2-512
  • pub use chksum_sha2::SHA2_224;
    sha2-224
  • pub use chksum_sha2::SHA2_256;
    sha2-256
  • pub use chksum_sha2::SHA2_384;
    sha2-384
  • pub use chksum_sha2::SHA2_512;
    sha2-512
  • pub use chksum_writer as writer;
    writer
  • pub use chksum_writer::Writer;
    writer