From 55ee0da8d09683a6aa97a8d9ff2eb0bc778112a6 Mon Sep 17 00:00:00 2001 From: Facundo Tuesca Date: Wed, 19 Jul 2023 14:58:36 +0200 Subject: [PATCH] Expose Poly1305 bindings on libressl and boringssl --- openssl-sys/CHANGELOG.md | 4 ++++ openssl-sys/build/run_bindgen.rs | 4 ++++ openssl-sys/src/handwritten/mod.rs | 4 ++++ openssl-sys/src/handwritten/poly1305.rs | 23 +++++++++++++++++++++++ systest/build.rs | 4 ++++ 5 files changed, 39 insertions(+) create mode 100644 openssl-sys/src/handwritten/poly1305.rs diff --git a/openssl-sys/CHANGELOG.md b/openssl-sys/CHANGELOG.md index 4554a58def..1fbbbd499b 100644 --- a/openssl-sys/CHANGELOG.md +++ b/openssl-sys/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Added + +* Expose `poly1305_state`, `CRYPTO_poly1305_init`, `CRYPTO_poly1305_update`, and `CRYPTO_poly1305_finish` on BoringSSL and LibreSSL. + ## [v0.9.90] - 2023-06-20 ### Fixed diff --git a/openssl-sys/build/run_bindgen.rs b/openssl-sys/build/run_bindgen.rs index 5d307503f6..1eeaad225d 100644 --- a/openssl-sys/build/run_bindgen.rs +++ b/openssl-sys/build/run_bindgen.rs @@ -55,6 +55,10 @@ const INCLUDES: &str = " #if OPENSSL_VERSION_NUMBER >= 0x30000000 #include #endif + +#if defined(LIBRESSL_VERSION_NUMBER) || defined(OPENSSL_IS_BORINGSSL) +#include +#endif "; #[cfg(feature = "bindgen")] diff --git a/openssl-sys/src/handwritten/mod.rs b/openssl-sys/src/handwritten/mod.rs index 9c0f844501..d3adfa5a13 100644 --- a/openssl-sys/src/handwritten/mod.rs +++ b/openssl-sys/src/handwritten/mod.rs @@ -18,6 +18,8 @@ pub use self::ocsp::*; pub use self::pem::*; pub use self::pkcs12::*; pub use self::pkcs7::*; +#[cfg(libressl)] +pub use self::poly1305::*; pub use self::provider::*; pub use self::rand::*; pub use self::rsa::*; @@ -52,6 +54,8 @@ mod ocsp; mod pem; mod pkcs12; mod pkcs7; +#[cfg(libressl)] +mod poly1305; mod provider; mod rand; mod rsa; diff --git a/openssl-sys/src/handwritten/poly1305.rs b/openssl-sys/src/handwritten/poly1305.rs new file mode 100644 index 0000000000..8ff22f3580 --- /dev/null +++ b/openssl-sys/src/handwritten/poly1305.rs @@ -0,0 +1,23 @@ +use super::super::*; +use libc::*; + +cfg_if! { + if #[cfg(libressl)] { + #[repr(C)] + #[derive(Debug, Copy, Clone)] + pub struct poly1305_context { + pub aligner: usize, + pub opaque: [::libc::c_uchar; 136usize], + } + pub type poly1305_state = poly1305_context; + extern "C" { + pub fn CRYPTO_poly1305_init(ctx: *mut poly1305_context, key: *const ::libc::c_uchar); + pub fn CRYPTO_poly1305_update( + ctx: *mut poly1305_context, + in_: *const ::libc::c_uchar, + len: usize, + ); + pub fn CRYPTO_poly1305_finish(ctx: *mut poly1305_context, mac: *mut ::libc::c_uchar); + } + } +} diff --git a/systest/build.rs b/systest/build.rs index 6d3ac3a3d3..53407eafad 100644 --- a/systest/build.rs +++ b/systest/build.rs @@ -69,6 +69,10 @@ fn main() { .header("openssl/evp.h") .header("openssl/x509_vfy.h"); + if libressl_version.is_some() { + cfg.header("openssl/poly1305.h"); + } + if let Some(version) = openssl_version { cfg.header("openssl/cms.h"); if version >= 0x10100000 {