Better error handling for P2P connections.

This commit is contained in:
Revertron
2021-05-30 14:43:30 +02:00
parent dbd14e1599
commit 7cd9a871a5
2 changed files with 21 additions and 21 deletions
+7 -8
View File
@@ -1,10 +1,9 @@
use chacha20poly1305::{ChaCha20Poly1305, Key, Nonce};
use chacha20poly1305::aead::{Aead, NewAead};
use chacha20poly1305::aead::{Aead, NewAead, Error};
use std::fmt::{Debug, Formatter};
use std::fmt;
pub const ZERO_NONCE: [u8; 12] = [0u8; 12];
const FAILURE: &str = "encryption failure!";
/// A small wrap-up to use Chacha20 encryption for domain names.
#[derive(Clone)]
@@ -22,14 +21,14 @@ impl Chacha {
Chacha { cipher, nonce: buf }
}
pub fn encrypt(&self, data: &[u8]) -> Vec<u8> {
pub fn encrypt(&self, data: &[u8]) -> Result<Vec<u8>, Error> {
let nonce = Nonce::from(self.nonce.clone());
self.cipher.encrypt(&nonce, data.as_ref()).expect(FAILURE)
self.cipher.encrypt(&nonce, data.as_ref())
}
pub fn decrypt(&self, data: &[u8]) -> Vec<u8> {
pub fn decrypt(&self, data: &[u8]) -> Result<Vec<u8>, Error> {
let nonce = Nonce::from(self.nonce.clone());
self.cipher.decrypt(&nonce, data.as_ref()).expect(FAILURE)
self.cipher.decrypt(&nonce, data.as_ref())
}
pub fn get_nonce(&self) -> &[u8; 12] {
@@ -52,11 +51,11 @@ mod tests {
pub fn test_chacha() {
let buf = b"178135D209C697625E3EC71DA5C760382E54936F824EE5083908DA66B14ECE18";
let chacha1 = Chacha::new(b"178135D209C697625E3EC71DA5C76038", &buf[..12]);
let bytes1 = chacha1.encrypt(b"TEST");
let bytes1 = chacha1.encrypt(b"TEST").unwrap();
println!("{}", to_hex(&bytes1));
let chacha2 = Chacha::new(b"178135D209C697625E3EC71DA5C76038", &buf[..12]);
let bytes2 = chacha2.decrypt(&bytes1);
let bytes2 = chacha2.decrypt(&bytes1).unwrap();
assert_eq!(String::from_utf8(bytes2).unwrap(), "TEST");
let bytes2 = chacha2.encrypt(b"TEST");