3个版本 (破坏性更新)
0.3.0 | 2022年12月29日 |
---|---|
0.2.0 | 2022年9月7日 |
0.1.0 | 2022年8月26日 |
#1559 in 加密学
每月 37次下载
30KB
448 行
clap-digest
功能
-
对不同的摘要算法类型实现
clap::ValueEnum
use clap::builder::{Arg, ArgAction, EnumValueParser}; use clap_digest::Digest; Arg::new("digest") .action(ArgAction::Set) .value_parser(EnumValueParser::<Digest>::new())
-
现成的
clap::Arg
实现use clap::{Command, ValueEnum}; use clap_digest::{Digest, DynDigest}; let cli = Command::new("myapp") .arg(clap_digest::arg::digest().required_unless_present("list-digests")) .arg(clap_digest::arg::list_digests()); let args = cli.get_matches_from(["myapp", "--list-digests"]); if args.get_flag("list-digests") { for digest in Digest::value_variants() { println!("{digest}"); } } else { let digest = *args .get_one::<Digest>("digest") .expect("has default via clap"); todo!() }
有关更多信息,请参阅
clap_digest::arg
模块。 -
从
clap_digest::Digest
到digest::DynDigest
的转换use clap_digest::{Digest, DynDigest}; // fn doing some hashing, using any DynDigest implementation fn dyn_hash(hasher: &mut dyn DynDigest, data: &[u8]) -> String { hasher.update(data); let hash = hasher.finalize_reset(); hash.iter().map(|byte| format!("{:02x}", byte)).collect() } // parse user-supplied CLI input to clap_digest::Digest with clap // suppose user runs this with: `command --digest MD5` // let args = cli.get_matches(); let digest = *args.get_one::<Digest>("digest").unwrap(); // convert to DynDigest let mut digest: Box<dyn DynDigest> = digest.into(); // use with hashing function let hash = dyn_hash(digest.as_mut(), b"foo"); assert_eq!(hash, "acbd18db4cc2f85cedef654fccc4a4d8");
-
摘要算法组是功能控制的。使用
cargo feature clap-digest
获取完整列表。至少选择一个摘要算法组功能。要限制您在crate中想要支持的摘要算法家族,请定义您自己的功能,例如[features] default = ["sha2"] md5 = ["clap-digest/md5"] sha1 = ["clap-digest/sha1"] sha2 = ["clap-digest/sha2"]
示例
有关完整的CLI示例,请参阅examples/cksum.rs
。
$ cargo run --example cksum -- -d SHA1 Cargo.toml
7a96ee85606435fe1f39c3fa6bdf4cf9bbbc338c Cargo.toml
$ sha1sum Cargo.toml
7a96ee85606435fe1f39c3fa6bdf4cf9bbbc338c Cargo.toml
$ cargo run --example cksum -- -d MD5 Cargo.toml | md5sum -c
Cargo.toml: OK
列出所有支持的算法
$ cargo run --example cksum -- --list-digests
BLAKE2b512
BLAKE2s256
BLAKE3
...
所有算法组都是功能控制的,因此您可以选择
$ cargo run --example cksum --no-default-features --features md5,sha1,sha2 -- --list-digests
MD5
SHA1
SHA224
SHA256
SHA384
SHA512
SHA512/224
SHA512/256
依赖关系
~5MB
~82K SLoC