wasm_host_simulator/
hashing.rs1use sha2::{Digest, Sha512};
2
3pub const HASH256_LEN: usize = 32;
4pub type Hash256 = Vec<u8>;
5
6#[repr(u16)]
7#[allow(dead_code)]
8pub 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}