diff --git a/examples/model-webhook-slash.rs b/examples/model-webhook-slash.rs index c5e1d00876..d320f8aeec 100644 --- a/examples/model-webhook-slash.rs +++ b/examples/model-webhook-slash.rs @@ -17,7 +17,7 @@ use twilight_model::{ }, http::interaction::{InteractionResponse, InteractionResponseData, InteractionResponseType}, }; -use twilight_util::signature_validation::{Key, TIMESTAMP_HEADER}; +use twilight_util::signature_validation::{Key, Signature, TIMESTAMP_HEADER}; /// Public key given from Discord. static PUB_KEY: Lazy = Lazy::new(|| Key::from_hex("PUBLIC_KEY".as_bytes()).unwrap()); @@ -64,7 +64,12 @@ where .headers() .get(twilight_util::signature_validation::SIGNATURE_HEADER) { - hex_sig.to_owned() + let Ok(sig) = Signature::from_slice(hex_sig.as_bytes()) else { + return Ok(Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Full::default())?); + }; + sig } else { return Ok(Response::builder() .status(StatusCode::BAD_REQUEST) @@ -77,7 +82,7 @@ where // Check if the signature matches and else return a error response. if PUB_KEY - .verify(signature.as_bytes(), timestamp.as_bytes(), &whole_body) + .verify(&signature, timestamp.as_bytes(), &whole_body) .is_err() { return Ok(Response::builder() diff --git a/twilight-util/src/signature_validation.rs b/twilight-util/src/signature_validation.rs index a728c0b765..fefceaf34e 100644 --- a/twilight-util/src/signature_validation.rs +++ b/twilight-util/src/signature_validation.rs @@ -93,7 +93,7 @@ pub fn check_signature( let mut buf = Vec::with_capacity(timestamp.len() + body.len()); buf.extend_from_slice(timestamp); buf.extend_from_slice(body); - match key.0.verify_strict(&buf, &signature.inner) { + match key.inner.verify_strict(&buf, &signature.inner) { Ok(()) => Ok(()), Err(e) => Err(SignatureValidationFailure { kind: SignatureValidationFailureKind::InvalidSignature,