aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-11-08 02:27:51 +0100
committerTeddy Wing2018-11-08 02:27:51 +0100
commit63fe6b3eda3726f95a9375c70d1879f290ba56c9 (patch)
treeb987b02245147a3f131817c691e920dc44fcc6b4
parentcb4cffe9aae7b1e345a2cf01811c60c7ef7c2d25 (diff)
downloaddome-key-web-63fe6b3eda3726f95a9375c70d1879f290ba56c9.tar.bz2
paddle: Add rough implementation of `verify_signature()`
Not sure if this works yet as I haven't tested it, but it follows most of the examples in various languages on: https://paddle.com/docs/reference-verifying-webhooks/ Just need to add in the comparison to the input signature.
-rw-r--r--license-generator/Cargo.lock3
-rw-r--r--license-generator/paddle/Cargo.toml1
-rw-r--r--license-generator/paddle/src/lib.rs18
3 files changed, 20 insertions, 2 deletions
diff --git a/license-generator/Cargo.lock b/license-generator/Cargo.lock
index d615538..b11391e 100644
--- a/license-generator/Cargo.lock
+++ b/license-generator/Cargo.lock
@@ -149,6 +149,9 @@ dependencies = [
[[package]]
name = "paddle"
version = "0.0.1"
+dependencies = [
+ "openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
name = "pkg-config"
diff --git a/license-generator/paddle/Cargo.toml b/license-generator/paddle/Cargo.toml
index 0a4f677..06d8b6b 100644
--- a/license-generator/paddle/Cargo.toml
+++ b/license-generator/paddle/Cargo.toml
@@ -3,3 +3,4 @@ name = "paddle"
version = "0.0.1"
[dependencies]
+openssl = "0.10.15"
diff --git a/license-generator/paddle/src/lib.rs b/license-generator/paddle/src/lib.rs
index d153895..787f174 100644
--- a/license-generator/paddle/src/lib.rs
+++ b/license-generator/paddle/src/lib.rs
@@ -1,7 +1,21 @@
+extern crate openssl;
+
+use openssl::hash::MessageDigest;
+use openssl::pkey::PKey;
+use openssl::rsa::Rsa;
+use openssl::sign::Verifier;
+
+
// https://paddle.com/docs/reference-verifying-webhooks/
-fn verify_signature<'a, I>(params: I) -> bool
+fn verify_signature<'a, I>(pem: &[u8], params: I) -> bool
where I: IntoIterator<Item = (&'a str, &'a str)> {
- false
+ let rsa = Rsa::public_key_from_pem(pem).unwrap();
+ let pkey = PKey::from_rsa(rsa).unwrap();
+ let verifier = Verifier::new(MessageDigest::sha1(), &pkey).unwrap();
+
+ let signature = php_serialize(params);
+
+ verifier.verify(signature.as_ref()).unwrap()
}
fn php_serialize<'a, I>(pairs: I) -> String