blob: 4b49e1269a237e0db578a19f05307f8cded9724d [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//! Ties together the various modules that make up the Sirenia library used by
//! both Trichechus and Dugong.
#![deny(unsafe_op_in_unsafe_fn)]
pub mod app_info;
pub mod secrets;
include!("bindings/include_modules.rs");
use std::hash::Hash;
use std::ops::Deref;
use openssl::{
error::ErrorStack,
hash::{hash, MessageDigest},
};
use serde::{Deserialize, Serialize};
pub const SHA256_SIZE: usize = 32;
#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub struct Digest([u8; SHA256_SIZE]);
impl Deref for Digest {
type Target = [u8; SHA256_SIZE];
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl<A: AsRef<[u8]>> From<A> for Digest {
fn from(d: A) -> Self {
let mut array = [0u8; SHA256_SIZE];
array.copy_from_slice(d.as_ref());
Digest(array)
}
}
pub fn compute_sha256(data: &[u8]) -> Result<Digest, ErrorStack> {
hash(MessageDigest::sha256(), data).map(From::from)
}