xref: /aosp_15_r20/external/crosvm/perfetto/src/hashes.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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