45 lines
1.5 KiB
Rust
45 lines
1.5 KiB
Rust
use std::io::{ Read, Write };
|
|
use std::fs::File;
|
|
use ring::digest;
|
|
use virt_enclave::sig::*;
|
|
|
|
fn main() {
|
|
let mut args = std::env::args();
|
|
args.next();
|
|
let signing_key_pair = match SigningKeyPair::read_from_file("platform_signing_key.json") {
|
|
Err(_) => { println!("Read file failed!"); return; },
|
|
Ok(k) => k,
|
|
};
|
|
let f = match args.next() {
|
|
None => { println!("File not assigned!"); return; },
|
|
Some(f) => f,
|
|
};
|
|
let mut file = match File::open(&f) {
|
|
Err(_) => { println!("Open file failed: {}", f); return; }
|
|
Ok(f) => f,
|
|
};
|
|
let mut buf = vec![];
|
|
let _len = match file.read_to_end(&mut buf) {
|
|
Err(_) => { println!("Read file failed: {}", f); return; }
|
|
Ok(c) => c,
|
|
};
|
|
let d = digest::digest(&digest::SHA256, &buf);
|
|
let digest_hex = hex::encode(&d);
|
|
let mut signed_message = SignedMessage::new(d.as_ref().to_vec(), None);
|
|
signed_message.sign(&signing_key_pair);
|
|
|
|
println!("File : {}", f);
|
|
println!("Hex : {}", digest_hex);
|
|
println!("Signed: {}", serde_json::to_string(&signed_message).unwrap());
|
|
|
|
if let Some(of) = args.next() {
|
|
if File::open(&of).is_ok() {
|
|
println!("Output file exists: {}", of);
|
|
return;
|
|
}
|
|
if let Ok(mut out_file) = File::create(&of) {
|
|
out_file.write_all(&serde_json::to_string(&signed_message).unwrap().as_bytes()).ok();
|
|
println!("Write file successed: {}", of);
|
|
}
|
|
}
|
|
} |