diff --git a/gongor.rs b/gongor.rs index a52412e..49bb796 100644 --- a/gongor.rs +++ b/gongor.rs @@ -1,25 +1,46 @@ +use std::io::BufReader; use std::fs::File; use std::io::prelude::*; use rand::rngs::OsRng; use ed25519_dalek::SigningKey; -//use ed25519_dalek::Signature; +use ed25519_dalek::Signature; +use ed25519_dalek::Signer; 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 signing_key: SigningKey = SigningKey::generate(&mut csprng); + let mut keyfile = File::open(&keyfilepath).expect("no file found"); + 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)?; - // file.write_all(&signing_key.to_bytes())?; + let messagefile= File::open(&messagefilepath).expect("no file found"); + 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(()); + } }