commit a42186f46d3360111221992366cc4fbe418e5b0b parent 718e0c7f41f710bc07257d6f2bf602b80b0b97a6 Author: mauricefisher64 <92736594+mauricefisher64@users.noreply.github.com> Date: Mon, 13 Jun 2022 17:33:23 -0400 Remove need for using OpenSSL to generate certs by using pre-generated certs (#41) * Remove need for openssl by using pre generated certs * remove unused dependency * remove unused sample certs * Remove obsolete paths from .gitignore * Add readme to the certs folder * Use sentence case for Markdown headings Co-authored-by: Eric Scouten <scouten@adobe.com> Diffstat:
40 files changed, 923 insertions(+), 364 deletions(-)
diff --git a/.gitignore b/.gitignore @@ -7,10 +7,5 @@ Cargo.lock .DS_Store .idea -.x509 -.ec -.rsa -.ed -.es509 - .vscode + diff --git a/make_test_images/Cargo.toml b/make_test_images/Cargo.toml @@ -11,7 +11,6 @@ anyhow = "1.0" c2pa = { path="../sdk", features = ["file_io"] } env_logger = "0.9" log = "0.4" -tempfile = "3.3" image = "0.23.10" nom = "7.1.1" regex = "1.5.6" diff --git a/make_test_images/src/make_test_images.rs b/make_test_images/src/make_test_images.rs @@ -27,12 +27,18 @@ use std::{ fs, path::{Path, PathBuf}, }; -use tempfile::tempdir; use twoway::find_bytes; const IMAGE_WIDTH: u32 = 2048; const IMAGE_HEIGHT: u32 = 1365; +// returns a path to a file in the fixtures folder +fn fixture_path(file_name: &str) -> PathBuf { + let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + path.push("../sdk/tests/fixtures"); + path.push(file_name); + path +} /// Defines an operation for creating a test image #[derive(Debug, Deserialize)] pub struct Recipe { @@ -258,9 +264,9 @@ impl MakeTestImages { manifest.add_assertion(&actions)?; // extra get required here, since actions is an array // now create store; sign claim and embed in target - let temp_dir = tempdir()?; + let cert_dir: PathBuf = fixture_path("certs"); let (signer, _) = - get_temp_signer_by_alg(&temp_dir.path(), &self.config.alg, self.config.ta.clone()); + get_temp_signer_by_alg(&cert_dir, &self.config.alg, self.config.ta.clone()); manifest.embed(&dst_path, &dst_path, signer.as_ref())?; diff --git a/sdk/examples/client/client.rs b/sdk/examples/client/client.rs @@ -20,7 +20,13 @@ use c2pa::{ get_temp_signer, Ingredient, Manifest, ManifestStore, }; use std::path::PathBuf; -use tempfile::tempdir; +// returns a path to a file in the fixtures folder +fn fixture_path(file_name: &str) -> PathBuf { + let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + path.push("../sdk/tests/fixtures"); + path.push(file_name); + path +} const GENERATOR: &str = "test_app/0.1"; const CREATIVE_WORK_URL: &str = r#"{"@type":"CreativeWork","@context":"https://schema.org","url":"http://contentauthenticity.org"}"#; @@ -109,8 +115,8 @@ pub fn main() -> Result<()> { manifest.add_assertion(&creative_work)?; // sign and embed into the target file - let temp_dir = tempdir()?; - let (signer, _) = get_temp_signer(&temp_dir.path()); + let cert_dir = fixture_path("certs"); + let (signer, _) = get_temp_signer(&cert_dir); manifest.embed(&source, &dest, &signer)?; let manifest_store = ManifestStore::from_file(&dest)?; diff --git a/sdk/src/asset_handlers/c2pa_io.rs b/sdk/src/asset_handlers/c2pa_io.rs @@ -88,7 +88,8 @@ pub mod tests { let store = Store::load_from_asset(&temp_path, false, &mut OneShotStatusTracker::new()) .expect("loading store"); - let (signer, _) = get_temp_signer(&temp_dir.path()); + let cert_dir = fixture_path("certs"); + let (signer, _) = get_temp_signer(&cert_dir); let manifest2 = store.to_jumbf(&signer).expect("to_jumbf"); assert_eq!(&manifest, &manifest2); diff --git a/sdk/src/cose_validator.rs b/sdk/src/cose_validator.rs @@ -1060,23 +1060,22 @@ pub mod tests { #[test] #[cfg(feature = "file_io")] fn test_cert_algorithms() { - use tempfile::tempdir; + let cert_dir = crate::utils::test::fixture_path("certs"); use crate::openssl::temp_signer; let mut validation_log = DetailedStatusTracker::new(); - let temp_dir = tempdir().unwrap(); - let (_, cert_path) = temp_signer::get_ec_signer(&temp_dir.path(), "es256", None); + let (_, cert_path) = temp_signer::get_ec_signer(&cert_dir, "es256", None); let es256_cert = std::fs::read(&cert_path).unwrap(); - let (_, cert_path) = temp_signer::get_ec_signer(&temp_dir.path(), "es384", None); + let (_, cert_path) = temp_signer::get_ec_signer(&cert_dir, "es384", None); let es384_cert = std::fs::read(&cert_path).unwrap(); - let (_, cert_path) = temp_signer::get_ec_signer(&temp_dir.path(), "es512", None); + let (_, cert_path) = temp_signer::get_ec_signer(&cert_dir, "es512", None); let es512_cert = std::fs::read(&cert_path).unwrap(); - let (_, cert_path) = temp_signer::get_rsa_signer(&temp_dir.path(), "ps256", None); + let (_, cert_path) = temp_signer::get_rsa_signer(&cert_dir, "ps256", None); let rsa_pss256_cert = std::fs::read(&cert_path).unwrap(); if let Ok(signcert) = openssl::x509::X509::from_pem(&es256_cert) { diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs @@ -60,7 +60,8 @@ //! let dir = tempdir()?; //! let dest = dir.path().join("test_file.jpg"); //! -//! let (signer, _) = get_temp_signer(&dir.path()); +//! let cert_dir = PathBuf::from("tests/fixtures/certs"); +//! let (signer, _) = get_temp_signer(&cert_dir); //! manifest.embed(&source, &dest, &signer)?; //! # Ok(()) //! # } diff --git a/sdk/src/manifest.rs b/sdk/src/manifest.rs @@ -693,7 +693,8 @@ pub(crate) mod tests { let test_output = dir.path().join("wc_embed_test.jpg"); //embed a claim generated from this manifest - let (signer, _) = get_temp_signer(&dir.path()); + let cert_dir = fixture_path("certs"); + let (signer, _) = get_temp_signer(&cert_dir); let _store = manifest .embed(&source_path, &test_output, &signer) @@ -796,7 +797,8 @@ pub(crate) mod tests { ) .expect("add_assertion"); - let (signer, _) = get_temp_signer(&temp_dir.path()); + let cert_dir = fixture_path("certs"); + let (signer, _) = get_temp_signer(&cert_dir); let store1 = manifest.embed(&output, &output, &signer).expect("embed"); let claim1_label = store1.provenance_label().unwrap(); @@ -818,10 +820,10 @@ pub(crate) mod tests { manifest2 .add_redaction(ASSERTION_LABEL) .expect("add_redaction"); - let temp_dir = tempdir().expect("temp dir"); //embed a claim in output2 - let (signer, _) = get_temp_signer(&temp_dir.path()); + let cert_dir = fixture_path("certs"); + let (signer, _) = get_temp_signer(&cert_dir); let _store2 = manifest2.embed(&output2, &output2, &signer).expect("embed"); diff --git a/sdk/src/openssl/ec_signer.rs b/sdk/src/openssl/ec_signer.rs @@ -208,15 +208,12 @@ mod tests { use super::*; - use tempfile::tempdir; - - use crate::openssl::temp_signer; - + use crate::{openssl::temp_signer, utils::test::fixture_path}; #[test] fn es256_signer() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, _) = temp_signer::get_ec_signer(&temp_dir.path(), "es256", None); + let (signer, _) = temp_signer::get_ec_signer(&cert_dir, "es256", None); let data = b"some sample content to sign"; println!("data len = {}", data.len()); @@ -229,9 +226,9 @@ mod tests { #[test] fn es384_signer() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, _) = temp_signer::get_ec_signer(&temp_dir.path(), "es384", None); + let (signer, _) = temp_signer::get_ec_signer(&cert_dir, "es384", None); let data = b"some sample content to sign"; println!("data len = {}", data.len()); @@ -244,9 +241,9 @@ mod tests { #[test] fn es512_signer() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, _) = temp_signer::get_ec_signer(&temp_dir.path(), "es512", None); + let (signer, _) = temp_signer::get_ec_signer(&cert_dir, "es512", None); let data = b"some sample content to sign"; println!("data len = {}", data.len()); diff --git a/sdk/src/openssl/ec_validator.rs b/sdk/src/openssl/ec_validator.rs @@ -79,20 +79,13 @@ mod tests { #![allow(clippy::unwrap_used)] use super::*; - use tempfile::tempdir; - - use crate::{ - openssl::{ec_signer::EcSigner, temp_signer}, - signer::ConfigurableSigner, - utils::test::fixture_path, - Signer, - }; + use crate::{openssl::temp_signer, utils::test::fixture_path, Signer}; #[test] fn sign_and_validate_es256() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, cert_path) = temp_signer::get_ec_signer(&temp_dir.path(), "es256", None); + let (signer, cert_path) = temp_signer::get_ec_signer(&cert_dir, "es256", None); let data = b"some sample content to sign"; println!("data len = {}", data.len()); @@ -113,9 +106,9 @@ mod tests { #[test] fn sign_and_validate_es384() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, cert_path) = temp_signer::get_ec_signer(&temp_dir.path(), "es384", None); + let (signer, cert_path) = temp_signer::get_ec_signer(&cert_dir, "es384", None); let data = b"some sample content to sign"; println!("data len = {}", data.len()); @@ -136,9 +129,9 @@ mod tests { #[test] fn sign_and_validate_es512() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, cert_path) = temp_signer::get_ec_signer(&temp_dir.path(), "es512", None); + let (signer, cert_path) = temp_signer::get_ec_signer(&cert_dir, "es512", None); let data = b"some sample content to sign"; println!("data len = {}", data.len()); @@ -159,9 +152,9 @@ mod tests { #[test] fn bad_sig_es256() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, cert_path) = temp_signer::get_ec_signer(&temp_dir.path(), "es256", None); + let (signer, cert_path) = temp_signer::get_ec_signer(&cert_dir, "es256", None); let data = b"some sample content to sign"; println!("data len = {}", data.len()); @@ -180,9 +173,9 @@ mod tests { #[test] fn bad_data_es256() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, cert_path) = temp_signer::get_ec_signer(&temp_dir.path(), "es256", None); + let (signer, cert_path) = temp_signer::get_ec_signer(&cert_dir, "es256", None); let mut data = b"some sample content to sign".to_vec(); println!("data len = {}", data.len()); @@ -198,28 +191,4 @@ mod tests { let validator = EcValidator::new("es256"); assert!(!validator.validate(&signature, &data, &pub_key).unwrap()); } - - #[test] - fn sign_and_validate_with_chain() { - let pkey_path = fixture_path("bob.key"); - let cert_path = fixture_path("bob.pem"); - - let signer = - EcSigner::from_files(&cert_path, &pkey_path, "es256".to_string(), None).unwrap(); - - let data = b"some sample content to sign"; - println!("data len = {}", data.len()); - - let signature = signer.sign(data).unwrap(); - println!("signature.len = {}", signature.len()); - assert!(signature.len() >= 64); - assert!(signature.len() <= signer.reserve_size()); - - let cert_bytes = &signer.certs().unwrap()[0]; - let signcert = openssl::x509::X509::from_der(cert_bytes).unwrap(); - - let pub_key = signcert.public_key().unwrap().public_key_to_der().unwrap(); - let validator = EcValidator::new("es256"); - assert!(validator.validate(&signature, data, &pub_key).unwrap()); - } } diff --git a/sdk/src/openssl/ed_signer.rs b/sdk/src/openssl/ed_signer.rs @@ -127,15 +127,13 @@ mod tests { #![allow(clippy::unwrap_used)] use super::*; - use tempfile::tempdir; - - use crate::openssl::temp_signer; + use crate::{openssl::temp_signer, utils::test::fixture_path}; #[test] fn ed25519_signer() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, _) = temp_signer::get_ed_signer(&temp_dir.path(), "ed25519", None); + let (signer, _) = temp_signer::get_ed_signer(&cert_dir, "ed25519", None); let data = b"some sample content to sign"; println!("data len = {}", data.len()); diff --git a/sdk/src/openssl/ed_validator.rs b/sdk/src/openssl/ed_validator.rs @@ -46,15 +46,13 @@ mod tests { use super::*; - use tempfile::tempdir; - - use crate::{openssl::temp_signer, Signer}; + use crate::{openssl::temp_signer, utils::test::fixture_path, Signer}; #[test] fn sign_and_validate() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, cert_path) = temp_signer::get_ed_signer(&temp_dir.path(), "ed25519", None); + let (signer, cert_path) = temp_signer::get_ed_signer(&cert_dir, "ed25519", None); let data = b"some sample content to sign"; println!("data len = {}", data.len()); @@ -74,9 +72,9 @@ mod tests { #[test] fn bad_data() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, cert_path) = temp_signer::get_ed_signer(&temp_dir.path(), "ed25519", None); + let (signer, cert_path) = temp_signer::get_ed_signer(&cert_dir, "ed25519", None); let mut data = b"some sample content to sign".to_vec(); println!("data len = {}", data.len()); diff --git a/sdk/src/openssl/rsa_signer.rs b/sdk/src/openssl/rsa_signer.rs @@ -212,15 +212,13 @@ mod tests { use super::*; - use tempfile::tempdir; - - use crate::{openssl::temp_signer::get_temp_signer, Signer}; + use crate::{openssl::temp_signer::get_temp_signer, utils::test::fixture_path, Signer}; #[test] fn signer_from_files() { - let temp_dir = tempdir().unwrap(); + let cert_dir = fixture_path("certs"); - let (signer, _) = get_temp_signer(&temp_dir.path()); + let (signer, _) = get_temp_signer(&cert_dir); let data = b"some sample content to sign"; let signature = signer.sign(data).unwrap(); diff --git a/sdk/src/openssl/temp_signer.rs b/sdk/src/openssl/temp_signer.rs @@ -31,11 +31,7 @@ #![allow(clippy::panic)] #![allow(clippy::unwrap_used)] -use std::{ - io::Write, - path::{Path, PathBuf}, - process::{Child, Command, Stdio}, -}; +use std::path::{Path, PathBuf}; use crate::{ openssl::{EcSigner, EdSigner, RsaSigner}, @@ -63,15 +59,13 @@ use crate::{ /// /// Can panic if unable to invoke OpenSSL executable properly. pub fn get_temp_signer<P: AsRef<Path>>(path: P) -> (RsaSigner, PathBuf) { - let (sign_cert_path, pem_key_path) = make_key_path_pair(path, "temp_key"); + let mut sign_cert_path = path.as_ref().to_path_buf(); + sign_cert_path.push("ps256"); + sign_cert_path.set_extension("pub"); - create_x509_key_pair( - &sign_cert_path, - &pem_key_path, - false, - Some("rsa_padding_mode:pss"), - Some("-sha256"), - ); + let mut pem_key_path = path.as_ref().to_path_buf(); + pem_key_path.push("ps256"); + pem_key_path.set_extension("pem"); ( RsaSigner::from_files(&sign_cert_path, &pem_key_path, "ps256".to_string(), None).unwrap(), @@ -102,33 +96,20 @@ pub fn get_ec_signer<P: AsRef<Path>>( alg: &str, tsa_url: Option<String>, ) -> (EcSigner, PathBuf) { - let (key_name, ec_key_name) = match alg { - "es256" => ("ec256_key", "prime256v1"), - "es384" => ("ec384_key", "secp384r1"), - "es512" => ("ec512_key", "secp521r1"), + match alg { + "es256" | "es384" | "es512" => (), _ => { panic!("Unknown EC signer alg {:#?}", alg); } - }; - - let (sign_cert_path, pem_key_path) = make_key_path_pair(path, key_name); - - let mut openssl = Command::new("openssl"); - openssl - .arg("ecparam") - .arg("-genkey") - .arg("-name") - .arg(ec_key_name) - .arg("-noout") - .arg("-out") - .arg(&pem_key_path) - .stdin(Stdio::piped()) - .stdout(Stdio::piped()) - .stderr(Stdio::piped()); + } - process_openssl_output(spawn_openssl(&mut openssl)); + let mut sign_cert_path = path.as_ref().to_path_buf(); + sign_cert_path.push(alg); + sign_cert_path.set_extension("pub"); - create_x509_key_pair(&sign_cert_path, &pem_key_path, true, None, Some("-sha256")); + let mut pem_key_path = path.as_ref().to_path_buf(); + pem_key_path.push(alg); + pem_key_path.set_extension("pem"); ( EcSigner::from_files(&sign_cert_path, &pem_key_path, alg.to_string(), tsa_url).unwrap(), @@ -140,7 +121,7 @@ pub fn get_ec_signer<P: AsRef<Path>>( /// /// # Arguments /// -/// * `path` - A directory (which must already exist) to receive the temporary +/// * `path` - A directory (which must already exist) to look for /// private key / certificate pair. /// * `alg` - A format for signing. Must be `ed25519`. /// * `tsa_url` - Optional URL for a timestamp authority. @@ -159,29 +140,17 @@ pub fn get_ed_signer<P: AsRef<Path>>( alg: &str, tsa_url: Option<String>, ) -> (EdSigner, PathBuf) { - let (key_name, openssl_alg_name) = match alg { - "ed25519" => ("ed25519_key", "ED25519"), - _ => { - panic!("Unknown ED signer alg {:#?}", alg); - } - }; - - let (sign_cert_path, pem_key_path) = make_key_path_pair(path, key_name); - - let mut openssl = Command::new("openssl"); - openssl - .arg("genpkey") - .arg("-algorithm") - .arg(&openssl_alg_name) - .arg("-out") - .arg(&pem_key_path) - .stdin(Stdio::piped()) - .stdout(Stdio::piped()) - .stderr(Stdio::piped()); + if alg != "ed25519" { + panic!("Unknown ED signer alg {:#?}", alg); + } - process_openssl_output(spawn_openssl(&mut openssl)); + let mut sign_cert_path = path.as_ref().to_path_buf(); + sign_cert_path.push(alg); + sign_cert_path.set_extension("pub"); - create_x509_key_pair(&sign_cert_path, &pem_key_path, true, None, None); + let mut pem_key_path = path.as_ref().to_path_buf(); + pem_key_path.push(alg); + pem_key_path.set_extension("pem"); ( EdSigner::from_files(&sign_cert_path, &pem_key_path, alg.to_string(), tsa_url).unwrap(), @@ -213,26 +182,35 @@ pub fn get_rsa_signer<P: AsRef<Path>>( alg: &str, tsa_url: Option<String>, ) -> (RsaSigner, PathBuf) { - let (key_name, sha_mode, rsa_padding_mode) = match alg { - "rs256" => ("rsa256_key", "-sha256", None), - "rs384" => ("rsa384_key", "-sha384", None), - "rs512" => ("rsa512_key", "-sha512", None), - "ps256" => ("rsa-pss256_key", "-sha256", Some("rsa_padding_mode:pss")), - "ps384" => ("rsa-pss384_key", "-sha384", Some("rsa_padding_mode:pss")), - "ps512" => ("rsa-pss512_key", "-sha512", Some("rsa_padding_mode:pss")), + match alg { + "ps256" | "ps384" | "ps512" => (), _ => { panic!("Unknown RSA signer alg {:#?}", alg); } - }; + } + + println!("path: {}", path.as_ref().display()); + + let mut sign_cert_path = path.as_ref().to_path_buf(); + sign_cert_path.push(alg); + sign_cert_path.set_extension("pub"); - let (sign_cert_path, pem_key_path) = make_key_path_pair(path, key_name); + let mut pem_key_path = path.as_ref().to_path_buf(); + pem_key_path.push(alg); + pem_key_path.set_extension("pem"); + + if !sign_cert_path.exists() || !pem_key_path.exists() { + panic!( + "path found: {}, {}", + sign_cert_path.display(), + pem_key_path.display() + ); + } - create_x509_key_pair( - &sign_cert_path, - &pem_key_path, - false, - rsa_padding_mode, - Some(sha_mode), + println!( + "path: {}, {}", + sign_cert_path.display(), + pem_key_path.display() ); ( @@ -268,7 +246,7 @@ pub fn get_temp_signer_by_alg<P: AsRef<Path>>( tsa_url: Option<String>, ) -> (Box<dyn Signer>, PathBuf) { match alg.to_lowercase().as_str() { - "rs256" | "rs384" | "rs512" | "ps256" | "ps384" | "ps512" => { + "ps256" | "ps384" | "ps512" => { let (signer, sign_cert_path) = get_rsa_signer(path, alg, tsa_url); (Box::new(signer), sign_cert_path) } @@ -287,129 +265,3 @@ pub fn get_temp_signer_by_alg<P: AsRef<Path>>( } } } - -fn make_key_path_pair<P: AsRef<Path>>(path: P, key_name: &str) -> (PathBuf, PathBuf) { - let mut sign_cert_path = path.as_ref().to_path_buf(); - sign_cert_path.push(key_name); - sign_cert_path.set_extension("pub"); - //println!("sign_cert_path = {:#?}", sign_cert_path); - - let mut pem_key_path = sign_cert_path.clone(); - pem_key_path.set_extension("pem"); - //println!("pem_key_path = {:#?}", pem_key_path); - - (sign_cert_path, pem_key_path) -} - -// The .x509 directory at the root of this repo is flagged -// as outside of source control via .gitignore. -// -// This function panics if unable to invoke openssl as expected. -fn create_x509_key_pair( - sign_cert_path: &Path, - pem_key_path: &Path, - has_priv_key: bool, - rsa_padding_mode: Option<&str>, - sha_mode: Option<&str>, -) { - let mut openssl = Command::new("openssl"); - openssl.arg("req").arg("-new"); - - if !has_priv_key { - openssl.arg("-newkey").arg("rsa:4096").arg("-nodes"); - } - - if let Some(rsa_padding_mode) = rsa_padding_mode { - openssl.arg("-sigopt").arg(rsa_padding_mode); - } - - openssl - .arg("-days") - .arg("180") - .arg("-extensions") - .arg("v3_ca") - .arg("-addext") - .arg("keyUsage = digitalSignature") - .arg("-addext") - .arg("extendedKeyUsage = emailProtection") - .arg("-x509") - .arg(if has_priv_key { "-key" } else { "-keyout" }) - .arg(pem_key_path) - .arg("-out") - .arg(sign_cert_path); - - if let Some(sha_mode) = sha_mode { - openssl.arg(sha_mode); - } - - openssl - .stdin(Stdio::piped()) - .stdout(Stdio::piped()) - .stderr(Stdio::piped()); - - let mut openssl = spawn_openssl(&mut openssl); - - let mut openssl_stdin = openssl.stdin.take().unwrap(); - writeln!(&mut openssl_stdin, "us").unwrap(); - writeln!(&mut openssl_stdin, "ca").unwrap(); - writeln!(&mut openssl_stdin, "Somewhere").unwrap(); - writeln!(&mut openssl_stdin, "Some Company").unwrap(); - writeln!(&mut openssl_stdin, "FOR TESTING ONLY").unwrap(); - writeln!(&mut openssl_stdin, "example.com").unwrap(); - writeln!(&mut openssl_stdin).unwrap(); // Don't provide an email address. - drop(openssl_stdin); - - process_openssl_output(openssl); -} - -fn spawn_openssl(openssl: &mut Command) -> Child { - //println!("openssl command = {:#?}", openssl); - - match openssl.spawn() { - Ok(openssl) => openssl, - Err(e) => { - eprintln!("Please ensure that openssl is installed on this device."); - print_mac_openssl_warning(); - panic!("Unable to invoke openssl\n\n{:#?}", e); - } - } -} - -fn process_openssl_output(openssl: Child) { - let output = openssl.wait_with_output().unwrap(); - - if !output.status.success() { - eprintln!("openssl exited with status {:?}\n\n", output.status); - - if let Ok(stdout) = String::from_utf8(output.stdout) { - eprintln!("stdout\n\n{:?}\n\n", stdout); - } - if let Ok(stderr) = String::from_utf8(output.stderr) { - eprintln!("stderr\n\n{:?}\n\n", stderr); - } - - print_mac_openssl_warning(); - - panic!("Unable to construct public/private key pair; exiting"); - } -} - -fn print_mac_openssl_warning() { - #[cfg(target_os = "macos")] - { - eprintln!(); - eprintln!("If you have problems generating certs on MacOS, you may need to replace the built-in version"); - eprintln!("of openssl with a more current version. Try this:"); - eprintln!(); - eprintln!(" $ openssl version"); - eprintln!(); - eprintln!("If your version is 1.x.x, try this:"); - eprintln!(); - eprintln!(" $ brew install openssl"); - eprintln!(); - eprintln!("and then update your path (via .zshrc or similar) as follows:"); - eprintln!(); - eprintln!(" $ export PATH=\"/usr/local/opt/openssl@3/bin:$PATH\""); - eprintln!(); - } -} diff --git a/sdk/src/store.rs b/sdk/src/store.rs @@ -1777,8 +1777,8 @@ pub mod tests { create_capture_claim(&mut claim_capture).unwrap(); // Do we generate JUMBF? - let temp_dir = tempdir().unwrap(); - let (signer, _) = get_temp_signer(&temp_dir.path()); + let cert_dir = fixture_path("certs"); + let (signer, _) = get_temp_signer(&cert_dir); // Test generate JUMBF // Get labels for label test @@ -2070,8 +2070,8 @@ pub mod tests { create_capture_claim(&mut claim_capture).unwrap(); // Do we generate JUMBF? - let temp_dir = tempdir().unwrap(); - let (signer, _) = get_temp_signer(&temp_dir.path()); + let cert_dir = fixture_path("certs"); + let (signer, _) = get_temp_signer(&cert_dir); // Move the claim to claims list. Note this is not real, the claims would have to be signed in between commmits store.commit_claim(claim1).unwrap(); @@ -2226,8 +2226,9 @@ pub mod tests { fn test_verifiable_credentials() { use crate::utils::test::create_test_store; - let temp_dir = tempdir().unwrap(); - let (signer, _) = get_temp_signer(&temp_dir.path()); + let cert_dir = fixture_path("certs"); + + let (signer, _) = get_temp_signer(&cert_dir); // test adding to actual image let ap = fixture_path("earth_apollo17.jpg"); @@ -2279,8 +2280,9 @@ pub mod tests { fn test_update_manifest() { use crate::{hashed_uri::HashedUri, utils::test::create_test_store}; - let temp_dir = tempdir().unwrap(); - let (signer, _) = get_temp_signer(&temp_dir.path()); + let cert_dir = fixture_path("certs"); + + let (signer, _) = get_temp_signer(&cert_dir); // test adding to actual image let ap = fixture_path("earth_apollo17.jpg"); diff --git a/sdk/tests/fixtures/bob.key b/sdk/tests/fixtures/bob.key @@ -1,5 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIL2yf62xPPFBKbDcBEKU5HIickmG2DEDcZt0lD3N4aOLoAoGCCqGSM49 -AwEHoUQDQgAEL/vKhxGKIRCcFSykCKiV+rHtBPgipPPW8EWEUXwrJh3mbhS3QXCd -PNiOu5qUjM8xTdXkl/NjHaYW+/rf7iCj5A== ------END EC PRIVATE KEY----- diff --git a/sdk/tests/fixtures/bob.pem b/sdk/tests/fixtures/bob.pem @@ -1,56 +0,0 @@ -Bag Attributes - localKeyID: 21 9D 38 2E 7C 25 38 78 94 3F CA DA 5A A7 BC BA 3F 7F 24 21 -subject=/O=Media Publisher Company/CN=Bob -issuer=/O=Media Publisher Company/CN=Media Publisher Company Intermediate CA ------BEGIN CERTIFICATE----- -MIICQDCCAaGgAwIBAgIUXsGqKw4Bw9PJBv1BcL3SLGiyCT4wCgYIKoZIzj0EAwIw -VDEgMB4GA1UECgwXTWVkaWEgUHVibGlzaGVyIENvbXBhbnkxMDAuBgNVBAMMJ01l -ZGlhIFB1Ymxpc2hlciBDb21wYW55IEludGVybWVkaWF0ZSBDQTAeFw0yMjA0MDQx -NDE1NDhaFw0yMzA0MDQxNDE1NDhaMDAxIDAeBgNVBAoMF01lZGlhIFB1Ymxpc2hl -ciBDb21wYW55MQwwCgYDVQQDDANCb2IwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC -AAQv+8qHEYohEJwVLKQIqJX6se0E+CKk89bwRYRRfCsmHeZuFLdBcJ082I67mpSM -zzFN1eSX82Mdphb7+t/uIKPko3UwczAOBgNVHQ8BAf8EBAMCBsAwFgYDVR0lAQH/ -BAwwCgYIKwYBBQUHAwQwCQYDVR0TBAIwADAdBgNVHQ4EFgQUTqgwjgSAknNN8T+e -bNXm+mbtlfIwHwYDVR0jBBgwFoAUXF8IatqTvlwmGnVmM2L6+v1IQMcwCgYIKoZI -zj0EAwIDgYwAMIGIAkIAkZ0LAaJ209QLyiSn/hIMfbBReg+d61gX8U+9OqBWYiD2 -i6u59mJrKdwCuj8po8jh7ntkcXHc1v+3ztHWCHCI9R0CQgErPKUhrxei5mbKU0Xx -NUsTBB6oHMZccZCn1FS0R7YaCFume2mscC1rGGNXqu/Skgsq6FPkFHJqyFTZhtcW -pJWKaw== ------END CERTIFICATE----- -Bag Attributes: <No Attributes> -subject=/O=Media Publisher Company/CN=Media Publisher Company Intermediate CA -issuer=/CN=Media Provenance Intermediate CA 1 ------BEGIN CERTIFICATE----- -MIICbTCCAc+gAwIBAgIUA7qQpsd9jsBL7dahNfBx+ftJ5VQwCgYIKoZIzj0EAwQw -LTErMCkGA1UEAwwiTWVkaWEgUHJvdmVuYW5jZSBJbnRlcm1lZGlhdGUgQ0EgMTAe -Fw0yMjA0MDQxNDE1MDRaFw0zMjAzMzExNDE1MDRaMFQxIDAeBgNVBAoMF01lZGlh -IFB1Ymxpc2hlciBDb21wYW55MTAwLgYDVQQDDCdNZWRpYSBQdWJsaXNoZXIgQ29t -cGFueSBJbnRlcm1lZGlhdGUgQ0EwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABABo -g4jSfIvYPwpADEOiQjWOSD5KXTJl9k/gz0vVpE1D3gdn5TK2UiuEiKiiZvND45pi -U/TW0jVs6Rfns7mBTKEAygFGbcjEVqMZTfXcWYIi2AvLARe/HCeVMO3x5g4AmDmr -CgshTHWNwrit6u/ae9YdOv5QdqBLKW6NRdvv4jvpZpK/QKNjMGEwHQYDVR0OBBYE -FFxfCGrak75cJhp1ZjNi+vr9SEDHMB8GA1UdIwQYMBaAFP59tM4KPiaHG81hkWz1 -1CoFfPYiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49 -BAMEA4GLADCBhwJCAeYlt/gDEOc0Y5NFLTcf3tOrwYR+m4Gn+bbgrdKznU2ygm0P -PqKHjCT+bMZmO7NJHHcwRg245AeKp1tCJ/nM/3+FAkFMQq5CaD6l7meYE+8wFtlD -vXlpFWg3ryuroc/DDBFMyrTZKWCz3wl5bLfx4GoWvdsrFBdClrhTO2srJmmQKH6t -QA== ------END CERTIFICATE----- -Bag Attributes: <No Attributes> -subject=/CN=Media Provenance Intermediate CA 1 -issuer=/CN=Media Provenance Root CA ------BEGIN CERTIFICATE----- -MIICPTCCAZ6gAwIBAgIUX/NDsdeWFPusKDEHeNizDZm8recwCgYIKoZIzj0EAwQw -IzEhMB8GA1UEAwwYTWVkaWEgUHJvdmVuYW5jZSBSb290IENBMB4XDTIyMDQwNDE0 -MTQ0OVoXDTMyMDQwMTE0MTQ0OVowLTErMCkGA1UEAwwiTWVkaWEgUHJvdmVuYW5j -ZSBJbnRlcm1lZGlhdGUgQ0EgMTCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEALfl -FbX5HaCQLNFaHCFKcH3AaGoRrgIt+CVFc3llHE+rywqHg9NPw7giiIXkEo6+U6iB -V6s+UcqrwBM83oyBp5WQAONSy5MAGyLvJ3z/NxKehzAq9E3a5V6ngZEoirgOaFnj -BpTLRjsE63drSwbv+JIJV226Xvpvmf9lYdJh9nCfnYXuo2MwYTAdBgNVHQ4EFgQU -/n20zgo+JocbzWGRbPXUKgV89iIwHwYDVR0jBBgwFoAU5vDmMCAcP+Z9yrh88G2C -gpE29xUwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0E -AwQDgYwAMIGIAkIA+QQbxd56X+fKFwMMcVgXfUAfGZvcQUmMI4/mD2/1RDKOeh5z -9A6rAlg+mid1EJKWYHer0521eMnUljR9FH70Rb8CQgHE0RXl1x6vavNK7jK5ZaJl -d/m9xB6wqtIy8OYt7NvCnx5ZvSLcyHyQfOM81hhku/ovwpoh3MeCngLBLpNrvThq -Xw== ------END CERTIFICATE----- diff --git a/sdk/tests/fixtures/certs/README.md b/sdk/tests/fixtures/certs/README.md @@ -0,0 +1,12 @@ +# Sample certificates + +This folder contains certificates and signing keys that are used by unit tests and sample applications. The certificates are not intended for production use. + +The certificates are organized by supported C2PA signing algorithm. For each supported signing algorithm (ps256, ps384, ps512, es256, es384, Ees512, ed25519) there are three files. +* {alg}.pem - private signing key in PEM format +* {alg}.pub - certificate chain from signing certificate to the last certificate before the root CA, as a concatenated list of certficates +* {alg}_root.pub_key - public key of the root CA used to verify the last certificate in the certificate chain. + +## More info + +For more information on digital signatures and the C2PA trust model see [https://c2pa.org/specifications/specifications/1.0/specs/C2PA_Specification.html#_digital_signatures] and [https://c2pa.org/specifications/specifications/1.0/specs/C2PA_Specification.html#_credential_types] diff --git a/sdk/tests/fixtures/certs/ed25519.pem b/sdk/tests/fixtures/certs/ed25519.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIL2+9INLPNSLH3STzKQJ3Wen9R6uPbIYOIKA2574YQ4O +-----END PRIVATE KEY----- diff --git a/sdk/tests/fixtures/certs/ed25519.pub b/sdk/tests/fixtures/certs/ed25519.pub @@ -0,0 +1,43 @@ +-----BEGIN CERTIFICATE----- +MIICSDCCAfqgAwIBAgIUb+aBTX1CsjJ1iuMJ9kRudz/7qEcwBQYDK2VwMIGMMQsw +CQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExEjAQBgNVBAcMCVNvbWV3aGVyZTEnMCUG +A1UECgweQzJQQSBUZXN0IEludGVybWVkaWF0ZSBSb290IENBMRkwFwYDVQQLDBBG +T1IgVEVTVElOR19PTkxZMRgwFgYDVQQDDA9JbnRlcm1lZGlhdGUgQ0EwHhcNMjIw +NjEwMTg0NjQxWhcNMzAwODI2MTg0NjQxWjCBgDELMAkGA1UEBhMCVVMxCzAJBgNV +BAgMAkNBMRIwEAYDVQQHDAlTb21ld2hlcmUxHzAdBgNVBAoMFkMyUEEgVGVzdCBT +aWduaW5nIENlcnQxGTAXBgNVBAsMEEZPUiBURVNUSU5HX09OTFkxFDASBgNVBAMM +C0MyUEEgU2lnbmVyMCowBQYDK2VwAyEAMp5+0e83nNgQhdhBW8Rshkjy90sa1A9J +IzkItcDqCuKjeDB2MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUH +AwQwDgYDVR0PAQH/BAQDAgbAMB0GA1UdDgQWBBTuLrYRqW4wu6yjIK1/iW8ud7dm +kTAfBgNVHSMEGDAWgBRXTAfC/JxQvRlk/bCbdPMDbsSfqTAFBgMrZXADQQB2R6vb +I+X8CTRC54j3NTvsUj454G1/bdzbiHVgl3n+ShOAJ85FJigE7Eoav7SeXeVnNjc8 +QZ1UrJGwgBBEP84G +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICKTCCAdugAwIBAgIUWqg4SaUDuPVy671PLGgfzcIsHMwwBQYDK2VwMHcxCzAJ +BgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU29tZXdoZXJlMRowGAYD +VQQKDBFDMlBBIFRlc3QgUm9vdCBDQTEZMBcGA1UECwwQRk9SIFRFU1RJTkdfT05M +WTEQMA4GA1UEAwwHUm9vdCBDQTAeFw0yMjA2MTAxODQ2NDFaFw0zMDA4MjcxODQ2 +NDFaMIGMMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExEjAQBgNVBAcMCVNvbWV3 +aGVyZTEnMCUGA1UECgweQzJQQSBUZXN0IEludGVybWVkaWF0ZSBSb290IENBMRkw +FwYDVQQLDBBGT1IgVEVTVElOR19PTkxZMRgwFgYDVQQDDA9JbnRlcm1lZGlhdGUg +Q0EwKjAFBgMrZXADIQAkzdYBZtpdWfp03GLOb1lmIr/0COsfUa3b8ebt90DorqNj +MGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFFdM +B8L8nFC9GWT9sJt08wNuxJ+pMB8GA1UdIwQYMBaAFF7mVgKz9Y4kTH4Mnumakchr +qU6MMAUGAytlcANBABXakz5vcdftU8Pbe8JDEcFSc+rTnopT8DXYwhtOd3Hvo7Zv +v0fTuwOYImxLdmu0J1u+ULxNqK+jRO7/jSncvwA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAcWgAwIBAgIUW4fUnS38162x10PCnB8qFsrQuZgwBQYDK2VwMHcxCzAJ +BgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU29tZXdoZXJlMRowGAYD +VQQKDBFDMlBBIFRlc3QgUm9vdCBDQTEZMBcGA1UECwwQRk9SIFRFU1RJTkdfT05M +WTEQMA4GA1UEAwwHUm9vdCBDQTAeFw0yMjA2MTAxODQ2NDFaFw0zMjA2MDcxODQ2 +NDFaMHcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU29tZXdo +ZXJlMRowGAYDVQQKDBFDMlBBIFRlc3QgUm9vdCBDQTEZMBcGA1UECwwQRk9SIFRF +U1RJTkdfT05MWTEQMA4GA1UEAwwHUm9vdCBDQTAqMAUGAytlcAMhAGPUgK9q1H3D +eKMGqLGjTXJSpsrLpe0kpxkaFMe7KUAuo2MwYTAdBgNVHQ4EFgQUXuZWArP1jiRM +fgye6ZqRyGupTowwHwYDVR0jBBgwFoAUXuZWArP1jiRMfgye6ZqRyGupTowwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwBQYDK2VwA0EA8E79g54u2fUy +dfVLPyqKmtjenOUMvVQD7waNbetLY7kvUJZCd5eaDghk30/Q1RaNjiP/2RfA/it8 +zGxQnM2hCA== +-----END CERTIFICATE----- diff --git a/sdk/tests/fixtures/certs/ed25519_root.pub_key b/sdk/tests/fixtures/certs/ed25519_root.pub_key @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAY9SAr2rUfcN4owaosaNNclKmysul7SSnGRoUx7spQC4= +-----END PUBLIC KEY----- diff --git a/sdk/tests/fixtures/certs/es256.pem b/sdk/tests/fixtures/certs/es256.pem @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgfNJBsaRLSeHizv0m +GL+gcn78QmtfLSm+n+qG9veC2W2hRANCAAQPaL6RkAkYkKU4+IryBSYxJM3h77sF +iMrbvbI8fG7w2Bbl9otNG/cch3DAw5rGAPV7NWkyl3QGuV/wt0MrAPDo +-----END PRIVATE KEY----- diff --git a/sdk/tests/fixtures/certs/es256.pub b/sdk/tests/fixtures/certs/es256.pub @@ -0,0 +1,46 @@ +-----BEGIN CERTIFICATE----- +MIIChzCCAi6gAwIBAgIUcCTmJHYF8dZfG0d1UdT6/LXtkeYwCgYIKoZIzj0EAwIw +gYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU29tZXdoZXJl +MScwJQYDVQQKDB5DMlBBIFRlc3QgSW50ZXJtZWRpYXRlIFJvb3QgQ0ExGTAXBgNV +BAsMEEZPUiBURVNUSU5HX09OTFkxGDAWBgNVBAMMD0ludGVybWVkaWF0ZSBDQTAe +Fw0yMjA2MTAxODQ2NDBaFw0zMDA4MjYxODQ2NDBaMIGAMQswCQYDVQQGEwJVUzEL +MAkGA1UECAwCQ0ExEjAQBgNVBAcMCVNvbWV3aGVyZTEfMB0GA1UECgwWQzJQQSBU +ZXN0IFNpZ25pbmcgQ2VydDEZMBcGA1UECwwQRk9SIFRFU1RJTkdfT05MWTEUMBIG +A1UEAwwLQzJQQSBTaWduZXIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQPaL6R +kAkYkKU4+IryBSYxJM3h77sFiMrbvbI8fG7w2Bbl9otNG/cch3DAw5rGAPV7NWky +l3QGuV/wt0MrAPDoo3gwdjAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsG +AQUFBwMEMA4GA1UdDwEB/wQEAwIGwDAdBgNVHQ4EFgQUFznP0y83joiNOCedQkxT +tAMyNcowHwYDVR0jBBgwFoAUDnyNcma/osnlAJTvtW6A4rYOL2swCgYIKoZIzj0E +AwIDRwAwRAIgOY/2szXjslg/MyJFZ2y7OH8giPYTsvS7UPRP9GI9NgICIDQPMKrE +LQUJEtipZ0TqvI/4mieoyRCeIiQtyuS0LACz +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICajCCAg+gAwIBAgIUfXDXHH+6GtA2QEBX2IvJ2YnGMnUwCgYIKoZIzj0EAwIw +dzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlTb21ld2hlcmUx +GjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBGT1IgVEVTVElO +R19PTkxZMRAwDgYDVQQDDAdSb290IENBMB4XDTIyMDYxMDE4NDY0MFoXDTMwMDgy +NzE4NDY0MFowgYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJ +U29tZXdoZXJlMScwJQYDVQQKDB5DMlBBIFRlc3QgSW50ZXJtZWRpYXRlIFJvb3Qg +Q0ExGTAXBgNVBAsMEEZPUiBURVNUSU5HX09OTFkxGDAWBgNVBAMMD0ludGVybWVk +aWF0ZSBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHllI4O7a0EkpTYAWfPM +D6Rnfk9iqhEmCQKMOR6J47Rvh2GGjUw4CS+aLT89ySukPTnzGsMQ4jK9d3V4Aq4Q +LsOjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBQOfI1yZr+iyeUAlO+1boDitg4vazAfBgNVHSMEGDAWgBRembiG4Xgb2VcVWnUA +UrYpDsuojDAKBggqhkjOPQQDAgNJADBGAiEAtdZ3+05CzFo90fWeZ4woeJcNQC4B +84Ill3YeZVvR8ZECIQDVRdha1xEDKuNTAManY0zthSosfXcvLnZui1A/y/DYeg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICUzCCAfmgAwIBAgIUdmkq4byvgk2FSnddHqB2yjoD68gwCgYIKoZIzj0EAwIw +dzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlTb21ld2hlcmUx +GjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBGT1IgVEVTVElO +R19PTkxZMRAwDgYDVQQDDAdSb290IENBMB4XDTIyMDYxMDE4NDY0MFoXDTMyMDYw +NzE4NDY0MFowdzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlT +b21ld2hlcmUxGjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBG +T1IgVEVTVElOR19PTkxZMRAwDgYDVQQDDAdSb290IENBMFkwEwYHKoZIzj0CAQYI +KoZIzj0DAQcDQgAEre/KpcWwGEHt+mD4xso3xotRnRx2IEsMoYwVIKI7iEJrDEye +PcvJuBywA0qiMw2yvAvGOzW/fqUTu1jABrFIk6NjMGEwHQYDVR0OBBYEFF6ZuIbh +eBvZVxVadQBStikOy6iMMB8GA1UdIwQYMBaAFF6ZuIbheBvZVxVadQBStikOy6iM +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA0gA +MEUCIHBC1xLwkCWSGhVXFlSnQBx9cGZivXzCbt8BuwRqPSUoAiEAteZQDk685yh9 +jgOTkp4H8oAmM1As+qlkRK2b+CHAQ3k= +-----END CERTIFICATE----- diff --git a/sdk/tests/fixtures/certs/es256_root.pub_key b/sdk/tests/fixtures/certs/es256_root.pub_key @@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEre/KpcWwGEHt+mD4xso3xotRnRx2 +IEsMoYwVIKI7iEJrDEyePcvJuBywA0qiMw2yvAvGOzW/fqUTu1jABrFIkw== +-----END PUBLIC KEY----- diff --git a/sdk/tests/fixtures/certs/es384.pem b/sdk/tests/fixtures/certs/es384.pem @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDClh93nMdKl9Ujg71e3 +95QK1Z7OnmHrAYRv9B4ujlgWBoLQVtkoamQdizWQI/GvpAuhZANiAATY7kzZpbiB +azyKpJ3gb/6TZPMaNfJ+P5YeyhCynvzQtQT5l3HnJosPxUWYKTkdwqBWwe9P7QKl +KyX4PpQXVkJXYHffOGYOOKhLkJbc3JpYZzrxlZzY2FiVa1NQ/wOPXiU= +-----END PRIVATE KEY----- diff --git a/sdk/tests/fixtures/certs/es384.pub b/sdk/tests/fixtures/certs/es384.pub @@ -0,0 +1,50 @@ +-----BEGIN CERTIFICATE----- +MIICxTCCAkugAwIBAgIUZJcmeqpOjiLn2WzjnHcPacnyR3wwCgYIKoZIzj0EAwMw +gYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU29tZXdoZXJl +MScwJQYDVQQKDB5DMlBBIFRlc3QgSW50ZXJtZWRpYXRlIFJvb3QgQ0ExGTAXBgNV +BAsMEEZPUiBURVNUSU5HX09OTFkxGDAWBgNVBAMMD0ludGVybWVkaWF0ZSBDQTAe +Fw0yMjA2MTAxODQ2NDBaFw0zMDA4MjYxODQ2NDBaMIGAMQswCQYDVQQGEwJVUzEL +MAkGA1UECAwCQ0ExEjAQBgNVBAcMCVNvbWV3aGVyZTEfMB0GA1UECgwWQzJQQSBU +ZXN0IFNpZ25pbmcgQ2VydDEZMBcGA1UECwwQRk9SIFRFU1RJTkdfT05MWTEUMBIG +A1UEAwwLQzJQQSBTaWduZXIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATY7kzZpbiB +azyKpJ3gb/6TZPMaNfJ+P5YeyhCynvzQtQT5l3HnJosPxUWYKTkdwqBWwe9P7QKl +KyX4PpQXVkJXYHffOGYOOKhLkJbc3JpYZzrxlZzY2FiVa1NQ/wOPXiWjeDB2MAwG +A1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwQwDgYDVR0PAQH/BAQD +AgbAMB0GA1UdDgQWBBQ/UiOw/o3+8lHc5CL/J5YeG0ZBkzAfBgNVHSMEGDAWgBRR +XrpEcgTojX05PD56hENdZUn87zAKBggqhkjOPQQDAwNoADBlAjEA7xpuFvKoU9MM +jqK2NMu700X8X0n6R4a+sNlCJ06J3eZVNr9utUl7Yjzoz6VIuYw9AjBZlqn9/4Ob +Nm5hwHx0MrIiPzljsWC8Taxhi3J9Z5XkZ+aCRr/x1m40orxS92DMbAM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICpTCCAiygAwIBAgIUYWxGltNYUukYIsqgxMEQAXsq7GwwCgYIKoZIzj0EAwMw +dzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlTb21ld2hlcmUx +GjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBGT1IgVEVTVElO +R19PTkxZMRAwDgYDVQQDDAdSb290IENBMB4XDTIyMDYxMDE4NDY0MFoXDTMwMDgy +NzE4NDY0MFowgYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJ +U29tZXdoZXJlMScwJQYDVQQKDB5DMlBBIFRlc3QgSW50ZXJtZWRpYXRlIFJvb3Qg +Q0ExGTAXBgNVBAsMEEZPUiBURVNUSU5HX09OTFkxGDAWBgNVBAMMD0ludGVybWVk +aWF0ZSBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJWUzlpc3aIv11ydmJeQPd0h +W5O+zSfHXkLl4zJrpIT0BIUOaO9TaYg+wNs8KjROdy/BBCNz8bBkT7HI0uTvb1ty +wI+/ot0RXlXvVOoe8EW2vNcCTub+g+KrjbS/Dtk4B6NjMGEwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFFFeukRyBOiNfTk8PnqEQ11l +SfzvMB8GA1UdIwQYMBaAFHvhSubev20BiHBmOpJHiCk1/2ydMAoGCCqGSM49BAMD +A2cAMGQCMCE7nuuZLMHG+vX/QNRszFYg2sHUnFUez9flD24Az8jCUGfF0yaY0EiT ++3f6o6ARgwIwT796eCDU7/lS4rQiLi+fBCt/rCktXw+LlZC2oGvB3CUfJwjOglPK +euMh+KzQtk46 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICkTCCAhagAwIBAgIUIngKvNC/BMF3TRIafgweprIbGgAwCgYIKoZIzj0EAwMw +dzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlTb21ld2hlcmUx +GjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBGT1IgVEVTVElO +R19PTkxZMRAwDgYDVQQDDAdSb290IENBMB4XDTIyMDYxMDE4NDY0MFoXDTMyMDYw +NzE4NDY0MFowdzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlT +b21ld2hlcmUxGjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBG +T1IgVEVTVElOR19PTkxZMRAwDgYDVQQDDAdSb290IENBMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAEX3FzSTnCcEAP3wteNaiy4GZzZ+ABd2Y7gJpfyZf3kkCuX/I3psFq +QBRvb3/FEBaDT4VbDNlZ0WLwtw5d3PI42Zufgpxemgfjf31d8H51eU3/IfAz5AFX +y/OarhObHgVvo2MwYTAdBgNVHQ4EFgQUe+FK5t6/bQGIcGY6kkeIKTX/bJ0wHwYD +VR0jBBgwFoAUe+FK5t6/bQGIcGY6kkeIKTX/bJ0wDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAPOgmJbVdhDh9KlgQXqE +FzHiCt347JG4strk22MXzOgxQ0LnXStIh+viC3S1INzuBgIxAI1jiUBX/V7Gg0y6 +Y/p6a63Xp2w+ia7vlUaUBWsR3ex9NNSTPLNoDkoTCSDOE2O20w== +-----END CERTIFICATE----- diff --git a/sdk/tests/fixtures/certs/es384_root.pub_key b/sdk/tests/fixtures/certs/es384_root.pub_key @@ -0,0 +1,5 @@ +-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEX3FzSTnCcEAP3wteNaiy4GZzZ+ABd2Y7 +gJpfyZf3kkCuX/I3psFqQBRvb3/FEBaDT4VbDNlZ0WLwtw5d3PI42Zufgpxemgfj +f31d8H51eU3/IfAz5AFXy/OarhObHgVv +-----END PUBLIC KEY----- diff --git a/sdk/tests/fixtures/certs/es512.pem b/sdk/tests/fixtures/certs/es512.pem @@ -0,0 +1,8 @@ +-----BEGIN PRIVATE KEY----- +MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBDCrjJaQ9kS2QVZHr +AoJMiCyk3YtvecNK913LsZ5alTlq01W13cEWVl3nprbCrCVzANiHWLjqUzfVW2oN +wT0rW5qhgYkDgYYABAHbhWCA1ywh5K74+Al75qoC2FLcqEmIJQoU4lNpy5lsPU59 +3LNjzmVUY8VTK8bK9SLnqhZC0sdijlqitmSOJg/VLwB9uYVTnwBmize3WEQmlEyz +nYJ0XdmCZYJcB4ke1aQKpHw1jNhHGSxEO9xn7+50v1EzEwRa0yM934mF3UxCV2c5 +nw== +-----END PRIVATE KEY----- diff --git a/sdk/tests/fixtures/certs/es512.pub b/sdk/tests/fixtures/certs/es512.pub @@ -0,0 +1,55 @@ +-----BEGIN CERTIFICATE----- +MIIDEDCCAnGgAwIBAgIUG1w/19In+2t1z2oZeJIRV2Ad9vIwCgYIKoZIzj0EAwQw +gYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU29tZXdoZXJl +MScwJQYDVQQKDB5DMlBBIFRlc3QgSW50ZXJtZWRpYXRlIFJvb3QgQ0ExGTAXBgNV +BAsMEEZPUiBURVNUSU5HX09OTFkxGDAWBgNVBAMMD0ludGVybWVkaWF0ZSBDQTAe +Fw0yMjA2MTAxODQ2NDBaFw0zMDA4MjYxODQ2NDBaMIGAMQswCQYDVQQGEwJVUzEL +MAkGA1UECAwCQ0ExEjAQBgNVBAcMCVNvbWV3aGVyZTEfMB0GA1UECgwWQzJQQSBU +ZXN0IFNpZ25pbmcgQ2VydDEZMBcGA1UECwwQRk9SIFRFU1RJTkdfT05MWTEUMBIG +A1UEAwwLQzJQQSBTaWduZXIwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABAHbhWCA +1ywh5K74+Al75qoC2FLcqEmIJQoU4lNpy5lsPU593LNjzmVUY8VTK8bK9SLnqhZC +0sdijlqitmSOJg/VLwB9uYVTnwBmize3WEQmlEyznYJ0XdmCZYJcB4ke1aQKpHw1 +jNhHGSxEO9xn7+50v1EzEwRa0yM934mF3UxCV2c5n6N4MHYwDAYDVR0TAQH/BAIw +ADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDBDAOBgNVHQ8BAf8EBAMCBsAwHQYDVR0O +BBYEFIvqbCtmX4qEgOBTn9Vf/mMwaL/AMB8GA1UdIwQYMBaAFE+UvBLAWvNUMwjm +Pkiv67Cg97ZPMAoGCCqGSM49BAMEA4GMADCBiAJCAQJ03SWY5LuQApoOX0CB+sTa +m0xgSs5F8nbz5ZuqW5G0i11j+6LLqr//BIFOgoUYYpOmcWlc5HTtyVAHKrz/w1Hg +AkIAgnE2pI/5YNYctyWHAIHm8dash50/Zbxmt8s/UdlS6U9rQF8+YAGkb7N5WrAw +KffLdPJia7JTK7RSBYfs7RbMn1o= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC8TCCAlKgAwIBAgIUWgQXYzKPqBscSsjonVhGkIbjvpwwCgYIKoZIzj0EAwQw +dzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlTb21ld2hlcmUx +GjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBGT1IgVEVTVElO +R19PTkxZMRAwDgYDVQQDDAdSb290IENBMB4XDTIyMDYxMDE4NDY0MFoXDTMwMDgy +NzE4NDY0MFowgYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJ +U29tZXdoZXJlMScwJQYDVQQKDB5DMlBBIFRlc3QgSW50ZXJtZWRpYXRlIFJvb3Qg +Q0ExGTAXBgNVBAsMEEZPUiBURVNUSU5HX09OTFkxGDAWBgNVBAMMD0ludGVybWVk +aWF0ZSBDQTCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAH3XINQumm91irc4PC2S +YFRlt3FjDBq1/L9bKO/xoWWc2n6qiNoFVG0ECcz2Q6XivV1ANvw+iys3IEl+jPNt +BpL5Aefx/pjePaGVhVSbZXZh6rM2ASV0ISFXSFHGN/60GR3MUjknIHjaeSAJGYMk +GY/yTBL9YfnYgucQk2IXNWavESzGo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQUT5S8EsBa81QzCOY+SK/rsKD3tk8wHwYDVR0j +BBgwFoAUujspKJpk5n2KCybjzeDlPN8Iz6owCgYIKoZIzj0EAwQDgYwAMIGIAkIB +kyighKzu7FxvlSJZZw4w9kYGariAZska0n/qOA4v0Ad2xGVOHxNHDC/NVo2sd+kN +wyQq55/Te5DQ2Y8pwWJdOgUCQgHMKMT+fk1+BdFrUlAdCSand+pkmyE+WImAVweg +v33yfPLxLH6i5Vn85Q7A/zqAxYEPHko/1VYB7voh6piNCtRboA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC2jCCAjygAwIBAgIUYm+LFaltpWbS9kED6RRAamOdUHowCgYIKoZIzj0EAwQw +dzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlTb21ld2hlcmUx +GjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBGT1IgVEVTVElO +R19PTkxZMRAwDgYDVQQDDAdSb290IENBMB4XDTIyMDYxMDE4NDY0MFoXDTMyMDYw +NzE4NDY0MFowdzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlT +b21ld2hlcmUxGjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBG +T1IgVEVTVElOR19PTkxZMRAwDgYDVQQDDAdSb290IENBMIGbMBAGByqGSM49AgEG +BSuBBAAjA4GGAAQBaifSYJBkf5fgH3FWPxRdV84qwIsLd7RcIDcRJrRkan0xUYP5 +zco7R4fFGaQ9YJB8dauyqiNg00LVuPajvKmhgEMAT4eSfEhYC25F2ggXQlBIK3Q7 +mkXwJTIJSObnbw4S9Jy3W6OVKq351VpgWUcmhvGRRejW7S/D8L2tzqRW7JPI2uSj +YzBhMB0GA1UdDgQWBBS6OykommTmfYoLJuPN4OU83wjPqjAfBgNVHSMEGDAWgBS6 +OykommTmfYoLJuPN4OU83wjPqjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBhjAKBggqhkjOPQQDBAOBiwAwgYcCQV4B6uKKoCWecEDlzj2xQLFPmnBQIOzD +nyiSEcYyrCKwMV+HYS39oM+T53NvukLKUTznHwdWc9++HNaqc+IjsDl6AkIB2lXd +5+s3xf0ioU91GJ4E13o5rpAULDxVSrN34A7BlsaXYQLnSkLMqva6E7nq2JBYjkqf +iwNQm1DDcQPtPTnddOs= +-----END CERTIFICATE----- diff --git a/sdk/tests/fixtures/certs/es512_root.pub_key b/sdk/tests/fixtures/certs/es512_root.pub_key @@ -0,0 +1,6 @@ +-----BEGIN PUBLIC KEY----- +MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBaifSYJBkf5fgH3FWPxRdV84qwIsL +d7RcIDcRJrRkan0xUYP5zco7R4fFGaQ9YJB8dauyqiNg00LVuPajvKmhgEMAT4eS +fEhYC25F2ggXQlBIK3Q7mkXwJTIJSObnbw4S9Jy3W6OVKq351VpgWUcmhvGRRejW +7S/D8L2tzqRW7JPI2uQ= +-----END PUBLIC KEY----- diff --git a/sdk/tests/fixtures/certs/ps256.pem b/sdk/tests/fixtures/certs/ps256.pem @@ -0,0 +1,53 @@ +-----BEGIN PRIVATE KEY----- +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 +G/dZR0Qj3j0T5F9GX719XpmzYbVFKIKPTsKF +-----END PRIVATE KEY----- diff --git a/sdk/tests/fixtures/certs/ps256.pub b/sdk/tests/fixtures/certs/ps256.pub @@ -0,0 +1,113 @@ +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +wvq03sA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +\ No newline at end of file diff --git a/sdk/tests/fixtures/certs/ps256_root.pub_key b/sdk/tests/fixtures/certs/ps256_root.pub_key @@ -0,0 +1,15 @@ +-----BEGIN PUBLIC KEY----- +MIICVjBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAQUAoRwwGgYJKoZIhvcN +AQEIMA0GCWCGSAFlAwQCAQUAogMCASADggIPADCCAgoCggIBALire3fbsdEcOztj +01H5mp6ufBRtnUSIQFHy8pNn1K1eZJ+TOBKe9V+wVqe+sq5m8Uhar3T23+AfbPSS +UjZm0KHAuLpMVhdCPNC37HkKlFx1acH3N9SE6l1QcCFF3TdDXgfYzICIj3yapxWt +5A6IsPJ2WE8OVrsiCfg+p51cEf43BQIRxtAgSvYu+Rnl/NfUbMG2rKYKVP8arPvl +U7vMzWhXiCoSUUcuxMuDO/k9HunJ1wdq6hO8VaFk2DPmzeiVckMob+feHQze8iyO +fXU5eRzCr3017k2b0C3a0LXDQe67iJV3JMs0sgB8zfryiiR/sIl42tUm5h0RHAvA +gKl61i86eJ1VMtIO39grXfWlHfZcKTMaesi65gGb+TohiA2hapSGiMYlqLqjmEjW +h0DMUhav1PSxr1/ro/pEqXhJSpr/0D+5JLwHHWBJtM8Gu45WbogoxtFmRI0387x2 +ANrU5+1gIcNuUIJCH0O05KHqOWn0jqI5Su4uWzt3jA8Ouy095+LQ+7Cx9YCDg3MG +1De4Z3OX+WbK6yrqD3gVVWrhFcc3/hAlyK0T1U+nNW4/jVopZVEzdf+rXUgfzSu1 +oRC3nhAwnCKwi/h4RhbdNhj2JC2rtDsf2ZzPrQKUkZhAm93UNHuUD0u1SudAkiM1 +j2/o64dVcRcQWgMfS+KtqtoejMx3AgMBAAE= +-----END PUBLIC KEY----- diff --git a/sdk/tests/fixtures/certs/ps384.pem b/sdk/tests/fixtures/certs/ps384.pem @@ -0,0 +1,53 @@ +-----BEGIN PRIVATE KEY----- +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 +3tua228WMQ3Sc+Hm+GUn4kI+is5V1Yw= +-----END PRIVATE KEY----- diff --git a/sdk/tests/fixtures/certs/ps384.pub b/sdk/tests/fixtures/certs/ps384.pub @@ -0,0 +1,113 @@ +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +LxWpjig= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- diff --git a/sdk/tests/fixtures/certs/ps384_root.pub_key b/sdk/tests/fixtures/certs/ps384_root.pub_key @@ -0,0 +1,15 @@ +-----BEGIN PUBLIC KEY----- +MIICVjBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAgUAoRwwGgYJKoZIhvcN +AQEIMA0GCWCGSAFlAwQCAgUAogMCATADggIPADCCAgoCggIBAKlaDrZsHYOfdb0+ +0u2QmK+HyeDfV6SDPQVjN6UNqDiBCSYkWSJYGIhtVOPdolS37Wfk+vGRqbMA2r7E +rGE/j38hscVWm2Ye4Y5G28aLmprnWLdlFh5Q96SoogZjTPq3cIaYnFi3WYyy9jov +rv/cABMauwpRt/4UWWz7cWptpZcv+hG64GTpLaofw0J9IylqhA32/TCKkvZyX1dm +svVb8PPBBdMoiKf8N1aEIUNFbAjpZ7c+7naT8AflUUeskwuabl1Wcy9BAPF//TxQ +tABshI+Q4yYiTda2fzFEBuezDgFDDdFxrFhkdKKSbkkDgAlw8xvwn9x+fmmVcugf +SclQAl9X7LnNWbqSyGEOF+Q6QnTzbYHnjIV8jWWTIXD2aYe3Rw2RIc4NsyY9urvw +NkgsD1Fa5s7ebuPxPc6auKVwfpLoEh3Ub/2YDOOFVI/0/939AmEAOBYqNxBlA8dp +1oxtMUekIVuSUg7CqtpiHFC3cTzJaOSASOF+QAbC+n9s7xcxy7hcvpnS4e0qIEWd +wBKuCxHv/I1Ok7QDoauv0NMYVzC++C9GYw9We2II/53JW/UTOWxgb+uQjv1Qk6D9 +SrIHa+iyGwiYUG6+9ZwljCzzupnpmEQq5L3KPJM5s5xeLShi8DEN+/XSZKNq3dSi +GbsG31UjVeudQHHQSEwqSG1QNoPNAgMBAAE= +-----END PUBLIC KEY----- diff --git a/sdk/tests/fixtures/certs/ps512.pem b/sdk/tests/fixtures/certs/ps512.pem @@ -0,0 +1,53 @@ +-----BEGIN PRIVATE KEY----- +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 +pH2QDGsL0MKY4ZOue7YfmK+miF9PZ8cqsHUr +-----END PRIVATE KEY----- diff --git a/sdk/tests/fixtures/certs/ps512.pub b/sdk/tests/fixtures/certs/ps512.pub @@ -0,0 +1,113 @@ +-----BEGIN CERTIFICATE----- +MIIGsDCCBGSgAwIBAgIUfengSNBGhz8yc6qH3oxefoKqrRIwQQYJKoZIhvcNAQEK +MDSgDzANBglghkgBZQMEAgMFAKEcMBoGCSqGSIb3DQEBCDANBglghkgBZQMEAgMF +AKIDAgFAMIGMMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExEjAQBgNVBAcMCVNv +bWV3aGVyZTEnMCUGA1UECgweQzJQQSBUZXN0IEludGVybWVkaWF0ZSBSb290IENB +MRkwFwYDVQQLDBBGT1IgVEVTVElOR19PTkxZMRgwFgYDVQQDDA9JbnRlcm1lZGlh +dGUgQ0EwHhcNMjIwNjEwMTg0NjM5WhcNMzAwODI2MTg0NjM5WjCBgDELMAkGA1UE +BhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlTb21ld2hlcmUxHzAdBgNVBAoM +FkMyUEEgVGVzdCBTaWduaW5nIENlcnQxGTAXBgNVBAsMEEZPUiBURVNUSU5HX09O +TFkxFDASBgNVBAMMC0MyUEEgU2lnbmVyMIICVjBBBgkqhkiG9w0BAQowNKAPMA0G +CWCGSAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAD +ggIPADCCAgoCggIBAK2HjBMWHYtGkvPvSCO2Z5ryUuXVFzM0tbIKrGXHIpJW/nPa +7rqG8kamK/PFsMrCzaW5Jf8I121Ve19VcW5y9nGdlvphbn3CCwA8KuQvOoHS87AA +Ga+8OfUoCziCT2GPPWXtHaniUsLlpnD5kRmhzsoYqjQ13/xnpzyA652nFelkv90I +bgUWG9GxBfXyaT0dYdHFjfek6HBav6/nygRPkuk9yvrq7jFQauZe0Rv+/etf/twl +hIDI5oGrQ4PgwQC4u7mIgMOdo9pzL54XI+JC6P2es+SBHBqBmzaBFTtcgS7y3y0O +yiHZkeiPnzpCEOjxiwtMvXAAaHfjumVDWLH6/YkpXgTgrpPYbWwSSjX56xBTdFc+ ++DlKG7ZECmbJfy8LnZ+1iz89JRb4YcYV0ZK79wzqMyOd+ksRgVvkeDQw1KxgEKJw +Y5tcJqCOc0Zfjxhx7qLJV+fOtcAxBAstJjJH9DZJvoAsEDMidS/vk18OhJaPzuLI +MFKBoLC/BV5ty/ZVRW+uAADkgA2ZIPswisBBrAq/kK1XetJlhVGKZsIWZcsDH2z2 +HqqTlcC3JN8Flbp4AvIBoKwSGL05AWgg9ubHXCClB9xRBGqBzBGt7qAS+svRixxi +NHJUSsD3nsvwcYa7DdPD2A8A1OGcfoQlQvovzLK6Gh618xP56PXkPtj4x8AVAgMB +AAGjeDB2MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwQwDgYD +VR0PAQH/BAQDAgbAMB0GA1UdDgQWBBSUceH6x+PyygFBhvfOHZevhww0XTAfBgNV +HSMEGDAWgBRmF7xQwYaHrt9PiNXcFdcau13BdDBBBgkqhkiG9w0BAQowNKAPMA0G +CWCGSAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAD +ggIBAB1/NSEhbwxNGPbgBqojcV9Mi84UhQxbqMt96IMrGO1ojPxrYEseYa7TFmVF +Qsy7Zc+SzIFlfPMVDp15V94qnFTuIHRWZXfWdsK+zubno6odrWR0dPkKfCaHh2Ut +NhARYBU6E9vHT3F5Rm6ogcKw6GD8Ze+5dPHnjI4k+HjbTYRrRq3uSSsW0VBgIJ9x +c4ZN4PZQXYzBOAL2lFccblJdsRSf1PkTkw/pAY+kD5Nlwvr1k1k1kgwmqrUBOJ/l +2+CSB7CX9HmjgB0+Isq+WbBC6+gkirJtzC+M2JxqXvfxEO9ULVOmx7KyxnehD540 +j8Ny/GYUkiRFKvQ9RYmcLE96fu+q9PdLRtsYkOuyKNf20HTrLdEYGeBWGbOrDT1Z +WBE79GUs9c1kZOEZolQLWpsrTkc1ZH0Mxs/XVaDjBlqgjAcny8ULDtbf5MYz6y5f +nuY0J0CjF8MC+hv6W1abYf3/1okfw5d+cQ2LUT0bTaeErkIwez2GwR8ifbAvPHT5 +QDH5yMCWWRx3Qg94vjCY7Vxnc8Pmto4Q9tUEu4HfdAyBtkrv2IrY+gCue731PUvg +v6GGsvfpRQQqWxb9wF3uTwT6pY/1E0HkgCiJOxTtmgAV5cBUKjKfk6FEmjWb/zPd +Ks/2NeBV4JH/iteq9/2SvhZwc8OSWcBlrGl6yC3iOWgwwbXY +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +c9oJ+uc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- diff --git a/sdk/tests/fixtures/certs/ps512_root.pub_key b/sdk/tests/fixtures/certs/ps512_root.pub_key @@ -0,0 +1,15 @@ +-----BEGIN PUBLIC KEY----- +MIICVjBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZIhvcN +AQEIMA0GCWCGSAFlAwQCAwUAogMCAUADggIPADCCAgoCggIBAKuPFb8pdB23A48r +GMMUPElou8UnPwQgboRlnUkb5JWjwUmViNrNslabIIS2agoJvimB54tKW23L6mAo +cWpm6DX14qSNv9+hs3faIXcXeYonj+v35VHkNKJdUxQZIjyL2zvY4m72IIZGwd+2 +58MNV76MaLEGZpxAypi2bKxGqju1wBQ9jxbiGvDlSHKSO8lE2L3/+cAwybYFB1bJ +CPsk3iqe6EvWq0Fkcls2mj1TsMYeJnm8Tquwm/rx/WAzdGJUmxzvW+bqAQM3lHPe +Rd3WgzOxfAfz3XlJLHWF2YjByKQbmllTiX28EH6NO56/k2b275awxViTpITp+xNX +fMopBLrtYple9GQmZuQl/bFmC9R88e5KFCfSTzXQQXCKagDuQm2vNUTjQ8QIdDCi +raQCzkz7pVhbYnWzUVDj0ZpEfvxYBFKRXtJKkr4fX8vWgxtq+0Ch6LzWgtWuM90J +XhKiLFIHOhH7rhpC5KwEkPm9WMvWjfuiLOxzTSZqz6ZH3xOzAAe1TidVLGBkA+n1 +S47rhh0nx7xt+3CygEoj4NNL7jGNAmG9jEjQnJrjY+Y/uaXB/uDzNN17W6cjpORp +SeW9d1vf7a8SGEhAIpI3od1cdBtr1Dr8PU+EhpcGanx6POJJc6gt9IonpwywM6Mj +HK4z3xp2Y3rGNkmWNUcCplDKcDYpAgMBAAE= +-----END PUBLIC KEY----- diff --git a/sdk/tests/integration.rs b/sdk/tests/integration.rs @@ -25,6 +25,13 @@ mod integration_1 { const GENERATOR: &str = "app"; + fn fixture_path(file_name: &str) -> PathBuf { + let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + path.push("tests/fixtures"); + path.push(file_name); + path + } + #[test] #[cfg(feature = "file_io")] fn test_embed_manifest() -> Result<()> { @@ -91,8 +98,8 @@ mod integration_1 { img.save(&output_path)?; // sign and embed into the target file - let temp_dir = tempdir().unwrap(); - let (signer, _) = get_temp_signer(&temp_dir.path()); + let cert_dir = fixture_path("certs"); + let (signer, _) = get_temp_signer(&cert_dir); manifest.embed(&output_path, &output_path, &signer)?;