aboutsummaryrefslogtreecommitdiffstats
path: root/license-generator/paddle/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'license-generator/paddle/src/lib.rs')
-rw-r--r--license-generator/paddle/src/lib.rs30
1 files changed, 24 insertions, 6 deletions
diff --git a/license-generator/paddle/src/lib.rs b/license-generator/paddle/src/lib.rs
index 11fd87f..bdebf1c 100644
--- a/license-generator/paddle/src/lib.rs
+++ b/license-generator/paddle/src/lib.rs
@@ -1,5 +1,17 @@
+#[macro_use]
+extern crate error_chain;
extern crate openssl;
+pub mod errors {
+ use openssl;
+
+ error_chain! {
+ foreign_links {
+ Openssl(openssl::error::ErrorStack);
+ }
+ }
+}
+
use std::fmt::Display;
use std::ops::Deref;
@@ -8,21 +20,27 @@ use openssl::pkey::PKey;
use openssl::rsa::Rsa;
use openssl::sign::Verifier;
+use errors::*;
+
// https://paddle.com/docs/reference-verifying-webhooks/
-pub fn verify_signature<'a, S, I>(pem: &[u8], signature: &str, params: I) -> bool
+pub fn verify_signature<'a, S, I>(
+ pem: &[u8],
+ signature: &str,
+ params: I,
+) -> Result<bool>
where
S: AsRef<str> + Deref<Target = str> + Display,
I: IntoIterator<Item = (S, S)> + PartialOrd,
{
- let rsa = Rsa::public_key_from_pem(pem).unwrap();
- let pkey = PKey::from_rsa(rsa).unwrap();
- let mut verifier = Verifier::new(MessageDigest::sha1(), &pkey).unwrap();
- verifier.update(signature.as_bytes()).unwrap();
+ let rsa = Rsa::public_key_from_pem(pem)?;
+ let pkey = PKey::from_rsa(rsa)?;
+ let mut verifier = Verifier::new(MessageDigest::sha1(), &pkey)?;
+ verifier.update(signature.as_bytes())?;
let signature = php_serialize(params);
- verifier.verify(signature.as_ref()).unwrap()
+ Ok(verifier.verify(signature.as_ref())?)
}
fn php_serialize<'a, S, I>(pairs: I) -> String