1 个不稳定发布
0.1.0 | 2023 年 10 月 2 日 |
---|
#5 在 #fair
14KB
97 代码行
🎲 基于 HMAC-SHA512 的可证明公平 RNG 🎲
此代码实现了一个可证明公平随机数生成器 (RNG),使用 HMAC-SHA512 哈希算法,结合服务器种子、客户端种子和nonce值。
📋 要求
此代码需要安装以下依赖项
rand
🎲 - Rust 的随机数生成库sha2
🔒 - Rust 的 SHA-256 和 SHA-512 哈希函数库hmac
🔐 - Rust 的基于哈希的消息认证码 (HMAC) 库
将以下行添加到您的 Cargo.toml 文件中,以包含依赖项
[dependencies]
rand = "0.8"
sha2 = "0.12"
hmac = "0.7"
📝 描述
⚙️ 此代码基于服务器种子、客户端种子和一个nonce值生成的哈希值来生成随机数。服务器种子由服务器生成并保密,直到游戏结束,而客户端种子由客户端生成并保密(如果有多个玩家参与游戏)。nonce值在每一轮游戏中递增,以确保每一轮游戏都是唯一的,不能重复或被操纵。
⚠️ 注意,nonce值不应可预测或重复,且应保密于玩家,以防止操纵游戏结果。这些值结合使用来生成 HMAC-SHA512 哈希。
Proof
结构体表示 RNG 的当前状态,并提供了一些方法来与 RNG 交互,例如 new
、log_state
、roll
、calculate
和 verify
。
new
方法使用提供的或随机服务器种子和客户端种子以及给定的nonce值创建一个新的 Proof
结构体实例。
log_state
方法将 Proof
结构体的当前状态记录到控制台,包括从当前状态生成的随机数。
roll
方法递增nonce值,并为 Proof
结构体的当前状态计算随机数。
calculate
方法计算 Proof
结构体的当前状态的随机数,而不修改其状态。
verify
方法验证提供的随机数对于给定的客户端种子、服务器种子和nonce值是否有效。
🚀 示例用法
要使用此代码,只需创建一个具有所需或随机服务器种子、客户端种子和nonce值的新的Proof
结构实例。然后,使用roll
或calculate
方法生成随机数,并使用verify
方法验证给定随机数的有效性。
use hmac_rng::Proof;
// Create a new Proof instance with a random server seed and client seed, and a nonce value of 0
let mut proof = Proof::new(None, None, 0);
// Log the current state of the Proof instance
proof.log_state();
// Roll the Proof instance to generate a new random number
let result = proof.roll();
match result {
Ok(random_number) => println!("Random number: {}", random_number),
Err(err) => eprintln!("Error: {}", err),
}
// Verify the validity of a given random number
let client_seed = vec![1, 2, 3];
let server_seed = vec![4, 5, 6];
let nonce = 0;
let random_number = 0.42;
let result = Proof::verify(&client_seed, Some(&server_seed), nonce, random_number);
match result {
Ok(valid) => println!("Valid: {}", valid),
Err(err) => eprintln!("Error: {}", err),
}
🔗 验证器 << 用户可以使用此验证
依赖关系
~1MB
~17K SLoC