wasm_host_simulator/
hashing.rs

1use sha2::{Digest, Sha512};
2
3pub const HASH256_LEN: usize = 32;
4pub type Hash256 = Vec<u8>;
5
6#[repr(u16)]
7#[allow(dead_code)]
8// #[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub enum LedgerNameSpace {
10    Account = b'a' as u16,
11    DirNode = b'd' as u16,
12    TrustLine = b'r' as u16,
13    Offer = b'o' as u16,
14    OwnerDir = b'O' as u16,
15    BookDir = b'B' as u16,
16    SkipList = b's' as u16,
17    Escrow = b'u' as u16,
18    Amendments = b'f' as u16,
19    FeeSettings = b'e' as u16,
20    Ticket = b'T' as u16,
21    SignerList = b'S' as u16,
22    XrpPaymentChannel = b'x' as u16,
23    Check = b'C' as u16,
24    DepositPreauth = b'p' as u16,
25    DepositPreauthCredentials = b'P' as u16,
26    NegativeUnl = b'N' as u16,
27    NftokenOffer = b'q' as u16,
28    NftokenBuyOffers = b'h' as u16,
29    NftokenSellOffers = b'i' as u16,
30    Amm = b'A' as u16,
31    Bridge = b'H' as u16,
32    XchainClaimId = b'Q' as u16,
33    XchainCreateAccountClaimId = b'K' as u16,
34    Did = b'I' as u16,
35    Oracle = b'R' as u16,
36    MptokenIssuance = b'~' as u16,
37    Mptoken = b't' as u16,
38    Credential = b'D' as u16,
39    PermissionedDomain = b'm' as u16,
40    Delegate = b'E' as u16,
41    Vault = b'V' as u16,
42
43    #[deprecated]
44    Contract = b'c' as u16,
45    #[deprecated]
46    Generator = b'g' as u16,
47    #[deprecated]
48    Nickname = b'n' as u16,
49}
50
51pub fn sha512_half(data: &[u8]) -> Hash256 {
52    let mut hasher = Sha512::new();
53    hasher.update(data);
54    let result = hasher.finalize();
55    result[..32].to_vec()
56}
57
58pub fn index_hash(space: LedgerNameSpace, args: &[u8]) -> Hash256 {
59    let mut data = Vec::with_capacity(2 + args.len());
60    data.extend_from_slice(&(space as u16).to_be_bytes());
61    data.extend_from_slice(args);
62    sha512_half(&data)
63}