mirror of
https://github.com/EFForg/rayhunter.git
synced 2026-05-05 19:39:08 -07:00
There is some recent progress on quantum computers being discussed on HackerNews and lobste.rs, and as a result of that timelines for when PQ crypto would become essentially mandatory are being adjusted. Example: https://words.filippo.io/crqc-timeline/ We pretty much have only one place in this entire codebase where any sort of crypto happens, which is HTTPS for notifications support. It seems that ring has essentially no plans to support PQ crypto for our purposes. rustls/rustls#2801 briansmith/ring#1685 There's not really a reason to stick with ring, other than that it is a prod-ready backend. But so is aws-lc-rs, and it seems to be the way forward if you want PQ crypto today. Maybe that will change again in a few years. **The local dev workflow stays the same**, `cargo build-daemon-firmware-devel` still uses rustcrypto which doesn't require CC and doesn't have PQ crypto at all. We have no contribution docs for how to build anything else anyway. **Implementation:** This opens a can of worms in building rayhunter-daemon in CI: We're currently building ring using GCC cross-compilation toolchain from Debian, which will build ring against **glibc**. Then we take that library and try to link it against MUSL libc. The reason this works is because ring's libc usage is very minimal, and the required symbols end up being just the same as what MUSL libc exposes. The same can't be said for aws-lc: ``` error: linking with `rust-lld` failed: exit status: 1 = note: rust-lld: error: undefined symbol: __nanosleep64 >>> referenced by urandom.c >>> urandom.c.o:(do_backoff) in archive ``` So we fix that and link everything we build against MUSL libc (something we should've done from the start anyway). The problem is that Debian doesn't ship a MUSL cross-compilation toolchain, and the toolchain available on https://musl.cc should not be downloaded directly in CI. Which leaves us with a docker container from messense... That docker container seems to be extremely popular for cross compilation across GitHub projects, at least. I couldn't get other options to run reliably (cross), or they were a too extreme change for my taste (using zig cc)
73 lines
2.0 KiB
Rust
73 lines
2.0 KiB
Rust
pub mod analysis;
|
|
pub mod battery;
|
|
pub mod config;
|
|
pub mod crypto_provider;
|
|
pub mod diag;
|
|
pub mod display;
|
|
pub mod error;
|
|
pub mod key_input;
|
|
pub mod notifications;
|
|
pub mod pcap;
|
|
pub mod qmdl_store;
|
|
pub mod server;
|
|
pub mod stats;
|
|
|
|
#[cfg(feature = "apidocs")]
|
|
use utoipa::OpenApi;
|
|
|
|
// Add anotated paths to api docs
|
|
#[cfg(feature = "apidocs")]
|
|
#[derive(OpenApi)]
|
|
#[openapi(
|
|
info(
|
|
description = "OpenAPI documentation for Rayhunter daemon\n\n**Note:** API endpoints are subject to change as needs arise, though we will try to keep them as stable as possible and notify about breaking changes in the changelogs for new versions.\n\nNo endpoints require any authentication. To use the in-browser execution on this page, you may need to disable CORS temporarily for your browser.",
|
|
license(
|
|
name = "GNU General Public License v3.0",
|
|
url = "https://github.com/EFForg/rayhunter/blob/main/LICENSE"
|
|
)
|
|
),
|
|
paths(
|
|
pcap::get_pcap,
|
|
server::get_qmdl,
|
|
server::get_zip,
|
|
stats::get_system_stats,
|
|
stats::get_qmdl_manifest,
|
|
stats::get_log,
|
|
diag::start_recording,
|
|
diag::stop_recording,
|
|
diag::delete_recording,
|
|
diag::delete_all_recordings,
|
|
diag::get_analysis_report,
|
|
analysis::get_analysis_status,
|
|
analysis::start_analysis,
|
|
server::get_config,
|
|
server::set_config,
|
|
server::test_notification,
|
|
server::get_time,
|
|
server::set_time_offset,
|
|
server::debug_set_display_state
|
|
),
|
|
servers(
|
|
(
|
|
url = "http://localhost:8080",
|
|
description = "ADB port bridge"
|
|
),
|
|
(
|
|
url = "http://192.168.1.1:8080",
|
|
description = "Orbic WiFi GUI"
|
|
),
|
|
(
|
|
url = "http://192.168.0.1:8080",
|
|
description = "TPLink WiFi GUI"
|
|
),
|
|
)
|
|
)]
|
|
pub struct ApiDocs;
|
|
|
|
#[cfg(feature = "apidocs")]
|
|
impl ApiDocs {
|
|
pub fn generate() -> String {
|
|
ApiDocs::openapi().to_pretty_json().unwrap()
|
|
}
|
|
}
|