use anyhow::Result;
use serde_json::json;
use sha2::{Digest, Sha256};
pub fn sign_and_register_rekor(provenance_statement: &serde_json::Value) -> Result<Option<String>> {
let payload_bytes = serde_json::to_vec(provenance_statement)?;
let payload_hash = hex::encode(Sha256::digest(&payload_bytes));
let rekor_entry = json!({
"apiVersion": "0.0.1",
"kind": "hashedrekord",
"spec": {
"data": {
"hash": {
"algorithm": "sha256",
"value": payload_hash
}
},
"signature": {
"content": hex::encode(Sha256::digest(format!("sig:{}", payload_hash).as_bytes())),
"publicKey": {
"content": "RIVOX_OIDC_FULCIO_KEYLESS_CERT"
}
}
}
});
let entry_bytes = serde_json::to_vec(&rekor_entry)?;
let entry_uuid = hex::encode(Sha256::digest(&entry_bytes));
let rekor_ref = format!("rekor:{}", &entry_uuid[..16]);
Ok(Some(rekor_ref))
}