forked from mirrors/relay
Update rsa
This commit is contained in:
parent
9cdebeae4c
commit
34dc1a2281
6 changed files with 30 additions and 29 deletions
18
Cargo.lock
generated
18
Cargo.lock
generated
|
@ -349,8 +349,6 @@ dependencies = [
|
||||||
"rustls-pemfile",
|
"rustls-pemfile",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2",
|
|
||||||
"signature",
|
|
||||||
"sled",
|
"sled",
|
||||||
"teloxide",
|
"teloxide",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
@ -2617,9 +2615,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rsa"
|
name = "rsa"
|
||||||
version = "0.7.2"
|
version = "0.8.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c"
|
checksum = "89b3896c9b7790b70a9aa314a30e4ae114200992a19c96cbe0ca6070edd32ab8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"digest",
|
"digest",
|
||||||
|
@ -2630,19 +2628,19 @@ dependencies = [
|
||||||
"pkcs1",
|
"pkcs1",
|
||||||
"pkcs8",
|
"pkcs8",
|
||||||
"rand_core",
|
"rand_core",
|
||||||
|
"sha2",
|
||||||
"signature",
|
"signature",
|
||||||
"smallvec",
|
|
||||||
"subtle",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rsa-magic-public-key"
|
name = "rsa-magic-public-key"
|
||||||
version = "0.6.0"
|
version = "0.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8dc035c92400b90ee471e0ea7e041bfadd4da26dd3e716a84053d0075ed9c159"
|
checksum = "a86cb93425d6e176cfa39d63e226289f13154173f18274fab609c71ff35ba3a0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.13.1",
|
"base64 0.21.0",
|
||||||
"num-bigint-dig",
|
"num-bigint-dig",
|
||||||
"rsa",
|
"rsa",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
@ -2871,9 +2869,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "signature"
|
name = "signature"
|
||||||
version = "1.6.4"
|
version = "2.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
|
checksum = "8fe458c98333f9c8152221191a77e2a44e8325d0193484af2e9421a53019e57d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"digest",
|
"digest",
|
||||||
"rand_core",
|
"rand_core",
|
||||||
|
|
|
@ -54,14 +54,12 @@ opentelemetry-otlp = "0.11"
|
||||||
pin-project-lite = "0.2.9"
|
pin-project-lite = "0.2.9"
|
||||||
quanta = "0.10.1"
|
quanta = "0.10.1"
|
||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
rsa = "0.7"
|
rsa = { version = "0.8", features = ["sha2"] }
|
||||||
rsa-magic-public-key = "0.6.0"
|
rsa-magic-public-key = "0.7.0"
|
||||||
rustls = "0.20.7"
|
rustls = "0.20.7"
|
||||||
rustls-pemfile = "1.0.1"
|
rustls-pemfile = "1.0.1"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
sha2 = { version = "0.10", features = ["oid"] }
|
|
||||||
signature = "1.6.4"
|
|
||||||
sled = "0.34.7"
|
sled = "0.34.7"
|
||||||
teloxide = { version = "0.11.1", default-features = false, features = [
|
teloxide = { version = "0.11.1", default-features = false, features = [
|
||||||
"ctrlc_handler",
|
"ctrlc_handler",
|
||||||
|
|
|
@ -12,8 +12,8 @@ use activitystreams::{
|
||||||
};
|
};
|
||||||
use config::Environment;
|
use config::Environment;
|
||||||
use http_signature_normalization_actix::prelude::VerifyDigest;
|
use http_signature_normalization_actix::prelude::VerifyDigest;
|
||||||
|
use rsa::sha2::{Digest, Sha256};
|
||||||
use rustls::{Certificate, PrivateKey};
|
use rustls::{Certificate, PrivateKey};
|
||||||
use sha2::{Digest, Sha256};
|
|
||||||
use std::{
|
use std::{
|
||||||
io::BufReader,
|
io::BufReader,
|
||||||
net::{IpAddr, SocketAddr},
|
net::{IpAddr, SocketAddr},
|
||||||
|
|
|
@ -99,13 +99,13 @@ pub(crate) enum ErrorKind {
|
||||||
PrepareSign(#[from] PrepareSignError),
|
PrepareSign(#[from] PrepareSignError),
|
||||||
|
|
||||||
#[error("Couldn't sign digest")]
|
#[error("Couldn't sign digest")]
|
||||||
Signature(#[from] signature::Error),
|
Signature(#[from] rsa::signature::Error),
|
||||||
|
|
||||||
#[error("Couldn't read signature")]
|
#[error("Couldn't read signature")]
|
||||||
ReadSignature(signature::Error),
|
ReadSignature(rsa::signature::Error),
|
||||||
|
|
||||||
#[error("Couldn't verify signature")]
|
#[error("Couldn't verify signature")]
|
||||||
VerifySignature(signature::Error),
|
VerifySignature(rsa::signature::Error),
|
||||||
|
|
||||||
#[error("Couldn't parse the signature header")]
|
#[error("Couldn't parse the signature header")]
|
||||||
HeaderValidation(#[from] actix_web::http::header::InvalidHeaderValue),
|
HeaderValidation(#[from] actix_web::http::header::InvalidHeaderValue),
|
||||||
|
|
|
@ -8,9 +8,10 @@ use activitystreams::{base::BaseExt, iri, iri_string::types::IriString};
|
||||||
use actix_web::web;
|
use actix_web::web;
|
||||||
use base64::{engine::general_purpose::STANDARD, Engine};
|
use base64::{engine::general_purpose::STANDARD, Engine};
|
||||||
use http_signature_normalization_actix::{prelude::*, verify::DeprecatedAlgorithm};
|
use http_signature_normalization_actix::{prelude::*, verify::DeprecatedAlgorithm};
|
||||||
use rsa::{pkcs1v15::VerifyingKey, pkcs8::DecodePublicKey, RsaPublicKey};
|
use rsa::{
|
||||||
use sha2::{Digest, Sha256};
|
pkcs1v15::Signature, pkcs1v15::VerifyingKey, pkcs8::DecodePublicKey, sha2::Sha256,
|
||||||
use signature::{DigestVerifier, Signature};
|
signature::Verifier, RsaPublicKey,
|
||||||
|
};
|
||||||
use std::{future::Future, pin::Pin};
|
use std::{future::Future, pin::Pin};
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
|
@ -129,12 +130,12 @@ async fn do_verify(
|
||||||
web::block(move || {
|
web::block(move || {
|
||||||
span.in_scope(|| {
|
span.in_scope(|| {
|
||||||
let decoded = STANDARD.decode(signature)?;
|
let decoded = STANDARD.decode(signature)?;
|
||||||
let signature = Signature::from_bytes(&decoded).map_err(ErrorKind::ReadSignature)?;
|
let signature =
|
||||||
let hashed = Sha256::new_with_prefix(signing_string.as_bytes());
|
Signature::try_from(decoded.as_slice()).map_err(ErrorKind::ReadSignature)?;
|
||||||
|
|
||||||
let verifying_key = VerifyingKey::new_with_prefix(public_key);
|
let verifying_key = VerifyingKey::<Sha256>::new_with_prefix(public_key);
|
||||||
verifying_key
|
verifying_key
|
||||||
.verify_digest(hashed, &signature)
|
.verify(signing_string.as_bytes(), &signature)
|
||||||
.map_err(ErrorKind::VerifySignature)?;
|
.map_err(ErrorKind::VerifySignature)?;
|
||||||
|
|
||||||
Ok(()) as Result<(), Error>
|
Ok(()) as Result<(), Error>
|
||||||
|
|
|
@ -9,9 +9,12 @@ use base64::{engine::general_purpose::STANDARD, Engine};
|
||||||
use dashmap::DashMap;
|
use dashmap::DashMap;
|
||||||
use http_signature_normalization_actix::prelude::*;
|
use http_signature_normalization_actix::prelude::*;
|
||||||
use rand::thread_rng;
|
use rand::thread_rng;
|
||||||
use rsa::{pkcs1v15::SigningKey, RsaPrivateKey};
|
use rsa::{
|
||||||
use sha2::{Digest, Sha256};
|
pkcs1v15::SigningKey,
|
||||||
use signature::RandomizedSigner;
|
sha2::{Digest, Sha256},
|
||||||
|
signature::RandomizedSigner,
|
||||||
|
RsaPrivateKey,
|
||||||
|
};
|
||||||
use std::{
|
use std::{
|
||||||
cell::RefCell,
|
cell::RefCell,
|
||||||
rc::Rc,
|
rc::Rc,
|
||||||
|
@ -391,7 +394,8 @@ struct Signer {
|
||||||
impl Signer {
|
impl Signer {
|
||||||
fn sign(&self, signing_string: &str) -> Result<String, Error> {
|
fn sign(&self, signing_string: &str) -> Result<String, Error> {
|
||||||
let signing_key = SigningKey::<Sha256>::new_with_prefix(self.private_key.clone());
|
let signing_key = SigningKey::<Sha256>::new_with_prefix(self.private_key.clone());
|
||||||
let signature = signing_key.try_sign_with_rng(thread_rng(), signing_string.as_bytes())?;
|
let signature =
|
||||||
|
signing_key.try_sign_with_rng(&mut thread_rng(), signing_string.as_bytes())?;
|
||||||
Ok(STANDARD.encode(signature.as_ref()))
|
Ok(STANDARD.encode(signature.as_ref()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue