Unverified Commit c3b714e8 authored by Sean McGrail's avatar Sean McGrail
Browse files

Add support for aws-lc-sys or aws-lc-fips-sys

parent a5419bc0
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -18,10 +18,14 @@ rust-version = "1.63.0"
[features]
vendored = ['openssl-src']
unstable_boringssl = ['bssl-sys']
aws-lc = ['aws-lc-sys']
aws-lc-fips = ['aws-lc-fips-sys']

[dependencies]
libc = "0.2"
bssl-sys = { version = "0.1.0", optional = true }
aws-lc-sys = { version = "0", features = ["ssl"], optional = true }
aws-lc-fips-sys = { version = "0", features = ["ssl", "bindgen"], optional = true }

[build-dependencies]
bindgen = { version = "0.69.0", optional = true, features = ["experimental"] }
+42 −0
Original line number Diff line number Diff line
@@ -71,6 +71,47 @@ fn check_ssl_kind() {
        // BoringSSL does not have any build logic, exit early
        std::process::exit(0);
    }

    let is_aws_lc = cfg!(feature = "aws-lc");
    let is_aws_lc_fips = cfg!(feature = "aws-lc-fips");

    if is_aws_lc || is_aws_lc_fips {
        println!("cargo:rustc-cfg=awslc");
        println!("cargo:awslc=true");

        let env_var_prefix = match (is_aws_lc, is_aws_lc_fips) {
            (true, false) => "DEP_AWS_LC_",
            (false, true) => "DEP_AWS_LC_FIPS_",
            _ => {
                panic!("aws-lc and aws-lc-fips are mutually exclusive features!");
            }
        };

        let mut version = None;
        for (name, _) in std::env::vars() {
            if let Some(name) = name.strip_prefix(env_var_prefix) {
                if let Some(name) = name.strip_suffix("_INCLUDE") {
                    version = Some(name.to_owned());
                    break;
                }
            }
        }
        let version = version.expect("aws-lc version detected");

        if let Ok(vars) = std::env::var(format!("{env_var_prefix}{version}_CONF")) {
            for var in vars.split(',') {
                println!("cargo:rustc-cfg=osslconf=\"{var}\"");
            }
            println!("cargo:conf={vars}");
        }

        if let Ok(val) = std::env::var(format!("{env_var_prefix}{version}_INCLUDE")) {
            println!("cargo:include={val}");
        }

        // AWS-LC does not have any build logic, exit early
        std::process::exit(0);
    }
}

fn main() {
@@ -79,6 +120,7 @@ fn main() {
    println!("cargo:rustc-check-cfg=cfg(openssl)");
    println!("cargo:rustc-check-cfg=cfg(libressl)");
    println!("cargo:rustc-check-cfg=cfg(boringssl)");
    println!("cargo:rustc-check-cfg=cfg(awslc)");

    println!("cargo:rustc-check-cfg=cfg(libressl250)");
    println!("cargo:rustc-check-cfg=cfg(libressl251)");
+2 −2
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ pub const PKCS5_SALT_LEN: c_int = 8;
pub const PKCS12_DEFAULT_ITER: c_int = 2048;

pub const EVP_PKEY_RSA: c_int = NID_rsaEncryption;
#[cfg(any(ossl111, libressl310, boringssl))]
#[cfg(any(ossl111, libressl310, boringssl, awslc))]
pub const EVP_PKEY_RSA_PSS: c_int = NID_rsassaPss;
pub const EVP_PKEY_DSA: c_int = NID_dsa;
pub const EVP_PKEY_DH: c_int = NID_dhKeyAgreement;
@@ -313,7 +313,7 @@ pub unsafe fn EVP_PKEY_CTX_add1_hkdf_info(
    )
}

#[cfg(all(not(ossl300), not(boringssl)))]
#[cfg(not(any(ossl300, boringssl, awslc)))]
pub unsafe fn EVP_PKEY_CTX_set_signature_md(cxt: *mut EVP_PKEY_CTX, md: *mut EVP_MD) -> c_int {
    EVP_PKEY_CTX_ctrl(
        cxt,
+1 −1
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ extern "C" {

    pub fn EC_POINT_dup(p: *const EC_POINT, group: *const EC_GROUP) -> *mut EC_POINT;

    #[cfg(any(ossl111, boringssl, libressl350))]
    #[cfg(any(ossl111, boringssl, libressl350, awslc))]
    pub fn EC_POINT_get_affine_coordinates(
        group: *const EC_GROUP,
        p: *const EC_POINT,
+16 −0
Original line number Diff line number Diff line
@@ -29,6 +29,22 @@ mod boringssl {
#[cfg(boringssl)]
pub use boringssl::*;

#[cfg(any(feature = "aws-lc", feature = "aws-lc-fips-sys"))]
mod aws_lc {
    #[cfg(feature = "aws-lc-fips")]
    extern crate aws_lc_fips_sys as aws_lc;
    #[cfg(feature = "aws-lc")]
    extern crate aws_lc_sys as aws_lc;
    pub use aws_lc::*;

    // TODO: AWS-LC doesn't currently expose this in it's public headers
    extern "C" {
        pub fn OCSP_ONEREQ_free(r: *mut OCSP_ONEREQ);
    }
}
#[cfg(any(feature = "aws-lc", feature = "aws-lc-fips-sys"))]
pub use aws_lc::*;

#[cfg(openssl)]
#[path = "."]
mod openssl {
Loading