1mod asymmetric_key;
4mod error;
5
6use blake2::{
7 digest::{Update, VariableOutput},
8 VarBlake2b,
9};
10
11use num::FromPrimitive;
12use num_derive::FromPrimitive;
13
14pub use crate::key::BLAKE2B_DIGEST_LENGTH;
15#[cfg(any(feature = "std", test))]
16pub use asymmetric_key::generate_ed25519_keypair;
17#[cfg(any(feature = "testing", feature = "gens", test))]
18pub use asymmetric_key::gens;
19pub use asymmetric_key::{
20 recover_secp256k1, sign, verify, AsymmetricType, PublicKey, SecretKey, Signature, ED25519_TAG,
21 SECP256K1_TAG, SYSTEM_ACCOUNT, SYSTEM_TAG,
22};
23pub use error::Error;
24#[cfg(any(feature = "std", feature = "testing", test))]
25pub use error::ErrorExt;
26
27pub(crate) fn blake2b<T: AsRef<[u8]>>(data: T) -> [u8; BLAKE2B_DIGEST_LENGTH] {
28 let mut result = [0; BLAKE2B_DIGEST_LENGTH];
29 let mut hasher = VarBlake2b::new(BLAKE2B_DIGEST_LENGTH).expect("should create hasher");
31
32 hasher.update(data);
33 hasher.finalize_variable(|slice| {
34 result.copy_from_slice(slice);
35 });
36 result
37}
38
39#[repr(u8)]
41#[derive(Debug, Copy, Clone, PartialEq, Eq, FromPrimitive)]
42pub enum HashAlgorithm {
43 Blake2b = 0,
45 Blake3 = 1,
47 Sha256 = 2,
49}
50
51impl TryFrom<u8> for HashAlgorithm {
52 type Error = ();
53
54 fn try_from(value: u8) -> Result<Self, Self::Error> {
55 FromPrimitive::from_u8(value).ok_or(())
56 }
57}