#kangarootwelve #k12 #hash #xkcp-k12 #marsupial

sys bagousys

为 kangarootwelve 哈希函数的 xkcp/k12 实现提供的 ffi 包

6 个版本

0.1.0 2024年7月7日
0.0.6 2024年7月3日
0.0.5 2024年6月26日

#4 in #kangarootwelve

Download history 309/week @ 2024-06-16 197/week @ 2024-06-23 179/week @ 2024-06-30 128/week @ 2024-07-07 4/week @ 2024-07-14 46/week @ 2024-07-28

每月51次下载
marsupial 中使用

自定义许可

285KB
7K SLoC

C 5K SLoC // 0.1% comments GNU Style Assembly 2K SLoC // 0.0% comments Rust 165 SLoC // 0.1% comments

袋鼠

xkcp/k12 的 rust 封装,源自 oconnor663/kangarootwelve_xkcp.rs

使用方法

为了使用此包,你需要

  • C 编译器
  • Rust
  • gnuplot(如果你想在基准测试时生成图表)

然后,只需在 Cargo.toml 中添加对 bagousys 包的依赖,然后你可以这样使用它

use marsupial::{KT128, Hasher};

// hash an input all at once
let hash1 = marsupial::hash::<KT128>(b"foobarbaz");

// hash an input incrementally
let mut hasher = Hasher::<KT128>::new();
hasher.update(b"foo");
hasher.update(b"bar");
hasher.update(b"baz");
let hash2 = hasher.finalize();
assert_eq!(hash1, hash2);

// extended output. `OutputReader` also implements `Read`
let mut hasher = Hasher::<KT128>::new();
hasher.update(b"foobarbaz");
let mut output_reader = hasher.finalize_xof();
let mut output = [0; 1000];
output_reader.squeeze(&mut output);
assert_eq!(&output[..32], hash1.as_bytes());

// emit the hash as hexadecimal (does not work for now)
//println!("{}", hash1.to_hex());

它快吗?

在 intel i5-1135G7 上使用 rust 1.79.0 在 debian linux trixie/sid 上进行的基准测试

benchmark of marsupial's safe KT128 bindings against tiny-keccak and k12

benchmark of marsupial's safe KT256 bindings

许可

kangarootwelve_xkcp.rs 一样,所有的 rust 封装代码都通过 cc0 专属于公共领域。 vendored 的 xkcp 代码受多种许可的约束

无运行时依赖

~0–2MB
~41K SLoC