Skip to content

Commit aa68e9b

Browse files
authored
bp384: add benchmarks (#1589)
Adds benchmarks written with the `primefield::bench_field!` and `elliptic_curve::bench_projective!` macros, ala the ones introduced to `bp256` in #1587 and #1588
1 parent d4fa704 commit aa68e9b

File tree

6 files changed

+86
-7
lines changed

6 files changed

+86
-7
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bp256/benches/point.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,19 @@
33
use bp256::r1::{ProjectivePoint, Scalar};
44
use criterion::{criterion_group, criterion_main};
55

6-
const POINT_A: ProjectivePoint = ProjectivePoint::GENERATOR;
7-
const POINT_B: ProjectivePoint = ProjectivePoint::GENERATOR;
8-
9-
const SCALAR: Scalar =
6+
const SCALAR_A: Scalar =
107
Scalar::from_hex_vartime("9bb0d8b72602b70dd5cfed99607a2e2c021dd0fe3b3af842df02c06f8c1a0f4e");
8+
const SCALAR_B: Scalar =
9+
Scalar::from_hex_vartime("6494152e2b6c34768296d2ea0e984f89a77f0d7399b70f2e29789128423a9bea");
10+
const SCALAR_C: Scalar =
11+
Scalar::from_hex_vartime("a316f6a92d2f8359218cf9f68900d9f791ad2ad77aee07686adeb5ec7c7b8cb3");
1112

1213
elliptic_curve::bench_projective!(
1314
bench_projective,
1415
"ProjectivePoint",
15-
POINT_A,
16-
POINT_B,
17-
SCALAR
16+
ProjectivePoint::GENERATOR * SCALAR_A,
17+
ProjectivePoint::GENERATOR * SCALAR_B,
18+
SCALAR_C
1819
);
1920

2021
criterion_group!(benches, bench_projective);

bp384/Cargo.toml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ primefield = { version = "0.14.0-rc.3", optional = true }
2222
primeorder = { version = "0.14.0-rc.3", optional = true }
2323
sha2 = { version = "0.11.0-rc.3", optional = true, default-features = false }
2424

25+
[dev-dependencies]
26+
criterion = "0.7"
27+
elliptic-curve = { version = "0.14.0-rc.20", default-features = false, features = ["dev"] }
28+
2529
[features]
2630
default = ["pkcs8", "std"]
2731
alloc = ["ecdsa?/alloc", "elliptic-curve/alloc", "primeorder?/alloc"]
@@ -35,6 +39,21 @@ pkcs8 = ["ecdsa/pkcs8", "elliptic-curve/pkcs8"]
3539
serde = ["ecdsa/serde", "elliptic-curve/serde"]
3640
sha384 = ["ecdsa/digest", "ecdsa/hazmat", "sha2"]
3741

42+
[[bench]]
43+
name = "field"
44+
harness = false
45+
required-features = ["arithmetic"]
46+
47+
[[bench]]
48+
name = "point"
49+
harness = false
50+
required-features = ["arithmetic"]
51+
52+
[[bench]]
53+
name = "scalar"
54+
harness = false
55+
required-features = ["arithmetic"]
56+
3857
[package.metadata.docs.rs]
3958
all-features = true
4059

bp384/benches/field.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//! bp384 `FieldElement` benchmarks
2+
3+
use bp384::BrainpoolP384r1;
4+
use criterion::{criterion_group, criterion_main};
5+
use primeorder::PrimeCurveParams;
6+
7+
type FieldElement = <BrainpoolP384r1 as PrimeCurveParams>::FieldElement;
8+
9+
const FE_A: FieldElement = FieldElement::from_hex_vartime(
10+
"1d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e",
11+
);
12+
const FE_B: FieldElement = FieldElement::from_hex_vartime(
13+
"8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c5315",
14+
);
15+
16+
primefield::bench_field!(bench_field_element, "FieldElement", FE_A, FE_B);
17+
criterion_group!(benches, bench_field_element);
18+
criterion_main!(benches);

bp384/benches/point.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//! bp384r1 `ProjectivePoint` benchmarks
2+
3+
use bp384::r1::{ProjectivePoint, Scalar};
4+
use criterion::{criterion_group, criterion_main};
5+
6+
const SCALAR_A: Scalar = Scalar::from_hex_vartime(
7+
"15f50e6c168cec3af4a81b946b7d25e07253ac13eb22b3b0aa28bb4a4eb2996324f5d5579829a25a0a17108bb1f2cc05",
8+
);
9+
const SCALAR_B: Scalar = Scalar::from_hex_vartime(
10+
"4b798823f02af50afddfdba4a0ac7b7eb70ad811ff6327f77d16f7d6069ea956bd68c7eabee8f7e959393630ae276fba",
11+
);
12+
const SCALAR_C: Scalar = Scalar::from_hex_vartime(
13+
"8b5ede2fb64cacce9e951b66aab631c900328924a5cd73f69f0f5bbf9a4b2db560679cbe98ee4c6038c8cbdbe170cbe7",
14+
);
15+
16+
elliptic_curve::bench_projective!(
17+
bench_projective,
18+
"ProjectivePoint",
19+
ProjectivePoint::GENERATOR * SCALAR_A,
20+
ProjectivePoint::GENERATOR * SCALAR_B,
21+
SCALAR_C
22+
);
23+
24+
criterion_group!(benches, bench_projective);
25+
criterion_main!(benches);

bp384/benches/scalar.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//! bp384 `Scalar` benchmarks
2+
3+
use bp384::Scalar;
4+
use criterion::{criterion_group, criterion_main};
5+
6+
const SCALAR_A: Scalar = Scalar::from_hex_vartime(
7+
"15f50e6c168cec3af4a81b946b7d25e07253ac13eb22b3b0aa28bb4a4eb2996324f5d5579829a25a0a17108bb1f2cc05",
8+
);
9+
const SCALAR_B: Scalar = Scalar::from_hex_vartime(
10+
"4b798823f02af50afddfdba4a0ac7b7eb70ad811ff6327f77d16f7d6069ea956bd68c7eabee8f7e959393630ae276fba",
11+
);
12+
13+
primefield::bench_field!(bench_scalar, "Scalar", SCALAR_A, SCALAR_B);
14+
criterion_group!(benches, bench_scalar);
15+
criterion_main!(benches);

0 commit comments

Comments
 (0)