File size: 863 Bytes
5970ba6 4a90885 5970ba6 4a90885 5970ba6 4a90885 5970ba6 4a90885 5970ba6 4a90885 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | use k256::ecdsa::{SigningKey, Signature, signature::Signer};
use sha2::{Digest, Sha256};
use crate::shield::redact::PiiMatch;
use std::sync::OnceLock;
static SIGNING_KEY: OnceLock<SigningKey> = OnceLock::new();
pub fn init_signing_key(hex_key: &str) {
let key = SigningKey::from_slice(&hex::decode(hex_key).unwrap()).unwrap();
let _ = SIGNING_KEY.set(key);
}
pub fn generate_proof(original: &str, pii_map: &[PiiMatch]) -> String {
let sk = SIGNING_KEY.get().expect("Signing key not initialised");
let mut hasher = Sha256::new();
hasher.update(original);
for m in pii_map {
hasher.update(m.entity_type.as_bytes());
hasher.update(m.original.as_bytes());
hasher.update(m.placeholder.as_bytes());
}
let digest = hasher.finalize();
let sig: Signature = sk.sign(&digest);
hex::encode(sig.to_bytes())
}
|