Skip to content

Commit 3a9f7ba

Browse files
committed
Bump curve25519-dalek to v4.0.0-rc.3
1 parent c3498ea commit 3a9f7ba

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

Cargo.toml

+4-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ std = ["dep:getrandom"]
2424
argon2 = { version = "0.5", default-features = false, features = [
2525
"alloc",
2626
], optional = true }
27-
curve25519-dalek = { version = "=4.0.0-rc.2", default-features = false, features = [
27+
curve25519-dalek = { version = "=4.0.0-rc.3", default-features = false, features = [
2828
"zeroize",
2929
], optional = true }
3030
derive-where = { version = "1", features = ["zeroize-on-drop"] }
@@ -81,3 +81,6 @@ targets = []
8181
[[example]]
8282
name = "simple_login"
8383
required-features = ["argon2"]
84+
85+
[patch.crates-io]
86+
voprf = { git = "https://github.com/khonsulabs/voprf", branch = "curve25519-dalek-4.0.0-rc.3" }

src/key_exchange/group/curve25519.rs

+12-13
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@
88

99
//! Key Exchange group implementation for Curve25519
1010
11-
use curve25519_dalek::constants::X25519_BASEPOINT;
1211
use curve25519_dalek::montgomery::MontgomeryPoint;
13-
use curve25519_dalek::scalar::Scalar;
12+
use curve25519_dalek::scalar::{self, Scalar};
1413
use curve25519_dalek::traits::Identity;
1514
use digest::core_api::BlockSizeUser;
1615
use digest::{FixedOutput, HashMarker, OutputSizeUser};
@@ -29,7 +28,7 @@ pub struct Curve25519;
2928
impl KeGroup for Curve25519 {
3029
type Pk = MontgomeryPoint;
3130
type PkLen = U32;
32-
type Sk = Scalar;
31+
type Sk = [u8; 32];
3332
type SkLen = U32;
3433

3534
fn serialize_pk(pk: Self::Pk) -> GenericArray<u8, Self::PkLen> {
@@ -50,9 +49,9 @@ impl KeGroup for Curve25519 {
5049
// Sample 32 random bytes and then clamp, as described in https://cr.yp.to/ecdh.html
5150
let mut scalar_bytes = [0u8; 32];
5251
rng.fill_bytes(&mut scalar_bytes);
53-
let scalar = Scalar::from_bits_clamped(scalar_bytes);
52+
let scalar = scalar::clamp_integer(scalar_bytes);
5453

55-
if scalar != Scalar::ZERO {
54+
if scalar != Scalar::ZERO.to_bytes() {
5655
break scalar;
5756
}
5857
}
@@ -73,34 +72,34 @@ impl KeGroup for Curve25519 {
7372
<CS::Hash as OutputSizeUser>::OutputSize:
7473
IsLess<U256> + IsLessOrEqual<<CS::Hash as BlockSizeUser>::BlockSize>,
7574
{
76-
Ok(Scalar::from_bits_clamped(seed.into()))
75+
Ok(scalar::clamp_integer(seed.into()))
7776
}
7877

7978
fn is_zero_scalar(scalar: Self::Sk) -> subtle::Choice {
80-
scalar.ct_eq(&Scalar::ZERO)
79+
scalar.ct_eq(&Scalar::ZERO.to_bytes())
8180
}
8281

8382
fn public_key(sk: Self::Sk) -> Self::Pk {
84-
X25519_BASEPOINT * sk
83+
MontgomeryPoint::mul_base_clamped(sk)
8584
}
8685

8786
fn diffie_hellman(pk: Self::Pk, sk: Self::Sk) -> GenericArray<u8, Self::PkLen> {
88-
Self::serialize_pk(sk * pk)
87+
Self::serialize_pk(pk.mul_clamped(sk))
8988
}
9089

9190
fn serialize_sk(sk: Self::Sk) -> GenericArray<u8, Self::SkLen> {
92-
sk.to_bytes().into()
91+
sk.into()
9392
}
9493

9594
fn deserialize_sk(bytes: &[u8]) -> Result<Self::Sk, InternalError> {
9695
bytes
9796
.try_into()
9897
.ok()
9998
.and_then(|bytes| {
100-
let scalar = Scalar::from_bits_clamped(bytes);
101-
(scalar.as_bytes() == &bytes).then_some(scalar)
99+
let scalar = scalar::clamp_integer(bytes);
100+
(scalar == bytes).then_some(scalar)
102101
})
103-
.filter(|scalar| scalar != &Scalar::ZERO)
102+
.filter(|scalar| scalar != &Scalar::ZERO.to_bytes())
104103
.ok_or(InternalError::PointError)
105104
}
106105
}

0 commit comments

Comments
 (0)