mirror of
https://github.com/serai-dex/serai.git
synced 2024-12-30 15:39:23 +00:00
89 lines
2.2 KiB
Rust
89 lines
2.2 KiB
Rust
|
use std::{
|
||
|
io::Write,
|
||
|
env,
|
||
|
path::Path,
|
||
|
fs::{File, remove_file},
|
||
|
};
|
||
|
|
||
|
#[cfg(feature = "compile-time-generators")]
|
||
|
fn generators(prefix: &'static str, path: &str) {
|
||
|
use curve25519_dalek::EdwardsPoint;
|
||
|
|
||
|
use monero_generators::bulletproofs_generators;
|
||
|
|
||
|
fn serialize(generators_string: &mut String, points: &[EdwardsPoint]) {
|
||
|
for generator in points {
|
||
|
generators_string.extend(
|
||
|
format!(
|
||
|
"
|
||
|
curve25519_dalek::edwards::CompressedEdwardsY({:?}).decompress().unwrap(),
|
||
|
",
|
||
|
generator.compress().to_bytes()
|
||
|
)
|
||
|
.chars(),
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
let generators = bulletproofs_generators(prefix.as_bytes());
|
||
|
#[allow(non_snake_case)]
|
||
|
let mut G_str = String::new();
|
||
|
serialize(&mut G_str, &generators.G);
|
||
|
#[allow(non_snake_case)]
|
||
|
let mut H_str = String::new();
|
||
|
serialize(&mut H_str, &generators.H);
|
||
|
|
||
|
let path = Path::new(&env::var("OUT_DIR").unwrap()).join(path);
|
||
|
let _ = remove_file(&path);
|
||
|
File::create(&path)
|
||
|
.unwrap()
|
||
|
.write_all(
|
||
|
format!(
|
||
|
"
|
||
|
static GENERATORS_CELL: OnceLock<Generators> = OnceLock::new();
|
||
|
pub(crate) fn GENERATORS() -> &'static Generators {{
|
||
|
GENERATORS_CELL.get_or_init(|| Generators {{
|
||
|
G: std_shims::vec![
|
||
|
{G_str}
|
||
|
],
|
||
|
H: std_shims::vec![
|
||
|
{H_str}
|
||
|
],
|
||
|
}})
|
||
|
}}
|
||
|
",
|
||
|
)
|
||
|
.as_bytes(),
|
||
|
)
|
||
|
.unwrap();
|
||
|
}
|
||
|
|
||
|
#[cfg(not(feature = "compile-time-generators"))]
|
||
|
fn generators(prefix: &'static str, path: &str) {
|
||
|
let path = Path::new(&env::var("OUT_DIR").unwrap()).join(path);
|
||
|
let _ = remove_file(&path);
|
||
|
File::create(&path)
|
||
|
.unwrap()
|
||
|
.write_all(
|
||
|
format!(
|
||
|
r#"
|
||
|
static GENERATORS_CELL: OnceLock<Generators> = OnceLock::new();
|
||
|
pub(crate) fn GENERATORS() -> &'static Generators {{
|
||
|
GENERATORS_CELL.get_or_init(|| {{
|
||
|
monero_generators::bulletproofs_generators(b"{prefix}")
|
||
|
}})
|
||
|
}}
|
||
|
"#,
|
||
|
)
|
||
|
.as_bytes(),
|
||
|
)
|
||
|
.unwrap();
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
println!("cargo:rerun-if-changed=build.rs");
|
||
|
|
||
|
generators("bulletproof", "generators.rs");
|
||
|
generators("bulletproof_plus", "generators_plus.rs");
|
||
|
}
|