#![no_std]
#![warn(unused, future_incompatible, nonstandard_style, rust_2018_idioms, rust_2021_compatibility)]
#![deny(unsafe_code)]
extern crate alloc;
pub mod block_ciphers;
pub mod engines;
pub mod ibe;
pub mod tlock;
use crate::engines::EngineBLS;
const HASH_LENGTH: usize = 32;
type Hash = [u8; HASH_LENGTH];
const MESSAGE_SIZE: usize = 32;
pub type MessageDigest = [u8; MESSAGE_SIZE];
#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct Message(pub MessageDigest, pub alloc::vec::Vec<u8>);
impl Message {
pub fn new(context: &[u8], message: &[u8]) -> Message {
use sha3::{
digest::{ExtendableOutput, Update, XofReader},
Shake128,
};
let mut h = Shake128::default();
h.update(context);
let l = message.len() as u64;
h.update(&l.to_le_bytes());
h.update(message);
let mut msg = [0u8; MESSAGE_SIZE];
h.finalize_xof().read(&mut msg[..]);
Message(msg, [context, message].concat())
}
pub fn hash_to_signature_curve<E: EngineBLS>(&self) -> E::SignatureGroup {
E::hash_to_signature_curve(&self.1[..])
}
}
impl From<&[u8]> for Message {
fn from(x: &[u8]) -> Message {
Message::new(b"", x)
}
}