Thanks to visit codestin.com
Credit goes to lib.rs

#sha-256 #hmac #sha-2 #hkdf

no-std hmac-sha256

A small, self-contained SHA256, HMAC-SHA256, and HKDF-SHA256 implementation

22 releases (14 stable)

1.1.12 May 19, 2025
1.1.8 Dec 9, 2024
1.1.7 Jun 14, 2023
1.1.6 Nov 29, 2022
0.1.1 Apr 10, 2019

#24 in Cryptography

Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App

796,301 downloads per month
Used in 289 crates (57 directly)

ISC license

34KB
555 lines

rust-hmac-sha256

A small, self-contained SHA256, HMAC-SHA256, and HKDF-SHA256 implementation in Rust with no_std support.

Features

  • Pure Rust implementation
  • No external dependencies (unless optional features are enabled)
  • no_std compatible
  • Both one-shot and streaming APIs
  • Constant-time verification to prevent timing attacks
  • HKDF key derivation (extraction and expansion)

Optional Features

  • traits: Enable support for the Digest trait from the digest crate (both version 0.9.0 and 0.10.7)
  • opt_size: Enable size optimizations. Based on benchmarks, the .text section size is reduced by 75%, at the cost of approximately 16% performance.

Usage Examples

SHA-256

// One-shot hashing
let hash = hmac_sha256::Hash::hash(b"hello world");

// Incremental hashing
let mut hasher = hmac_sha256::Hash::new();
hasher.update(b"hello ");
hasher.update(b"world");
let hash = hasher.finalize();

// Constant-time verification
let expected = hmac_sha256::Hash::hash(b"hello world");
let mut hasher = hmac_sha256::Hash::new();
hasher.update(b"hello world");
assert!(hasher.verify(&expected));

HMAC-SHA256

// One-shot HMAC
let mac = hmac_sha256::HMAC::mac(b"message", b"key");

// Incremental HMAC
let mut hmac = hmac_sha256::HMAC::new(b"key");
hmac.update(b"message part 1");
hmac.update(b"message part 2");
let mac = hmac.finalize();

// Constant-time verification
let expected = hmac_sha256::HMAC::mac(b"message", b"key");
let mut hmac = hmac_sha256::HMAC::new(b"key");
hmac.update(b"message");
assert!(hmac.verify(&expected));

HKDF-SHA256

// Extract a pseudorandom key from input keying material
let prk = hmac_sha256::HKDF::extract(b"salt", b"input key material");

// Expand the pseudorandom key to the desired output length
let mut output = [0u8; 64];
hmac_sha256::HKDF::expand(&mut output, prk, b"application info");

Dependencies

~150KB