Skip to content

Commit 9609b8b

Browse files
committed
Remove openssl, update some Windows deps
1 parent 1060398 commit 9609b8b

File tree

4 files changed

+78
-77
lines changed

4 files changed

+78
-77
lines changed

Cargo.lock

Lines changed: 67 additions & 65 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ rust-version = "1.80.0"
99

1010
[dependencies]
1111
serde_json = "1"
12-
openssl = "0.10"
1312
dotenvy = "0.15"
1413
reqwest = { version = "0.11.4", features = ["json", "blocking"] }
1514
regex = "1"
@@ -46,6 +45,10 @@ postgres-types = { version = "0.2.4", features = ["derive"] }
4645
cron = { version = "0.15.0" }
4746
bytes = "1.1.0"
4847
structopt = "0.3.26"
48+
hmac = "0.12.1"
49+
sha1 = "0.10.6"
50+
digest = "0.10.7"
51+
subtle = "2.6.1"
4952

5053
[dependencies.serde]
5154
version = "1"

src/payload.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use openssl::{hash::MessageDigest, memcmp, pkey::PKey, sign::Signer};
1+
use hmac::{Hmac, Mac};
2+
use sha1::Sha1;
23
use std::fmt;
34

45
#[derive(Debug)]
@@ -22,18 +23,12 @@ pub fn assert_signed(signature: &str, payload: &[u8]) -> Result<(), SignedPayloa
2223
}
2324
};
2425

25-
let key = PKey::hmac(
26+
let mut mac = Hmac::<Sha1>::new_from_slice(
2627
std::env::var("GITHUB_WEBHOOK_SECRET")
2728
.expect("Missing GITHUB_WEBHOOK_SECRET")
2829
.as_bytes(),
2930
)
3031
.unwrap();
31-
let mut signer = Signer::new(MessageDigest::sha1(), &key).unwrap();
32-
signer.update(&payload).unwrap();
33-
let hmac = signer.sign_to_vec().unwrap();
34-
35-
if !memcmp::eq(&hmac, &signature) {
36-
return Err(SignedPayloadError);
37-
}
38-
Ok(())
32+
mac.update(&payload);
33+
mac.verify_slice(&signature).map_err(|_| SignedPayloadError)
3934
}

src/zulip.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use std::env;
1212
use std::fmt::Write as _;
1313
use std::str::FromStr;
1414
use std::sync::LazyLock;
15+
use subtle::ConstantTimeEq;
1516
use tracing as log;
1617

1718
static ZULIP_URL: LazyLock<String> =
@@ -130,7 +131,7 @@ pub async fn respond(ctx: &Context, req: Request) -> String {
130131
async fn process_zulip_request(ctx: &Context, req: Request) -> anyhow::Result<Option<String>> {
131132
let expected_token = std::env::var("ZULIP_TOKEN").expect("`ZULIP_TOKEN` set for authorization");
132133

133-
if !openssl::memcmp::eq(req.token.as_bytes(), expected_token.as_bytes()) {
134+
if !bool::from(req.token.as_bytes().ct_eq(expected_token.as_bytes())) {
134135
anyhow::bail!("Invalid authorization.");
135136
}
136137

0 commit comments

Comments
 (0)