diff options
Diffstat (limited to 'webhook/src/handler/tests')
| -rw-r--r-- | webhook/src/handler/tests/handler_integration.rs | 14 | ||||
| -rw-r--r-- | webhook/src/handler/tests/signature.rs | 17 | ||||
| -rw-r--r-- | webhook/src/handler/tests/utils.rs | 49 |
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 |
