summaryrefslogtreecommitdiff
path: root/webhook/src/handler/tests
diff options
context:
space:
mode:
Diffstat (limited to 'webhook/src/handler/tests')
-rw-r--r--webhook/src/handler/tests/handler_integration.rs15
-rw-r--r--webhook/src/handler/tests/signature.rs17
-rw-r--r--webhook/src/handler/tests/utils.rs49
3 files changed, 27 insertions, 54 deletions
diff --git a/webhook/src/handler/tests/handler_integration.rs b/webhook/src/handler/tests/handler_integration.rs
index 6031428..906b347 100644
--- a/webhook/src/handler/tests/handler_integration.rs
+++ b/webhook/src/handler/tests/handler_integration.rs
@@ -4,6 +4,7 @@ use ctor;
use hyper::{Body, Method, Request, StatusCode};
use lazy_static::lazy_static;
use serde_json::json;
+use ed25519_dalek::Keypair;
use common::{
config::test_init,
@@ -35,7 +36,7 @@ static mut NATS: Option<Container<Cli, GenericImage>> = None;
static mut SETTINGS: Option<Settings<Config>> = None;
lazy_static! {
- static ref KEYPAIR: (String, [u8; 64]) = generate_keypair();
+ static ref TEST_KEYPAIR: Keypair = generate_keypair();
static ref DOCKER: Cli = Cli::default();
}
@@ -59,7 +60,7 @@ unsafe fn init() {
address: "0.0.0.0".to_string(),
},
discord: crate::config::Discord {
- public_key: KEYPAIR.0.clone(),
+ public_key: hex::encode(TEST_KEYPAIR.public.clone()),
client_id: 0,
},
},
@@ -103,7 +104,7 @@ async fn respond_to_pings() {
let ping = json!({ "type": 1, "id": "0", "application_id": "0", "token": "random token", "version": 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)
@@ -140,7 +141,7 @@ async fn response_500_when_no_nats_response() {
let ping = json!({ "type": 2, "id": "0", "application_id": "0", "token": "random token", "version": 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);
// we must timeout
let req = Request::builder()
@@ -166,7 +167,7 @@ async fn respond_from_nats_response() {
let ping = json!({ "type": 2, "id": "0", "application_id": "0", "token": "random token", "version": 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);
sub.with_handler(move |msg| {
info!("Received {}", &msg);
@@ -191,7 +192,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)
@@ -212,7 +213,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