///|
/// End-to-end HTTP example: negotiate, generate both active algorithms, verify,
/// then demonstrate a downstream body mutation.
fn main raise {
let body = @base64.str2bytes("{\"artifact\":\"moonbit\",\"version\":1}\n")
let request_headers : Array[@digest.HttpHeader] = [
{ name: "Want-Content-Digest", value: "sha-512=10, sha-256=5", },
]
let selected = @digest.negotiate_http_digest(request_headers, @digest.Content)
let selected_name = match selected.algorithm {
Some(value) => value
None => "none"
}
println("negotiated: \{selected_name}")
let origin = @digest.apply_digest_header(
{ headers: [{ name: "Content-Type", value: "application/json", }], body, },
@digest.Content,
)
let verified = @digest.verify_http_message(origin, @digest.Content)
println("verification: \{verified.verification.decision.to_string()}")
println("Content-Digest: \{verified.combined_value}")
let tampered : @digest.HttpMessage = {
headers: origin.headers,
body: @base64.str2bytes("{\"artifact\":\"changed\",\"version\":1}\n"),
}
println(
"tampered body: \{@digest.verify_http_message(tampered, @digest.Content).verification.decision.to_string()}",
)
}