use criterion::{Criterion, criterion_group, criterion_main};
use rug::Integer;
use rust_ev_crypto_primitives::{
Hexa, elgamal::EncryptionParameters, prepare_fixed_based_optimization,
zero_knowledge_proofs::verify_schnorr,
};
fn schnorr_proofs_bench(c: &mut Criterion) {
let p = Integer::from_hexa_string("0xB7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA56A784D9045190CFEF324E7738926CFBE5F4BF8D8D8C31D763DA06C80ABB1185EB4F7C7B5757F5958490CFD47D7C19BB42158D9554F7B46BCED55C4D79FD5F24D6613C31C3839A2DDF8A9A276BCFBFA1C877C56284DAB79CD4C2B3293D20E9E5EAF02AC60ACC93ED874422A52ECB238FEEE5AB6ADD835FD1A0753D0A8F78E537D2B95BB79D8DCAEC642C1E9F23B829B5C2780BF38737DF8BB300D01334A0D0BD8645CBFA73A6160FFE393C48CBBBCA060F0FF8EC6D31BEB5CCEED7F2F0BB088017163BC60DF45A0ECB1BCD289B06CBBFEA21AD08E1847F3F7378D56CED94640D6EF0D3D37BE67008E186D1BF275B9B241DEB64749A47DFDFB96632C3EB061B6472BBF84C26144E49C2D04C324EF10DE513D3F5114B8B5D374D93CB8879C7D52FFD72BA0AAE7277DA7BA1B4AF1488D8E836AF14865E6C37AB6876FE690B571121382AF341AFE94F77BCF06C83B8FF5675F0979074AD9A787BC5B9BD4B0C5937D3EDE4C3A79396419CD7").unwrap();
let q = Integer::from_hexa_string("0x5BF0A8B1457695355FB8AC404E7A79E3B1738B079C5A6D2B53C26C8228C867F799273B9C49367DF2FA5FC6C6C618EBB1ED0364055D88C2F5A7BE3DABABFACAC24867EA3EBE0CDDA10AC6CAAA7BDA35E76AAE26BCFEAF926B309E18E1C1CD16EFC54D13B5E7DFD0E43BE2B1426D5BCE6A6159949E9074F2F5781563056649F6C3A21152976591C7F772D5B56EC1AFE8D03A9E8547BC729BE95CADDBCEC6E57632160F4F91DC14DAE13C05F9C39BEFC5D98068099A50685EC322E5FD39D30B07FF1C9E2465DDE5030787FC763698DF5AE6776BF9785D84400B8B1DE306FA2D07658DE6944D8365DFF510D68470C23F9FB9BC6AB676CA3206B77869E9BDF3380470C368DF93ADCD920EF5B23A4D23EFEFDCB31961F5830DB2395DFC26130A2724E1682619277886F289E9FA88A5C5AE9BA6C9E5C43CE3EA97FEB95D0557393BED3DD0DA578A446C741B578A432F361BD5B43B7F3485AB88909C1579A0D7F4A7BBDE783641DC7FAB3AF84BC83A56CD3C3DE2DCDEA5862C9BE9F6F261D3C9CB20CE6B").unwrap();
let g = Integer::from_hexa_string("0x4").unwrap();
let e = Integer::from_hexa_string(
"0xFE6B909E2C4EC3C9A25315EAF1E99A50452BBD22E75A69C247147E23669D665F",
)
.unwrap();
let z = Integer::from_hexa_string("0x366D1E918E19C0B22D2393C88DBA28A4271CA9A030A528A42045FAC3E04F6C96A56593D9A1832BDB42FEE45C49588AD3CA071F83F13A5B03F43912D77746A72A76A2FB9E9FE802ACA107B357BC62A9076830D9DBD03B11AF028DAC5D36C3729E5D82CB83B4409E83B236CB61B3D4B79FF50CBB4FDFCD11DC78632ADC80D0F4FF3338E142C3C315764BD16F0378886D6A640D43257611FA8925D179B4156912B2737C4F96462EAE7B5F5A2AA19A7488B11151CBB13484FD6219632CF960D36C14157454F436D25C6D4289123D80100A8835608B67C8EC81CB311227F6FB5AF90EF5C69EB2687833E4E7FD60736A481365C68300EE74B770F22A63DADFDA5CB8DB9E05903F465DE906A59164D19A7F0B1D69DD8C9BE40E386143413C69993E4A5AAD966EB8DEAECFFE2E164EDB503518AECA71198CEDCAE50C2E95158CA53FE1D2FF26A4A04330A5152233E4DB78C39C56F55C361B38242645AB4D74E960221AE637239F149C61E9E51012D10BD2B7BBDC7B7696FE5C707DE668C5A71C17D83085").unwrap();
let y = Integer::from_hexa_string("0x4D14E2B0ADB377E998C39DE477A96B74FD08E9E52BB6CF27717FADDBA2FCC5F3F65C9E99E4E33AAD0E1BC5A4E6429C805FC2FA0E5FF2C13A1C3B190B7156E7DF251C65E1229D13039751A881D99DB15D0E25118134CE37EF9EAEC921243F99AAD5CDE7834951F38E0DA9FD379252FD98EFAD7F040D690E4EB5E40296F7E76E1EFBB8037FF691BB891A2F9E78C83E806B6F0CF8B8E94C8401E87C29D2242D708AFCCB687380A07CC7A73C87F56FDDC6DD805E187D9A7C0B6D1D954FD875B5F331B33839BDAF3006417A9F8D197293BEF54B425C7A846793913B71208546A801FCBCD288BC4F9C228235CB8C243138A3F821478E1FB6AA5D6D146895F73E29C3D5D4981E25BED114515E3891E775079646E9A7970648A261D66EA95C2133FD8E55802359B81C50A87A3FF3F14D427851BD90285EC2C6967DBD7456B8D67CF0CDB0B1875BD42F6847104A8A808621A68B295BFFCAF110EB1EB77A95EE11C29B4C5CC42201C81D3B91A7D4643293A56D91AB06F83C6126D9545EDF4BC4502069F974").unwrap();
let add_info: Vec<&str> = vec!["test-0", "test-1"];
let _ = prepare_fixed_based_optimization(&g, &p);
c.bench_function("schnorr_proofs", |b| {
b.iter(|| {
verify_schnorr(
&EncryptionParameters::from((&p, &q, &g)),
(&e, &z),
&y,
&add_info,
)
.unwrap()
})
});
}
criterion_group!(benches, schnorr_proofs_bench);
criterion_main!(benches);