Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify certificate verifier usage #1319

Merged
merged 3 commits into from
Oct 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion mithril-aggregator/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mithril-aggregator"
version = "0.4.3"
version = "0.4.4"
description = "A Mithril Aggregator server"
authors = { workspace = true }
edition = { workspace = true }
Expand Down
5 changes: 4 additions & 1 deletion mithril-aggregator/src/dependency_injection/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -621,7 +621,10 @@ impl DependenciesBuilder {
}

async fn build_certificate_verifier(&mut self) -> Result<Arc<dyn CertificateVerifier>> {
let verifier = Arc::new(MithrilCertificateVerifier::new(self.get_logger().await?));
let verifier = Arc::new(MithrilCertificateVerifier::new(
self.get_logger().await?,
self.get_certificate_repository().await?,
));

Ok(verifier)
}
Expand Down
12 changes: 3 additions & 9 deletions mithril-aggregator/src/services/certifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -383,11 +383,7 @@ impl CertifierService for MithrilCertifierService {
);

self.certificate_verifier
.verify_certificate(
&certificate,
self.certificate_repository.clone(),
&self.genesis_verifier,
)
.verify_certificate(&certificate, &self.genesis_verifier.to_verification_key())
.await
.with_context(|| {
format!(
Expand Down Expand Up @@ -444,8 +440,7 @@ impl CertifierService for MithrilCertifierService {
self.certificate_verifier
.verify_certificate_chain(
certificate.to_owned(),
self.certificate_repository.clone(),
&self.genesis_verifier,
&self.genesis_verifier.to_verification_key(),
)
.await
.with_context(|| "CertificateVerifier can not verify certificate chain")?;
Expand Down Expand Up @@ -692,8 +687,7 @@ mod tests {
.certificate_verifier
.verify_certificate(
&certificate_created,
certifier_service.certificate_repository.clone(),
&certifier_service.genesis_verifier,
&certifier_service.genesis_verifier.to_verification_key(),
)
.await
.unwrap();
Expand Down
20 changes: 16 additions & 4 deletions mithril-aggregator/src/tools/genesis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,10 @@ impl GenesisTools {
genesis_signature,
)?;
self.certificate_verifier
.verify_genesis_certificate(&genesis_certificate, &self.genesis_verifier)
.verify_genesis_certificate(
&genesis_certificate,
&self.genesis_verifier.to_verification_key(),
)
.await?;
self.certificate_repository
.create_certificate(genesis_certificate.clone())
Expand Down Expand Up @@ -243,7 +246,10 @@ mod tests {
let connection = Connection::open_with_full_mutex(":memory:").unwrap();
apply_all_migrations_to_db(&connection).unwrap();
let certificate_store = Arc::new(CertificateRepository::new(Arc::new(connection)));
let certificate_verifier = Arc::new(MithrilCertificateVerifier::new(slog_scope::logger()));
let certificate_verifier = Arc::new(MithrilCertificateVerifier::new(
slog_scope::logger(),
certificate_store.clone(),
));
let genesis_avk = create_fake_genesis_avk();
let genesis_verifier = Arc::new(genesis_signer.create_genesis_verifier());
let genesis_tools = GenesisTools::new(
Expand Down Expand Up @@ -295,7 +301,10 @@ mod tests {

assert_eq!(1, last_certificates.len());
certificate_verifier
.verify_genesis_certificate(&last_certificates[0], &genesis_verifier)
.verify_genesis_certificate(
&last_certificates[0],
&genesis_verifier.to_verification_key(),
)
.await
.expect(
"verify_genesis_certificate should successfully validate the genesis certificate",
Expand All @@ -317,7 +326,10 @@ mod tests {

assert_eq!(1, last_certificates.len());
certificate_verifier
.verify_genesis_certificate(&last_certificates[0], &genesis_verifier)
.verify_genesis_certificate(
&last_certificates[0],
&genesis_verifier.to_verification_key(),
)
.await
.expect(
"verify_genesis_certificate should successfully validate the genesis certificate",
Expand Down
2 changes: 1 addition & 1 deletion mithril-client/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mithril-client"
version = "0.4.13"
version = "0.4.14"
description = "A Mithril Client"
authors = { workspace = true }
edition = { workspace = true }
Expand Down
5 changes: 4 additions & 1 deletion mithril-client/src/dependencies/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,10 @@ impl DependenciesBuilder {
}

async fn build_certificate_verifier(&mut self) -> StdResult<Arc<dyn CertificateVerifier>> {
let verifier = MithrilCertificateVerifier::new(self.get_logger().await?);
let verifier = MithrilCertificateVerifier::new(
self.get_logger().await?,
self.get_certificate_client().await?,
);

Ok(Arc::new(verifier))
}
Expand Down
67 changes: 39 additions & 28 deletions mithril-client/src/services/mithril_stake_distribution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,7 @@ use thiserror::Error;

use mithril_common::{
certificate_chain::CertificateVerifier,
crypto_helper::{
ProtocolAggregateVerificationKey, ProtocolGenesisVerificationKey, ProtocolGenesisVerifier,
},
crypto_helper::{ProtocolAggregateVerificationKey, ProtocolGenesisVerificationKey},
entities::{MithrilStakeDistribution, ProtocolMessagePartKey},
messages::MithrilStakeDistributionListItemMessage,
protocol::SignerBuilder,
Expand Down Expand Up @@ -185,11 +183,7 @@ impl MithrilStakeDistributionService for AppMithrilStakeDistributionService {
})
.map_err(MithrilStakeDistributionServiceError::InvalidParameters)?;
self.certificate_verifier
.verify_certificate_chain(
certificate.clone(),
self.certificate_client.clone(),
&ProtocolGenesisVerifier::from_verification_key(genesis_verification_key),
)
.verify_certificate_chain(certificate.clone(), &genesis_verification_key)
.await?;

let avk = self
Expand Down Expand Up @@ -289,10 +283,10 @@ mod tests {
}

/// Instantiate a Genesis Signer and its associated Verifier
pub fn setup_genesis() -> (ProtocolGenesisSigner, ProtocolGenesisVerifier) {
pub fn setup_genesis() -> (ProtocolGenesisSigner, ProtocolGenesisVerificationKey) {
let genesis_signer = ProtocolGenesisSigner::create_deterministic_genesis_signer();
let genesis_verifier = genesis_signer.create_genesis_verifier();
(genesis_signer, genesis_verifier)
(genesis_signer, genesis_verifier.to_verification_key())
}

#[tokio::test]
Expand All @@ -302,10 +296,14 @@ mod tests {
Ok(serde_json::to_string(&get_stake_distribution_list_message()).unwrap())
});
let http_client = Arc::new(http_client);
let certificate_client = Arc::new(CertificateClient::new(http_client.clone()));
let service = AppMithrilStakeDistributionService::new(
Arc::new(MithrilStakeDistributionClient::new(http_client.clone())),
Arc::new(CertificateClient::new(http_client.clone())),
Arc::new(MithrilCertificateVerifier::new(slog_scope::logger())),
certificate_client.clone(),
Arc::new(MithrilCertificateVerifier::new(
slog_scope::logger(),
certificate_client,
)),
);
let list = service.list().await.unwrap();

Expand Down Expand Up @@ -338,7 +336,7 @@ mod tests {
let mut certificate_verifier = MockCertificateVerifierImpl::new();
certificate_verifier
.expect_verify_certificate_chain()
.returning(|_, _, _| Ok(()))
.returning(|_, _| Ok(()))
.times(1);
certificate_verifier
.expect_verify_protocol_message()
Expand All @@ -351,8 +349,7 @@ mod tests {
);

let dirpath = std::env::temp_dir().join("test_download_ok");
let (_, genesis_verifier) = setup_genesis();
let genesis_verification_key = genesis_verifier.to_verification_key();
let (_, genesis_verification_key) = setup_genesis();
let filepath = service
.download(
"hash-123",
Expand Down Expand Up @@ -391,7 +388,7 @@ mod tests {
let mut certificate_verifier = MockCertificateVerifierImpl::new();
certificate_verifier
.expect_verify_certificate_chain()
.returning(|_, _, _| Ok(()))
.returning(|_, _| Ok(()))
.times(1);
certificate_verifier
.expect_verify_protocol_message()
Expand All @@ -404,8 +401,7 @@ mod tests {
);

let dirpath = std::env::temp_dir().join("test_download_ko");
let (_, genesis_verifier) = setup_genesis();
let genesis_verification_key = genesis_verifier.to_verification_key();
let (_, genesis_verification_key) = setup_genesis();
let _error = service
.download(
"hash-123",
Expand All @@ -418,12 +414,15 @@ mod tests {

#[tokio::test]
async fn expand_eventual_artifact_hash_alias_should_returns_hash() {
let http_client = MockAggregatorHTTPClient::new();
let http_client = Arc::new(http_client);
let http_client = Arc::new(MockAggregatorHTTPClient::new());
let certificate_client = Arc::new(CertificateClient::new(http_client.clone()));
let service = AppMithrilStakeDistributionService::new(
Arc::new(MithrilStakeDistributionClient::new(http_client.clone())),
Arc::new(CertificateClient::new(http_client.clone())),
Arc::new(MithrilCertificateVerifier::new(slog_scope::logger())),
certificate_client.clone(),
Arc::new(MithrilCertificateVerifier::new(
slog_scope::logger(),
certificate_client,
)),
);

let hash = service
Expand All @@ -441,10 +440,14 @@ mod tests {
Ok(serde_json::to_string(&get_stake_distribution_list_message()).unwrap())
});
let http_client = Arc::new(http_client);
let certificate_client = Arc::new(CertificateClient::new(http_client.clone()));
let service = AppMithrilStakeDistributionService::new(
Arc::new(MithrilStakeDistributionClient::new(http_client.clone())),
Arc::new(CertificateClient::new(http_client.clone())),
Arc::new(MithrilCertificateVerifier::new(slog_scope::logger())),
certificate_client.clone(),
Arc::new(MithrilCertificateVerifier::new(
slog_scope::logger(),
certificate_client,
)),
);

let hash = service
Expand All @@ -462,10 +465,14 @@ mod tests {
Ok(serde_json::to_string(&get_stake_distribution_list_message()).unwrap())
});
let http_client = Arc::new(http_client);
let certificate_client = Arc::new(CertificateClient::new(http_client.clone()));
let service = AppMithrilStakeDistributionService::new(
Arc::new(MithrilStakeDistributionClient::new(http_client.clone())),
Arc::new(CertificateClient::new(http_client.clone())),
Arc::new(MithrilCertificateVerifier::new(slog_scope::logger())),
certificate_client.clone(),
Arc::new(MithrilCertificateVerifier::new(
slog_scope::logger(),
certificate_client,
)),
);

let hash = service
Expand All @@ -483,10 +490,14 @@ mod tests {
.expect_get_content()
.returning(|_| Ok("[]".to_string()));
let http_client = Arc::new(http_client);
let certificate_client = Arc::new(CertificateClient::new(http_client.clone()));
let service = AppMithrilStakeDistributionService::new(
Arc::new(MithrilStakeDistributionClient::new(http_client.clone())),
Arc::new(CertificateClient::new(http_client.clone())),
Arc::new(MithrilCertificateVerifier::new(slog_scope::logger())),
certificate_client.clone(),
Arc::new(MithrilCertificateVerifier::new(
slog_scope::logger(),
certificate_client,
)),
);

let err = service
Expand Down
13 changes: 5 additions & 8 deletions mithril-client/src/services/mock.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
use std::path::Path;
use std::sync::Arc;

use async_trait::async_trait;
use mithril_common::certificate_chain::{CertificateRetriever, CertificateVerifier};
use mithril_common::crypto_helper::ProtocolGenesisVerifier;
use mithril_common::certificate_chain::CertificateVerifier;
use mithril_common::crypto_helper::ProtocolGenesisVerificationKey;
use mithril_common::digesters::{ImmutableDigester, ImmutableDigesterError};
use mithril_common::entities::{Beacon, Certificate, ProtocolMessage};
use mithril_common::StdResult;
Expand All @@ -30,21 +29,19 @@ mock! {
async fn verify_genesis_certificate(
&self,
genesis_certificate: &Certificate,
genesis_verifier: &ProtocolGenesisVerifier,
genesis_verification_key: &ProtocolGenesisVerificationKey,
) -> StdResult<()>;

async fn verify_certificate(
&self,
certificate: &Certificate,
certificate_retriever: Arc<dyn CertificateRetriever>,
genesis_verifier: &ProtocolGenesisVerifier,
genesis_verification_key: &ProtocolGenesisVerificationKey,
) -> StdResult<Option<Certificate>>;

async fn verify_certificate_chain(
&self,
certificate: Certificate,
certificate_retriever: Arc<dyn CertificateRetriever>,
genesis_verifier: &ProtocolGenesisVerifier,
genesis_verification_key: &ProtocolGenesisVerificationKey,
) -> StdResult<()>;

fn verify_protocol_message(
Expand Down
8 changes: 2 additions & 6 deletions mithril-client/src/services/snapshot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,11 +161,7 @@ impl MithrilClientSnapshotService {
ProtocolGenesisVerifier::from_verification_key(genesis_verification_key);

self.certificate_verifier
.verify_certificate_chain(
certificate.clone(),
self.certificate_client.clone(),
&genesis_verifier,
)
.verify_certificate_chain(certificate.clone(), &genesis_verifier.to_verification_key())
.await?;

Ok(())
Expand Down Expand Up @@ -458,7 +454,7 @@ mod tests {
let mut certificate_verifier = MockCertificateVerifierImpl::new();
certificate_verifier
.expect_verify_certificate_chain()
.returning(|_, _, _| Ok(()))
.returning(|_, _| Ok(()))
.times(1);

let dumb_digester = DumbImmutableDigester::new("snapshot-digest-123", true);
Expand Down
2 changes: 1 addition & 1 deletion mithril-common/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mithril-common"
version = "0.2.129"
version = "0.2.130"
authors = { workspace = true }
edition = { workspace = true }
documentation = { workspace = true }
Expand Down
Loading
Loading