1pub mod wallet;
2pub use wallet::Wallet;
3
4pub mod signature;
5pub use signature::EthereumSignature;
6
7#[cfg(test)]
16mod tests {
17 use super::*;
18
19 #[tokio::test]
20 async fn test_random_wallet_generation() {
21 let wallet = Wallet::new();
22 println!("Private Key: {}", wallet.privkey);
23 println!("Compressed Public Key: {}", wallet.pubkey_compressed);
24 println!("Uncompressed Public Key: {}", wallet.pubkey_uncompressed);
25 println!("Ethereum Address: {}", wallet.address);
26 }
27
28 #[tokio::test]
29 async fn test_wallet_from_private_key() {
30 let wallet = Wallet::with_private_key(Some("0x1b5667a5972dba94b9baf4026288e4b51fdbc0c9c896473d394b78c5bd2ee92e"));
31 println!("Private Key: {}", wallet.privkey);
32 println!("Compressed Public Key: {}", wallet.pubkey_compressed);
33 println!("Uncompressed Public Key: {}", wallet.pubkey_uncompressed);
34 println!("Ethereum Address: {}", wallet.address);
35 }
36
37
38 #[tokio::test]
39 async fn test_sign_message() {
40 let wallet = Wallet::new();
41 let message = "Hello, world!";
42 let signature = wallet.sign_message(message).await.unwrap_or_else(|e| panic!("Failed to sign message: {}", e));
43
44 let sig_json: serde_json::Value = serde_json::from_str(&signature).unwrap_or_else(|e| panic!("Failed to parse signature JSON: {}", e));
46 println!("Signature JSON: {}", serde_json::to_string_pretty(&sig_json).unwrap_or_else(|e| panic!("Failed to format JSON: {}", e)));
47
48 assert!(sig_json.get("address").is_some());
50 assert!(sig_json.get("signed_message").is_some());
51 assert!(sig_json.get("signature").is_some());
52 }
53
54
55
56 #[tokio::test]
57 async fn test_check_signature_is_valid() {
58 let wallet = Wallet::new();
59 let message = "Hello, world!";
60 let signature_json = wallet.sign_message(&message).await.unwrap_or_else(|e| panic!("Failed to sign message: {}", e));
61
62 let sig_json: serde_json::Value = serde_json::from_str(&signature_json).unwrap_or_else(|e| panic!("Failed to parse signature JSON: {}", e));
64 let address = sig_json["address"].as_str().unwrap().to_string();
65 let signed_message = sig_json["signed_message"].as_str().unwrap().to_string();
66 let signature = sig_json["signature"].as_str().unwrap().to_string();
67
68 println!("Address: {}", address);
69 println!("Signed Message: {}", signed_message);
70 println!("Signature: {}", signature);
71
72 let eth_signature = EthereumSignature::new(address, signed_message, signature);
73 let is_valid = eth_signature.verify().unwrap_or_else(|e| panic!("Failed to verify signature: {}", e));
74 println!("Signature is valid: {}", is_valid);
75 assert!(is_valid, "Signature verification failed");
76 }
77 #[tokio::test]
78 async fn test_encrypt_and_decrypt_message() {
79 let sender = Wallet::with_private_key(Some("0x1f87cca105d954f1ae230f6ccdf8ea2c7df5eec8bb5d6c706344b42b725bd07d"));
80 let receiver = Wallet::with_private_key(Some("0xa4df62cbf0d00a76c6bceb5c6606823b8f4edb69c8b68607621dcc0a2e87a766"));
81 let message = "message from d07d to a4df: hello friend...ggagagag.?";
82 let encrypted_message = sender.encrypt_message(message, &receiver.pubkey_compressed).unwrap_or_else(|e| panic!("Failed to encrypt message: {}", e));
83 println!("Encrypted Message from sender(d07d) to receiver(a4df): {}", encrypted_message);
84 println!("Length of encrypted message: {}", encrypted_message.len());
85 let decrypted_message = receiver.decrypt_message(&encrypted_message).unwrap_or_else(|e| panic!("Failed to decrypt message: {}", e));
86 println!("Decrypted Message from receiver(a4df) to sender(d07d): {}", decrypted_message);
87 }
88 #[tokio::test]
89 async fn test_decrypt_message() {
90 let wallet = Wallet::new();
91 println!("private key {}", wallet.privkey);
92 let message = "Hello, world!";
93 let encrypted_message = wallet.encrypt_message(message, &wallet.pubkey_uncompressed).unwrap_or_else(|e| panic!("Failed to encrypt message: {}", e));
94 println!("Encrypted Message: {}", encrypted_message);
95 let decrypted_message = wallet.decrypt_message(&encrypted_message).unwrap_or_else(|e| panic!("Failed to decrypt message: {}", e));
96 println!("Decrypted Message: {}", decrypted_message);
97 }
98
99 #[tokio::test]
100 async fn test_decrypt_message_with_wrong_encrypted_message() {
101 let wallet = Wallet::with_private_key(Some("0xa4df62cbf0d00a76c6bceb5c6606823b8f4edb69c8b68607621dcc0a2e87a766"));
102 let encrypted_message = "0x03071daa81473f20e116f6e3985c4bae4da2ae4a7fe8a54486e61f6eb3872d2e8d1290448460c2a7f3a7ae7ff4bbc2d61a2111a8a5ca101bd593ca1bbc7dbeaf4cff3f4721d29e834f6d71e79e".to_string();
103 let decrypted_message = wallet.decrypt_message(&encrypted_message).unwrap_or_else(|e| panic!("Failed to decrypt message: {}", e));
104 println!("Decrypted Message: {}", decrypted_message);
105 }
106
107}