1 //! secp384r1 field element benchmarks
4 criterion_group
, criterion_main
, measurement
::Measurement
, BenchmarkGroup
, Criterion
,
7 use p384
::FieldElement
;
9 fn test_field_element_x() -> FieldElement
{
10 FieldElement
::from_bytes(
11 hex
!("c2b47944fb5de342d03285880177ca5f7d0f2fcad7678cce4229d6e1932fcac11bfc3c3e97d942a3c56bf34123013dbf").into()
16 fn test_field_element_y() -> FieldElement
{
17 FieldElement
::from_bytes(
18 hex
!("37257906a8223866eda0743c519616a76a758ae58aee81c5fd35fbf3a855b7754a36d4a0672df95d6c44a81cf7620c2d").into()
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
));
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()));
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()));
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()));
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
);
53 criterion_group
!(benches
, bench_field_element
);
54 criterion_main
!(benches
);