1pub use crate::outcome::{AddressOutcome, AddressWitness, VerifyError};
16
17#[derive(Debug, Clone, Copy, PartialEq, Eq)]
19pub enum AddressFailure {
20 InvalidXml,
23 PipelineFailure,
26}
27
28#[cfg(feature = "alloc")]
29use crate::xml::model::{
30 AddressModel, AddressModelBlake3, AddressModelKeccak256, AddressModelSha3_256,
31 AddressModelSha512,
32};
33#[cfg(feature = "alloc")]
34use crate::xml::value::{canonicalize, XmlValue};
35#[cfg(feature = "alloc")]
36use prism::pipeline::PrismModel;
37
38#[cfg(feature = "alloc")]
47pub fn address(input_bytes: &[u8]) -> Result<AddressOutcome<71>, AddressFailure> {
48 let canonical = canonicalize(input_bytes).map_err(|_| AddressFailure::InvalidXml)?;
49 let grounded = AddressModel::forward(XmlValue::new(&canonical))
50 .map_err(|_| AddressFailure::PipelineFailure)?;
51 AddressOutcome::<71>::from_grounded(&grounded).map_err(|_| AddressFailure::PipelineFailure)
52}
53
54#[cfg(feature = "alloc")]
61pub fn address_blake3(input_bytes: &[u8]) -> Result<AddressOutcome<71>, AddressFailure> {
62 let canonical = canonicalize(input_bytes).map_err(|_| AddressFailure::InvalidXml)?;
63 let grounded = AddressModelBlake3::forward(XmlValue::new(&canonical))
64 .map_err(|_| AddressFailure::PipelineFailure)?;
65 AddressOutcome::<71>::from_grounded(&grounded).map_err(|_| AddressFailure::PipelineFailure)
66}
67
68#[cfg(feature = "alloc")]
75pub fn address_sha3_256(input_bytes: &[u8]) -> Result<AddressOutcome<73>, AddressFailure> {
76 let canonical = canonicalize(input_bytes).map_err(|_| AddressFailure::InvalidXml)?;
77 let grounded = AddressModelSha3_256::forward(XmlValue::new(&canonical))
78 .map_err(|_| AddressFailure::PipelineFailure)?;
79 AddressOutcome::<73>::from_grounded(&grounded).map_err(|_| AddressFailure::PipelineFailure)
80}
81
82#[cfg(feature = "alloc")]
89pub fn address_keccak256(input_bytes: &[u8]) -> Result<AddressOutcome<74>, AddressFailure> {
90 let canonical = canonicalize(input_bytes).map_err(|_| AddressFailure::InvalidXml)?;
91 let grounded = AddressModelKeccak256::forward(XmlValue::new(&canonical))
92 .map_err(|_| AddressFailure::PipelineFailure)?;
93 AddressOutcome::<74>::from_grounded(&grounded).map_err(|_| AddressFailure::PipelineFailure)
94}
95
96#[cfg(feature = "alloc")]
104pub fn address_sha512(input_bytes: &[u8]) -> Result<AddressOutcome<135, 64>, AddressFailure> {
105 let canonical = canonicalize(input_bytes).map_err(|_| AddressFailure::InvalidXml)?;
106 let grounded = AddressModelSha512::forward(XmlValue::new(&canonical))
107 .map_err(|_| AddressFailure::PipelineFailure)?;
108 AddressOutcome::<135, 64>::from_grounded(&grounded).map_err(|_| AddressFailure::PipelineFailure)
109}