rust: Retire bssl-macros This crate has been weird, we anticipated more macros to be added to this crate but it turns out that we have just the right amount of them. So this crate has lost most of its value. The first step is to move the macro into bssl-sys. In the next installment we will drop the crate entirely. Signed-off-by: Xiangfei Ding <xfding@google.com> Change-Id: I7be77994f66a4445b8bafa9a32f77a826a6a6964 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/103587 Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 4a8843e..6d0f72c 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock
@@ -39,9 +39,6 @@ [[package]] name = "bssl-sys" version = "0.1.0" -dependencies = [ - "bssl-macros", -] [[package]] name = "bssl-tls" @@ -49,7 +46,6 @@ dependencies = [ "bitflags", "bssl-crypto", - "bssl-macros", "bssl-sys", "bssl-x509", "futures", @@ -77,7 +73,6 @@ dependencies = [ "bitflags", "bssl-crypto", - "bssl-macros", "bssl-sys", ]
diff --git a/rust/bssl-crypto/src/lib.rs b/rust/bssl-crypto/src/lib.rs index 75fc7a5..f17d0dd 100644 --- a/rust/bssl-crypto/src/lib.rs +++ b/rust/bssl-crypto/src/lib.rs
@@ -575,3 +575,121 @@ pub struct SealedType; pub trait Sealed {} } + +#[doc(hidden)] +#[macro_export] +macro_rules! bssl_enum { + ( + $(#[$attr:meta])* + $vis:vis enum $name:ident : $repr:ty { + $( + $(#[$vattr:meta])* + $item:ident = $e:expr + ),* $(,)? + } + ) => { + $(#[$attr])* + #[repr($repr)] + $vis enum $name { + $( + $(#[$vattr])* + $item = $e, + )* + } + + impl ::core::convert::TryFrom<$repr> for $name { + type Error = $repr; + + fn try_from(value: $repr) -> Result<Self, Self::Error> { + $( + #[allow(non_upper_case_globals)] + const $item: $repr = $e; + )* + + #[allow(non_upper_case_globals)] + match value { + $( + $item => ::core::result::Result::Ok(Self::$item), + )* + _ => ::core::result::Result::Err(value), + } + } + } + }; +} + +bssl_enum! { + /// Library code of the BoringSSL errors. + #[derive(Debug, Copy, Clone, PartialEq, Eq)] + #[non_exhaustive] + pub enum LibCode: i32 { + /// No module + None = bssl_sys::ERR_LIB_NONE as i32, + /// Module `SYS` + Sys = bssl_sys::ERR_LIB_SYS as i32, + /// Module `BN` + Bn = bssl_sys::ERR_LIB_BN as i32, + /// Module `RSA` + Rsa = bssl_sys::ERR_LIB_RSA as i32, + /// Module `DH` + Dh = bssl_sys::ERR_LIB_DH as i32, + /// Module `EVP` + Evp = bssl_sys::ERR_LIB_EVP as i32, + /// Module `BUF` + Buf = bssl_sys::ERR_LIB_BUF as i32, + /// Module `OBJ` + Obj = bssl_sys::ERR_LIB_OBJ as i32, + /// Module `PEM` + Pem = bssl_sys::ERR_LIB_PEM as i32, + /// Module `DSA` + Dsa = bssl_sys::ERR_LIB_DSA as i32, + /// Module `X509` + X509 = bssl_sys::ERR_LIB_X509 as i32, + /// Module `ASN1` + Asn1 = bssl_sys::ERR_LIB_ASN1 as i32, + /// Module `CONF` + Conf = bssl_sys::ERR_LIB_CONF as i32, + /// Module `CRYPTO` + Crypto = bssl_sys::ERR_LIB_CRYPTO as i32, + /// Module `EC` + Ec = bssl_sys::ERR_LIB_EC as i32, + /// Module `SSL` + Ssl = bssl_sys::ERR_LIB_SSL as i32, + /// Module `BIO` + Bio = bssl_sys::ERR_LIB_BIO as i32, + /// Module `PKCS7` + Pkcs7 = bssl_sys::ERR_LIB_PKCS7 as i32, + /// Module `PKCS8` + Pkcs8 = bssl_sys::ERR_LIB_PKCS8 as i32, + /// Module `X509V3` + X509v3 = bssl_sys::ERR_LIB_X509V3 as i32, + /// Module `RAND` + Rand = bssl_sys::ERR_LIB_RAND as i32, + /// Module `ENGINE` + Engine = bssl_sys::ERR_LIB_ENGINE as i32, + /// Module `OCSP` + Ocsp = bssl_sys::ERR_LIB_OCSP as i32, + /// Module `UI` + Ui = bssl_sys::ERR_LIB_UI as i32, + /// Module `COMP` + Comp = bssl_sys::ERR_LIB_COMP as i32, + /// Module `ECDSA` + Ecdsa = bssl_sys::ERR_LIB_ECDSA as i32, + /// Module `ECDH` + Ecdh = bssl_sys::ERR_LIB_ECDH as i32, + /// Module `HMAC` + Hmac = bssl_sys::ERR_LIB_HMAC as i32, + /// Module `DIGEST` + Digest = bssl_sys::ERR_LIB_DIGEST as i32, + /// Module `CIPHER` + Cipher = bssl_sys::ERR_LIB_CIPHER as i32, + /// Module `HKDF` + Hkdf = bssl_sys::ERR_LIB_HKDF as i32, + /// Module `TRUST_TOKEN` + TrustToken = bssl_sys::ERR_LIB_TRUST_TOKEN as i32, + /// Module `CMS` + Cms = bssl_sys::ERR_LIB_CMS as i32, + /// User sourced + User = bssl_sys::ERR_LIB_USER as i32, + } +}
diff --git a/rust/bssl-sys/Cargo.toml b/rust/bssl-sys/Cargo.toml index d94a090..06cac9e 100644 --- a/rust/bssl-sys/Cargo.toml +++ b/rust/bssl-sys/Cargo.toml
@@ -9,8 +9,5 @@ # https://github.com/rust-lang/cargo/issues/3544 links = "bssl" -[dependencies.bssl-macros] -path = "../bssl-macros" - [lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(bindgen_rs_file)'] }
diff --git a/rust/bssl-sys/src/lib.rs b/rust/bssl-sys/src/lib.rs index d42f823..eca86d5 100644 --- a/rust/bssl-sys/src/lib.rs +++ b/rust/bssl-sys/src/lib.rs
@@ -57,79 +57,3 @@ // This function does nothing. // TODO(davidben): Remove rust-openssl's dependency on this and remove this. } - -bssl_macros::bssl_enum! { - /// Library code of the BoringSSL errors. - #[derive(Debug, Copy, Clone, PartialEq, Eq)] - #[non_exhaustive] - pub enum LibCode: i32 { - /// No module - None = ERR_LIB_NONE as i32, - /// Module `SYS` - Sys = ERR_LIB_SYS as i32, - /// Module `BN` - Bn = ERR_LIB_BN as i32, - /// Module `RSA` - Rsa = ERR_LIB_RSA as i32, - /// Module `DH` - Dh = ERR_LIB_DH as i32, - /// Module `EVP` - Evp = ERR_LIB_EVP as i32, - /// Module `BUF` - Buf = ERR_LIB_BUF as i32, - /// Module `OBJ` - Obj = ERR_LIB_OBJ as i32, - /// Module `PEM` - Pem = ERR_LIB_PEM as i32, - /// Module `DSA` - Dsa = ERR_LIB_DSA as i32, - /// Module `X509` - X509 = ERR_LIB_X509 as i32, - /// Module `ASN1` - Asn1 = ERR_LIB_ASN1 as i32, - /// Module `CONF` - Conf = ERR_LIB_CONF as i32, - /// Module `CRYPTO` - Crypto = ERR_LIB_CRYPTO as i32, - /// Module `EC` - Ec = ERR_LIB_EC as i32, - /// Module `SSL` - Ssl = ERR_LIB_SSL as i32, - /// Module `BIO` - Bio = ERR_LIB_BIO as i32, - /// Module `PKCS7` - Pkcs7 = ERR_LIB_PKCS7 as i32, - /// Module `PKCS8` - Pkcs8 = ERR_LIB_PKCS8 as i32, - /// Module `X509V3` - X509v3 = ERR_LIB_X509V3 as i32, - /// Module `RAND` - Rand = ERR_LIB_RAND as i32, - /// Module `ENGINE` - Engine = ERR_LIB_ENGINE as i32, - /// Module `OCSP` - Ocsp = ERR_LIB_OCSP as i32, - /// Module `UI` - Ui = ERR_LIB_UI as i32, - /// Module `COMP` - Comp = ERR_LIB_COMP as i32, - /// Module `ECDSA` - Ecdsa = ERR_LIB_ECDSA as i32, - /// Module `ECDH` - Ecdh = ERR_LIB_ECDH as i32, - /// Module `HMAC` - Hmac = ERR_LIB_HMAC as i32, - /// Module `DIGEST` - Digest = ERR_LIB_DIGEST as i32, - /// Module `CIPHER` - Cipher = ERR_LIB_CIPHER as i32, - /// Module `HKDF` - Hkdf = ERR_LIB_HKDF as i32, - /// Module `TRUST_TOKEN` - TrustToken = ERR_LIB_TRUST_TOKEN as i32, - /// Module `CMS` - Cms = ERR_LIB_CMS as i32, - /// User sourced - User = ERR_LIB_USER as i32, - } -}
diff --git a/rust/bssl-tls/Cargo.toml b/rust/bssl-tls/Cargo.toml index f659b0b..1e0a505 100644 --- a/rust/bssl-tls/Cargo.toml +++ b/rust/bssl-tls/Cargo.toml
@@ -11,9 +11,6 @@ [dependencies.bssl-crypto] path = "../bssl-crypto" -[dependencies.bssl-macros] -path = "../bssl-macros" - [dependencies.bssl-sys] path = "../bssl-sys"
diff --git a/rust/bssl-tls/src/alerts.rs b/rust/bssl-tls/src/alerts.rs index 1ee12cb..a6ad2b3 100644 --- a/rust/bssl-tls/src/alerts.rs +++ b/rust/bssl-tls/src/alerts.rs
@@ -19,7 +19,7 @@ fmt, }; -use bssl_macros::bssl_enum; +use bssl_crypto::bssl_enum; bssl_enum! { #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
diff --git a/rust/bssl-tls/src/config.rs b/rust/bssl-tls/src/config.rs index 4a0fc40..2b4727d 100644 --- a/rust/bssl-tls/src/config.rs +++ b/rust/bssl-tls/src/config.rs
@@ -16,7 +16,7 @@ use core::ffi::c_int; -use bssl_macros::bssl_enum; +use bssl_crypto::bssl_enum; bssl_enum! { /// Protocol version for TLS or DTLS
diff --git a/rust/bssl-tls/src/connection/lifecycle.rs b/rust/bssl-tls/src/connection/lifecycle.rs index 51614a8..f947588 100644 --- a/rust/bssl-tls/src/connection/lifecycle.rs +++ b/rust/bssl-tls/src/connection/lifecycle.rs
@@ -319,7 +319,7 @@ } } -bssl_macros::bssl_enum! { +bssl_crypto::bssl_enum! { enum InfoCallbackConnectionState : i32 { ReadAlert = bssl_sys::SSL_CB_READ_ALERT as i32, WriteAlert = bssl_sys::SSL_CB_WRITE_ALERT as i32,
diff --git a/rust/bssl-tls/src/credentials.rs b/rust/bssl-tls/src/credentials.rs index 5f3e8d4..1563d22 100644 --- a/rust/bssl-tls/src/credentials.rs +++ b/rust/bssl-tls/src/credentials.rs
@@ -40,10 +40,16 @@ }, // }; -use bssl_crypto::FromFfiSlice; +use bssl_crypto::{ + FromFfiSlice, + bssl_enum, // +}; use bssl_x509::{ errors::PemReason, - keys::{PrivateKey, PublicKey}, + keys::{ + PrivateKey, + PublicKey, // + }, // }; use crate::{ @@ -741,7 +747,7 @@ } } -bssl_macros::bssl_enum! { +bssl_enum! { /// [IANA] designation of TLS signature algorithms. /// /// [IANA]: https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-16 @@ -1100,7 +1106,7 @@ }) } -bssl_macros::bssl_enum! { +bssl_enum! { /// [IANA] designation of TLS certificate types. /// /// [IANA]: https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#tls-extensiontype-values-3 @@ -1116,7 +1122,7 @@ } } -bssl_macros::bssl_enum! { +bssl_enum! { /// Certificate verification mode pub enum CertificateVerificationMode: i8 { /// Verifies the server certificate on a client but does not make errors fatal.
diff --git a/rust/bssl-tls/src/credentials/early_callback.rs b/rust/bssl-tls/src/credentials/early_callback.rs index 5fc9198c..a09bbf9 100644 --- a/rust/bssl-tls/src/credentials/early_callback.rs +++ b/rust/bssl-tls/src/credentials/early_callback.rs
@@ -35,7 +35,7 @@ }, // }; -bssl_macros::bssl_enum! { +bssl_crypto::bssl_enum! { /// Results from selecting a certificate in the callback. pub enum EarlyCallbackResult: i32 { /// The certificate selection was successful.
diff --git a/rust/bssl-tls/src/credentials/select_cert.rs b/rust/bssl-tls/src/credentials/select_cert.rs index 675cc7e..a570d86 100644 --- a/rust/bssl-tls/src/credentials/select_cert.rs +++ b/rust/bssl-tls/src/credentials/select_cert.rs
@@ -180,7 +180,7 @@ } } -bssl_macros::bssl_enum! { +bssl_crypto::bssl_enum! { /// Requested certificate types defined in [RFC 5246] §7.4.4. /// /// [RFC 5246]: <https://datatracker.ietf.org/doc/html/rfc5246#section-7.4.4>
diff --git a/rust/bssl-tls/src/errors.rs b/rust/bssl-tls/src/errors.rs index d808da4..b5e0dff 100644 --- a/rust/bssl-tls/src/errors.rs +++ b/rust/bssl-tls/src/errors.rs
@@ -28,8 +28,10 @@ }, // }; -use bssl_macros::bssl_enum; -use bssl_sys::LibCode; +use bssl_crypto::{ + LibCode, + bssl_enum, // +}; use bssl_x509::errors::{ PemReason, PkiError, //
diff --git a/rust/bssl-x509/Cargo.toml b/rust/bssl-x509/Cargo.toml index 06e8a80..2ec9ddf 100644 --- a/rust/bssl-x509/Cargo.toml +++ b/rust/bssl-x509/Cargo.toml
@@ -9,9 +9,6 @@ [dependencies.bssl-crypto] path = "../bssl-crypto" -[dependencies.bssl-macros] -path = "../bssl-macros" - [dependencies.bssl-sys] path = "../bssl-sys"
diff --git a/rust/bssl-x509/src/certificates.rs b/rust/bssl-x509/src/certificates.rs index 6ad3509..f402c7c 100644 --- a/rust/bssl-x509/src/certificates.rs +++ b/rust/bssl-x509/src/certificates.rs
@@ -92,7 +92,7 @@ }, }; -bssl_macros::bssl_enum! { +bssl_crypto::bssl_enum! { #[derive(Clone, Copy, Debug, PartialEq, Eq)] enum GeneralNameKind: u8 { /// Other Name
diff --git a/rust/bssl-x509/src/errors.rs b/rust/bssl-x509/src/errors.rs index 0ee83ad..35407ae 100644 --- a/rust/bssl-x509/src/errors.rs +++ b/rust/bssl-x509/src/errors.rs
@@ -14,11 +14,22 @@ //! X.509 certificate verification errors. -use core::ffi::{CStr, c_char}; -use core::fmt::{self, Debug, Display}; +use core::{ + ffi::{ + CStr, + c_char, // + }, + fmt::{ + self, + Debug, + Display, // + }, // +}; -use bssl_macros::bssl_enum; -use bssl_sys::LibCode; +use bssl_crypto::{ + LibCode, + bssl_enum, // +}; bssl_enum! { /// X.509 certificate verification result code.
diff --git a/rust/bssl-x509/src/keys.rs b/rust/bssl-x509/src/keys.rs index c16b9a9..266dc79 100644 --- a/rust/bssl-x509/src/keys.rs +++ b/rust/bssl-x509/src/keys.rs
@@ -46,17 +46,32 @@ use alloc::vec::Vec; use core::{ - ffi::{c_char, c_int, c_void}, + ffi::{ + c_char, + c_int, + c_void, // + }, mem::transmute, panic::AssertUnwindSafe, - ptr::{NonNull, null_mut}, + ptr::{ + NonNull, + null_mut, // + }, // }; -use bssl_crypto::{FfiSlice, cbb_to_buffer}; -use bssl_macros::bssl_enum; +use bssl_crypto::bssl_enum; +use bssl_crypto::{ + FfiSlice, + cbb_to_buffer, // +}; -use crate::ffi::abort_on_panic; -use crate::{errors::PkiError, ffi::Bio}; +use crate::{ + errors::PkiError, + ffi::{ + Bio, + abort_on_panic, // + }, // +}; bssl_enum! { /// EVP public key algorithm types.
diff --git a/rust/bssl-x509/src/params.rs b/rust/bssl-x509/src/params.rs index afbc2e4..70b7a85 100644 --- a/rust/bssl-x509/src/params.rs +++ b/rust/bssl-x509/src/params.rs
@@ -16,13 +16,21 @@ use alloc::ffi::CString; use core::{ - ffi::{c_int, c_uint, c_ulong}, - ptr::NonNull, + ffi::{ + c_int, + c_uint, + c_ulong, // + }, + ptr::NonNull, // }; -use bssl_macros::bssl_enum; +use bssl_crypto::bssl_enum; -use crate::{check_lib_error, errors::PkiError, ffi::slice_into_ffi_raw_parts}; +use crate::{ + check_lib_error, + errors::PkiError, + ffi::slice_into_ffi_raw_parts, // +}; bssl_enum! { /// Trust settings for certificate verification.