]> git.proxmox.com Git - rustc.git/blob - vendor/p384/benches/field.rs
New upstream version 1.71.1+dfsg1
[rustc.git] / vendor / p384 / benches / field.rs
1 //! secp384r1 field element benchmarks
2
3 use criterion::{
4 criterion_group, criterion_main, measurement::Measurement, BenchmarkGroup, Criterion,
5 };
6 use hex_literal::hex;
7 use p384::FieldElement;
8
9 fn test_field_element_x() -> FieldElement {
10 FieldElement::from_bytes(
11 hex!("c2b47944fb5de342d03285880177ca5f7d0f2fcad7678cce4229d6e1932fcac11bfc3c3e97d942a3c56bf34123013dbf").into()
12 )
13 .unwrap()
14 }
15
16 fn test_field_element_y() -> FieldElement {
17 FieldElement::from_bytes(
18 hex!("37257906a8223866eda0743c519616a76a758ae58aee81c5fd35fbf3a855b7754a36d4a0672df95d6c44a81cf7620c2d").into()
19 )
20 .unwrap()
21 }
22
23 fn bench_field_element_mul<'a, M: Measurement>(group: &mut BenchmarkGroup<'a, M>) {
24 let x = test_field_element_x();
25 let y = test_field_element_y();
26 group.bench_function("mul", |b| b.iter(|| &x * &y));
27 }
28
29 fn bench_field_element_square<'a, M: Measurement>(group: &mut BenchmarkGroup<'a, M>) {
30 let x = test_field_element_x();
31 group.bench_function("square", |b| b.iter(|| x.square()));
32 }
33
34 fn bench_field_element_sqrt<'a, M: Measurement>(group: &mut BenchmarkGroup<'a, M>) {
35 let x = test_field_element_x();
36 group.bench_function("sqrt", |b| b.iter(|| x.sqrt()));
37 }
38
39 fn bench_field_element_invert<'a, M: Measurement>(group: &mut BenchmarkGroup<'a, M>) {
40 let x = test_field_element_x();
41 group.bench_function("invert", |b| b.iter(|| x.invert()));
42 }
43
44 fn bench_field_element(c: &mut Criterion) {
45 let mut group = c.benchmark_group("field element operations");
46 bench_field_element_mul(&mut group);
47 bench_field_element_square(&mut group);
48 bench_field_element_invert(&mut group);
49 bench_field_element_sqrt(&mut group);
50 group.finish();
51 }
52
53 criterion_group!(benches, bench_field_element);
54 criterion_main!(benches);