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