Merge pull request #256 from Plume-org/verify-signature
Verify activity's signature
This commit is contained in:
@@ -12,7 +12,7 @@ use openssl::{
|
||||
hash::MessageDigest,
|
||||
pkey::{PKey, Private},
|
||||
rsa::Rsa,
|
||||
sign::Signer
|
||||
sign::{Signer,Verifier}
|
||||
};
|
||||
use webfinger::*;
|
||||
|
||||
@@ -309,6 +309,13 @@ impl sign::Signer for Blog {
|
||||
signer.update(to_sign.as_bytes()).unwrap();
|
||||
signer.sign_to_vec().unwrap()
|
||||
}
|
||||
|
||||
fn verify(&self, data: String, signature: Vec<u8>) -> bool {
|
||||
let key = PKey::from_rsa(Rsa::public_key_from_pem(self.public_key.as_ref()).unwrap()).unwrap();
|
||||
let mut verifier = Verifier::new(MessageDigest::sha256(), &key).unwrap();
|
||||
verifier.update(data.as_bytes()).unwrap();
|
||||
verifier.verify(&signature).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl NewBlog {
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
use rocket::request::{self, FromRequest, Request};
|
||||
use rocket::{http::{Header, HeaderMap}, Outcome};
|
||||
|
||||
|
||||
pub struct Headers<'r>(pub HeaderMap<'r>);
|
||||
|
||||
impl<'a, 'r> FromRequest<'a, 'r> for Headers<'r> {
|
||||
type Error = ();
|
||||
|
||||
fn from_request(request: &'a Request<'r>) -> request::Outcome<Self, ()> {
|
||||
let mut headers = HeaderMap::new();
|
||||
for header in request.headers().clone().into_iter() {
|
||||
headers.add(header);
|
||||
}
|
||||
let ori = request.uri();
|
||||
let uri = if let Some(query) = ori.query() {
|
||||
format!("{}?{}", ori.path(), query)
|
||||
} else {
|
||||
ori.path().to_owned()
|
||||
};
|
||||
headers.add(Header::new("(request-target)",
|
||||
format!("{} {}",
|
||||
request.method().as_str().to_lowercase(),
|
||||
uri)));
|
||||
Outcome::Success(Headers(headers))
|
||||
}
|
||||
}
|
||||
@@ -219,6 +219,7 @@ pub mod blogs;
|
||||
pub mod comments;
|
||||
pub mod db_conn;
|
||||
pub mod follows;
|
||||
pub mod headers;
|
||||
pub mod instance;
|
||||
pub mod likes;
|
||||
pub mod medias;
|
||||
|
||||
@@ -624,6 +624,13 @@ impl Signer for User {
|
||||
signer.update(to_sign.as_bytes()).unwrap();
|
||||
signer.sign_to_vec().unwrap()
|
||||
}
|
||||
|
||||
fn verify(&self, data: String, signature: Vec<u8>) -> bool {
|
||||
let key = PKey::from_rsa(Rsa::public_key_from_pem(self.public_key.as_ref()).unwrap()).unwrap();
|
||||
let mut verifier = sign::Verifier::new(MessageDigest::sha256(), &key).unwrap();
|
||||
verifier.update(data.as_bytes()).unwrap();
|
||||
verifier.verify(&signature).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl NewUser {
|
||||
|
||||
Reference in New Issue
Block a user