#key-derivation #kdf

no-std kbkdf

Key Derivation Using Pseudorandom Function (KBKDF)

4 releases

Uses new Rust 2024

new 0.1.0-rc.1 Feb 2, 2026
0.1.0-rc.0 Nov 5, 2025
0.1.0-pre.0 Mar 7, 2025
0.0.1 Feb 4, 2025

#2954 in Cryptography

Download history 1587/week @ 2025-10-13 1345/week @ 2025-10-20 1334/week @ 2025-10-27 2152/week @ 2025-11-03 1290/week @ 2025-11-10 1856/week @ 2025-11-17 1328/week @ 2025-11-24 1998/week @ 2025-12-01 1733/week @ 2025-12-08 1187/week @ 2025-12-15 722/week @ 2025-12-22 882/week @ 2025-12-29 2466/week @ 2026-01-05 2314/week @ 2026-01-12 2271/week @ 2026-01-19 1392/week @ 2026-01-26

8,564 downloads per month
Used in 23 crates (2 directly)

MIT/Apache

24KB
487 lines

RustCrypto: KBKDF

crate Docs Build Status Apache2/MIT licensed Rust Version Project Chat

Pure Rust implementation of the Key Based Key Derivation Function (KBKDF). This function is described in section 4 of NIST SP 800-108r1, Recommendation for Key Derivation Using Pseudorandom Functions.

Usage

The most common way to use KBKDF is as follows: you generate a shared secret with other party (e.g. via Diffie-Hellman algorithm) and use key derivation function to derive a shared key.

use hex_literal::hex;
use hmac::Hmac;
use kbkdf::{Counter, Kbkdf, Params};
use sha2::Sha256;

type HmacSha256 = Hmac<Sha256>;
let counter = Counter::<HmacSha256, HmacSha256>::default();
let key = counter
    .derive(Params::builder(b"secret").with_label(b"label").build())
    .unwrap();
assert_eq!(
    key,
    hex!(
        "ff6a1e505e0f2546eae8f1e11ab95ff6"
        "47b78bb2182a835c7c1f8054ae7cfea5"
        "8182da6b978c411fa840326ebbe07bfc"
        "aaef01c090bb6f8e9c1da9dedf40bc3e"
    )
);

License

Licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~685KB
~17K SLoC