#![allow(dead_code)]
use alloc::boxed::Box;
use alloc::vec::Vec;
use crate::quic::cid::{CidPair, ConnectionId};
use crate::quic::crypto::{AeadAlg, derive_dir_keys, derive_initial_secrets};
use crate::quic::endpoint::Endpoint;
use crate::quic::tls_glue::{HookHandle, build_hooks};
use crate::rng::OsRng;
use crate::tls::Error;
use crate::tls::conn::{ServerConfig, ServerConnection};
use crate::tls::quic_hooks::Level;
pub(crate) const DEFAULT_SCID_LEN: usize = 8;
pub(crate) fn build_tls_engine(
tls_cfg: ServerConfig,
transport_params: Vec<u8>,
) -> Result<(ServerConnection<OsRng>, HookHandle), Error> {
let (hooks, handle) = build_hooks(transport_params);
let engine = ServerConnection::new_for_quic(tls_cfg, OsRng, hooks as Box<_>);
Ok((engine, handle))
}
pub(crate) fn install_initial_keys(endpoint: &mut Endpoint, client_dcid: &[u8]) {
let (client_secret, server_secret) = derive_initial_secrets(client_dcid);
endpoint.crypto.levels[Level::Initial as usize].tx =
Some(derive_dir_keys(AeadAlg::Aes128Gcm, &server_secret));
endpoint.crypto.levels[Level::Initial as usize].rx =
Some(derive_dir_keys(AeadAlg::Aes128Gcm, &client_secret));
}
pub(crate) fn build_pending_endpoint() -> Endpoint {
Endpoint::new(CidPair::new(ConnectionId::empty(), ConnectionId::empty()))
}
pub(crate) fn set_cids_from_first_initial(
endpoint: &mut Endpoint,
peer_scid: ConnectionId,
our_local: ConnectionId,
) {
endpoint.cids = CidPair::new(peer_scid, our_local);
}
pub(crate) fn random_default_scid() -> ConnectionId {
let mut rng = OsRng;
ConnectionId::random(&mut rng, DEFAULT_SCID_LEN)
}