xref: /aosp_15_r20/bootable/libbootloader/gbl/libgbl/src/digest.rs (revision 5225e6b173e52d2efc6bcf950c27374fd72adabc)
1*5225e6b1SAndroid Build Coastguard Worker // Copyright 2023, The Android Open Source Project
2*5225e6b1SAndroid Build Coastguard Worker //
3*5225e6b1SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*5225e6b1SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*5225e6b1SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*5225e6b1SAndroid Build Coastguard Worker //
7*5225e6b1SAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
8*5225e6b1SAndroid Build Coastguard Worker //
9*5225e6b1SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*5225e6b1SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*5225e6b1SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*5225e6b1SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*5225e6b1SAndroid Build Coastguard Worker // limitations under the License.
14*5225e6b1SAndroid Build Coastguard Worker 
15*5225e6b1SAndroid Build Coastguard Worker //! GBL Digest trait that defines interface for hash computation.
16*5225e6b1SAndroid Build Coastguard Worker 
17*5225e6b1SAndroid Build Coastguard Worker /// List of supported algorithms
18*5225e6b1SAndroid Build Coastguard Worker #[derive(Debug, Eq, PartialEq, Clone, Copy)]
19*5225e6b1SAndroid Build Coastguard Worker pub enum Algorithm {
20*5225e6b1SAndroid Build Coastguard Worker     /// SHA256 algorithm
21*5225e6b1SAndroid Build Coastguard Worker     SHA256,
22*5225e6b1SAndroid Build Coastguard Worker     /// SHA512 algorithm
23*5225e6b1SAndroid Build Coastguard Worker     SHA512,
24*5225e6b1SAndroid Build Coastguard Worker }
25*5225e6b1SAndroid Build Coastguard Worker 
26*5225e6b1SAndroid Build Coastguard Worker /// Digest output trait that return algorithm and ref to the value
27*5225e6b1SAndroid Build Coastguard Worker pub trait Digest: AsRef<[u8]> {
28*5225e6b1SAndroid Build Coastguard Worker     /// Get digest algorithm
algorithm(&self) -> &Algorithm29*5225e6b1SAndroid Build Coastguard Worker     fn algorithm(&self) -> &Algorithm;
30*5225e6b1SAndroid Build Coastguard Worker }
31*5225e6b1SAndroid Build Coastguard Worker 
32*5225e6b1SAndroid Build Coastguard Worker /// Context trait that implements digesting.
33*5225e6b1SAndroid Build Coastguard Worker /// Sha256 or Sha512.
34*5225e6b1SAndroid Build Coastguard Worker pub trait Context {
35*5225e6b1SAndroid Build Coastguard Worker     /// Digest type
36*5225e6b1SAndroid Build Coastguard Worker     type Digest: Digest;
37*5225e6b1SAndroid Build Coastguard Worker 
38*5225e6b1SAndroid Build Coastguard Worker     /// Create [Context] object that can calculate digest with requested algorithm.
39*5225e6b1SAndroid Build Coastguard Worker     ///
40*5225e6b1SAndroid Build Coastguard Worker     /// # Arguments
41*5225e6b1SAndroid Build Coastguard Worker     ///
42*5225e6b1SAndroid Build Coastguard Worker     /// * algorithm - requested algorithm
new(algorithm: Algorithm) -> Self43*5225e6b1SAndroid Build Coastguard Worker     fn new(algorithm: Algorithm) -> Self;
44*5225e6b1SAndroid Build Coastguard Worker 
45*5225e6b1SAndroid Build Coastguard Worker     /// Process next portion of data for the digest.
46*5225e6b1SAndroid Build Coastguard Worker     ///
47*5225e6b1SAndroid Build Coastguard Worker     /// # Arguments
48*5225e6b1SAndroid Build Coastguard Worker     ///
49*5225e6b1SAndroid Build Coastguard Worker     /// * input - block of data to be processed
update(&mut self, input: &[u8])50*5225e6b1SAndroid Build Coastguard Worker     fn update(&mut self, input: &[u8]);
51*5225e6b1SAndroid Build Coastguard Worker 
52*5225e6b1SAndroid Build Coastguard Worker     /// Finalise digest computation.
53*5225e6b1SAndroid Build Coastguard Worker     ///
54*5225e6b1SAndroid Build Coastguard Worker     /// Object is consumed to prevent reusing.
finish(self) -> Self::Digest55*5225e6b1SAndroid Build Coastguard Worker     fn finish(self) -> Self::Digest;
56*5225e6b1SAndroid Build Coastguard Worker 
57*5225e6b1SAndroid Build Coastguard Worker     /// The algorithm that this context is using.
algorithm(&self) -> &Algorithm58*5225e6b1SAndroid Build Coastguard Worker     fn algorithm(&self) -> &Algorithm;
59*5225e6b1SAndroid Build Coastguard Worker }
60