summaryrefslogtreecommitdiff
path: root/webhook/src/handler/tests
diff options
context:
space:
mode:
authorMatthieu <matthieu@developershouse.xyz>2021-10-18 11:54:43 +0400
committerMatthieu <matthieu@developershouse.xyz>2021-10-18 11:54:43 +0400
commitcf84d9526027fd9a9fdd98b2d3b471d6655abe76 (patch)
treeec898336fd8c69cd18f58b344a7144d9d50fff4e /webhook/src/handler/tests
parentb94b0552f81e667bec31352901bbc8c76f1b4216 (diff)
remove dependcy on libsodium (deprecated)
Diffstat (limited to 'webhook/src/handler/tests')
-rw-r--r--webhook/src/handler/tests/handler_integration.rs14
-rw-r--r--webhook/src/handler/tests/signature.rs17
-rw-r--r--webhook/src/handler/tests/utils.rs49
3 files changed, 26 insertions, 54 deletions
diff --git a/webhook/src/handler/tests/handler_integration.rs b/webhook/src/handler/tests/handler_integration.rs
index fd0d67f..2475b94 100644
--- a/webhook/src/handler/tests/handler_integration.rs
+++ b/webhook/src/handler/tests/handler_integration.rs
@@ -47,7 +47,7 @@ lazy_static! {
};
- static ref KEYPAIR: (String, [u8; 64]) = {
+ static ref TEST_KEYPAIR: ed25519_dalek::Keypair = {
generate_keypair()
};
@@ -60,7 +60,7 @@ lazy_static! {
address: "0.0.0.0".to_string(),
},
discord: crate::config::Discord {
- public_key: KEYPAIR.0.clone(),
+ public_key: hex::encode(TEST_KEYPAIR.to_bytes()),
client_id: 0,
},
},
@@ -103,7 +103,7 @@ async fn respond_to_pings() {
let ping = json!({ "type": 1 }).to_string();
let timestamp = "my datetime :)";
let signature_data = [timestamp.as_bytes().to_vec(), ping.as_bytes().to_vec()].concat();
- let signature = sign_message(signature_data, KEYPAIR.1);
+ let signature = sign_message(signature_data, &TEST_KEYPAIR);
let req = Request::builder()
.method(Method::POST)
@@ -144,7 +144,7 @@ async fn response_500_when_no_nats_response() {
let ping = json!({ "type": 0 }).to_string();
let timestamp = "my datetime :)";
let signature_data = [timestamp.as_bytes().to_vec(), ping.as_bytes().to_vec()].concat();
- let signature = sign_message(signature_data, KEYPAIR.1);
+ let signature = sign_message(signature_data, &TEST_KEYPAIR);
// we must timeout
let req = Request::builder()
@@ -169,7 +169,7 @@ async fn respond_from_nats_response() {
let ping = json!({ "type": 0 }).to_string();
let timestamp = "my datetime :)";
let signature_data = [timestamp.as_bytes().to_vec(), ping.as_bytes().to_vec()].concat();
- let signature = sign_message(signature_data, KEYPAIR.1);
+ let signature = sign_message(signature_data, &TEST_KEYPAIR);
sub.with_handler(move |msg| {
info!("Received {}", &msg);
@@ -196,7 +196,7 @@ async fn response_400_when_invalid_json_body() {
let ping = "{".to_string();
let timestamp = "my datetime :)";
let signature_data = [timestamp.as_bytes().to_vec(), ping.as_bytes().to_vec()].concat();
- let signature = sign_message(signature_data, KEYPAIR.1);
+ let signature = sign_message(signature_data, &TEST_KEYPAIR);
let req = Request::builder()
.method(Method::POST)
@@ -219,7 +219,7 @@ async fn response_400_when_invalid_utf8_body() {
let timestamp = "my datetime :)";
let signature_data = [timestamp.as_bytes().to_vec(), ping.to_vec()].concat();
- let signature = sign_message(signature_data, KEYPAIR.1);
+ let signature = sign_message(signature_data, &TEST_KEYPAIR);
let req = Request::builder()
.method(Method::POST)
diff --git a/webhook/src/handler/tests/signature.rs b/webhook/src/handler/tests/signature.rs
index 475e446..490143b 100644
--- a/webhook/src/handler/tests/signature.rs
+++ b/webhook/src/handler/tests/signature.rs
@@ -1,30 +1,33 @@
use crate::handler::signature::validate_signature;
-
+use ed25519_dalek::PublicKey;
#[test]
fn validate_signature_test() {
let signature = "543ec3547d57f9ddb1ec4c5c36503ebf288ffda3da3d510764c9a49c2abb57690ef974c63d174771bdd2481de1066966f57abbec12a3ec171b9f6e2373837002";
- let public_key = "eefe0c24473737cb2035232e3b4eb91c206f0a14684168f3503f7d8316058d6f";
let content = "message de test incroyable".as_bytes().to_vec();
- assert!(validate_signature(public_key, &content, signature))
+ let public_key = PublicKey::from_bytes(&hex::decode("eefe0c24473737cb2035232e3b4eb91c206f0a14684168f3503f7d8316058d6f").unwrap()).unwrap();
+
+ assert!(validate_signature(&public_key, &content, signature))
}
#[test]
fn validate_signature_reverse_test() {
let signature = "543ec3547d57f9ddb1ec4c5c36503ebf288ffda3da3d510764c9a49c2abb57690ef974c63d174771bdd2481de1066966f57abbec12a3ec171b9f6e2373837002";
- let public_key = "c029eea18437292c87c62aec34e7d1bd4e38fe6126f3f7c446de6375dc666044";
+ let public_key = PublicKey::from_bytes(&hex::decode("c029eea18437292c87c62aec34e7d1bd4e38fe6126f3f7c446de6375dc666044").unwrap()).unwrap();
+
let content = "ceci est un test qui ne fonctionnera pas!"
.as_bytes()
.to_vec();
- assert!(!validate_signature(public_key, &content, signature))
+ assert!(!validate_signature(&public_key, &content, signature))
}
#[test]
fn invalid_hex() {
let signature = "zzz";
- let public_key = "zzz";
+ let public_key = PublicKey::from_bytes(&hex::decode("c029eea18437292c87c62aec34e7d1bd4e38fe6126f3f7c446de6375dc666044").unwrap()).unwrap();
+
let content = "ceci est un test qui ne fonctionnera pas!"
.as_bytes()
.to_vec();
- assert!(!validate_signature(public_key, &content, signature))
+ assert!(!validate_signature(&public_key, &content, signature))
} \ No newline at end of file
diff --git a/webhook/src/handler/tests/utils.rs b/webhook/src/handler/tests/utils.rs
index f8cdac2..5e59f09 100644
--- a/webhook/src/handler/tests/utils.rs
+++ b/webhook/src/handler/tests/utils.rs
@@ -1,46 +1,15 @@
-pub fn generate_keypair() -> (
- String,
- [u8; libsodium_sys::crypto_sign_ed25519_SECRETKEYBYTES as usize],
-) {
- use libsodium_sys::crypto_sign_ed25519_keypair;
- let pk_s: String;
+use rand::rngs::OsRng;
+use ed25519_dalek::{Signer, Keypair, Signature};
- let mut pk = [0; libsodium_sys::crypto_sign_ed25519_PUBLICKEYBYTES as usize];
- let mut sk = [0; libsodium_sys::crypto_sign_ed25519_SECRETKEYBYTES as usize];
-
- let pk_p = pk.as_mut_ptr();
- let sk_p = sk.as_mut_ptr();
-
- // generate keypair
- unsafe {
- if crypto_sign_ed25519_keypair(pk_p, sk_p) < 0 {
- panic!("keypair generation failed!");
- }
- };
-
- pk_s = hex::encode(pk);
- return (pk_s, sk);
+pub fn generate_keypair() -> Keypair {
+ let mut csprng = OsRng{};
+ Keypair::generate(&mut csprng)
}
pub fn sign_message(
- msg: Vec<u8>,
- sk: [u8; libsodium_sys::crypto_sign_ed25519_SECRETKEYBYTES as usize],
+ message: Vec<u8>,
+ keypair: &Keypair,
) -> String {
- use libc::c_ulonglong;
- use libsodium_sys::crypto_sign_ed25519_detached;
-
- let len = msg.len();
- let mut signature_len: c_ulonglong = 0;
- let mut str = [0; 64];
- unsafe {
- crypto_sign_ed25519_detached(
- str.as_mut_ptr(),
- &mut signature_len,
- msg.as_ptr(),
- len as u64,
- sk.as_ptr(),
- );
- };
-
- return hex::encode(str);
+ let signature: Signature = keypair.sign(&message);
+ return hex::encode(signature.to_bytes());
} \ No newline at end of file