From 3bd078192cdb84288439d18da28d92acf3f4cf92 Mon Sep 17 00:00:00 2001 From: qh11 <qh11@illinois.edu> Date: Tue, 1 Feb 2022 11:59:01 -0600 Subject: [PATCH] Update transaction.rs --- src/types/transaction.rs | 42 +++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/src/types/transaction.rs b/src/types/transaction.rs index 626c2e4..cb98654 100755 --- a/src/types/transaction.rs +++ b/src/types/transaction.rs @@ -1,28 +1,60 @@ -use serde::{Serialize,Deserialize}; use ring::signature::{Ed25519KeyPair, Signature, KeyPair, VerificationAlgorithm, EdDSAParameters}; use rand::Rng; +use crate::types::address::Address; +use bincode::serialize; +use serde::{Serialize,Deserialize}; + #[derive(Serialize, Deserialize, Debug, Default, Clone)] pub struct Transaction { + sender: Address, + receiver: Address, + value: u32 } + #[derive(Serialize, Deserialize, Debug, Default, Clone)] pub struct SignedTransaction { + transaction: Transaction, + signature_vec: Vec<u8>, + public_key_vec: Vec<u8> } /// Create digital signature of a transaction pub fn sign(t: &Transaction, key: &Ed25519KeyPair) -> Signature { - unimplemented!() + let serializeT = bincode::serialize(&t).unwrap(); + let signature = key.sign(&serializeT); + signature + //unimplemented!() } /// Verify digital signature of a transaction, using public key instead of secret key pub fn verify(t: &Transaction, public_key: &[u8], signature: &[u8]) -> bool { - unimplemented!() + let serializeT = serialize(&t).unwrap(); + let unparsed = ring::signature::UnparsedPublicKey::new(&ring::signature::ED25519, public_key); + let result = unparsed.verify(&serializeT, signature); + let mut ans:bool = false; + if result == Ok(()) { + ans = true; + } else { + ans = false; + } + return ans; + //unimplemented!() } #[cfg(any(test, test_utilities))] pub fn generate_random_transaction() -> Transaction { - unimplemented!() + let sender: [u8; 20] = rand::random(); + let receiver: [u8; 20] = rand::random(); + let value: u32 = rand::random(); + let newTransaction = Transaction { + sender: sender.into(), + receiver: receiver.into(), + value: value + }; + newTransaction + //unimplemented!() } // DO NOT CHANGE THIS COMMENT, IT IS FOR AUTOGRADER. BEFORE TEST @@ -53,4 +85,4 @@ mod tests { } } -// DO NOT CHANGE THIS COMMENT, IT IS FOR AUTOGRADER. AFTER TEST \ No newline at end of file +// DO NOT CHANGE THIS COMMENT, IT IS FOR AUTOGRADER. AFTER TEST -- GitLab