1
0

fix the definition of the authentication header

This commit is contained in:
EAimTY 2023-02-05 11:50:49 +09:00
parent a5d92381bb
commit 640ae7d2fd
4 changed files with 19 additions and 8 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "tuic" name = "tuic"
version = "5.0.0-pre-alpha.0" version = "5.0.0-pre-alpha.1"
authors = ["EAimTY <ea.imty@gmail.com>"] authors = ["EAimTY <ea.imty@gmail.com>"]
description = "Delicately-TUICed 0-RTT proxy protocol" description = "Delicately-TUICed 0-RTT proxy protocol"
categories = ["network-programming"] categories = ["network-programming"]

View File

@ -55,7 +55,7 @@ Command `Connect` and `Packet` carry payload (stream / packet fragment)
where: where:
- `UUID` - client UUID - `UUID` - client UUID
- `TOKEN` - client token. The client UUID is hashed into a 256-bit long token using [TLS Keying Material Exporter](https://www.rfc-editor.org/rfc/rfc5705) on current TLS session. While exporting, both the `label` and `context` should be the client UUID - `TOKEN` - client token. The client raw password is hashed into a 256-bit long token using [TLS Keying Material Exporter](https://www.rfc-editor.org/rfc/rfc5705) on current TLS session. While exporting, the `label` should be the client UUID and the `context` should be the raw password.
#### `Connect` #### `Connect`
@ -194,4 +194,6 @@ When there is any ongoing relaying task, the client should send a `Heartbeat` co
## Error Handling ## Error Handling
Note that there is no response for any command. If the server receives a command that is not valid, or encounters any error during the processing (e.g. the target address is unreachable, authentication failure), there is no *standard* way to deal with it. The behavior is implementation-defined. Note that there is no response for any command. If the server receives a command that is not valid, or encounters any error during the processing (e.g. the target address is unreachable, authentication failure), there is no *standard* way to deal with it. The behavior is implementation-defined. The server may close the QUIC connection, or just ignore the command.
For example, if the server receives a `Connect` command with an unreachable target address, it may close `bidirectional_stream` to indicate the error.

View File

@ -13,12 +13,16 @@ struct Tx {
} }
impl Authenticate<side::Tx> { impl Authenticate<side::Tx> {
pub(super) fn new(uuid: Uuid, exporter: impl KeyingMaterialExporter) -> Self { pub(super) fn new(
uuid: Uuid,
password: impl AsRef<[u8]>,
exporter: impl KeyingMaterialExporter,
) -> Self {
Self { Self {
inner: Side::Tx(Tx { inner: Side::Tx(Tx {
header: Header::Authenticate(AuthenticateHeader::new( header: Header::Authenticate(AuthenticateHeader::new(
uuid, uuid,
exporter.export_keying_material(uuid.as_ref(), uuid.as_ref()), exporter.export_keying_material(uuid.as_ref(), password.as_ref()),
)), )),
}), }),
_marker: side::Tx, _marker: side::Tx,
@ -58,9 +62,13 @@ impl Authenticate<side::Rx> {
} }
/// Returns whether the token is valid /// Returns whether the token is valid
pub fn is_valid(&self, exporter: impl KeyingMaterialExporter) -> bool { pub fn is_valid(
&self,
password: impl AsRef<[u8]>,
exporter: impl KeyingMaterialExporter,
) -> bool {
let Side::Rx(rx) = &self.inner else { unreachable!() }; let Side::Rx(rx) = &self.inner else { unreachable!() };
rx.token == exporter.export_keying_material(rx.uuid.as_ref(), rx.uuid.as_ref()) rx.token == exporter.export_keying_material(rx.uuid.as_ref(), password.as_ref())
} }
} }

View File

@ -59,9 +59,10 @@ where
pub fn send_authenticate( pub fn send_authenticate(
&self, &self,
uuid: Uuid, uuid: Uuid,
password: impl AsRef<[u8]>,
exporter: impl KeyingMaterialExporter, exporter: impl KeyingMaterialExporter,
) -> Authenticate<side::Tx> { ) -> Authenticate<side::Tx> {
Authenticate::<side::Tx>::new(uuid, exporter) Authenticate::<side::Tx>::new(uuid, password, exporter)
} }
/// Receives an `Authenticate` /// Receives an `Authenticate`