rs_sha384 0.1.2

`rs_sha384` is a Rust implementation of the SHA-384 cryptographic hash algorithm, part of the larger `rs_ssl` project. This package provides SHA-384 hashing functionality in a standalone manner, ideal for when only SHA-384 is required. Alternatively, for those seeking a comprehensive set of cryptographic functions, this same algorithm is included within the broader `rs_ssl` library bundle. The focus of `rs_sha384` and the larger project is on performance, safety, and openness, with a commitment to ongoing maintenance and enhancement.
Documentation
extern crate alloc;
use crate::sha384state::Sha384State;
use crate::Sha384Hasher;
use alloc::format;
use core::hash::{BuildHasher, Hash, Hasher};
use rs_hasher_ctx::HasherContext;

#[test]
fn sha384_empty_string_prefix_collision_resiliency() {
    let empty_str = "";
    let default_sha256state = Sha384State::default();
    let mut prefix_free_hasher = default_sha256state.build_hasher();
    let mut prefix_hasher = default_sha256state.build_hasher();

    empty_str.hash(&mut prefix_free_hasher);
    prefix_hasher.write(empty_str.as_ref());

    assert_ne!(prefix_free_hasher.finish(), prefix_hasher.finish());
    assert_eq!(
        format!("{:02x}", HasherContext::finish(&mut prefix_hasher)),
        "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b"
    )
}

#[test]
fn sha384_quick_fox_consistency() {
    let quick_fox = "The quick brown fox jumps over the lazy dog";
    let default_sha256state = Sha384State::default();
    let mut sha384hasher = default_sha256state.build_hasher();

    sha384hasher.write(quick_fox.as_ref());

    let result = HasherContext::finish(&mut sha384hasher);
    assert_eq!(
        format!("{result:02x}"),
        "ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1"
    );
}

#[test]
fn test() {
    let mut sha512hasher = Sha384Hasher::default();
    sha512hasher.write(b"your string here");

    let u64result = sha512hasher.finish();
    let bytes_result = HasherContext::finish(&mut sha512hasher);
    assert_eq!(u64result, 0x27C3D7DA682CF0AB);
    assert_eq!(
        format!("{bytes_result:02x}"),
        "27c3d7da682cf0ab27648e1f5da0a6c18ea13d9629e1ce7d9df1f38b1ee7dfb6ebf5aede6f8ddc9f8c2b9e96d29e4e63"
    );
    assert_eq!(
        format!("{bytes_result:02X}"),
        "27C3D7DA682CF0AB27648E1F5DA0A6C18EA13D9629E1CE7D9DF1F38B1EE7DFB6EBF5AEDE6F8DDC9F8C2B9E96D29E4E63"
    );
    assert_eq!(
        bytes_result,
        [
            0x27, 0xC3, 0xD7, 0xDA, 0x68, 0x2C, 0xF0, 0xAB, 0x27, 0x64, 0x8E, 0x1F, 0x5D, 0xA0, 0xA6, 0xC1, 0x8E, 0xA1,
            0x3D, 0x96, 0x29, 0xE1, 0xCE, 0x7D, 0x9D, 0xF1, 0xF3, 0x8B, 0x1E, 0xE7, 0xDF, 0xB6, 0xEB, 0xF5, 0xAE, 0xDE,
            0x6F, 0x8D, 0xDC, 0x9F, 0x8C, 0x2B, 0x9E, 0x96, 0xD2, 0x9E, 0x4E, 0x63
        ]
    )
}