deps(server): version bump

This commit is contained in:
Skipper
2026-06-26 12:10:29 +02:00
committed by CleverWild
parent 27925a67ad
commit 6730534187
14 changed files with 1148 additions and 1066 deletions

View File

@@ -9,8 +9,14 @@ license = "Apache-2.0"
workspace = true
[dependencies]
diesel = { version = "2.3.9", features = ["chrono", "returning_clauses_for_sqlite_3_35", "serde_json", "time", "uuid"] }
diesel-async = { version = "0.9.0", features = [
diesel = { version = "2.3.12", features = [
"chrono",
"returning_clauses_for_sqlite_3_35",
"serde_json",
"time",
"uuid",
] }
diesel-async = { version = "0.9.2", features = [
"bb8",
"migrations",
"sqlite",
@@ -35,17 +41,17 @@ rand_core.workspace = true
rcgen.workspace = true
chrono.workspace = true
kameo.workspace = true
chacha20poly1305 = { version = "0.10.1", features = ["std"] }
argon2 = { version = "0.5.3", features = ["zeroize"] }
chacha20poly1305 = { version = "0.11.0" }
argon2 = { version = "0.6.0", features = ["zeroize"] }
restructed = "0.2.2"
strum = { version = "0.28.0", features = ["derive"] }
pem = "3.0.6"
pem = "4.0.0"
sha2.workspace = true
hmac.workspace = true
alloy.workspace = true
prost-types.workspace = true
arbiter-tokens-registry.path = "../arbiter-tokens-registry"
anyhow = "1.0.102"
anyhow = "1.0.104"
mutants.workspace = true
subtle = "2.6.1"
x25519-dalek.workspace = true

View File

@@ -1,4 +1,3 @@
use argon2::password_hash::Salt as ArgonSalt;
use rand::{
Rng as _, SeedableRng,
rngs::{StdRng, SysRng},
@@ -42,7 +41,7 @@ impl<'a> TryFrom<&'a [u8]> for Nonce {
}
}
pub type Salt = [u8; ArgonSalt::RECOMMENDED_LENGTH];
pub type Salt = [u8; argon2::RECOMMENDED_SALT_LEN];
pub fn generate_salt() -> Salt {
let mut salt = Salt::default();

View File

@@ -3,8 +3,8 @@ use encryption::v1::{Nonce, Salt};
use argon2::{Algorithm, Argon2};
use chacha20poly1305::{
AeadInPlace, Key, KeyInit as _, XChaCha20Poly1305, XNonce,
aead::{AeadMut, Error, Payload},
AeadInOut, Key, KeyInit as _, XChaCha20Poly1305, XNonce,
aead::{Aead, Error, Payload},
};
use rand::{
Rng as _, SeedableRng as _,
@@ -54,9 +54,9 @@ impl KeyCell {
) -> Result<(), Error> {
let key_reader = self.0.read();
let cipher = XChaCha20Poly1305::new(&key_reader);
let nonce = XNonce::from_slice(nonce.0.as_ref());
let nonce = XNonce::from(nonce.0);
let buffer = buffer.as_mut();
cipher.encrypt_in_place(nonce, associated_data, buffer)
cipher.encrypt_in_place(&nonce, associated_data, buffer)
}
pub fn decrypt_in_place(
&mut self,
@@ -66,10 +66,10 @@ impl KeyCell {
) -> Result<(), Error> {
let key_reader = self.0.read();
let cipher = XChaCha20Poly1305::new(&key_reader);
let nonce = XNonce::from_slice(nonce.0.as_ref());
let nonce = XNonce::from(nonce.0);
let mut buffer = buffer.write();
let buffer: &mut Vec<u8> = buffer.as_mut();
cipher.decrypt_in_place(nonce, associated_data, buffer)
cipher.decrypt_in_place(&nonce, associated_data, buffer)
}
pub fn encrypt(
@@ -79,11 +79,11 @@ impl KeyCell {
plaintext: impl AsRef<[u8]>,
) -> Result<Vec<u8>, Error> {
let key_reader = self.0.read();
let mut cipher = XChaCha20Poly1305::new(&key_reader);
let nonce = XNonce::from_slice(nonce.0.as_ref());
let cipher = XChaCha20Poly1305::new(&key_reader);
let nonce = XNonce::from(nonce.0);
let ciphertext = cipher.encrypt(
nonce,
&nonce,
Payload {
msg: plaintext.as_ref(),
aad: associated_data,

View File

@@ -10,7 +10,7 @@ use crate::{
use arbiter_crypto::safecell::{SafeCell, SafeCellHandle as _};
use state::State;
use chacha20poly1305::{AeadInPlace, KeyInit as _, XChaCha20Poly1305, XNonce};
use chacha20poly1305::{AeadInOut, KeyInit as _, XChaCha20Poly1305, XNonce};
use kameo::{Actor, error::SendError, messages, prelude::Message};
use kameo_actors::message_bus::Register;
use tokio::sync::oneshot;
@@ -101,14 +101,17 @@ impl VaultGate {
ciphertext: &[u8],
associated_data: &[u8],
) -> Result<SafeCell<Vec<u8>>, ()> {
let nonce = XNonce::from_slice(nonce);
let Ok(nonce) = XNonce::try_from(nonce) else {
error!("Encrypted key material carries a nonce of the wrong length");
return Err(());
};
let cipher = XChaCha20Poly1305::new(secret.as_bytes().into());
let mut key_buffer = SafeCell::new(ciphertext.to_vec());
let decryption_result = key_buffer.write_inline(|write_handle| {
cipher.decrypt_in_place(nonce, associated_data, write_handle)
cipher.decrypt_in_place(&nonce, associated_data, write_handle)
});
match decryption_result {

View File

@@ -16,7 +16,7 @@ use arbiter_server::{
use diesel::{ExpressionMethods as _, NullableExpressionMethods as _, QueryDsl as _, insert_into};
use diesel_async::RunQueryDsl;
use ml_dsa::{KeyGen, MlDsa87, SigningKey, VerifyingKey, signature::Keypair};
use ml_dsa::{Generate as _, MlDsa87, SigningKey, VerifyingKey, signature::Keypair};
fn metadata(name: &str, description: Option<&str>, version: Option<&str>) -> ClientMetadata {
ClientMetadata {
@@ -73,7 +73,7 @@ async fn insert_registered_client(
fn sign_client_challenge(key: &SigningKey<MlDsa87>, challenge: &AuthChallenge) -> authn::Signature {
let challenge = challenge.format();
key.signing_key()
key.expanded_key()
.sign_deterministic(&challenge, CLIENT_CONTEXT)
.unwrap()
.into()
@@ -81,7 +81,7 @@ fn sign_client_challenge(key: &SigningKey<MlDsa87>, challenge: &AuthChallenge) -
async fn insert_bootstrap_sentinel_operator(db: &db::DatabasePool) {
let mut conn = db.get().await.unwrap();
let sentinel_key = verifying_key(&MlDsa87::key_gen(&mut rand::rng()))
let sentinel_key = verifying_key(&SigningKey::<MlDsa87>::generate())
.encode()
.0
.to_vec();
@@ -120,7 +120,7 @@ pub async fn unregistered_pubkey_rejected() {
connect_client(props, &mut server_transport).await;
});
let new_key = MlDsa87::key_gen(&mut rand::rng());
let new_key = SigningKey::<MlDsa87>::generate();
test_transport
.send(auth::Inbound::AuthChallengeRequest {
@@ -140,7 +140,7 @@ pub async fn challenge_auth() {
let db = db::create_test_pool().await;
let actors = spawn_test_actors(&db).await;
let new_key = MlDsa87::key_gen(&mut rand::rng());
let new_key = SigningKey::<MlDsa87>::generate();
Box::pin(insert_registered_client(
&db,
@@ -206,7 +206,7 @@ pub async fn challenge_auth() {
pub async fn metadata_unchanged_does_not_append_history() {
let db = db::create_test_pool().await;
let actors = spawn_test_actors(&db).await;
let new_key = MlDsa87::key_gen(&mut rand::rng());
let new_key = SigningKey::<MlDsa87>::generate();
let requested = metadata("client", Some("desc"), Some("1.0.0"));
Box::pin(insert_registered_client(
@@ -269,7 +269,7 @@ pub async fn metadata_unchanged_does_not_append_history() {
pub async fn metadata_frozen_after_approval_ignores_reconnect_changes() {
let db = db::create_test_pool().await;
let actors = spawn_test_actors(&db).await;
let new_key = MlDsa87::key_gen(&mut rand::rng());
let new_key = SigningKey::<MlDsa87>::generate();
Box::pin(insert_registered_client(
&db,
@@ -360,7 +360,7 @@ pub async fn challenge_auth_rejects_integrity_tag_mismatch() {
let db = db::create_test_pool().await;
let actors = spawn_test_actors(&db).await;
let new_key = MlDsa87::key_gen(&mut rand::rng());
let new_key = SigningKey::<MlDsa87>::generate();
let requested = metadata("client", Some("desc"), Some("1.0.0"));
{

View File

@@ -14,7 +14,7 @@ use arbiter_server::{
use async_trait::async_trait;
use diesel::{ExpressionMethods as _, QueryDsl, insert_into};
use diesel_async::RunQueryDsl;
use ml_dsa::{KeyGen, MlDsa87, SigningKey, VerifyingKey, signature::Keypair};
use ml_dsa::{Generate as _, MlDsa87, SigningKey, VerifyingKey, signature::Keypair};
use tokio::sync::mpsc;
fn verifying_key(key: &SigningKey<MlDsa87>) -> VerifyingKey<MlDsa87> {
@@ -26,7 +26,7 @@ fn sign_operator_challenge(
challenge: &AuthChallenge,
) -> authn::Signature {
let challenge = challenge.format();
key.signing_key()
key.expanded_key()
.sign_deterministic(&challenge, OPERATOR_CONTEXT)
.unwrap()
.into()
@@ -170,7 +170,7 @@ pub async fn bootstrap_token_auth() {
auth::authenticate(&mut props, &mut server_transport).await
});
let new_key = MlDsa87::key_gen(&mut rand::rng());
let new_key = SigningKey::<MlDsa87>::generate();
test_transport
.send(auth::Inbound::AuthChallengeRequest {
pubkey: verifying_key(&new_key).into(),
@@ -227,7 +227,7 @@ pub async fn bootstrap_invalid_token_auth() {
auth::authenticate(&mut props, &mut server_transport).await
});
let new_key = MlDsa87::key_gen(&mut rand::rng());
let new_key = SigningKey::<MlDsa87>::generate();
test_transport
.send(auth::Inbound::AuthChallengeRequest {
pubkey: verifying_key(&new_key).into(),
@@ -280,7 +280,7 @@ pub async fn challenge_auth() {
.await
.unwrap();
let new_key = MlDsa87::key_gen(&mut rand::rng());
let new_key = SigningKey::<MlDsa87>::generate();
let pubkey_bytes = authn::PublicKey::from(verifying_key(&new_key)).to_bytes();
{
@@ -366,7 +366,7 @@ pub async fn challenge_auth_rejects_integrity_tag_mismatch_when_unsealed() {
.await
.unwrap();
let new_key = MlDsa87::key_gen(&mut rand::rng());
let new_key = SigningKey::<MlDsa87>::generate();
let pubkey_bytes = authn::PublicKey::from(verifying_key(&new_key)).to_bytes();
{
@@ -439,7 +439,7 @@ pub async fn challenge_auth_rejects_invalid_signature() {
.await
.unwrap();
let new_key = MlDsa87::key_gen(&mut rand::rng());
let new_key = SigningKey::<MlDsa87>::generate();
let pubkey_bytes = authn::PublicKey::from(verifying_key(&new_key)).to_bytes();
{

View File

@@ -16,7 +16,7 @@ use arbiter_server::{
},
};
use chacha20poly1305::{AeadInPlace, XChaCha20Poly1305, XNonce, aead::KeyInit};
use chacha20poly1305::{AeadInOut, XChaCha20Poly1305, XNonce, aead::KeyInit};
use kameo::actor::Spawn as _;
use tokio::sync::oneshot;
use x25519_dalek::{EphemeralSecret, PublicKey};