Skip to content

Commit 0f04b81

Browse files
committed
fix: output endianness of ke circuit
1 parent 91dccd2 commit 0f04b81

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

crates/components/key-exchange/src/circuit.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,12 @@ pub(crate) fn build_pms_circuit() -> Arc<Circuit> {
4444
&to_little_endian(&share_b0),
4545
&to_little_endian(&modulus),
4646
);
47-
for node in pms_0.iter() {
48-
builder.add_output(*node);
47+
48+
// return output as big endian
49+
for node in pms_0.chunks_exact(8).rev() {
50+
for &bit in node.iter() {
51+
builder.add_output(bit);
52+
}
4953
}
5054

5155
let pms_1 = add_mod(
@@ -54,8 +58,12 @@ pub(crate) fn build_pms_circuit() -> Arc<Circuit> {
5458
&to_little_endian(&share_b1),
5559
&to_little_endian(&modulus),
5660
);
57-
for node in pms_1.iter() {
58-
builder.add_output(*node);
61+
62+
// return output as big endian
63+
for node in pms_1.chunks_exact(8).rev() {
64+
for &bit in node.iter() {
65+
builder.add_output(bit);
66+
}
5967
}
6068

6169
for (a, b) in pms_0.into_iter().zip(pms_1) {

crates/components/key-exchange/src/exchange.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,10 @@ mod tests {
488488

489489
let leader_private_key = SecretKey::random(&mut rng);
490490
let follower_private_key = SecretKey::random(&mut rng);
491-
let server_public_key = PublicKey::from_secret_scalar(&NonZeroScalar::random(&mut rng));
491+
492+
let server_secret_key = &NonZeroScalar::random(&mut rng);
493+
let server_public_key = PublicKey::from_secret_scalar(server_secret_key);
494+
492495
let expected_client_public_key = PublicKey::from_affine(
493496
(leader_private_key.public_key().to_projective()
494497
+ follower_private_key.public_key().to_projective())
@@ -541,7 +544,12 @@ mod tests {
541544
}
542545
);
543546

547+
let expected_ecdh_x =
548+
p256::ecdh::diffie_hellman(server_secret_key, client_public_key.as_affine());
549+
let expected_ecdh_x = expected_ecdh_x.raw_secret_bytes().to_vec();
550+
544551
assert_eq!(leader_pms, follower_pms);
552+
assert_eq!(leader_pms.to_vec(), expected_ecdh_x);
545553
}
546554

547555
#[tokio::test]

0 commit comments

Comments
 (0)