[Add] Ease of use functions
Some checks failed
CI / rustfmt (push) Failing after 17s
CI / wasm build (push) Failing after 1m13s
CI / clippy (push) Failing after 1m17s
CI / example (push) Failing after 1m30s
CI / test (push) Successful in 1m50s
CI / duplicate code (push) Failing after 31s
CI / web client (push) Failing after 31s
CI / cargo-machete (push) Successful in 1m15s
CI / cargo-deny (push) Failing after 2m26s

This commit is contained in:
Alex Emmet 2026-06-28 03:26:07 +02:00
commit 6ef1293603
15 changed files with 1203 additions and 124 deletions

View file

@ -159,11 +159,11 @@ fn verify_host_challenge(
id: u64,
server_challenge: u128,
) -> Result<(), JsValue> {
let sig = match challenge.get_data(DataType::Signature.to_id(tm)) {
let sig = match challenge.get_data(DataType::Signature) {
DataValue::Bytes(b) => b.clone(),
_ => return Err(js_error("missing host challenge signature")),
};
let pq_sig = match challenge.get_data(DataType::PqSignature.to_id(tm)) {
let pq_sig = match challenge.get_data(DataType::PqSignature) {
DataValue::Bytes(b) => b.clone(),
_ => vec![],
};
@ -191,14 +191,14 @@ fn verify_host_final(
client_nonce: u128,
server_challenge: u128,
) -> Result<(), JsValue> {
if *resp.get_data(DataType::ClientNonce.to_id(tm)) != DataValue::UnsignedNumber(client_nonce) {
if *resp.get_data(DataType::ClientNonce) != DataValue::UnsignedNumber(client_nonce) {
return Err(js_error("nonce mismatch"));
}
let host_sig = match resp.get_data(DataType::Signature.to_id(tm)) {
let host_sig = match resp.get_data(DataType::Signature) {
DataValue::Bytes(b) => b.clone(),
_ => return Err(js_error("missing host signature")),
};
let host_pq_sig = match resp.get_data(DataType::PqSignature.to_id(tm)) {
let host_pq_sig = match resp.get_data(DataType::PqSignature) {
DataValue::Bytes(b) => b.clone(),
_ => vec![],
};
@ -393,7 +393,7 @@ impl WasmClient {
));
}
if resp_comm.get_data(DataType::Connected.to_id(&tm)) != &DataValue::BoolTrue {
if resp_comm.get_data(DataType::Connected) != &DataValue::BoolTrue {
self.set_state(ConnectionState::Disconnected);
return Err(js_error("host rejected authentication"));
}
@ -412,7 +412,7 @@ impl WasmClient {
}
// Extract assigned ID
let assigned_id = match resp_comm.get_data(DataType::Id.to_id(&tm)) {
let assigned_id = match resp_comm.get_data(DataType::Id) {
DataValue::UnsignedNumber(n) => *n as u64,
_ => {
self.set_state(ConnectionState::Disconnected);
@ -495,12 +495,12 @@ impl WasmClient {
));
}
if resp_comm.get_data(DataType::Connected.to_id(&tm)) != &DataValue::BoolTrue {
if resp_comm.get_data(DataType::Connected) != &DataValue::BoolTrue {
self.set_state(ConnectionState::Disconnected);
return Err(js_error("host rejected registration"));
}
let assigned_id = match resp_comm.get_data(DataType::Id.to_id(&tm)) {
let assigned_id = match resp_comm.get_data(DataType::Id) {
DataValue::UnsignedNumber(n) => *n as u64,
_ => {
self.set_state(ConnectionState::Disconnected);
@ -731,7 +731,7 @@ impl WasmClient {
));
}
let server_challenge = match challenge.get_data(DataType::ServerNonce.to_id(tm)) {
let server_challenge = match challenge.get_data(DataType::ServerNonce) {
DataValue::UnsignedNumber(n) => *n,
_ => {
self.set_state(ConnectionState::Disconnected);

View file

@ -254,26 +254,26 @@ pub fn parse_auth_response(response: &[u8]) -> Result<JsValue, JsValue> {
.map_err(|e| js_error(&format!("parse failed: {}", e)))?;
let connected = matches!(
comm.get_data(DataType::Connected.to_id(&TypeMap::latest())),
comm.get_data(DataType::Connected)),
DataValue::BoolTrue
);
let client_nonce = match comm.get_data(DataType::ClientNonce.to_id(&TypeMap::latest())) {
let client_nonce = match comm.get_data(DataType::ClientNonce)) {
DataValue::UnsignedNumber(n) => Some(*n),
_ => None,
};
let assigned_id = match comm.get_data(DataType::Id.to_id(&TypeMap::latest())) {
let assigned_id = match comm.get_data(DataType::Id)) {
DataValue::UnsignedNumber(n) => Some(*n as u64),
_ => None,
};
let timestamp = match comm.get_data(DataType::Timestamp.to_id(&TypeMap::latest())) {
let timestamp = match comm.get_data(DataType::Timestamp)) {
DataValue::UnsignedNumber(n) => Some(*n),
_ => None,
};
let signature = match comm.get_data(DataType::Signature.to_id(&TypeMap::latest())) {
let signature = match comm.get_data(DataType::Signature)) {
DataValue::Bytes(b) => Some(b.clone()),
_ => None,
};
@ -376,11 +376,11 @@ mod tests {
assert_eq!(cv.get_type(), CommunicationType::Ping.to_id(&tm));
assert_eq!(cv.get_sender(), 42);
assert_eq!(
cv.get_data(DataType::Description.to_id(&tm)),
cv.get_data(DataType::Description),
&DataValue::Str("test-ping".into())
);
assert_eq!(
cv.get_data(DataType::Timestamp.to_id(&tm)),
cv.get_data(DataType::Timestamp),
&DataValue::UnsignedNumber(1234567890)
);
}
@ -395,15 +395,15 @@ mod tests {
assert_eq!(cv.get_type(), CommunicationType::Ping.to_id(&tm));
assert_eq!(cv.get_sender(), 99);
assert_eq!(
cv.get_data(DataType::Description.to_id(&tm)),
cv.get_data(DataType::Description),
&DataValue::Str("with-data".into())
);
assert_eq!(
cv.get_data(DataType::Timestamp.to_id(&tm)),
cv.get_data(DataType::Timestamp),
&DataValue::UnsignedNumber(555)
);
assert_eq!(
cv.get_data(DataType::Id.to_id(&tm)),
cv.get_data(DataType::Id),
&DataValue::Bytes(payload.to_vec())
);
}