mirror of https://github.com/breard-r/acmed.git
Browse Source
Remove openssl calls from the acmed crate
Remove openssl calls from the acmed crate
The TLS library is encapsulated by acme_common.pull/31/head
Rodolphe Breard
4 years ago
6 changed files with 81 additions and 66 deletions
-
1acme_common/Cargo.toml
-
72acme_common/build.rs
-
2acme_common/src/crypto.rs
-
7acmed/Cargo.toml
-
59acmed/build.rs
-
6acmed/src/main.rs
@ -0,0 +1,72 @@ |
|||||
|
use std::env;
|
||||
|
use std::fs::File;
|
||||
|
use std::io::prelude::*;
|
||||
|
use std::io::BufReader;
|
||||
|
use std::path::PathBuf;
|
||||
|
|
||||
|
macro_rules! set_rustc_env_var {
|
||||
|
($name: expr, $value: expr) => {{
|
||||
|
println!("cargo:rustc-env={}={}", $name, $value);
|
||||
|
}};
|
||||
|
}
|
||||
|
|
||||
|
fn get_openssl_version_unit(n: u64, pos: u32) -> u64 {
|
||||
|
let p = 0x000f_f000_0000 >> (8 * pos);
|
||||
|
let n = n & p;
|
||||
|
n >> (8 * (3 - pos) + 4)
|
||||
|
}
|
||||
|
|
||||
|
fn get_openssl_version(v: &str) -> String {
|
||||
|
let v = u64::from_str_radix(&v, 16).unwrap();
|
||||
|
let mut version = vec![];
|
||||
|
for i in 0..3 {
|
||||
|
let n = get_openssl_version_unit(v, i);
|
||||
|
version.push(format!("{}", n));
|
||||
|
}
|
||||
|
let version = version.join(".");
|
||||
|
let p = get_openssl_version_unit(v, 3);
|
||||
|
if p != 0 {
|
||||
|
let p = p + 0x60;
|
||||
|
let p = std::char::from_u32(p as u32).unwrap();
|
||||
|
format!("{}{}", version, p)
|
||||
|
} else {
|
||||
|
version
|
||||
|
}
|
||||
|
}
|
||||
|
|
||||
|
fn get_lib_version(lib: &str) -> Option<String> {
|
||||
|
let pat = format!("\"checksum {} ", lib);
|
||||
|
let mut lock_file = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
|
||||
|
lock_file.push("../Cargo.lock");
|
||||
|
let file = File::open(lock_file).unwrap();
|
||||
|
for line in BufReader::new(file).lines() {
|
||||
|
let line = line.unwrap();
|
||||
|
if line.starts_with(&pat) {
|
||||
|
let v: Vec<&str> = line.split(' ').collect();
|
||||
|
return Some(String::from(v[2]));
|
||||
|
}
|
||||
|
}
|
||||
|
None
|
||||
|
}
|
||||
|
|
||||
|
fn set_tls() {
|
||||
|
if let Ok(v) = env::var("DEP_OPENSSL_VERSION_NUMBER") {
|
||||
|
let version = get_openssl_version(&v);
|
||||
|
set_rustc_env_var!("ACMED_TLS_LIB_VERSION", version);
|
||||
|
set_rustc_env_var!("ACMED_TLS_LIB_NAME", "OpenSSL");
|
||||
|
}
|
||||
|
if let Ok(v) = env::var("DEP_OPENSSL_LIBRESSL_VERSION_NUMBER") {
|
||||
|
let version = get_openssl_version(&v);
|
||||
|
set_rustc_env_var!("ACMED_TLS_LIB_VERSION", version);
|
||||
|
set_rustc_env_var!("ACMED_TLS_LIB_NAME", "LibreSSL");
|
||||
|
}
|
||||
|
if env::var("CARGO_FEATURE_STANDALONE").is_ok() {
|
||||
|
let version = get_lib_version("ring").unwrap();
|
||||
|
set_rustc_env_var!("ACMED_TLS_LIB_VERSION", version);
|
||||
|
set_rustc_env_var!("ACMED_TLS_LIB_NAME", "ring");
|
||||
|
}
|
||||
|
}
|
||||
|
|
||||
|
fn main() {
|
||||
|
set_tls();
|
||||
|
}
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue