1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2023 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker //! Wraps various methods for calculating hashes (sha256). 6*bb4ee6a4SAndroid Build Coastguard Worker 7*bb4ee6a4SAndroid Build Coastguard Worker cfg_if::cfg_if! { 8*bb4ee6a4SAndroid Build Coastguard Worker if #[cfg(feature = "pure-rust-hashes")] { 9*bb4ee6a4SAndroid Build Coastguard Worker use sha2::Digest; 10*bb4ee6a4SAndroid Build Coastguard Worker use sha2::Sha256; 11*bb4ee6a4SAndroid Build Coastguard Worker 12*bb4ee6a4SAndroid Build Coastguard Worker pub fn sha256(bytes: &[u8]) -> [u8; 32] { 13*bb4ee6a4SAndroid Build Coastguard Worker let mut hasher = Sha256::new(); 14*bb4ee6a4SAndroid Build Coastguard Worker hasher.update(bytes); 15*bb4ee6a4SAndroid Build Coastguard Worker hasher.finalize()[0..32].try_into().unwrap() 16*bb4ee6a4SAndroid Build Coastguard Worker } 17*bb4ee6a4SAndroid Build Coastguard Worker } else if #[cfg(feature = "openssl")] { 18*bb4ee6a4SAndroid Build Coastguard Worker use openssl::sha::sha256; 19*bb4ee6a4SAndroid Build Coastguard Worker 20*bb4ee6a4SAndroid Build Coastguard Worker pub fn sha256(bytes: [u8]) -> [u8; 32] { 21*bb4ee6a4SAndroid Build Coastguard Worker // We don't just re-export the library. This way, if openssl's Rust 22*bb4ee6a4SAndroid Build Coastguard Worker // interface changes, we will get an obvious compile error here. 23*bb4ee6a4SAndroid Build Coastguard Worker sha256(bytes) 24*bb4ee6a4SAndroid Build Coastguard Worker } 25*bb4ee6a4SAndroid Build Coastguard Worker } else { 26*bb4ee6a4SAndroid Build Coastguard Worker compile_error!("Either openssl or pure-rust-hashes must be selected."); 27*bb4ee6a4SAndroid Build Coastguard Worker } 28*bb4ee6a4SAndroid Build Coastguard Worker } 29