Add command actions, sign a message

This commit is contained in:
Eli Ribble 2023-11-29 18:28:35 -07:00
parent f08ddd24fa
commit a03899a588
1 changed files with 34 additions and 13 deletions

View File

@ -1,25 +1,46 @@
use std::io::BufReader;
use std::fs::File; use std::fs::File;
use std::io::prelude::*; use std::io::prelude::*;
use rand::rngs::OsRng; use rand::rngs::OsRng;
use ed25519_dalek::SigningKey; use ed25519_dalek::SigningKey;
//use ed25519_dalek::Signature; use ed25519_dalek::Signature;
use ed25519_dalek::Signer;
fn main() -> std::io::Result<()>{ fn main() -> std::io::Result<()>{
let filename = std::env::args().nth(1).expect("no filename given"); let action = std::env::args().nth(1).expect("no command given");
if action == "sign" {
let keyfilepath = std::env::args().nth(2).expect("no keyfilepath given");
let messagefilepath = std::env::args().nth(3).expect("no message given");
//let mut csprng = OsRng; let mut keyfile = File::open(&keyfilepath).expect("no file found");
// let signing_key: SigningKey = SigningKey::generate(&mut csprng); let mut keybuffer: [u8; 32] = [0; 32];
keyfile.read(&mut keybuffer).expect("buffer overflow");
let signing_key: SigningKey = SigningKey::from_bytes(&keybuffer);
// let mut file = File::create(filename)?; let messagefile= File::open(&messagefilepath).expect("no file found");
// file.write_all(&signing_key.to_bytes())?; let mut messagereader = BufReader::new(messagefile);
let mut messagebuf = Vec::new();
messagereader.read_to_end(&mut messagebuf)?;
let mut f = File::open(&filename).expect("no file found");
//let metadata = File::metadata(&f).expect("unable to read metadata");
let mut buffer: [u8; 32] = [0; 32];
f.read(&mut buffer).expect("buffer overflow");
let signing_key: SigningKey = SigningKey::from_bytes(&buffer);
println!("Using key {filename}");
Ok(()) println!("Using key {keyfilepath}");
let signature: Signature = signing_key.sign(&messagebuf);
println!("Signture: {signature}");
return Ok(())
} else if action == "create" {
let keyfilepath = std::env::args().nth(2).expect("no keyfilepath given");
let mut csprng = OsRng;
let signing_key: SigningKey = SigningKey::generate(&mut csprng);
println!("Writing new key to {keyfilepath}");
let mut file = File::create(keyfilepath)?;
file.write_all(&signing_key.to_bytes())?;
return Ok(());
} else {
println!("Unrecognized command {action}");
return Ok(());
}
} }