Tests pass
This commit is contained in:
@@ -70,13 +70,15 @@ mod psk_gen {
|
||||
|
||||
let responder: PSQResponder<X25519> = PSQResponder::init(&kem_private_key, &kem_public_key);
|
||||
|
||||
responder.compute_responder_message(
|
||||
let res = responder.compute_responder_message(
|
||||
&VerificationKey::from_bytes(initiator_verification_key.to_bytes()),
|
||||
initiator_message,
|
||||
context,
|
||||
psq_ttl,
|
||||
psk_handle,
|
||||
)
|
||||
)?;
|
||||
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
pub(crate) fn psq_initiate_x25519(
|
||||
@@ -87,7 +89,9 @@ mod psk_gen {
|
||||
) -> Result<Vec<u8>, NoiseError> {
|
||||
let pub_key =
|
||||
PublicKey::decode(libcrux_kem::Algorithm::X25519, responder_pub_key.as_ref())?;
|
||||
Ok(initiator.compute_initiator_message(&mut rand::rng(), &pub_key, context, psq_ttl)?)
|
||||
let message =
|
||||
initiator.compute_initiator_message(&mut rand::rng(), &pub_key, context, psq_ttl)?;
|
||||
Ok(message)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ use bytes::{Bytes, BytesMut};
|
||||
use futures::{Sink, SinkExt, Stream, StreamExt};
|
||||
use nym_crypto::asymmetric::{ed25519, x25519};
|
||||
use nym_noise_keys::NoiseVersion;
|
||||
use nympsq::psq::{PSQInitiator, CONTEXT_LEN, PSK_HANDLE_LEN};
|
||||
use nympsq::psq::{PSQInitiator, PSK_HANDLE_LEN};
|
||||
use snow::{Builder, HandshakeState, TransportState};
|
||||
use std::{cmp::min, io, pin::Pin, task::ready, task::Poll, time::Duration};
|
||||
use tokio::io::{AsyncRead, AsyncWrite, ReadBuf};
|
||||
@@ -53,7 +53,6 @@ impl<C> NoiseStreamBuilder<C> {
|
||||
where
|
||||
C: AsyncRead + AsyncWrite + Unpin,
|
||||
{
|
||||
println!("initiator handshake start");
|
||||
let mut handshake = Builder::new(pattern.as_noise_params())
|
||||
.local_private_key(local_private_key.as_ref())
|
||||
.remote_public_key(remote_pub_key.as_ref())
|
||||
@@ -76,20 +75,11 @@ impl<C> NoiseStreamBuilder<C> {
|
||||
NOISE_PSQ_DEFAULT_CONTEXT,
|
||||
Duration::from_secs(NOISE_PSQ_DEFAULT_DURATION_SECS),
|
||||
)?;
|
||||
|
||||
handshake.set_psk(
|
||||
pattern.psk_position() as usize,
|
||||
&psq_initiator.get_psk().unwrap(),
|
||||
)?;
|
||||
payload
|
||||
// self.perform_handshake_debug(
|
||||
// handshake,
|
||||
// payload,
|
||||
// version,
|
||||
// pattern,
|
||||
// Some(&mut psq_initiator),
|
||||
// )
|
||||
// .await
|
||||
}
|
||||
_ => panic!("no keypair in v2"),
|
||||
},
|
||||
@@ -161,12 +151,12 @@ impl<C> NoiseStreamBuilder<C> {
|
||||
|
||||
let mut handshake = Builder::new(pattern.as_noise_params())
|
||||
.local_private_key(local_private_key.as_ref())
|
||||
.psk(pattern.psk_position(), &[])
|
||||
.build_responder()?;
|
||||
|
||||
// update handshake state with initial frame
|
||||
let mut buf = BytesMut::zeroed(HANDSHAKE_MAX_LEN);
|
||||
handshake.read_message(&initial_frame.data, &mut buf)?;
|
||||
let len = handshake.read_message(&initial_frame.data, &mut buf)?;
|
||||
buf.truncate(len);
|
||||
|
||||
let payload: Vec<u8> = match initial_frame.version() {
|
||||
NoiseVersion::V1 => {
|
||||
@@ -184,11 +174,12 @@ impl<C> NoiseStreamBuilder<C> {
|
||||
&local_public_key,
|
||||
&verif_key,
|
||||
&mut buf,
|
||||
&[0; CONTEXT_LEN],
|
||||
NOISE_PSQ_DEFAULT_CONTEXT,
|
||||
Duration::from_secs(NOISE_PSQ_DEFAULT_DURATION_SECS),
|
||||
&[1; PSK_HANDLE_LEN],
|
||||
)?;
|
||||
handshake.set_psk(pattern.psk_position() as usize, psk.as_slice())?;
|
||||
|
||||
message
|
||||
}
|
||||
// error could be replaced by something else
|
||||
@@ -312,55 +303,6 @@ impl<C> NoiseStreamBuilder<C> {
|
||||
dec_buffer: Default::default(),
|
||||
})
|
||||
}
|
||||
|
||||
// async fn perform_handshake_debug(
|
||||
// mut self,
|
||||
// mut handshake_state: HandshakeState,
|
||||
// payload: impl AsRef<[u8]>,
|
||||
// version: NoiseVersion,
|
||||
// pattern: NoisePattern,
|
||||
// psq_initiator: Option<&mut PSQInitiator<libcrux_psq::impls::X25519>>,
|
||||
// ) -> Result<NoiseStream<C>, NoiseError>
|
||||
// where
|
||||
// C: AsyncRead + AsyncWrite + Unpin,
|
||||
// {
|
||||
// let mut psq_complete = false;
|
||||
|
||||
// while !handshake_state.is_handshake_finished() {
|
||||
// if handshake_state.is_my_turn() {
|
||||
// self.send_handshake_msg(&mut handshake_state, &payload, version, pattern)
|
||||
// .await?;
|
||||
// } else {
|
||||
// // let payload =
|
||||
// self.recv_handshake_msg(&mut handshake_state, version, pattern)
|
||||
// .await?;
|
||||
|
||||
// if !psq_complete
|
||||
// && handshake_state.is_initiator()
|
||||
// && version == NoiseVersion::V2
|
||||
// && psq_initiator.is_some()
|
||||
// {
|
||||
// // handshake_state.set_psk(
|
||||
// // pattern.psk_position() as usize,
|
||||
// // &psq_initiator.as_ref().unwrap().finalize(&payload)?,
|
||||
// // );
|
||||
// let expected_psk = psq_initiator.as_ref().unwrap().get_psk().unwrap();
|
||||
// let psk = &psq_initiator.as_ref().unwrap().finalize(&payload)?;
|
||||
// assert_eq!(psk, &expected_psk);
|
||||
// psq_complete = true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// let transport = handshake_state.into_transport_mode()?;
|
||||
// Ok(NoiseStream {
|
||||
// inner_stream: self.inner_stream,
|
||||
// negotiated_pattern: pattern,
|
||||
// negotiated_version: version,
|
||||
// transport,
|
||||
// dec_buffer: Default::default(),
|
||||
// })
|
||||
// }
|
||||
}
|
||||
|
||||
/// Wrapper around a TcpStream
|
||||
@@ -657,8 +599,6 @@ mod tests {
|
||||
|
||||
let pattern = NoisePattern::default();
|
||||
|
||||
println!("here");
|
||||
|
||||
let stream_initiator = NoiseStreamBuilder::new(initiator_stream)
|
||||
.perform_initiator_handshake_inner(
|
||||
pattern,
|
||||
@@ -679,11 +619,11 @@ mod tests {
|
||||
|
||||
let initiator_fut =
|
||||
tokio::spawn(
|
||||
async move { timeout(Duration::from_secs(10000), stream_initiator).await },
|
||||
async move { timeout(Duration::from_millis(200), stream_initiator).await },
|
||||
);
|
||||
let responder_fut =
|
||||
tokio::spawn(
|
||||
async move { timeout(Duration::from_secs(10000), stream_responder).await },
|
||||
async move { timeout(Duration::from_millis(200), stream_responder).await },
|
||||
);
|
||||
|
||||
let (initiator, responder) = join!(initiator_fut, responder_fut);
|
||||
@@ -693,7 +633,7 @@ mod tests {
|
||||
|
||||
let msg = b"hello there";
|
||||
// if noise was successful we should be able to write a proper message across
|
||||
timeout(Duration::from_secs(200), initiator.write_all(msg)).await??;
|
||||
timeout(Duration::from_millis(200), initiator.write_all(msg)).await??;
|
||||
|
||||
initiator.inner_stream.flush().await?;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use std::{marker::PhantomData, time::Duration};
|
||||
use std::{io::Cursor, marker::PhantomData, time::Duration};
|
||||
|
||||
use libcrux_ed25519::VerificationKey;
|
||||
use libcrux_psq::{
|
||||
@@ -66,9 +66,7 @@ impl<'a, T: PSQ> PSQInitiator<T> {
|
||||
)?;
|
||||
self.state = Some(state);
|
||||
|
||||
let message_bytes = message.tls_serialize_detached()?;
|
||||
|
||||
Ok(message_bytes)
|
||||
Ok(message.tls_serialize_detached()?)
|
||||
}
|
||||
|
||||
// The initator generates the PSK themselves while computing the first message.
|
||||
@@ -84,7 +82,7 @@ impl<'a, T: PSQ> PSQInitiator<T> {
|
||||
|
||||
pub fn get_psk(&self) -> Option<[u8; 32]> {
|
||||
match &self.state {
|
||||
Some(initiator_state) => Some(initiator_state.derive_unregistered_psk().unwrap()),
|
||||
Some(initiator_state) => Some(initiator_state.unregistered_psk()),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
@@ -137,9 +135,10 @@ where
|
||||
psk_ttl: Duration,
|
||||
psk_handle: &[u8; PSK_HANDLE_LEN],
|
||||
) -> Result<([u8; PSK_LENGTH], Vec<u8>), PSQError> {
|
||||
let deserialized_initiator_message =
|
||||
InitiatorMsg::tls_deserialize_exact(initiator_message)?;
|
||||
let mut cursor = Cursor::new(initiator_message);
|
||||
let deserialized_initiator_message = InitiatorMsg::tls_deserialize(&mut cursor)?;
|
||||
|
||||
// the problem is here the deserialized message is the same on the initiator's side
|
||||
let (registered_psk, responder_msg) = Responder::send::<Ed25519, T>(
|
||||
psk_handle,
|
||||
psk_ttl,
|
||||
|
||||
Reference in New Issue
Block a user