mirror of
https://github.com/kristoferssolo/tls-pq-bench.git
synced 2026-03-22 00:36:21 +00:00
refactor(server): use base64 crate instead of custom implementation
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -876,6 +876,7 @@ dependencies = [
|
|||||||
name = "server"
|
name = "server"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"base64",
|
||||||
"clap",
|
"clap",
|
||||||
"common",
|
"common",
|
||||||
"miette",
|
"miette",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ license = "MIT OR Apache-2.0"
|
|||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
aws-lc-rs = "1"
|
aws-lc-rs = "1"
|
||||||
|
base64 = "0.22"
|
||||||
cargo-husky = { version = "1", default-features = false, features = [
|
cargo-husky = { version = "1", default-features = false, features = [
|
||||||
"user-hooks",
|
"user-hooks",
|
||||||
] }
|
] }
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ authors.workspace = true
|
|||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
base64.workspace = true
|
||||||
clap.workspace = true
|
clap.workspace = true
|
||||||
common.workspace = true
|
common.workspace = true
|
||||||
miette.workspace = true
|
miette.workspace = true
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
//! - Reads 8-byte little-endian u64 (requested payload size N)
|
//! - Reads 8-byte little-endian u64 (requested payload size N)
|
||||||
//! - Responds with exactly N bytes (deterministic pattern)
|
//! - Responds with exactly N bytes (deterministic pattern)
|
||||||
|
|
||||||
|
use base64::prelude::*;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use common::{
|
use common::{
|
||||||
KeyExchangeMode,
|
KeyExchangeMode,
|
||||||
@@ -21,7 +22,7 @@ use rustls::{
|
|||||||
server::Acceptor,
|
server::Acceptor,
|
||||||
version::TLS13,
|
version::TLS13,
|
||||||
};
|
};
|
||||||
use std::{env, fmt::Write, io::ErrorKind, net::SocketAddr, sync::Arc};
|
use std::{env, io::ErrorKind, net::SocketAddr, sync::Arc};
|
||||||
use tokio::{
|
use tokio::{
|
||||||
io::AsyncWriteExt,
|
io::AsyncWriteExt,
|
||||||
net::{TcpListener, TcpStream},
|
net::{TcpListener, TcpStream},
|
||||||
@@ -171,44 +172,13 @@ async fn main() -> miette::Result<()> {
|
|||||||
let tls_config = build_tls_config(args.mode, &server_cert)?;
|
let tls_config = build_tls_config(args.mode, &server_cert)?;
|
||||||
|
|
||||||
info!(
|
info!(
|
||||||
ca_cert_base64 = base64_encode(&ca.cert_der)
|
ca_cert_base64 = BASE64_STANDARD
|
||||||
.lines()
|
.encode(ca.cert_der)
|
||||||
.take(3)
|
.chars()
|
||||||
|
.take(256)
|
||||||
.collect::<String>(),
|
.collect::<String>(),
|
||||||
"CA cert (truncated)"
|
"CA cert (truncated)"
|
||||||
);
|
);
|
||||||
|
|
||||||
run_server(args, tls_config).await
|
run_server(args, tls_config).await
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Simple base64 encoding for certificate display.
|
|
||||||
fn base64_encode(data: &[u8]) -> String {
|
|
||||||
const ALPHABET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
||||||
|
|
||||||
let mut result = String::new();
|
|
||||||
for chunk in data.chunks(3) {
|
|
||||||
let mut n = 0;
|
|
||||||
for (i, &byte) in chunk.iter().enumerate() {
|
|
||||||
n |= u32::from(byte) << (16 - 8 * i);
|
|
||||||
}
|
|
||||||
|
|
||||||
for i in 0..=chunk.len() {
|
|
||||||
let idx = ((n >> (18 - 6 * i)) & 0x3F) as usize;
|
|
||||||
result.push(ALPHABET[idx] as char);
|
|
||||||
}
|
|
||||||
|
|
||||||
for _ in chunk.len()..3 {
|
|
||||||
result.push('=');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut wrapped = String::new();
|
|
||||||
for (i, c) in result.chars().enumerate() {
|
|
||||||
if i > 0 && i % 76 == 0 {
|
|
||||||
let _ = writeln!(wrapped);
|
|
||||||
}
|
|
||||||
wrapped.push(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapped
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user