bake-kdf 0.0.1

bake-kdf function (STB 34.101.66-2014)
Documentation
use bake_kdf::{bake_kdf, belt_keyexpand, belt_keyrep};
use hex_literal::hex;

#[test]
fn test_keyexpand() {
    let k_u32: [u32; 6] = [
        0xE9DEE72C, 0x8F0C0FA6, 0x2DDB49F4, 0x6F739647, 0x06075316, 0xED247A37,
    ];
    let mut k = [0u8; 24];
    for (src, dst) in k_u32.iter().zip(k.chunks_exact_mut(4)) {
        dst.copy_from_slice(&src.to_le_bytes());
    }

    let k1 = belt_keyexpand::<16>(&k[..16].try_into().unwrap());
    let k2 = belt_keyexpand(&k);

    assert_eq!(
        k1,
        [
            0xE9DEE72C, 0x8F0C0FA6, 0x2DDB49F4, 0x6F739647, 0xE9DEE72C, 0x8F0C0FA6, 0x2DDB49F4,
            0x6F739647
        ]
    );
    assert_eq!(
        k2,
        [
            0xE9DEE72C, 0x8F0C0FA6, 0x2DDB49F4, 0x6F739647, 0x06075316, 0xED247A37, 0x4B09A17E,
            0x8450BF66
        ]
    );
}

#[test]
fn test_keyrep() {
    let x: [u8; 32] =
        hex!("E9DEE72C 8F0C0FA6 2DDB49F4 6F739647 06075316 ED247A37 39CBA383 03A98BF6");
    let d: [u8; 12] = hex!("01000000 00000000 00000000");
    let i: [u8; 16] = hex!("5BE3D612 17B96181 FE6786AD 716B890B");

    let out: [u8; 16] = belt_keyrep(&x, &d, &i);
    assert_eq!(out, hex!("6BBBC233 6670D31A B83DAA90 D52C0541"));

    let out: [u8; 24] = belt_keyrep(&x, &d, &i);
    assert_eq!(
        out,
        hex!("9A2532A1 8CBAF145 398D5A95 FEEA6C82 5B9C1971 56A00275"),
    );

    let out: [u8; 32] = belt_keyrep(&x, &d, &i);
    assert_eq!(
        out,
        hex!("76E166E6 AB21256B 6739397B 672B8796 14B81CF0 5955FC3A B09343A7 45C48F77"),
    );
}

#[test]
fn test_kdf() {
    let secret = hex!("723356E3 35ED7062 0FFB1842 752092C3 2603EB66 60409205 87D80057 5BECFC42");
    let iv = hex!(
        "6B13ACBB 086FB876 18BCC2EF 20A3FA89 475654CB 367E670A 2441730B 24B8AB31"
        "CD3D6487 DC4EEB23 45697818 6A069C71 375D75C2 DF198BAD 1E61EEA0 DBBFF737"
    );
    let key = bake_kdf(&secret, &iv, 0);
    assert_eq!(
        key,
        hex!("DAC4D8F4 11F9C523 D28BBAAB 32A5270E 4DFA1F0F 757EF8E0 F30AF08F BDE1E7F4"),
    );

    let key = bake_kdf(&secret, &iv, 1);
    assert_eq!(
        key,
        hex!("54AC0582 84D679CF 4C47D3D7 2651F3E4 EF0D61D1 D0ED5BAF 8FF30B89 24E599D8"),
    );
}