Skip to content

Commit 2223b6e

Browse files
authored
Merge pull request #340 from astoycos/bump-tough
update tough dep
2 parents cb23df0 + e817116 commit 2223b6e

30 files changed

+127
-169
lines changed

Cargo.toml

+4-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ rekor-native-tls = ["reqwest/native-tls", "rekor"]
4040
rekor-rustls-tls = ["reqwest/rustls-tls", "rekor"]
4141
rekor = ["reqwest"]
4242

43-
sigstore-trust-root = ["tough", "regex"]
43+
sigstore-trust-root = ["futures-util", "tough", "regex", "tokio/sync"]
4444

4545
sign = []
4646

@@ -81,6 +81,8 @@ ecdsa = { version = "0.16.7", features = ["pkcs8", "digest", "der", "signing"] }
8181
ed25519 = { version = "2.2.1", features = ["alloc"] }
8282
ed25519-dalek = { version = "2.0.0-rc.2", features = ["pkcs8", "rand_core"] }
8383
elliptic-curve = { version = "0.13.5", features = ["arithmetic", "pem"] }
84+
futures = "0.3"
85+
futures-util = { version = "0.3.30", optional = true }
8486
lazy_static = "1.4.0"
8587
oci-distribution = { version = "0.10", default-features = false, optional = true }
8688
olpc-cjson = "0.1"
@@ -116,7 +118,7 @@ sigstore_protobuf_specs = "0.1.0-rc.2"
116118
thiserror = "1.0.30"
117119
tokio = { version = "1.17.0", features = ["rt"] }
118120
tokio-util = { version = "0.7.10", features = ["io-util"] }
119-
tough = { version = "0.14", features = ["http"], optional = true }
121+
tough = { version = "0.17.1", features = ["http"], optional = true }
120122
tracing = "0.1.31"
121123
url = "2.2.2"
122124
x509-cert = { version = "0.2.2", features = ["builder", "pem", "std"] }

examples/cosign/sign/main.rs

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ use sigstore::cosign::constraint::{AnnotationMarker, PrivateKeySigner};
1818
use sigstore::cosign::{Constraint, CosignCapabilities, SignatureLayer};
1919
use sigstore::crypto::SigningScheme;
2020
use sigstore::registry::{Auth, ClientConfig, ClientProtocol, OciReference};
21-
use std::convert::TryFrom;
2221
use tracing::{debug, warn};
2322
use zeroize::Zeroizing;
2423

examples/cosign/verify/main.rs

+6-11
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ use sigstore::crypto::SigningScheme;
2323
use sigstore::errors::SigstoreVerifyConstraintsError;
2424
use sigstore::registry::{ClientConfig, ClientProtocol, OciReference};
2525
use sigstore::trust::sigstore::SigstoreTrustRoot;
26-
use std::boxed::Box;
27-
use std::convert::TryFrom;
2826
use std::time::Instant;
2927

3028
extern crate anyhow;
@@ -34,7 +32,6 @@ extern crate clap;
3432
use clap::Parser;
3533

3634
use std::{collections::HashMap, fs};
37-
use tokio::task::spawn_blocking;
3835

3936
extern crate tracing_subscriber;
4037
use tracing::{info, warn};
@@ -133,7 +130,7 @@ async fn run_app(
133130

134131
let mut client_builder =
135132
sigstore::cosign::ClientBuilder::default().with_oci_client_config(oci_client_config);
136-
client_builder = client_builder.with_trust_repository(frd)?;
133+
client_builder = client_builder.with_trust_repository(frd).await?;
137134

138135
let cert_chain: Option<Vec<sigstore::registry::Certificate>> = match cli.cert_chain.as_ref() {
139136
None => None,
@@ -187,7 +184,7 @@ async fn run_app(
187184
}
188185
if let Some(path_to_cert) = cli.cert.as_ref() {
189186
let cert = fs::read(path_to_cert).map_err(|e| anyhow!("Cannot read cert: {:?}", e))?;
190-
let require_rekor_bundle = if !frd.rekor_keys()?.is_empty() {
187+
let require_rekor_bundle = if !frd.rekor_keys().await?.is_empty() {
191188
true
192189
} else {
193190
warn!("certificate based verification is weaker when Rekor integration is disabled");
@@ -230,12 +227,10 @@ async fn run_app(
230227

231228
async fn fulcio_and_rekor_data(cli: &Cli) -> anyhow::Result<Box<dyn sigstore::trust::TrustRoot>> {
232229
if cli.use_sigstore_tuf_data {
233-
let repo: sigstore::errors::Result<SigstoreTrustRoot> = spawn_blocking(|| {
234-
info!("Downloading data from Sigstore TUF repository");
235-
SigstoreTrustRoot::new(None)?.prefetch()
236-
})
237-
.await
238-
.map_err(|e| anyhow!("Error spawning blocking task inside of tokio: {}", e))?;
230+
info!("Downloading data from Sigstore TUF repository");
231+
232+
let repo: sigstore::errors::Result<SigstoreTrustRoot> =
233+
SigstoreTrustRoot::new(None).await?.prefetch().await;
239234

240235
return Ok(Box::new(repo?));
241236
};

src/cosign/client_builder.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,15 @@ impl<'a> ClientBuilder<'a> {
7272
///
7373
/// Enables Fulcio and Rekor integration with the given trust repository.
7474
/// See [crate::sigstore::TrustRoot] for more details on trust repositories.
75-
pub fn with_trust_repository<R: TrustRoot + ?Sized>(mut self, repo: &'a R) -> Result<Self> {
76-
let rekor_keys = repo.rekor_keys()?;
75+
pub async fn with_trust_repository<R: TrustRoot + ?Sized>(
76+
mut self,
77+
repo: &'a R,
78+
) -> Result<Self> {
79+
let rekor_keys = repo.rekor_keys().await?;
7780
if !rekor_keys.is_empty() {
7881
self.rekor_pub_key = Some(rekor_keys[0]);
7982
}
80-
self.fulcio_certs = repo.fulcio_certs()?;
83+
self.fulcio_certs = repo.fulcio_certs().await?;
8184

8285
Ok(self)
8386
}

src/cosign/mod.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ use crate::crypto::{CosignVerificationKey, Signature};
4848
use crate::errors::SigstoreError;
4949
use base64::{engine::general_purpose::STANDARD as BASE64_STD_ENGINE, Engine as _};
5050
use pkcs8::der::Decode;
51-
use std::convert::TryFrom;
5251
use x509_cert::Certificate;
5352

5453
pub mod bundle;
@@ -284,7 +283,6 @@ where
284283
#[cfg(test)]
285284
mod tests {
286285
use serde_json::json;
287-
use std::collections::HashMap;
288286
use webpki::types::CertificateDer;
289287

290288
use super::constraint::{AnnotationMarker, PrivateKeySigner};
@@ -296,7 +294,7 @@ mod tests {
296294
AnnotationVerifier, CertSubjectEmailVerifier, VerificationConstraintVec,
297295
};
298296
use crate::crypto::certificate_pool::CertificatePool;
299-
use crate::crypto::{CosignVerificationKey, SigningScheme};
297+
use crate::crypto::SigningScheme;
300298

301299
#[cfg(feature = "test-registry")]
302300
use testcontainers::{clients, core::WaitFor};

src/cosign/signature_layers.rs

-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use const_oid::ObjectIdentifier;
1717
use digest::Digest;
1818
use oci_distribution::client::ImageLayer;
1919
use serde::Serialize;
20-
use std::convert::TryFrom;
2120
use std::{collections::HashMap, fmt};
2221
use tracing::{debug, info, warn};
2322
use x509_cert::der::DecodePem;
@@ -550,8 +549,6 @@ pub(crate) mod tests {
550549
use super::*;
551550
use openssl::x509::X509;
552551
use serde_json::json;
553-
use std::collections::HashMap;
554-
use std::convert::TryFrom;
555552

556553
use crate::cosign::tests::{get_fulcio_cert_pool, get_rekor_public_key};
557554

src/cosign/verification_constraint/cert_subject_email_verifier.rs

-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ mod tests {
126126
build_correct_signature_layer_with_certificate,
127127
build_correct_signature_layer_without_bundle,
128128
};
129-
use crate::cosign::signature_layers::CertificateSubject;
130129
use crate::cosign::verification_constraint::CertSubjectUrlVerifier;
131130

132131
#[test]

src/cosign/verification_constraint/cert_subject_url_verifier.rs

-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ mod tests {
7474
build_correct_signature_layer_with_certificate,
7575
build_correct_signature_layer_without_bundle,
7676
};
77-
use crate::cosign::signature_layers::CertificateSubject;
7877
use crate::cosign::verification_constraint::CertSubjectEmailVerifier;
7978

8079
#[test]

src/cosign/verification_constraint/certificate_verifier.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use chrono::{DateTime, Utc};
22
use pkcs8::der::Decode;
3-
use std::convert::TryFrom;
43
use tracing::warn;
54
use webpki::types::CertificateDer;
65
use x509_cert::Certificate;

src/crypto/certificate.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ mod tests {
126126
use super::*;
127127
use crate::crypto::tests::*;
128128

129-
use chrono::{TimeDelta, Utc};
129+
use chrono::TimeDelta;
130130
use x509_cert::der::Decode;
131131

132132
#[test]

src/crypto/mod.rs

+13-15
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
//! Structures and constants required to perform cryptographic operations.
1717
1818
use sha2::{Sha256, Sha384};
19-
use std::convert::TryFrom;
2019

2120
use crate::errors::*;
2221

@@ -60,20 +59,19 @@ pub enum SigningScheme {
6059
ED25519,
6160
}
6261

63-
impl ToString for SigningScheme {
64-
fn to_string(&self) -> String {
65-
let str = match self {
66-
SigningScheme::RSA_PSS_SHA256(_) => "RSA_PSS_SHA256",
67-
SigningScheme::RSA_PSS_SHA384(_) => "RSA_PSS_SHA384",
68-
SigningScheme::RSA_PSS_SHA512(_) => "RSA_PSS_SHA512",
69-
SigningScheme::RSA_PKCS1_SHA256(_) => "RSA_PKCS1_SHA256",
70-
SigningScheme::RSA_PKCS1_SHA384(_) => "RSA_PKCS1_SHA384",
71-
SigningScheme::RSA_PKCS1_SHA512(_) => "RSA_PKCS1_SHA512",
72-
SigningScheme::ECDSA_P256_SHA256_ASN1 => "ECDSA_P256_SHA256_ASN1",
73-
SigningScheme::ECDSA_P384_SHA384_ASN1 => "ECDSA_P384_SHA384_ASN1",
74-
SigningScheme::ED25519 => "ED25519",
75-
};
76-
String::from(str)
62+
impl std::fmt::Display for SigningScheme {
63+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
64+
match self {
65+
SigningScheme::RSA_PSS_SHA256(_) => write!(f, "RSA_PSS_SHA256"),
66+
SigningScheme::RSA_PSS_SHA384(_) => write!(f, "RSA_PSS_SHA384"),
67+
SigningScheme::RSA_PSS_SHA512(_) => write!(f, "RSA_PSS_SHA512"),
68+
SigningScheme::RSA_PKCS1_SHA256(_) => write!(f, "RSA_PKCS1_SHA256"),
69+
SigningScheme::RSA_PKCS1_SHA384(_) => write!(f, "RSA_PKCS1_SHA384"),
70+
SigningScheme::RSA_PKCS1_SHA512(_) => write!(f, "RSA_PKCS1_SHA512"),
71+
SigningScheme::ECDSA_P256_SHA256_ASN1 => write!(f, "ECDSA_P256_SHA256_ASN1"),
72+
SigningScheme::ECDSA_P384_SHA384_ASN1 => write!(f, "ECDSA_P384_SHA384_ASN1"),
73+
SigningScheme::ED25519 => write!(f, "ED25519"),
74+
}
7775
}
7876
}
7977

src/crypto/signing_key/ecdsa/ec.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
//! let signature = ec_signer.sign(b"some message");
6464
//! ```
6565
66-
use std::{convert::TryFrom, marker::PhantomData, ops::Add};
66+
use std::{marker::PhantomData, ops::Add};
6767

6868
use digest::{
6969
core_api::BlockSizeUser,

src/crypto/signing_key/ecdsa/mod.rs

+6-9
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,6 @@
7373
//! // verify
7474
//! assert!(verification_key.verify_signature(Signature::Raw(&signature_data),message).is_ok());
7575
/// ```
76-
use p256;
77-
7876
use crate::errors::*;
7977

8078
use self::ec::{EcdsaKeys, EcdsaSigner};
@@ -88,13 +86,12 @@ pub enum ECDSAKeys {
8886
P384(EcdsaKeys<p384::NistP384>),
8987
}
9088

91-
impl ToString for ECDSAKeys {
92-
fn to_string(&self) -> String {
93-
let str = match self {
94-
ECDSAKeys::P256(_) => "ECDSA P256",
95-
ECDSAKeys::P384(_) => "ECDSA P384",
96-
};
97-
String::from(str)
89+
impl std::fmt::Display for ECDSAKeys {
90+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
91+
match self {
92+
ECDSAKeys::P256(_) => write!(f, "ECDSA P256"),
93+
ECDSAKeys::P384(_) => write!(f, "ECDSA P384"),
94+
}
9895
}
9996
}
10097

src/crypto/signing_key/ed25519.rs

-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
//! ```
6262
6363
use ed25519::pkcs8::{DecodePrivateKey, EncodePrivateKey, EncodePublicKey};
64-
use std::convert::TryFrom;
6564

6665
use ed25519::KeypairBytes;
6766
use ed25519_dalek::{Signer as _, SigningKey};

src/crypto/signing_key/mod.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,12 @@ pub enum SigStoreKeyPair {
139139
RSA(RSAKeys),
140140
}
141141

142-
impl ToString for SigStoreKeyPair {
143-
fn to_string(&self) -> String {
142+
impl std::fmt::Display for SigStoreKeyPair {
143+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
144144
match self {
145-
SigStoreKeyPair::ECDSA(_) => String::from("EC Key"),
146-
SigStoreKeyPair::ED25519(_) => String::from("Ed25519 Key"),
147-
SigStoreKeyPair::RSA(_) => String::from("RSA Key"),
145+
SigStoreKeyPair::ECDSA(_) => write!(f, "EC Key"),
146+
SigStoreKeyPair::ED25519(_) => write!(f, "Ed25519 Key"),
147+
SigStoreKeyPair::RSA(_) => write!(f, "RSA Key"),
148148
}
149149
}
150150
}

src/crypto/signing_key/rsa/keypair.rs

-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@
3939
//! let rsa_keys2 = RSAKeys::from_encrypted_pem(privkey_pem.as_bytes(), b"password").unwrap();
4040
//! ```
4141
42-
use std::convert::TryFrom;
43-
4442
use pkcs8::{DecodePrivateKey, EncodePrivateKey, EncodePublicKey};
4543
use rsa::{
4644
pkcs1::DecodeRsaPrivateKey, pkcs1v15::SigningKey, pss::BlindedSigningKey, RsaPrivateKey,

src/crypto/verification_key.rs

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use ed25519::pkcs8::DecodePublicKey as ED25519DecodePublicKey;
1919
use rsa::{pkcs1v15, pss};
2020
use sha2::{Digest, Sha256, Sha384};
2121
use signature::{DigestVerifier, Verifier};
22-
use std::convert::TryFrom;
2322
use x509_cert::{der::referenced::OwnedToRef, spki::SubjectPublicKeyInfoOwned};
2423

2524
use super::{

src/fulcio/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ use pkcs8::der::Decode;
1414
use reqwest::{header, Body};
1515
use serde::ser::SerializeStruct;
1616
use serde::{Serialize, Serializer};
17-
use std::convert::{TryFrom, TryInto};
1817
use std::fmt::{Debug, Display, Formatter};
1918
use tracing::debug;
2019
use url::Url;
@@ -55,7 +54,7 @@ impl TryFrom<Csr> for Body {
5554
struct PublicKey(String, SigningScheme);
5655

5756
impl Serialize for PublicKey {
58-
fn serialize<S: Serializer>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
57+
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
5958
where
6059
S: Serializer,
6160
{

src/fulcio/models.rs

+1-35
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
use base64::{engine::general_purpose::STANDARD as BASE64_STD_ENGINE, Engine as _};
2020
use pem::Pem;
2121
use pkcs8::der::EncodePem;
22-
use serde::{Deserialize, Deserializer, Serialize, Serializer};
22+
use serde::{Deserialize, Serialize, Serializer};
2323
use serde_repr::Deserialize_repr;
2424
use x509_cert::Certificate;
2525

@@ -38,26 +38,6 @@ where
3838
ser.serialize_str(&encoded)
3939
}
4040

41-
fn deserialize_base64<'de, D>(de: D) -> std::result::Result<Vec<u8>, D::Error>
42-
where
43-
D: Deserializer<'de>,
44-
{
45-
let buf: &str = Deserialize::deserialize(de)?;
46-
47-
BASE64_STD_ENGINE
48-
.decode(buf)
49-
.map_err(serde::de::Error::custom)
50-
}
51-
52-
fn deserialize_inner_detached_sct<'de, D>(de: D) -> std::result::Result<InnerDetachedSCT, D::Error>
53-
where
54-
D: Deserializer<'de>,
55-
{
56-
let buf = deserialize_base64(de)?;
57-
58-
serde_json::from_slice(&buf).map_err(serde::de::Error::custom)
59-
}
60-
6141
#[derive(Serialize)]
6242
#[serde(rename_all = "camelCase")]
6343
pub struct CreateSigningCertificateRequest {
@@ -76,8 +56,6 @@ pub enum SigningCertificate {
7656
#[serde(rename_all = "camelCase")]
7757
pub struct SigningCertificateDetachedSCT {
7858
pub chain: CertificateChain,
79-
#[serde(deserialize_with = "deserialize_inner_detached_sct")]
80-
pub signed_certificate_timestamp: InnerDetachedSCT,
8159
}
8260

8361
#[derive(Deserialize)]
@@ -91,18 +69,6 @@ pub struct CertificateChain {
9169
pub certificates: Vec<Pem>,
9270
}
9371

94-
#[derive(Deserialize)]
95-
pub struct InnerDetachedSCT {
96-
pub sct_version: SCTVersion,
97-
#[serde(deserialize_with = "deserialize_base64")]
98-
pub id: Vec<u8>,
99-
pub timestamp: u64,
100-
#[serde(deserialize_with = "deserialize_base64")]
101-
pub signature: Vec<u8>,
102-
#[serde(deserialize_with = "deserialize_base64")]
103-
pub extensions: Vec<u8>,
104-
}
105-
10672
#[derive(Deserialize_repr, PartialEq, Debug)]
10773
#[repr(u8)]
10874
pub enum SCTVersion {

src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
//!
101101
//! let mut client = sigstore::cosign::ClientBuilder::default()
102102
//! .with_trust_repository(&repo)
103+
//! .await
103104
//! .expect("Cannot construct cosign client from given materials")
104105
//! .build()
105106
//! .expect("Unexpected failure while building Client");

0 commit comments

Comments
 (0)