#lyra2-r-ev2 #lyra2-r-ev3 #lyra2-re

lyra2

Lyra2, Lyra2RE, Lyra2REv2, Lyra2REv3 的纯 Rust 库

8 个版本

0.2.7 2024 年 6 月 30 日
0.2.6 2022 年 1 月 18 日
0.2.4 2021 年 5 月 12 日
0.2.2 2021 年 1 月 2 日
0.1.0 2020 年 1 月 17 日

每月 21 次下载
monacoin 中使用

MIT 许可证

130KB
2.5K SLoC

lyra2

Rust

描述

Lyra2, Lyra2RE, Lyra2REv2, Lyra2REv3 的纯 Rust 库。

以下 Go 语言库已被重写为 Rust。 https://github.com/bitgoin/lyra2rev2

最低 Rust 版本

1.71+

示例

extern crate lyra2;

fn main() {
    let base1 = "abc".as_bytes().to_vec();
    let base2 = base1.clone();
    let lyra2_result1 = lyra2::lyra2::lyra2(32, base1, base2, 1, 4, 4);
    println!("result: {:?}", lyra2_result1); 
    //result: [143, 99, 117, 139, 209, 120, 240, 20, 234, 63, 212, 223, 9, 255, 10, 97, 100, 109, 197, 116, 160, 182, 188, 242, 137, 14, 197, 41, 166, 167, 54, 12]
}
extern crate lyra2;

fn main() {
    let base = "脇山珠美ちゃんかわいい!".as_bytes().to_vec();
    let lyra2rev2_result = lyra2::lyra2rev2::sum(base);
    assert_eq!(
        "bdaaa569c4f4918da66b02f2d0a2093a51e3d1735ee6023e9a93185c7bff40bc",
        lyra2rev2_result
            .iter()
            .map(|n| format!("{:02x}", n))
            .collect::<String>()
    );
}
extern crate lyra2;

fn main() {
    let base3 = parse_hex("700000005d385ba114d079971b29a9418fd0549e7d68a95c7f168621a314201000000000578586d149fd07b22f3a8a347c516de7052f034d2b76ff68e0d6ecff9b77a45489e3fd511732011df0731000");
    let lyra2rev3_result1 = lyra2::lyra2rev3::sum(base3);
    println!("result: {:?}", lyra2rev3_result1.iter()
            .map(|n| format!("{:02x}", n))
            .collect::<String>());
            //result: "5d7b298258e78881c7831ba1e46751b089efdf1fdb9eb01edd03b8d7ed39eafb"
}

// from code https://tutorialmore.com/questions-23721.htm
fn parse_hex(hex_asm: &str) -> Vec<u8> {
    let hex_chars: Vec<char> = hex_asm.as_bytes().iter().filter_map(|b| {
        let ch = char::from(*b);
        if ('0' <= ch && ch <= '9') || ('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F') {
            Some(ch)
        } else {
            None
        }
    }).collect();
    let mut index = 0usize;
    let (odd_chars, even_chars): (Vec<char>, Vec<char>) = hex_chars.into_iter().partition(|_| { 
        index = index + 1;
        index % 2 == 1
    });
    odd_chars.into_iter().zip(even_chars.into_iter()).map(|(c0, c1)| {
        fn hexchar2int(ch: char) -> u8 {
            if '0' <= ch && ch <= '9' {
                ch as u8 - '0' as u8
            } else {
                0xa + 
                if 'a' <= ch && ch <= 'f' {
                    ch as u8 - 'a' as u8
                } else if 'A' <= ch && ch <= 'F' {
                    ch as u8 - 'A' as u8
                } else {
                    unreachable!()
                }
            }
        }
        hexchar2int(c0) * 0x10 + hexchar2int(c1)            
    }).collect::<Vec<u8>>()
}

安装

为了使用此包,您必须将其添加到您的 [dependencies] 下的 Cargo.toml

[dependencies]
lyra2 = "0.2.7"

许可证

所有包均受以下任一许可证的许可:

任选其一。

贡献

除非您明确声明,否则您提交的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不得附加任何额外条款或条件。

依赖项

~3MB
~43K SLoC