Skip to content

Commit 18c3186

Browse files
committed
Test P-384
1 parent 6913b5d commit 18c3186

8 files changed

+72
-3
lines changed

Cargo.toml

+10-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@ zeroize = { version = "1.5", default-features = false }
4848
generic-array = { version = "0.14", features = ["more_lengths"] }
4949
hex = "0.4"
5050
json = "0.12"
51-
p256 = { version = "0.11", default-features = false, features = [
51+
p256 = { version = "0.12.0-pre.0", default-features = false, features = [
52+
"hash2curve",
53+
"voprf",
54+
] }
55+
p384 = { version = "0.12.0-pre.0", default-features = false, features = [
5256
"hash2curve",
5357
"voprf",
5458
] }
@@ -60,3 +64,8 @@ sha2 = "0.10"
6064
[package.metadata.docs.rs]
6165
features = ["danger", "std"]
6266
targets = []
67+
68+
[patch.crates-io]
69+
elliptic-curve = { git = "https://github.com/RustCrypto/traits", rev = "d28eb2408070b247ebc0fd243a39dedf52b594d4" }
70+
p256 = { git = "https://github.com/khonsulabs/elliptic-curves", branch = "p384-hash-to-curve" }
71+
p384 = { git = "https://github.com/khonsulabs/elliptic-curves", branch = "p384-hash-to-curve" }

src/group/elliptic_curve.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use crate::{Error, InternalError, Result};
2323
impl<C> Group for C
2424
where
2525
C: GroupDigest,
26-
ProjectivePoint<Self>: CofactorGroup + ToEncodedPoint<Self>,
26+
ProjectivePoint<Self>: CofactorGroup,
2727
FieldSize<Self>: ModulusSize,
2828
AffinePoint<Self>: FromEncodedPoint<Self> + ToEncodedPoint<Self>,
2929
Scalar<Self>: FromOkm,
@@ -65,7 +65,8 @@ where
6565
}
6666

6767
fn serialize_elem(elem: Self::Elem) -> GenericArray<u8, Self::ElemLen> {
68-
let bytes = elem.to_encoded_point(true);
68+
let affine: AffinePoint<Self> = elem.into();
69+
let bytes = affine.to_encoded_point(true);
6970
let bytes = bytes.as_bytes();
7071
let mut result = GenericArray::default();
7172
result[..bytes.len()].copy_from_slice(bytes);

src/group/tests.rs

+4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use crate::{Error, Group, Result};
1515
#[test]
1616
fn test_group_properties() -> Result<()> {
1717
use p256::NistP256;
18+
use p384::NistP384;
1819

1920
#[cfg(feature = "ristretto255")]
2021
{
@@ -27,6 +28,9 @@ fn test_group_properties() -> Result<()> {
2728
test_identity_element_error::<NistP256>()?;
2829
test_zero_scalar_error::<NistP256>()?;
2930

31+
test_identity_element_error::<NistP384>()?;
32+
test_zero_scalar_error::<NistP384>()?;
33+
3034
Ok(())
3135
}
3236

src/oprf.rs

+8
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ mod tests {
427427
#[test]
428428
fn test_functionality() -> Result<()> {
429429
use p256::NistP256;
430+
use p384::NistP384;
430431

431432
#[cfg(feature = "ristretto255")]
432433
{
@@ -447,6 +448,13 @@ mod tests {
447448
zeroize_oprf_client::<NistP256>();
448449
zeroize_oprf_server::<NistP256>();
449450

451+
base_retrieval::<NistP384>();
452+
base_inversion_unsalted::<NistP384>();
453+
server_evaluate::<NistP384>();
454+
455+
zeroize_oprf_client::<NistP384>();
456+
zeroize_oprf_server::<NistP384>();
457+
450458
Ok(())
451459
}
452460
}

src/poprf.rs

+8
Original file line numberDiff line numberDiff line change
@@ -970,6 +970,7 @@ mod tests {
970970
#[test]
971971
fn test_functionality() -> Result<()> {
972972
use p256::NistP256;
973+
use p384::NistP384;
973974

974975
#[cfg(feature = "ristretto255")]
975976
{
@@ -990,6 +991,13 @@ mod tests {
990991
zeroize_verifiable_client::<NistP256>();
991992
zeroize_verifiable_server::<NistP256>();
992993

994+
verifiable_retrieval::<NistP384>();
995+
verifiable_bad_public_key::<NistP384>();
996+
verifiable_server_evaluate::<NistP384>();
997+
998+
zeroize_verifiable_client::<NistP384>();
999+
zeroize_verifiable_server::<NistP384>();
1000+
9931001
Ok(())
9941002
}
9951003
}

src/serialization.rs

+1
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ mod test {
389389
}
390390

391391
let _ = $item::<p256::NistP256>::deserialize(&$bytes[..]);
392+
let _ = $item::<p384::NistP384>::deserialize(&$bytes[..]);
392393
};
393394
}
394395

src/tests/test_cfrg_vectors.rs

+28
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ macro_rules! json_to_test_vectors {
8585
#[test]
8686
fn test_vectors() -> Result<()> {
8787
use p256::NistP256;
88+
use p384::NistP384;
8889

8990
let rfc = json::parse(rfc_to_json(super::cfrg_vectors::VECTORS).as_str())
9091
.expect("Could not parse json");
@@ -157,6 +158,33 @@ fn test_vectors() -> Result<()> {
157158
test_poprf_finalize::<NistP256>(&p256_poprf_tvs)?;
158159
test_poprf_evaluate::<NistP256>(&p256_poprf_tvs)?;
159160

161+
let p384_oprf_tvs =
162+
json_to_test_vectors!(rfc, String::from("P-384, SHA-384"), String::from("OPRF"));
163+
assert_ne!(p384_oprf_tvs.len(), 0);
164+
test_oprf_seed_to_key::<NistP384>(&p384_oprf_tvs)?;
165+
test_oprf_blind::<NistP384>(&p384_oprf_tvs)?;
166+
test_oprf_blind_evaluate::<NistP384>(&p384_oprf_tvs)?;
167+
test_oprf_finalize::<NistP384>(&p384_oprf_tvs)?;
168+
test_oprf_evaluate::<NistP384>(&p384_oprf_tvs)?;
169+
170+
let p384_voprf_tvs =
171+
json_to_test_vectors!(rfc, String::from("P-384, SHA-384"), String::from("VOPRF"));
172+
assert_ne!(p384_voprf_tvs.len(), 0);
173+
test_voprf_seed_to_key::<NistP384>(&p384_voprf_tvs)?;
174+
test_voprf_blind::<NistP384>(&p384_voprf_tvs)?;
175+
test_voprf_blind_evaluate::<NistP384>(&p384_voprf_tvs)?;
176+
test_voprf_finalize::<NistP384>(&p384_voprf_tvs)?;
177+
test_voprf_evaluate::<NistP384>(&p384_voprf_tvs)?;
178+
179+
let p384_poprf_tvs =
180+
json_to_test_vectors!(rfc, String::from("P-384, SHA-384"), String::from("POPRF"));
181+
assert_ne!(p384_poprf_tvs.len(), 0);
182+
test_poprf_seed_to_key::<NistP384>(&p384_poprf_tvs)?;
183+
test_poprf_blind::<NistP384>(&p384_poprf_tvs)?;
184+
test_poprf_blind_evaluate::<NistP384>(&p384_poprf_tvs)?;
185+
test_poprf_finalize::<NistP384>(&p384_poprf_tvs)?;
186+
test_poprf_evaluate::<NistP384>(&p384_poprf_tvs)?;
187+
160188
Ok(())
161189
}
162190

src/voprf.rs

+10
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,7 @@ mod tests {
837837
#[test]
838838
fn test_functionality() -> Result<()> {
839839
use p256::NistP256;
840+
use p384::NistP384;
840841

841842
#[cfg(feature = "ristretto255")]
842843
{
@@ -861,6 +862,15 @@ mod tests {
861862
zeroize_voprf_client::<NistP256>();
862863
zeroize_voprf_server::<NistP256>();
863864

865+
verifiable_retrieval::<NistP384>();
866+
verifiable_batch_retrieval::<NistP384>();
867+
verifiable_bad_public_key::<NistP384>();
868+
verifiable_batch_bad_public_key::<NistP384>();
869+
verifiable_server_evaluate::<NistP384>();
870+
871+
zeroize_voprf_client::<NistP384>();
872+
zeroize_voprf_server::<NistP384>();
873+
864874
Ok(())
865875
}
866876
}

0 commit comments

Comments
 (0)