#mac #standard #authentication #algorithm #crypto #bel-t

no-std belt-mac

MAC specified by the BelT standard

2 unstable releases

0.1.0 Apr 3, 2023
0.0.0 Mar 3, 2023

#2453 in Cryptography


186 lines

RustCrypto: belt-mac

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

Pure Rust implementation of belt-mac.


use belt_mac::{BeltMac, Mac};
use hex_literal::hex;

let key = [0x42; 32];
let msg = b"input message";
let expected_tag = hex!("9f5c9623b4eff8802195e81bcd841959");

// To get the authentication code:
let mut mac: BeltMac = BeltMac::new_from_slice(&key).unwrap();
let tag = mac.finalize();
let tag_bytes = tag.into_bytes();
assert_eq!(&tag_bytes[..], &expected_tag[..]);

// To verify the message:
let mut mac: BeltMac = BeltMac::new_from_slice(&key).unwrap();
mac.update(b"input message");

Minimum Supported Rust Version

Rust 1.57 or higher.

Minimum supported Rust version can be changed in the future, but it will be done with a minor version bump.

SemVer Policy

  • All on-by-default features of this library are covered by SemVer
  • MSRV is considered exempt from SemVer as noted above


Licensed under either of:

at your option.


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.


~11K SLoC