Skip to content

Commit 1e46b9f

Browse files
committed
Factor out the signing code so the test framework can use it
1 parent e9a1639 commit 1e46b9f

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/payload.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ impl fmt::Display for SignedPayloadError {
1212

1313
impl std::error::Error for SignedPayloadError {}
1414

15+
pub fn sign(secret: &str, payload: &[u8]) -> Vec<u8> {
16+
let key = PKey::hmac(secret.as_bytes()).unwrap();
17+
let mut signer = Signer::new(MessageDigest::sha1(), &key).unwrap();
18+
signer.update(&payload).unwrap();
19+
signer.sign_to_vec().unwrap()
20+
}
21+
1522
pub fn assert_signed(signature: &str, payload: &[u8]) -> Result<(), SignedPayloadError> {
1623
let signature = signature.get("sha1=".len()..).ok_or(SignedPayloadError)?;
1724
let signature = match hex::decode(&signature) {
@@ -22,15 +29,8 @@ pub fn assert_signed(signature: &str, payload: &[u8]) -> Result<(), SignedPayloa
2229
}
2330
};
2431

25-
let key = PKey::hmac(
26-
std::env::var("GITHUB_WEBHOOK_SECRET")
27-
.expect("Missing GITHUB_WEBHOOK_SECRET")
28-
.as_bytes(),
29-
)
30-
.unwrap();
31-
let mut signer = Signer::new(MessageDigest::sha1(), &key).unwrap();
32-
signer.update(&payload).unwrap();
33-
let hmac = signer.sign_to_vec().unwrap();
32+
let secret = std::env::var("GITHUB_WEBHOOK_SECRET").expect("Missing GITHUB_WEBHOOK_SECRET");
33+
let hmac = sign(&secret, payload);
3434

3535
if !memcmp::eq(&hmac, &signature) {
3636
return Err(SignedPayloadError);

0 commit comments

Comments
 (0)