in dcap/src/main.rs [128:162]
fn respond_to(self, _: &rocket::Request) -> response::Result<'static> {
match self {
Self::BadRequest => response::Result::Err(http::Status::BadRequest),
Self::InternalError => response::Result::Err(http::Status::InternalServerError),
Self::AcceptedRequest(qvr) => {
let payload = qvr.to_json();
let mut signature = vec![0; SIGNER.public_modulus_len()];
let rng = ring::rand::SystemRandom::new();
SIGNER
.sign(
&signature::RSA_PKCS1_SHA256,
&rng,
payload.as_bytes(),
&mut signature,
)
.unwrap();
response::Response::build()
.header(http::ContentType::JSON)
.header(http::Header::new(
http::hyper::header::CONNECTION.as_str(),
"close",
))
.raw_header(
"X-DCAPReport-Signing-Certificate",
percent_encoding::utf8_percent_encode(
&REPORT_SIGNING_CERT,
percent_encoding::NON_ALPHANUMERIC,
),
)
.raw_header("X-DCAPReport-Signature", base64::encode(&signature))
.sized_body(payload.len(), std::io::Cursor::new(payload))
.ok()
}
}
}