[java-identity-provider] branch main updated: JPAR-175 Add Signature checking to the dependency analysis
Rod Widdowson
rdw at steadingsoftware.com
Sun Jul 11 15:10:03 UTC 2021
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch main
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=330df1fe32ac60e7bfa913844f154ca11c38c657
The following commit(s) were added to refs/heads/main by this push:
new 330df1fe3 JPAR-175 Add Signature checking to the dependency analysis
330df1fe3 is described below
commit 330df1fe32ac60e7bfa913844f154ca11c38c657
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sun Jul 11 15:31:44 2021 +0100
JPAR-175 Add Signature checking to the dependency analysis
All tests currently turned off
https://issues.shibboleth.net/jira/browse/JPAR-175
---
.../idp/installer/plugin/impl/TrustStore.java | 57 ++++-
.../idp/dependencies/DependencyTest.java | 266 +++++++++++++++++++--
.../net/shibboleth/idp/dependencies/ParsedPom.java | 6 +-
.../net/shibboleth/idp/dependencies/PomLoader.java | 3 +-
.../net/shibboleth/idp/dependencies/stores/antlr | 90 +++++++
.../idp/dependencies/stores/ch.qos.logback | 28 +++
.../shibboleth/idp/dependencies/stores/com.beust | 28 +++
.../idp/dependencies/stores/com.duosecurity | 91 +++++++
.../idp/dependencies/stores/com.fasterxml | 28 +++
.../dependencies/stores/com.fasterxml.jackson.core | 22 ++
.../stores/com.fasterxml.jackson.datatype | 21 ++
.../idp/dependencies/stores/com.fasterxml.woodstox | 28 +++
.../idp/dependencies/stores/com.github.jasminb | 39 +++
.../dependencies/stores/com.google.code.findbugs | 28 +++
.../idp/dependencies/stores/com.google.errorprone | 48 ++++
.../idp/dependencies/stores/com.google.guava | 64 +++++
.../idp/dependencies/stores/com.google.j2objc | 28 +++
.../idp/dependencies/stores/com.sun.activation | 69 ++++++
.../idp/dependencies/stores/com.sun.istack | 68 ++++++
.../idp/dependencies/stores/com.sun.mail | 3 +
.../idp/dependencies/stores/com.unboundid | 17 ++
.../shibboleth/idp/dependencies/stores/commons-cli | 177 ++++++++++++++
.../idp/dependencies/stores/commons-codec | 47 ++++
.../idp/dependencies/stores/commons-lang | 84 +++++++
.../idp/dependencies/stores/commons-lang3 | 0
.../net/shibboleth/idp/dependencies/stores/dom4j | 0
.../idp/dependencies/stores/eu.bitwalker | 33 +++
.../idp/dependencies/stores/io.dropwizard.metrics | 80 +++++++
.../idp/dependencies/stores/jakarta.xml.bind | 69 ++++++
.../idp/dependencies/stores/javax.persistence | 41 ++++
.../shibboleth/idp/dependencies/stores/joda-time | 48 ++++
.../idp/dependencies/stores/net.bytebuddy | 79 ++++++
.../idp/dependencies/stores/net.shibboleth.ext | 80 +++++++
.../idp/dependencies/stores/net.shibboleth.liberty | 81 +++++++
.../dependencies/stores/net.shibboleth.utilities | 80 +++++++
.../net/shibboleth/idp/dependencies/stores/net.spy | 28 +++
.../idp/dependencies/stores/org.apache.commons | 38 +++
.../dependencies/stores/org.apache.httpcomponents | 38 +++
.../idp/dependencies/stores/org.apache.santuario | 35 +++
.../idp/dependencies/stores/org.apache.velocity | 28 +++
.../idp/dependencies/stores/org.bouncycastle | 30 +++
.../idp/dependencies/stores/org.checkerframework | 28 +++
.../idp/dependencies/stores/org.codehaus.janino | 27 +++
.../idp/dependencies/stores/org.codehaus.woodstox | 47 ++++
.../idp/dependencies/stores/org.cryptacular | 70 ++++++
.../shibboleth/idp/dependencies/stores/org.dom4j | 3 +
.../idp/dependencies/stores/org.glassfish | 68 ++++++
.../idp/dependencies/stores/org.glassfish.jaxb | 67 ++++++
.../idp/dependencies/stores/org.hibernate | 68 ++++++
.../idp/dependencies/stores/org.hibernate.common | 0
.../idp/dependencies/stores/org.javassist | 39 +++
.../shibboleth/idp/dependencies/stores/org.jboss | 0
.../idp/dependencies/stores/org.jboss.logging | 0
.../stores/org.jboss.spec.javax.transaction | 0
.../idp/dependencies/stores/org.jetbrains | 47 ++++
.../idp/dependencies/stores/org.ldaptive | 71 ++++++
.../idp/dependencies/stores/org.opensaml | 60 +++++
.../shibboleth/idp/dependencies/stores/org.slf4j | 27 +++
.../idp/dependencies/stores/org.springframework | 28 +++
.../stores/org.springframework.webflow | 28 +++
60 files changed, 2770 insertions(+), 36 deletions(-)
diff --git a/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/TrustStore.java b/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/TrustStore.java
index 6aba2cba3..47b1a8684 100644
--- a/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/TrustStore.java
+++ b/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/TrustStore.java
@@ -68,6 +68,9 @@ import net.shibboleth.utilities.java.support.component.ComponentSupport;
/** Explicit path to trust store. */
@NonnullAfterInit private String explicitTrustStore;
+ /** Explicit stream for trust store. */
+ @NonnullAfterInit private InputStream explicitTrustStoreStream;
+
/** The plugin this is the trust store for. */
@NonnullAfterInit private String pluginId;
@@ -75,7 +78,7 @@ import net.shibboleth.utilities.java.support.component.ComponentSupport;
@NonnullAfterInit private Path store;
/** The key store backup. */
- @NonnullAfterInit private Path backup;
+ @Nullable private Path backup;
/** KeyRing. */
@NonnullAfterInit private PGPPublicKeyRingCollection keyRings;
@@ -106,6 +109,14 @@ import net.shibboleth.utilities.java.support.component.ComponentSupport;
explicitTrustStore = what;
}
+ /** Set explicitTrustStore.
+ * @param what The value to set.
+ */
+ public void setTrustStore(@Nullable final InputStream what) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+ explicitTrustStoreStream = what;
+ }
+
/** Return a store loaded from the supplied stream.
*
* @param in the stream
@@ -179,7 +190,10 @@ import net.shibboleth.utilities.java.support.component.ComponentSupport;
* @throws IOException from {@link Files#newOutputStream(Path, java.nio.file.OpenOption...)} and
* from {@link PGPPublicKeyRingCollection#encode(OutputStream)}
*/
- public void saveStoreInternal() throws IOException {
+ private void saveStoreInternal() throws IOException {
+ if (backup == null) {
+ throw new IOException("Cannot save this store");
+ }
if (Files.exists(store)) {
Files.copy(store, backup, StandardCopyOption.REPLACE_EXISTING);
}
@@ -202,6 +216,30 @@ import net.shibboleth.utilities.java.support.component.ComponentSupport;
}
}
+ /** Lookup and return the key information for this key.
+ * @param sigForKey the signature to lookup
+ * @return the string in a normalized form.
+ */
+ public String getKeyInfo(final Signature sigForKey) {
+ final PGPPublicKey key;
+ try {
+ key = keyRings.getPublicKey(sigForKey.getSignature().getKeyID());
+ } catch (final PGPException e) {
+ log.warn("Couldn't locate key", e);
+ return null;
+ }
+ if (key == null) {
+ log.info("Provided key stream did not contain a key for {}", sigForKey);
+ return null;
+ }
+ final StringBuilder builder = new StringBuilder("KeyId: ").append(sigForKey.toString());
+ final Iterator<String> namesIterator = key.getUserIDs();
+ while (namesIterator.hasNext()) {
+ builder.append("\tUsername:\t").append(namesIterator.next());
+ }
+ return builder.toString();
+ }
+
/** Load up the provided store and if the key is found and the
* Predicate allows it add it to the store which we will then save.
*
@@ -304,14 +342,23 @@ import net.shibboleth.utilities.java.support.component.ComponentSupport;
}
/** {@inheritDoc} */
+ // CheckStyle: CyclomaticComplexity OFF
protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
- if (pluginId == null) {
+ if (pluginId == null && explicitTrustStoreStream == null) {
throw new ComponentInitializationException("Plugin Id not set up");
}
- if (explicitTrustStore != null) {
+ if (explicitTrustStoreStream != null) {
+ try {
+ keyRings = loadStoreFrom(explicitTrustStoreStream);
+ } catch (final IOException e) {
+ log.error("Plugin {}: Could not load explicit trust store from stream", e);
+ throw new ComponentInitializationException(e);
+ }
+ backup = null;
+ } else if (explicitTrustStore != null) {
store = Path.of(explicitTrustStore);
if (!Files.exists(store)) {
log.error("Trust store {} does not exist", explicitTrustStore);
@@ -354,7 +401,7 @@ import net.shibboleth.utilities.java.support.component.ComponentSupport;
}
}
}
-
+ // CheckStyle: CyclomaticComplexity ON
/**
* An opaque handle around a {@link PGPSignature}.
*/
diff --git a/idp-installer/src/test/java/net/shibboleth/idp/dependencies/DependencyTest.java b/idp-installer/src/test/java/net/shibboleth/idp/dependencies/DependencyTest.java
index ca9db6d76..674be57d4 100644
--- a/idp-installer/src/test/java/net/shibboleth/idp/dependencies/DependencyTest.java
+++ b/idp-installer/src/test/java/net/shibboleth/idp/dependencies/DependencyTest.java
@@ -22,14 +22,18 @@ import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
+import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.security.Security;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
@@ -39,6 +43,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Properties;
import java.util.Set;
@@ -47,6 +52,7 @@ import org.apache.maven.shared.invoker.DefaultInvoker;
import org.apache.maven.shared.invoker.InvocationRequest;
import org.apache.maven.shared.invoker.Invoker;
import org.apache.maven.shared.invoker.MavenInvocationException;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
import org.testng.SkipException;
@@ -56,7 +62,10 @@ import org.testng.annotations.Test;
import net.shibboleth.idp.dependencies.ParsedPom.PomArtifact;
import net.shibboleth.idp.installer.plugin.impl.PluginInstallerSupport;
+import net.shibboleth.idp.installer.plugin.impl.TrustStore;
+import net.shibboleth.idp.installer.plugin.impl.TrustStore.Signature;
import net.shibboleth.utilities.java.support.collection.Pair;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.xml.ParserPool;
/**
@@ -65,7 +74,7 @@ import net.shibboleth.utilities.java.support.xml.ParserPool;
public class DependencyTest extends OpenSAMLInitBaseTestCase implements PomLoader {
/** Set this up if you want to run the tests from eclipse. */
- private static String LOCAL_MAVEN_HOME = null;
+ private static String LOCAL_MAVEN_HOME = "c:/Program Files (x86)/apache-maven-3.6.1";
/** A list of things which get added to real versions. */
private static final List<String> extensionGarnish = List.of("-SNAPSHOT", "-GA", "-jre", "-empty-to-avoid-conflict-with-guava");
@@ -79,11 +88,22 @@ public class DependencyTest extends OpenSAMLInitBaseTestCase implements PomLoade
/** The parsed idp-parent pom. */
private ParsedPom idpParent;
+ /** The parsed java-parent pom. */
+ private ParsedPom projectParent;
+
+ /** where we are writing to (target/dependencyReport.txt).*/
private PrintWriter report;
- private PomArtifact parentArtefact;
+ /** The trust stores for our signature test. */
+ private final Map<String, Optional<TrustStore>> trustStrores = new HashMap<>();
+
+ /** The ArtefactId to GroupId mapping */
+ private final Map<String, String> artifactToGroup = new HashMap<>();
+
+ /** Is this a snapshot build (the idp version ends with -SNAPSHOT.*/
+ private boolean isSnapShot;
- /** We have as an assumption that the CWD is idp-installer. Test this.
+ /** We have as an assumption that the CWD is idp-installer. Test this.
* @throws IOException if the directory isn't what we expect it to be
*/
@BeforeClass public void testWorkingDir() throws IOException {
@@ -94,7 +114,7 @@ public class DependencyTest extends OpenSAMLInitBaseTestCase implements PomLoade
assertTrue(path.resolve("..").resolve("idp-war").toFile().exists());
assertEquals(myPath, indirectPath);
}
-
+
/** Set up maven.
* This relies on a couple of dodgy tests when running from maven from the command line and
* on the user setting up {@link #LOCAL_MAVEN_HOME} when running from eclipse.
@@ -127,50 +147,236 @@ public class DependencyTest extends OpenSAMLInitBaseTestCase implements PomLoade
parserPool = XMLObjectProviderRegistrySupport.getParserPool();
idpParent = new ParsedPom(parserPool, this, Path.of("../idp-parent/pom.xml"), "idp-parent/pom.xml", null, Collections.emptyMap());
- parentArtefact = idpParent.getParent();
- assertNotNull(parentArtefact);
- final Path parentPath = downloadPom(parentArtefact);
- final ParsedPom projectParent = new ParsedPom(parserPool, this, parentPath, "parent/pom.xml", new Properties(), Collections.emptyMap());
+ final Path lib = Path.of("../idp-war-distribution/target/idp-war-distribution-"+ idpParent.getOurInfo().getVersion()).resolve("WEB-INF").resolve("lib");
+ if (!Files.exists(lib)) {
+ throw new SkipException("War distribution target not found");
+ }
+ assertNotNull(idpParent.getParent());
+ final Path parentPath = downloadPom(idpParent.getParent());
+ projectParent = new ParsedPom(parserPool, this, parentPath, "parent/pom.xml", new Properties(), Collections.emptyMap());
idpParent = new ParsedPom(parserPool, this, Path.of("../idp-parent/pom.xml"), "idp-parent/pom.xml", projectParent.getProperties(), projectParent.getManagedDependencies());
assertTrue(projectParent.getCompileDependencies().isEmpty(), "project parent contributes compile dependencies");
assertTrue(projectParent.getRuntimeDependencies().isEmpty(), "project parent contributes run time dependencies");
+ isSnapShot = idpParent.getOurInfo().getVersion().endsWith("-SNAPSHOT");
+ }
+
+ /** Populate the {@link #artifactToGroup} map.
+ * First from the parse pom and then by hand.
+ */
+ @BeforeClass(dependsOnMethods = "parsePom") public void setupGroupMapping() {
+ for (final PomArtifact dep : idpParent.getCompileDependencies()) {
+ artifactToGroup.put(dep.getArtifactId(), dep.getGroupId());
+ }
+ for (final PomArtifact dep : idpParent.getRuntimeDependencies()) {
+ final String comp = artifactToGroup.get(dep.getArtifactId());
+ if (comp != null) {
+ assertEquals(comp, dep.getGroupId(), "Group mismatch dependency for " + dep.getArtifactId());
+ } else {
+ artifactToGroup.put(dep.getArtifactId(), dep.getGroupId());
+ }
+ }
+ for (final PomArtifact artifact : idpParent.getManagedDependencies().values()) {
+ if (!artifactToGroup.containsKey(artifact.getArtifactId())) {
+ artifactToGroup.put(artifact.getArtifactId(), artifact.getGroupId());
+ }
+ }
+ for (final PomArtifact artifact : projectParent.getManagedDependencies().values()) {
+ if (!artifactToGroup.containsKey(artifact.getArtifactId())) {
+ artifactToGroup.put(artifact.getArtifactId(), artifact.getGroupId());
+ }
+ }
+
+ addMapping("annotations", "org.jetbrains");
+ addMapping("antlr", "antlr");
+ addMapping("byte-buddy", "net.bytebuddy");
+ addMapping("checker-qual", "org.checkerframework");
+ addMapping("classmate", "com.fasterxml");
+ addMapping("commons-cli", "commons-cli");
+ addMapping("commons-compiler", "org.codehaus.janino");
+ addMapping("commons-lang3", "org.apache.commons");
+ addMapping("commons-pool2", "org.apache.commons");
+ addMapping("dom4j", "org.dom4j");
+ addMapping("error_prone_annotations", "com.google.errorprone");
+ addMapping("failureaccess", "com.google.guava");
+ addMapping("hibernate-commons-annotations", "org.hibernate.common");
+ addMapping("istack-commons-runtime", "com.sun.istack");
+ addMapping("j2objc-annotations", "com.google.j2objc");
+ addMapping("jandex", "org.jboss");
+ addMapping("jboss-logging", "org.jboss.logging");
+ addMapping("jboss-transaction-api_1.2_spec", "org.jboss.spec.javax.transaction");
+ addMapping("javassist", "org.javassist");
+ addMapping("javax.persistence-api", "javax.persistence");
+ addMapping("listenablefuture", "com.google.guava");
+ addMapping("spymemcached", "net.spy");
+ addMapping("spring-binding", "org.springframework.webflow");
+ addMapping("stax2-api", "org.codehaus.woodstox");
+ addMapping("txw2", "org.glassfish.jaxb");
+ addMapping("woodstox-core", "com.fasterxml.woodstox");
+ }
+
+ /** Add the pair to the artifact to group mapping. With test for duplicate
+ * @param artifactId the atifact
+ * @param groupId the groupid
+ */
+ private void addMapping(String artifactId, String groupId) {
+ final String old = artifactToGroup.put(artifactId, groupId);
+ if (old != null) {
+ report.format("Duplicate group declaration for %s\n" , artifactId);
+ }
+
}
/** Create the reporter print stream
* @throws FileNotFoundException if we cannot
*/
- @BeforeClass(dependsOnMethods = {"testWorkingDir"}) public void initializeOutput() throws FileNotFoundException {
+ @BeforeClass(dependsOnMethods = {"testWorkingDir"}) public void initialize() throws FileNotFoundException {
final File out = new File("target/dependencyReport.txt");
final FileOutputStream outStream = new FileOutputStream(out);
report = new PrintWriter(new BufferedOutputStream(outStream));
report.format("Dependency Analysis, started at %s\n", Instant.now().toString());
+ if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
+ Security.addProvider(new BouncyCastleProvider());
+ }
}
/** Clean up after ourselves. */
@AfterClass public void teardown() {
+ report.flush();
+ report.close();
PluginInstallerSupport.deleteTree(workingDir);
}
+
+ /** The Body of the signature test. Are all the files what we expected?
+ * @throws IOException if the enumeration failed.
+ */
+ @Test(enabled=false) public void testSignatures() throws IOException {
+ final Path lib = Path.of("../idp-war-distribution/target/idp-war-distribution-"+ idpParent.getOurInfo().getVersion()).resolve("WEB-INF").resolve("lib");
+
+ final int sigFails = Files.list(lib).mapToInt(e -> checkSignature(e)).sum();
+ assertEquals(sigFails, 0, "Signature Failures");
+ }
+
+ /** Given the Path and the parent dir check the signature.
+ * @param jarFile the file to check
+ * @return 1 if anything went wrong
+ */
+ private int checkSignature(Path jarFile) {
+ final Pair<String,String> name = splitFileName(jarFile.getFileName().toString());
+ final String group = artifactToGroup.get(name.getFirst());
+ if (group == null) {
+ report.format("%-30s: %-12s Could not determine group\n", name.getFirst(), name.getSecond());
+ return 1;
+ }
+ final PomArtifact jarAsArtifact = idpParent.new PomArtifact(group, name.getFirst(), name.getSecond());
+ if (idpParent.getGeneratedArtifacts().contains(jarAsArtifact)) {
+ report.format("%-30s: %-12s Generated by IdP build. Not checked\n", name.getFirst(), name.getSecond());
+ return 0;
+ }
+ if (isSnapShot && name.getSecond().endsWith("-SNAPSHOT")) {
+ report.format("%-30s: %-12s SnapShot version on a snapshot build. Not Checked\n", name.getFirst(), name.getSecond());
+ return 0;
+ }
+ final TrustStore store = getTrustStore(group);
+ if (store == null) {
+ report.format("%-30s: %-12s No truststore for group %s\n", name.getFirst(), name.getSecond(), group);
+ return 1;
+ }
+ final Signature sig = getSignature(jarAsArtifact);
+ if (sig == null) {
+ report.format("%-30s: %-12s Could not find signature (group : %s)\n",
+ name.getFirst(), name.getSecond(), group);
+ return 1;
+ }
+ if (!store.contains(sig)) {
+ report.format("%-30s: %-12s KeyId (%s) not found in truststore for %s\n", name.getFirst(), name.getSecond(), sig.toString(), group);
+ return 1;
+ }
+
+ try (final BufferedInputStream stream = new BufferedInputStream(new FileInputStream(jarFile.toFile()))) {
+ if (!store.checkSignature(stream, sig)) {
+ report.format("%-30s: %-12s Signature Mismatch : %s in Trustore %s\n",
+ name.getFirst(), name.getSecond(), store.getKeyInfo(sig), group);
+ return 1;
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ return 1;
+ }
+ report.format("%-30s: %-12s Signature Match in trustore %s : %s \n",
+ name.getFirst(), name.getSecond(), group, store.getKeyInfo(sig));
+ return 0;
+ }
+
+ /** Locate and load the signature for this artefact
+ * @param artifact what to load
+ * @return the Signature or null if we couldn't locate it.
+ */
+ private Signature getSignature(final PomArtifact artifact) {
+ Path path;
+ try {
+ path = download(artifact, "jar.asc");
+ } catch (MavenInvocationException e1) {
+ e1.printStackTrace();
+ return null;
+ }
+ if (!Files.exists(path)) {
+ return null;
+ }
+ try (final InputStream stream = new BufferedInputStream(new FileInputStream(path.toFile()))){
+ return TrustStore.signatureOf(stream);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /** Locate the truststore in the cache or load & cache it (or a negative lookup).
+ * @param group the group to load
+ * @return a truststore or null if there wasn't one.
+ */
+ private TrustStore getTrustStore(final String group) {
+ final Optional<TrustStore> opt = trustStrores.get(group);
+ if (opt != null) {
+ if (opt.isEmpty()) {
+ return null;
+ }
+ return opt.get();
+ }
+
+ try (final InputStream input = getClass().getResourceAsStream("/net/shibboleth/idp/dependencies/stores/"+group)) {
+ if (input == null) {
+ trustStrores.put(group, Optional.empty());
+ return null;
+ }
+ final TrustStore store = new TrustStore();
+ store.setTrustStore(input);
+ store.initialize();
+ trustStrores.put(group, Optional.of(store));
+ return store;
+ } catch (IOException | ComponentInitializationException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
- /** The guts of the first test. Are all the files what we expected?
+ /** The Body of the Dependency test. Are all the files what we expected? Who produced what?
* @throws IOException if the file doesn't exist
* @throws MavenInvocationException if we fail to download a pom or a dependency
*/
- @Test(enabled=true) public void testDependencies() throws IOException, MavenInvocationException {
+ @Test(enabled=false) public void testDependencies() throws IOException, MavenInvocationException {
if (!idpParent.getDuplicates().isEmpty()) {
report.format("Duplicates found parsing the poms\n");
for (final Pair<PomArtifact,PomArtifact> poms : idpParent.getDuplicates()) {
final PomArtifact f = poms.getFirst();
final PomArtifact s = poms.getSecond();
- report.format("%-22s\t: %s (from %s) and %s (from %s)\n", f.getMapKey(),
+ report.format("%-30s: %10s (from %s) and %s (from %s)\n", f.getMapKey(),
f.getVersion(), f.getSourcePomFilename(),
s.getVersion(), s.getSourcePomFilename());
}
}
final Path lib = Path.of("../idp-war-distribution/target/idp-war-distribution-"+ idpParent.getOurInfo().getVersion()).resolve("WEB-INF").resolve("lib");
- if (!Files.exists(lib)) {
- throw new SkipException("War distribution target not found");
- }
final Map<String, String> names = new HashMap<>();
int wrongVersion = 0;
int found = 0;
@@ -193,16 +399,16 @@ public class DependencyTest extends OpenSAMLInitBaseTestCase implements PomLoade
final String version = names.remove(id);
if (idpParent.getGeneratedArtifacts().contains(artifact)) {
if (!artifact.equals(last)) {
- report.format("%-22s\t: %-12s\tGenerated by parent war\n", id, ver);
+ report.format("%-30s: %12s\tGenerated by parent war\n", id, ver);
}
} else if (artifact.equals(last)) {
- report.format("%-22s\t: %-12s\tRuntime & Compile: %-22s\n", id, ver, sourcePomFilename);
+ report.format("%-30s\t: %12s\tRuntime & Compile: %-22s\n", id, ver, sourcePomFilename);
dupNames++;
} else if (version == null) {
- report.format("%-22s\t: %-12s\tNot found in war %-22s\n", id, ver, sourcePomFilename);
+ report.format("%-30s\t: %12s\tNot found in war %-22s\n", id, ver, sourcePomFilename);
nonUsed++;
} else if (version.equals(ver)) {
- report.format("%-22s\t: %-12s\tFound in war %-22s\n", id, ver, sourcePomFilename);
+ report.format("%-30s\t: %12s\tFound in war %-22s\n", id, ver, sourcePomFilename);
found++;
analyzeChild(dependencySource, artifact);
} else {
@@ -256,8 +462,6 @@ public class DependencyTest extends OpenSAMLInitBaseTestCase implements PomLoade
report.format("%d Similar artifact names(s)\n", similarNames);
report.format("%d Wrong Versions(s)\n", wrongVersion);
report.format("Completed at %s\n", Instant.now().toString());
- report.flush();
- report.close();
assertEquals(wrongVersion, 0, "Mismatched version");
assertEquals(similarNames, 0, "Multiple similarly named jars");
assertEquals(noSource, 0, "Orphaned Artefacts");
@@ -348,6 +552,7 @@ public class DependencyTest extends OpenSAMLInitBaseTestCase implements PomLoade
.append(artifact.getVersion())
.append(".xml").
toString()).toFile();
+ final PomArtifact parentArtefact = idpParent.getParent();
try (final PrintWriter pom = new PrintWriter(new BufferedOutputStream(new FileOutputStream(file)))) {
pom.format("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ " xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\">\n"
@@ -429,20 +634,30 @@ public class DependencyTest extends OpenSAMLInitBaseTestCase implements PomLoade
return 1;
}
- /** Tell Maven to download the artifact and returns it's path.
+ /** {@inheritDoc} */
+ @Override
+ public Path downloadPom(final PomArtifact artifact) throws MavenInvocationException {
+ final Path path = download(artifact, "pom");
+ assertTrue(Files.exists(path));
+ return path;
+ }
+
+ /** Tell Maven to download the POM for artifact and returns it's path.
* @param artifact what to look for
+ * @param type the type to dowb load ('pom' or 'jar.asc' and so on
* @return the pom as a {@link Path}
* @throws MavenInvocationException if the download failed
*/
- public Path downloadPom(final PomArtifact artifact) throws MavenInvocationException {
- final Path output = workingDir.resolve(artifact.getArtifactId() + ".pom");
+ public Path download(final PomArtifact artifact, final String type) throws MavenInvocationException {
+ final Path output = workingDir.resolve(artifact.getArtifactId() + "." + type);
assertFalse(Files.exists(output));
final String fullArtifactName = new StringBuilder(artifact.getGroupId())
.append(':')
.append(artifact.getArtifactId())
.append(':')
.append(artifact.getVersion())
- .append(":pom")
+ .append(':')
+ .append(type)
.toString();
final Properties props = new Properties(3);
@@ -454,7 +669,6 @@ public class DependencyTest extends OpenSAMLInitBaseTestCase implements PomLoade
Invoker invoker = new DefaultInvoker();
invoker.execute( request );
- assertTrue(Files.exists(output));
return output;
}
diff --git a/idp-installer/src/test/java/net/shibboleth/idp/dependencies/ParsedPom.java b/idp-installer/src/test/java/net/shibboleth/idp/dependencies/ParsedPom.java
index ba0bc12f6..186cec368 100644
--- a/idp-installer/src/test/java/net/shibboleth/idp/dependencies/ParsedPom.java
+++ b/idp-installer/src/test/java/net/shibboleth/idp/dependencies/ParsedPom.java
@@ -346,7 +346,7 @@ public class ParsedPom extends OpenSAMLInitBaseTestCase{
public Properties getProperties() {
return properties;
}
-
+
/** Encapsulation of a <dependency> element. */
public class PomArtifact implements Comparable<PomArtifact>{
@@ -372,7 +372,7 @@ public class ParsedPom extends OpenSAMLInitBaseTestCase{
* @param group the <groupId>
* @param ver the <version>
*/
- private PomArtifact(final String id, final String group, final String ver) {
+ public PomArtifact(final String group, final String id, final String ver) {
artifactId = id;
groupId = group;
version = ver;
@@ -511,7 +511,7 @@ public class ParsedPom extends OpenSAMLInitBaseTestCase{
* @return an amended artifact.
*/
public PomArtifact withVersion(String ver) {
- return new PomArtifact(artifactId, groupId, ver);
+ return new PomArtifact(groupId, artifactId, ver);
}
}
}
diff --git a/idp-installer/src/test/java/net/shibboleth/idp/dependencies/PomLoader.java b/idp-installer/src/test/java/net/shibboleth/idp/dependencies/PomLoader.java
index a539cb71d..cee5a0204 100644
--- a/idp-installer/src/test/java/net/shibboleth/idp/dependencies/PomLoader.java
+++ b/idp-installer/src/test/java/net/shibboleth/idp/dependencies/PomLoader.java
@@ -29,8 +29,7 @@ public interface PomLoader {
/** tell Something to download the artifact and returns it's path.
* @param artifact what to look for
* @return the pom as a {@link Path}
- * @throws Exception
+ * @throws Exception on an error
*/
Path downloadPom(PomArtifact artifact) throws Exception;
-
}
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/antlr b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/antlr
new file mode 100644
index 000000000..fe594be3b
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/antlr
@@ -0,0 +1,90 @@
+ rsa4096/378B845402277962 2011-09-22 Scott Cantor <cantor.2 at osu.edu>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+y9dLC3qlwC4pCIpol0QKbQ==
+=96Mf
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/ch.qos.logback b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/ch.qos.logback
new file mode 100644
index 000000000..e650d24bc
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/ch.qos.logback
@@ -0,0 +1,28 @@
+rsa2048/2C7B12F2A511E325 2012-04-26 Ceki Gulcu <ceki at qos.ch>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBE+ZO+EBCAC3fZOOuYKthr0GcUge0PH2bh18sbM9XUmPKQz/W15l1NA/2ARS2gUXM0R+
+SunMlun9KsqjnojJ2ObVPvbm1Hg/66JSRgR3JWfIpSlJxLicpfu8rCfNbOjh4v9ZipD+px8w
+3o/RNrnZH/KRsoJg9yER6pf+pUZqTJfdg5lXezc1WF+/1qVoypldMGfrkfLsPrUZTT689ubb
+ig978e7eYmJEqldtaIwaAzHQnB70wIJyg/rEwFUMldsvs6t6czSuJ4zPMvmh8TMpTg9e6+DM
+ktPl1CWRONl8RPpgYMIC96gb4OnfDDjkEx6clSCwgbDwdeAyOjjR6pVq+pCNTo1Pcj5jABEB
+AAG0GENla2kgR3VsY3UgPGNla2lAcW9zLmNoPokBOAQTAQIAIgUCT5k74QIbAwYLCQgHAwIG
+FQgCCQoLBBYCAwECHgECF4AACgkQLHsS8qUR4yVwIwgAlj6R9Lxk/GnclmSvgtTyk1r5GxJ7
+5iSCzs7qDlNuM6EfFbuZvLWORGgP8KtdQdh/bdICtRbh2eoW0vEKJKkl0ZI0/RnVMYKYpIHi
+KVUSjPq0svwDk5tUa7taNSdHfi9o1G1doBHyPu1u1xDVzMSWsbEvx6aVr2HkBDRyA+VcmnX6
+tokZjyRX4C9ldX3tR+ffn7v2Iy0bIesM92nMPnH/fPXWlnbQKTxQeMj2qYSl3H/NGp57G7KN
+Sl1na5U8ueMcUtYb+eHphMsmaEb9xw8dM96CzIPZh1xMHNoQNNJibURysbUpFlGUTOv6K0A3
+92QkX3GwuCQGOeLWHOoQHD6Jt7kBDQRPmTvhAQgAtrGiCYnW3tqvDzaStXsguVw67pou65dO
+7LTcrX+NTvejJZ9SrC89JsfiKBwtvyS3X/qiB+S7RP21PH7SYOy+orwDw1nacNNeiTdPnxQC
+DQVNeWpSpmbLlA+0b6K3aPf/EaCKndXmnQyXVOoSXZJ9bqAe0um0NRbO7M+L1KArVkWW56ms
++DvHAeZaGnSDDHQpJI5haUqgSWWP/VoPEU1x0qiBZwY3lokSwRMISC4E/uiUvvm7rvfbBzfO
+iVrjNPLlsVPiQRgOTfQO7dUZAmt2yqWJt1Clliby4fgBVcOYUx0QCMiz8MZGtSB17+hSrC2C
+b1T6n0ypxuYyh4sV2LtqMQARAQABiQEfBBgBAgAJBQJPmTvhAhsMAAoJECx7EvKlEeMlX0UI
+AKS+4ZAKrGG9jbWfzTTDbu9zzkXgV13suMD+XcGz10DkdluTUBXj8wWlp289fXNm4E49ipsN
+K+dcZ+gOATjUvb1Llh6D6bHz1QM7olxBCeU2feTmYYKBH8GYY9JZzfAXNMQhcNiiPj+ntZqe
+Py/EFA4uZHM7We7vl2c7CBcDAq1NNeEczo0KvG7AWt6QoaMVmbvA14EKadNzrmEy9apkag1B
+KvwzXInYCvIHMa9ZqicOSUcI5QCYu5TufvIE7Eq3Khh2Ex1FiOaEA+57LMrt6NsSKXrB8JNY
+bI5pqE1rxJXZnYtx3ZpPAAEfLjPdi1AOkWhvhsoPmiGFC6ebYQ5eVbI=
+=9O4j
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.beust b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.beust
new file mode 100644
index 000000000..25f474c80
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.beust
@@ -0,0 +1,28 @@
+rsa2048/AC5EC74981F9CDA6 2019-06-30 Cedric Beust <cedric at beust.com>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBF0YzcYBCADmNIEEzvSsnJnxH0u89Hb5vCCkl+45dWHyCMsCLNty8yL214LVB35gnU+6
+BvRXN3DmTpreCV8/wgI2h1eq83dTO2AsnJTxTjvYpiwAtWhONxWxCU1YWlH8Fsvao51CJWUw
+YY2HzFr9j7h7EOnm6gj2pnUDdjHRgou9/OxIk6q3M6hrwwh2IXw6PXFmkg4wRwlqW5FiC90I
+8gd3ItFCzqx0TR7DuhOFhtvOheWMlApPoMOUY+6uC5Ek6kVW5w5xshKafS7p2s0WOsXkOnH7
+6avFtkBtcsPbHkwWTal4xivSMMsCpdPMcF6Fr2p5hF4khQ1r5pdmHeYNoXcC+hSnPM9tABEB
+AAG0H0NlZHJpYyBCZXVzdCA8Y2VkcmljQGJldXN0LmNvbT6JAVQEEwEIAD4WIQTcugM4HvbI
+kJas2YWsXsdJgfnNpgUCXRjNxgIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK
+CRCsXsdJgfnNpjMGCAC9ojPgU3nJjPdbr57iB1ulJuDaMq+5AsFycAvpbBlbHQYVj3ngldzX
+eehl5H2KYYQzUfr7lDoTwk2dz1i64opMBbsNJZFamivwOaAEk1hX4CwZDGbzk0CfT0oE4dR4
+TsNEbsW8AiLxXa8ZVbK9cGYdcWHYyNKDJeb/afNeCCpZpkx6+qpXJG2BQbIO+8J2E03WcaO0
+ualRdyw7GM/APJrU0o9sA3wwv4dReuJSrV4JlaoNvHvOok43Z6IxuWYwPe5Gf+zMXrHDUFOI
+iNbYLnXMxi1QDIyXsnJ+KNXRRo0icfB8P81AeG1gqFuw0Y15YoFvN+sFWtks0wdzZqzxLLp1
+uQENBF0YzcYBCACmu7FGW89IMsiRtCfWh5aPwLzmWaczLXeUhcrlcl2GHKiy//zM+1PhFj09
+2Tl/WCif0694nXsKrlx9PO0q6ca9LSyHZqwAV8AbLHyxkl6mQs+HH5CHEMrT/FpPLCfTUCSy
+NRyuRJWkbJjCeMkAmB+eVHHQLfaRRHVTBW4EfxCHAtwLfys/0PO82+aCHwCgUh7vTUara4kr
+PNHV+7KfSbqCACk3b0ebY53cAva+p+BZac+vJ58Cg9MunvURigd111PZOkiKlAx6xwcq1Z2H
+cJFTj+jtTGwaeXJErusPXhW1NxiUqCeKe4o9Iw+D2pYIqqahVGKnqPYDYY3dBMU3GHiDABEB
+AAGJATwEGAEIACYWIQTcugM4HvbIkJas2YWsXsdJgfnNpgUCXRjNxgIbDAUJA8JnAAAKCRCs
+XsdJgfnNphXkB/9/M1DqpV/FBRhPYMiycj0L+qKXDjJdMSlem8a7F59PEGkB0oStEUC0voAe
+O3hPLvgm0MVAsX9ULtWHlPG+uDYG8/CnFla8BaFAkTSlTQsmE0/0j0XTrR4uO5aJBRR+yDKG
+eR31JyWGecE7UfwQPMxSZENLVft0oZUURc8vLNBn7Acl/kbw1uKI2ASVmIA4cLYBuYuI14Q6
+3EZQHlGQ2AviuaMR23qYRv4Rq5sRu1RJw/fITZzwFmmVT0MJvkW3y0pE0VAA7aGfx5ycnEPm
+NlqS4Xfjk+i864g1NjcUKpxv5QIn/p3P8XLKVJoUXU2y4MiJreUxhQI8ClVBsDh/Q9pr
+=543s
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.duosecurity b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.duosecurity
new file mode 100644
index 000000000..b8de64b33
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.duosecurity
@@ -0,0 +1,91 @@
+rsa4096/378B845402277962 2011-09-22 Scott Cantor <cantor.2 at osu.edu>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+y9dLC3qlwC4pCIpol0QKbQ==
+=96Mf
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml
new file mode 100644
index 000000000..499946031
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml
@@ -0,0 +1,28 @@
+rsa2048/C9FBAA83A8753994 2016-07-26 Tatu Saloranta (cowtowncoder) <tatu.saloranta at iki.fi>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFeWvEwBCAC7oSQ7XqcGDc6YL4KAGvDVZYigcJmv0y5hWT4wv9ABP4Jhzr1HNDmmGyWz
+hzTeMxwuZnc9vhxCQRwyxj3gGI5lYPEARswbi2fWk//78/3Wk+YMHJw3/1EO3VqvvDUt39gb
+aSqMCQNHctnFdb2QYZ7nRFTQeCqG/wyMdB05beqEnWEXzjePFDF9y6gXkELn0lxUm2TKO8tU
+3h96TCuutDKJ0aE00lOeh/MbEaGHEbIU8kdfui6UznZ1X80EWbkCY8cKxEZHKD0aONSVHXwE
+6nETvFW9/9+K+sj/I7ytlyxwHsaQpi1H6aRGnq013VsIECrwkhmXBsLLXNjmhER+LkcDABEB
+AAG0NVRhdHUgU2Fsb3JhbnRhIChjb3d0b3duY29kZXIpIDx0YXR1LnNhbG9yYW50YUBpa2ku
+Zmk+iQE+BBMBAgAoBQJXlrxMAhsDBQkHhM4ABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK
+CRDJ+6qDqHU5lFtxB/0QBiKaHHdFu3GOs21+S4LZYmO0bvHASg7ueeWtoE/1cEsKqvES03Tw
+iSfMabaPt+UL4qP9w6/SUtTITAmxuc1ksyU+HwC/R1QuF+vdsguFZ0/8VdVRVY5I5/6Dcp7k
+I49RO0LxGPXCMn8s3Nj0KXiCoodMDLHwwMv5OXWrQQ4yXiQTsJudBxy5o2yfp0AlLm4uZdDL
+j7Z4u4DfyKOuKIUMsMQ2Hk12gSkDaZViIURH6MaSEdC+XbDUcPTq27+JSdjfYEX0908P/bH3
+6H2kPCGVh+sXpICZ/Ce7m0OHBfE/pTTCuOlAJvcLY4QbyMTlyPpZ0zFgO+jX+fj8UFi2sRhq
+uQENBFeWvEwBCADfbjqRN1GvSf9VkjDDWBqX3hILiPx3DKPiSFmSsAoiLSEkP8gRDBDy6po/
+Oez9q+bgb9Sk+iGifJvbVNZr7+88LSxQECsrVL+ZgTAZ2LkqABQJ8XYh/dTO6BMJ5rSLH/YN
+6bO9V4NjYod67W5uYox+aCp6keE7ia7eBHck2wyqxikCqvVzmAduPCkkNSRuOwLkOguduXfw
+b7Cg1RnacMMEfDd9t+a6ytY/8JFu01G++VVxFHO3vs//RINrm0O4xKPkT1+Ocd4+h3DlhhRv
+RXvI+MKeM0ud0OpUVCBKCZqbFKTVgoRpsKC925ZRUSqbmyBcIkqyYjzD1adaZdkq4PLFABEB
+AAGJASUEGAECAA8FAleWvEwCGwwFCQeEzgAACgkQyfuqg6h1OZQ6swf/Vm0ndBcvdK0qCoub
+R/WOsynS1wdQ2rGKJC5oVsUN4YVCZhg9OMhwMSO3EOBPdxtq4A8bSZp/8ZWmHLohE8QHD8Ag
+aQBtRZyNkvMRiN157XGkPEBRWdHw6XAvx/lE31W+19qFRnAE8BbERE3gieJcG4CKWy5CyzXn
+jSM+znZvDQ8J7MfG+LxKbr7zUHQH9ZWsk8V9D+GXDgpuyZc4ct1tNDLcn6784FubcdrD3RLM
+iOAYSSgKSgoELRzB8zZds+WKFuiAYXZSdzCbjJJ2VqnJnQtYHN7Z5r3ySqbG7w3rRen+Ett6
+PX9Hrvc1MTy/UUdb3s08C0wD0x+ZzFzqUXKTZg==
+=nsI4
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml.jackson.core b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml.jackson.core
new file mode 100644
index 000000000..db53a96be
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml.jackson.core
@@ -0,0 +1,22 @@
+rsa2048/8D7F1BEC1E2ECAE7 2020-08-01
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBF8kuOUBCACo8/VYVfmglgTgmai5FvmNzKi9XIJIK4fHCA1r+t47aGkGy36EdSOlApDj
+qbtuodnyH4jiyBvT599yeMA0O/Pr+zL+dOwdT1kYL/owvT0U9oczvwUjP1LhYsSxLkkjqZmg
+PWdef5EFu3ngIvfJe3wIXvrZBB8AbbmqBWuzy6RVPUawnzyzqZTlHfyQiiP41OMONOGdh/I7
+Tj6Ax9X1dMH3N5SkXgmuy4YHZoeFW2K3+6yIbP8UCMxrTNLm6QfOIPsvjDDnTBpkkvEZjS24
+raBiHW5P35ptpNj5F1oLlOxZ/NRCbP3CPlEejUkh1+7rOwrRkCrDnNFIQYmWF2Mt4KlzABEB
+AAG5AQ0EXyS45QEIANDsIlvCdMQp+rixXunm23AcZLsgzW781vawPkk8Dw3neQqTjrcd81W9
+p+iSjQAzvq0dW6PQwtSy++nOtyIpU+J1cfAs1Jxi3sms40cvqqccSQkzjJUs97fzo1capzlf
+09NmNncHSCqqeAZU7J+WnUNSBd50yLLTffvo1lO7svLFcuvaO8ai+XoeYzTxm6paT4vyzcH+
+9hlew6nMafmMDjDsAkba4bjcXhpCkS9Jijc6973zDjFdzpf+YvKtvxktRWfDktLYMdTaVm+6
+MAfFubs+zZjOuMHc72XgiqI789z4BOeeD1HjzkGfLA9bfpcS2Gs0+63NiDXIY2rT0D71IucA
+EQEAAYkBPAQYAQgAJhYhBIoQeSmDAj1dFMk7SI1/G+weLsrnBQJfJLjlAhsMBQkDwmcAAAoJ
+EI1/G+weLsrnbSgH/1+Wy3H0/v0mY/2qi2cod2+NPT2i6RBJ+LvkW8Wzp4oIr9rRjZ4jlZXT
+AtvdY5PVellIAztr5C65Qcwi+aRzDSTna+FDzJoIMIqNPuaQUcKLGFrpUUFvng9eRnh773A8
+68XDiLtHiqp1BGn3F7g6BZmN4fbpnL+XAaW5ogmZd9pVgctB7b568+C0E/d0U0j9ZfH1DeLL
+wrpsP/vGvIrt+tqy2YKDzJW08qgUWSc/nPWceQs6lhO/P1FFgdx7GINK+HG85taQ119Yz+Cd
+LD/j4AphYEfib2tDM60p8ZyAhgza4geUBMLQgu3uAZwBaYSPttcTPL0mqD1iKucdyuVgXSs=
+=FxWA
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml.jackson.datatype b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml.jackson.datatype
new file mode 100644
index 000000000..cefcffb26
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml.jackson.datatype
@@ -0,0 +1,21 @@
+ rsa2048/8D7F1BEC1E2ECAE7 2020-08-01
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBF8kuOUBCACo8/VYVfmglgTgmai5FvmNzKi9XIJIK4fHCA1r+t47aGkGy36EdSOlApDj
+qbtuodnyH4jiyBvT599yeMA0O/Pr+zL+dOwdT1kYL/owvT0U9oczvwUjP1LhYsSxLkkjqZmg
+PWdef5EFu3ngIvfJe3wIXvrZBB8AbbmqBWuzy6RVPUawnzyzqZTlHfyQiiP41OMONOGdh/I7
+Tj6Ax9X1dMH3N5SkXgmuy4YHZoeFW2K3+6yIbP8UCMxrTNLm6QfOIPsvjDDnTBpkkvEZjS24
+raBiHW5P35ptpNj5F1oLlOxZ/NRCbP3CPlEejUkh1+7rOwrRkCrDnNFIQYmWF2Mt4KlzABEB
+AAG5AQ0EXyS45QEIANDsIlvCdMQp+rixXunm23AcZLsgzW781vawPkk8Dw3neQqTjrcd81W9
+p+iSjQAzvq0dW6PQwtSy++nOtyIpU+J1cfAs1Jxi3sms40cvqqccSQkzjJUs97fzo1capzlf
+09NmNncHSCqqeAZU7J+WnUNSBd50yLLTffvo1lO7svLFcuvaO8ai+XoeYzTxm6paT4vyzcH+
+9hlew6nMafmMDjDsAkba4bjcXhpCkS9Jijc6973zDjFdzpf+YvKtvxktRWfDktLYMdTaVm+6
+MAfFubs+zZjOuMHc72XgiqI789z4BOeeD1HjzkGfLA9bfpcS2Gs0+63NiDXIY2rT0D71IucA
+EQEAAYkBPAQYAQgAJhYhBIoQeSmDAj1dFMk7SI1/G+weLsrnBQJfJLjlAhsMBQkDwmcAAAoJ
+EI1/G+weLsrnbSgH/1+Wy3H0/v0mY/2qi2cod2+NPT2i6RBJ+LvkW8Wzp4oIr9rRjZ4jlZXT
+AtvdY5PVellIAztr5C65Qcwi+aRzDSTna+FDzJoIMIqNPuaQUcKLGFrpUUFvng9eRnh773A8
+68XDiLtHiqp1BGn3F7g6BZmN4fbpnL+XAaW5ogmZd9pVgctB7b568+C0E/d0U0j9ZfH1DeLL
+wrpsP/vGvIrt+tqy2YKDzJW08qgUWSc/nPWceQs6lhO/P1FFgdx7GINK+HG85taQ119Yz+Cd
+LD/j4AphYEfib2tDM60p8ZyAhgza4geUBMLQgu3uAZwBaYSPttcTPL0mqD1iKucdyuVgXSs=
+=FxWA
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml.woodstox b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml.woodstox
new file mode 100644
index 000000000..499946031
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.fasterxml.woodstox
@@ -0,0 +1,28 @@
+rsa2048/C9FBAA83A8753994 2016-07-26 Tatu Saloranta (cowtowncoder) <tatu.saloranta at iki.fi>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFeWvEwBCAC7oSQ7XqcGDc6YL4KAGvDVZYigcJmv0y5hWT4wv9ABP4Jhzr1HNDmmGyWz
+hzTeMxwuZnc9vhxCQRwyxj3gGI5lYPEARswbi2fWk//78/3Wk+YMHJw3/1EO3VqvvDUt39gb
+aSqMCQNHctnFdb2QYZ7nRFTQeCqG/wyMdB05beqEnWEXzjePFDF9y6gXkELn0lxUm2TKO8tU
+3h96TCuutDKJ0aE00lOeh/MbEaGHEbIU8kdfui6UznZ1X80EWbkCY8cKxEZHKD0aONSVHXwE
+6nETvFW9/9+K+sj/I7ytlyxwHsaQpi1H6aRGnq013VsIECrwkhmXBsLLXNjmhER+LkcDABEB
+AAG0NVRhdHUgU2Fsb3JhbnRhIChjb3d0b3duY29kZXIpIDx0YXR1LnNhbG9yYW50YUBpa2ku
+Zmk+iQE+BBMBAgAoBQJXlrxMAhsDBQkHhM4ABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK
+CRDJ+6qDqHU5lFtxB/0QBiKaHHdFu3GOs21+S4LZYmO0bvHASg7ueeWtoE/1cEsKqvES03Tw
+iSfMabaPt+UL4qP9w6/SUtTITAmxuc1ksyU+HwC/R1QuF+vdsguFZ0/8VdVRVY5I5/6Dcp7k
+I49RO0LxGPXCMn8s3Nj0KXiCoodMDLHwwMv5OXWrQQ4yXiQTsJudBxy5o2yfp0AlLm4uZdDL
+j7Z4u4DfyKOuKIUMsMQ2Hk12gSkDaZViIURH6MaSEdC+XbDUcPTq27+JSdjfYEX0908P/bH3
+6H2kPCGVh+sXpICZ/Ce7m0OHBfE/pTTCuOlAJvcLY4QbyMTlyPpZ0zFgO+jX+fj8UFi2sRhq
+uQENBFeWvEwBCADfbjqRN1GvSf9VkjDDWBqX3hILiPx3DKPiSFmSsAoiLSEkP8gRDBDy6po/
+Oez9q+bgb9Sk+iGifJvbVNZr7+88LSxQECsrVL+ZgTAZ2LkqABQJ8XYh/dTO6BMJ5rSLH/YN
+6bO9V4NjYod67W5uYox+aCp6keE7ia7eBHck2wyqxikCqvVzmAduPCkkNSRuOwLkOguduXfw
+b7Cg1RnacMMEfDd9t+a6ytY/8JFu01G++VVxFHO3vs//RINrm0O4xKPkT1+Ocd4+h3DlhhRv
+RXvI+MKeM0ud0OpUVCBKCZqbFKTVgoRpsKC925ZRUSqbmyBcIkqyYjzD1adaZdkq4PLFABEB
+AAGJASUEGAECAA8FAleWvEwCGwwFCQeEzgAACgkQyfuqg6h1OZQ6swf/Vm0ndBcvdK0qCoub
+R/WOsynS1wdQ2rGKJC5oVsUN4YVCZhg9OMhwMSO3EOBPdxtq4A8bSZp/8ZWmHLohE8QHD8Ag
+aQBtRZyNkvMRiN157XGkPEBRWdHw6XAvx/lE31W+19qFRnAE8BbERE3gieJcG4CKWy5CyzXn
+jSM+znZvDQ8J7MfG+LxKbr7zUHQH9ZWsk8V9D+GXDgpuyZc4ct1tNDLcn6784FubcdrD3RLM
+iOAYSSgKSgoELRzB8zZds+WKFuiAYXZSdzCbjJJ2VqnJnQtYHN7Z5r3ySqbG7w3rRen+Ett6
+PX9Hrvc1MTy/UUdb3s08C0wD0x+ZzFzqUXKTZg==
+=nsI4
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.github.jasminb b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.github.jasminb
new file mode 100644
index 000000000..3bd1d53f6
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.github.jasminb
@@ -0,0 +1,39 @@
+rsa2048/D83818EAA3228CA1 2016-03-15 Jasmin Begic (jbegic) <jasminbegic at gmail.com>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=hj/F
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.code.findbugs b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.code.findbugs
new file mode 100644
index 000000000..e6419131c
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.code.findbugs
@@ -0,0 +1,28 @@
+gpg: pub rsa2048/59A252FB1199D873 2015-03-12 Tagir Valeev <lany at ngs.ru>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFUBG7QBCADRWXf0Fw05qRhM4cRnGKlOW1ecue1DCxHAtFwoqmAXyTCO+tI0MEW5SyXU
+kX6FsWLl6A2y+KgOs669ogzfQ0rnZMEt4HisRp8wpgk3GWR1/9aKYz/cymy2N3BP9cz2fJ9+
+3PpBccUPL+ydFKpcnEnIwiQK+p9JjEWzJBlrdUc/UEJ0R+n/5r/+0+BHiTEMvjAF6/Swyntp
+TWpu7iEzLv/pfdCuhFKa4yn+9Ciwe3wGtSiue+dhtqKcd4YxED3oAswObBca3CC2HWWsUEH6
+EmfT1jUdfy1cq4X5x7AZ26oFYfG+odqWW5dcB+13VkJtJRzQTO/2HKtITJYC65a1jKt3ABEB
+AAG0GlRhZ2lyIFZhbGVldiA8bGFueUBuZ3MucnU+iQE5BBMBAgAjBQJVARu0AhsDBwsJCAcD
+AgEGFQgCCQoLBBYCAwECHgECF4AACgkQWaJS+xGZ2HNZJQf9ExetK9g1IbC/4L5qGhVzfyNi
+k7m9DJ/m/fHibCK6pnAP7wHl3QStpcGfWwTDTnY079tdZKnZFk8OOtendA0WWdS/9OO1DZ8u
+kzI3PusfDOsIl/9U35dTgfQmFs5Nxi3/xYBphsNrzafEW+reUImADxleCxHhBGM3U8zAgnBG
+VQO+oBGQ/XLQ2xpGEW3lxytDgx90eCryFKhlqvE0Gv59ofHTcNjEkDcg9ki+dx5B25jpcMD7
+VzCgSaETs031gDlp7jdiEgJa6ot7o+chhcUlD/1UMZnHgT8h806xh4+ddiHD6WIXAwiFxsOh
+JO7o3Ovv4g9eg3VOW6kp6zjhfxrddrkBDQRVARu0AQgA2wgu5T1wf8QgQv46nAhpyv/Lf/os
+b6iTxIoMciUXpxKm6xKxYzov5EZxmC8INHRLQQSJ3jjLLzAUy+hhKWxccs3hKof+ukshzgIP
+wN0ItatoppFmuG2rM1ZKxjESCqjufXE7r5yxTXtUkCuemQY8egDuihmVoatzTL+uWRNcf74s
+qqHyeI70NqnjqksWt2C+7IpurUHp9oB/YkxHK+rLb5+7B9UZNzsMRRQW3AaDsWeIMXTOX7es
+UbW532QfxRbP4bALAVPqqFWCWA6a0mDDUJJg14OxC8MHhhMk2cyd4xJ0zoKQRxGEunb6XP3T
+7BHQr9r1AETU0+5sBpEHa5BHhQARAQABiQEfBBgBAgAJBQJVARu0AhsMAAoJEFmiUvsRmdhz
+a4kIAMccH8GZzjxh7XGXpPqds0SIwJ2akhtr4k0WcRZy56rjGTTGhddRKkGeMtpY9CtVkodd
+0zGaZHcGOG0W+wuB5qPKktSRUOUoyR0ZC2xZcvRpuvhw2gwOJdRHGVteDFnz6Eiz+spJYq26
+usIPZXgxcuxBXjECuHV7OQkUQMDe1EbOOODODkzCauYvsfk9x3q9XUp7rQGa8Vi++NHBPhTD
+U4PReW6485pqJOJuE8QJznMvEHP355FKxFvFxw0TM9glLxeX36EjDtjs53Xzhw6h7HF2gj8r
+naQfsDnJ8SPaRcJmbm1jKXIq+AalzNZ1m6hXe7XGD63v9CWCFMygkADQfkY=
+=P9c9
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.errorprone b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.errorprone
new file mode 100644
index 000000000..42a3f10c5
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.errorprone
@@ -0,0 +1,48 @@
+ rsa4096/9A259C7EE636C5ED 2013-11-13 Liam Miller-Cushon <cushon at google.com>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+bS4y8yo=
+=eURh
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.guava b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.guava
new file mode 100644
index 000000000..a67655200
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.guava
@@ -0,0 +1,64 @@
+rsa2048/7457CA33C3CE9E15 2013-08-23 Colin Decker <cgdecker at google.com>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFIXyRQBCADe285y3Pu7KzoKyP6wqeNXtvvuwMatAmPm5x/i+S8MlryqzsYax6twUmXV
+1yKjjtGrO+9fHvTOWBfSSP+fP9KTaTQYSasoJq2Mw4cQDy1i0zrxNZUwN4/BiyjQA25sdfaO
+olhO0sFlZuTZpYy5wG72KkA1ygNq0L+8aBKhEF6zDU61YzCCAxjcgTftgTeeoqkJtYa06lNz
+3jmJDN+zUQignfRa3ymoGtFHTzoXR9maE8RWDty4y+DY+8ibdGgSgKPZ0byTCDyNojgU1YTl
+ADa/1/NY1ShYg617O1xicLNo0JEJlf2UTu4Ymql36+xSkYSISU97Q6Utgq27XMuZvDUDABEB
+AAG0IkNvbGluIERlY2tlciA8Y2dkZWNrZXJAZ29vZ2xlLmNvbT6JATcEEwEKACEFAlIXyRQC
+Gy8FCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQdFfKM8POnhWM9AgAsTQe+kZsimLo3T9w
+WP97fksKxXqr8xtjyxopf0r/Pc+52ZcfVhsvcOfQKaBe/2hprMPudrnIFVwsz7BNG7n7stqQ
+MoRkaisx9ULUY6E4Wbim23wp1ZMkQbhEcQ1DKwXKMdhvm5mZ5kB34G2Hly3g/0ZBz5TlwFwo
+ZHD1BnhQRMQmRN6y/IkH/rI9aMxmgGn8bJ8yGPmq8vWysEq8WczWt+DSwAVa7Uhys99kOb4Z
+2Ky4jGiZX+6zSAkTgHADPIVgedHCw4FuedYXFpLy+j15K3QydTji79JOPVVGIJ3dpxtY4eBf
+9oetuc5StL0whq98Xp7kz/OVO8H3HUlxZbYXYLkBDQRSF8kUAQgA300dF3Ztg//cIOL6fWKV
+IKGV3Q1HcNQGBL8B2pDsigBR+PuyTIj9bJox1Xi7Lq9GHliA2DaDTWd3QstlHwZ/YKT4PoXz
+wJ1lpPGWRzEdX91cxnzIE77QPrIVFkQvsiay/wiDhBc5XB+6JcQ+T8R/kPL1J0BWFygStMYZ
+HoE4ZVW97Ea0HB5+yMxo4bSSGRFtYhDfZbF9QW4C/lcFDRyQuuUq9hZRiE6VeDbsa0UofYQE
+EXRnlla7uBoEXBJXSgun0RZwP4L5YTBRJ8F2p9Em3Je+B/iRl3B1Dlxozw/b9J2dyXaX8tTU
+C3ZKZz6mWvrOEiEOUuGWvMoZrXqgBFIF1QARAQABiQI+BBgBCgAJBQJSF8kUAhsuASkJEHRX
+yjPDzp4VwF0gBBkBCgAGBQJSF8kUAAoJEKvp8xJrt0HBREwIAMeurBE0eRsbVCxcmv2hQrop
+WQuw+FyeAiHFEuWp7z2iaD0bt4Y1q7OzY8qwHe3Gi0IVztE5U2/9MC5INjOQ+izwbjqndsZ6
+yN8lvbjNzoYxPhEYgmiHWg0bUhyJp8ggeOnZkkdGYQPCa9kbbg4cn6aUcuNp522qVa77PDCE
+fZVmsj9TeBb/HiKZuT1TLLNyIQjGsBz59zX3GXk+RRVxINULRwCoal5nPz5LEVp/dGvRoadJ
+t64dGM26majGRA4B7LXO2Z1aII9/lEV+YUP58Q2H7/GpiIaitilwg3tQCwyS8PlQdzlkba1M
+PjWMz33D0ub/Ecn2SzyA3BkRLAjOvoAEogf/W6Wx+UjbXqo/Pmju5TGVObw19PIBN8JS5kQM
+xgY6MNA+pBryEV5uqNZZgFSrZKVooPbEx4S4RdX4zmTzwLHpPae9plYyysPu4aP61OwVooEb
+E/mnY5IRY5MRMoq/oLHu9wxNCaupIWjjtsUqU1Kz5pUzjxSdB4W1MPI6HBrmO+2q2y3h5AfA
+dZD30ErRMTKY3HS8XSc+NYDvoJGt+ik7Bcp3EmCgqrgyvET3ai3kjzYBkE96JZUn7rAQJ4r8
+agEhdnmMRSqtCabMhuhYDkbk8wnx6DMsk1EmNNYeMJatROfA1ypoPj+pnEiVbgu3S68aXHqk
+o4lDTm771f8HOhVavA==
+=Gj90
+-----END PGP PUBLIC KEY BLOCK-----
+rsa2048/F6D4A1D411E9D1AE 2012-02-16 Christopher Povirk <cpovirk at google.com>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBE89LqsBCAC/C7QToaRF8eZgGOxcvp9aG+mFFCMjaRAb4Mh59OYdmUb6ZjfO9388HPeb
+GbPNR8SHYs0dBIuWY4ZJ7oUTYPswasL8vB0iPFdyHhvkCca+yk0b8ZBMDmFlISm9HkYpoVjc
+FUp1oivyeJ5LRTJTd5JGEd/SWFRbB4TimdKXBzej9fIm2zVlKInEMMd8HnSYE6nm3aNkbyiq
+hx81bFvl8x6X3ZMWcKs+TAVXdP9uLVvWowUwcApkxpee442Ld1QfzMqdDnA6bGrp8LN8PZF9
+AXQ9Z6LTQL3p9PIq/6LPueQjpJWM+2j8BfhbW/F2kyHRwVNkjaa68A544shgxJcrxWzJABEB
+AAG0J0NocmlzdG9waGVyIFBvdmlyayA8Y3Bvdmlya0Bnb29nbGUuY29tPokBNwQTAQIAIgUC
+Tz0uqwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ9tSh1BHp0a7LHgf2OE0umpZR
+iFpL8BqnQf38CeDDESZz3UjwWuOKgnGQ6PaI+alctVI3YErVRSzZYhUJnw+JqIXy+kXIoxeQ
+Y+IPikdR7aGKSaGrzm3H/jDGmwrp2VWROpVqHSG94UNBjUJvsOJKty4/m1q0n8ROb3ceD9b4
+cFAVVesLaPRTyub+1g3tutB8BcJOb9r1wrmS2GsNNBInrt76fnfVOyqyvtka6yvqqtAcV8pt
+gnh0BqEPLUNAW0Vr/bqIuAa4wLVnqBXAk36lMIW/B7IkjVMp3Qs4OqpZ8LaJSAwaWDGCLEFV
+KMJvuvAEWuRy5tZb1cUb0Q0G25/6P8kYoyHfu4ML26JtuQENBE89LqsBCAC5hGdMTbbl9XC7
+DVM86tB1c8A4sOSKrj1st9zHBEl75GjMqskLWIrFvvnWNOjMQQkt7lePtZyiOqAOy5OPNosc
+M28MLNEW/B+QnixwxMBl37YZiwLw3caDQlGALaVTjBnGxqcudUxt1fYvSVntacfpL4Ynl/QS
+3w8z+D5XYaPZStoGEYZqTw4FDo2GYIkFzJiDwGH3RyAP1XWExEwtJbuAHW+ekszsLxjKZ3d6
+11lIiW2YO5Vve4b2zhTCrnWzYwQqxey4VgIdPPTFPa77p7s+5qrlXTbXxAZHVa6mSXb2IhQX
+nuEVHt/qhgqR5y88pzhh6/oiLQxu9zUfX2Qs5dSvABEBAAGJAR8EGAECAAkFAk89LqsCGwwA
+CgkQ9tSh1BHp0a6dJAf8D7j9luvaMHjqrUkQ39RXhTcwFCI28I5IP2048ycG9XMnnce628Ya
+SZp9u1vANlo35gyzp+KK0EyqMX95D+knnhoWC5M8YwWuUXKPPaf+l9+QculUeCzxXkzgAshO
+23AI6jxW/u7dWM755rmSIKb0yonJKtQ/YO/iU9UHfZ6gRSpYPGjJ4AKKFb5S12jxMENV35Hz
+DfpbcJRK+6NbbP2Mw1MX5WhVYNBZze6ns2pv7O1b3CuOqzveckK/1ss9qFQ83N+Hvja/29qT
+dOTAxwNHV5m/4q8DwZdJkzoAIAvNOapEdeMYXdRni+jBAN+JPNkqvzt4FoQWgdyjsuef5b7y
+qQ==
+=ppUY
+-----END PGP PUBLIC KEY BLOCK-----
+
+
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.j2objc b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.j2objc
new file mode 100644
index 000000000..eacb09e41
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.google.j2objc
@@ -0,0 +1,28 @@
+rsa2048/29579F18FA8FD93B 2015-09-25 Tom Ball <tball724 at gmail.com>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFYFiMABCADYpblWssqGxbjTwsyroPh48BwdSKl59zbFKoEHDw87NeWq7fikh95Rkbde
+WsQSvduXWgQZsUDq9cLOkuS/ChAMkAAd3MPp1NMdFmAqS7BX5wU5s5I7XD+/p51SWLMvgrLx
+oenmoE04EuQqQiXd4DbU+HGPseiNx+mN0cxPssaZMBBsmi2rRjwcQrFTaC1iffzh8FKLQvoT
+Dzci//b5bWcxCLbsY9dYcUaDCbBAkL8HzyZUKNE9XwXh/Rq8wDakI/VEg/905a9c4xq6Rss6
+Yn5E4V2SAo2+B3hYmvHFsefaM9kkqvXkMQ6zjx83LAtzavOzmthjhhPIgCAfoQ5Q5oDzABEB
+AAG0HVRvbSBCYWxsIDx0YmFsbDcyNEBnbWFpbC5jb20+iQE4BBMBAgAiBQJWBYjAAhsDBgsJ
+CAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRApV58Y+o/ZO/3UB/9W+AOZCBUoVTSyu5BDjH9X
+m5vY/QmWjl1/dEcjZ1bFEF242SP0sUC/XcOsaJp/KpvkB9pTkxJ1BGg8YEr3vJrjrD2LLEih
+4nZ/lJnfyjx4Sn70GFSNhftuDJbqLA9U/Z6M1tRaZTGk+/PkvCyyyjD/U/pNohxdr08nojPS
+1UL2LpI4nA8VPZt9bpOoYaehkyVjD/ChXTSi41Eet04ze7YoyEGMIJl+ZcAlkhSQrNNtSbrZ
+7+Xxl7mv44Hn0F8dlc1i5WpNCqYfWnVSLLBZGi3HxRqpF2HRVIZuXHWaP8JxHNfwZcOMokAh
+RlEVckl0qqBnjNl7zuT6xJBiYwgzu64WuQENBFYFiMABCACdvSlhh2hLe4F1fBMHiZK2HdNp
+8I3NS8o1E9k0cBM2fTfalIlan6ZIJ2Z+JqRwk6MRaKpB2or/0A34+3KfI22SWtsI2lJA2x9q
+WaiwRidLFFAWdSjTzNroYVkcwJ5hf2yKN/mH5YRiDSzaqHr5GKKPXHXpT94XqXn+Pj1Lj5ip
+nqPOerpJ5mlkPPSz8C5Ve6I+sIqjGKdtrB6kxgIF3kf30izCu3dL0j5vuey2XneRAqETHqmB
+VMEjFeuEY0zJCj7LxQRr0YaaSfrlkIjIxRbhatgxXjQVbbnh0nYAh8dUz/YvsfuyZmLJhRZk
+cJxHW8Tt0xxV2oBUBq+IpmvqDoy3ABEBAAGJAR8EGAECAAkFAlYFiMACGwwACgkQKVefGPqP
+2TvmWQgAi9Q5WlckTYzccwvt9F+sRspD8AncDERdwkY6HiInLLNqQSUWiHU2BaYN2wmSiSeS
+gwurPtN85nd3XZyhKtXxH0XKC2fTzQWBdyBEh5zT5UevES9nIzIKurHoG4TsWr9d2XDiDp8q
+1s4G1cNGYDfD97wpZRbYn8L7hedL07ISEWNdRvBpbrvhme7X0pD8MBKPqUXfLHHaJetmlFKO
+mu9awzjINlz1C89JdocSln3lLJLE+RGNN7HmXdwmKjmnC0fo2h8jnOTYekdTM3Ec+uWE8M1W
+yqZV7WYzoITIfq0uHgyIxCpaOOejOLKShQW031G/kEvZApAVPHLFM8BdJ5P6Dw==
+=RyTv
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.sun.activation b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.sun.activation
new file mode 100644
index 000000000..26b88e5cf
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.sun.activation
@@ -0,0 +1,69 @@
+rsa4096/3A1959EEF8726006 2018-10-03 Eclipse Project for JAF <jaf-dev at eclipse.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+i5HXDlWO9Q==
+=PprS
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.sun.istack b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.sun.istack
new file mode 100644
index 000000000..7ee4c0542
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.sun.istack
@@ -0,0 +1,68 @@
+rsa4096/CE8B1D1D2530EDC5 2018-09-11 Eclipse Implementation of JAXB Project <jaxb-impl-dev at eclipse.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=F+y6
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.sun.mail b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.sun.mail
new file mode 100644
index 000000000..ed59afa36
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.sun.mail
@@ -0,0 +1,3 @@
+0XC27E8FAC93B3B19
+Timeout
+Request timed during request parsing after 5 seconds
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.unboundid b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.unboundid
new file mode 100644
index 000000000..57a68af5b
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/com.unboundid
@@ -0,0 +1,17 @@
+ rsa2048/5657B51F13E59DBE 2011-11-17 UnboundID Corp
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBE7FldoBCADOHP7ABanDVWXOixgtMroslbNhcomoeXkQqGyYaKIe73XWtAgg1ouWNoOD
+W7fnETk8tmVelY1TlY34V1xB+9mlBDT1p/BfL6d95xHam2ihGpfa7je9cKzZyvePmVLn2PMK
+d0R9wseWprVAdXHVPI2dx+E4++IwskS9RL92UdLjSBliggp8jyLX/T5HPkFaIzU5/XMs+j6C
+VOuiR4EC/IEOPwhFoE2gNL6vRSwf9jmKSkPKrdt8VqOsWrxqHUCo1Q76fTuNC8ioNhGrwq2/
+72M+X+MXZTt91083aCUmKSXzpyaMSgZPPTHsWhzwPxyN21ZIcA635dL3LzszFSS0FDshABEB
+AAG0DlVuYm91bmRJRCBDb3JwiQE8BBMBAgAmBQJOxZXaAhsDBQkSzAMABgsJCAcDAgQVAggD
+BBYCAwECHgECF4AACgkQVle1HxPlnb7XOQgAjMO//frmkHAiorn2e8sk/pyyOR4I3rKVhSvp
+Mp9UzrSYzsZKy3HYAHtNJfzIDorEI3+XKPBnrE+UWvtXYsY0NXn796TCJovyvSilcc5Yi3nB
+TsklitcPeUgzGkQG3IhYp+CctSH88MRIs0tQcN1xZha2HsKx5WYFjw08R3c8WNkxlLnoUi7g
+QchK981gzg5kYMxo0Qr/ABjrZjk6R/Nb/WYL+6+bhYBMv9OgRUka82I51ZFjjLIs+Icf+Hlq
+gOjRfZ99GGQWSK52mgJ/hxSygrF6zF0yYRahq/gGfwWyY8Bf21H8ARlYjeLCyo1FsPnC2lBb
+F5h4YqXTBUp+l1H5nA==
+=lFpS
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-cli b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-cli
new file mode 100644
index 000000000..f5b06d687
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-cli
@@ -0,0 +1,177 @@
+rsa4096/9DAADC1C9FCC82D0 2013-12-17 Benedikt Ritter (CODE SIGNING KEY) <britter at apache.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=qdhh
+-----END PGP PUBLIC KEY BLOCK-----
+
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-codec b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-codec
new file mode 100644
index 000000000..7bacbf84e
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-codec
@@ -0,0 +1,47 @@
+ rsa4096/21939FF0CA2A6567 2019-02-15 Alex Herbert (CODE SIGNING KEY) <aherbert at apache.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+p7s95q54JSpekQZ65g==
+=QoHd
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-lang b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-lang
new file mode 100644
index 000000000..8cf09e4d1
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-lang
@@ -0,0 +1,84 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Comment: User-ID: Niall Pemberton (Code signing) <niallp at apache.org>
+Comment: Created: 12/11/2004 21:29
+Comment: Type: 1024-bit DSA
+Comment: Usage: Signing, Encryption, Certifying User-IDs
+Comment: Fingerprint: D196A5E3E70732EEB2E5007F1861C322C56014B2
+
+
+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
+FAuBqnAD/2Xf6mHRsx80U62/8i45rWxwJWVNz8a0ggPVtBzt410UAlpaAWPzn9Vj
+oGHqkEaULSvHtGnlFGfeuoq+yKqbfJDLqP776pzeC2Zk0gWSKd3Kafcw1VlOJwjo
+Gb+v5sYaexLI7U6QnbH8vfxrKio2YWopMiVshCVleaOc3Zo+v1rKiMYEEBECAIYF
+Akf+RdsxHERyLiBUaG9tYXMgVmFuZGFobCA8dGhvbWFzLnZhbmRhaGxAY29udGVj
+LWR0LmRlPiQcVGhvbWFzIFZhbmRhaGwgPHRob21hc0B2YW5kYWhsLm9yZz4oHFRo
+b21hcyBWYW5kYWhsIChBcGFjaGUpIDx0dkBhcGFjaGUub3JnPgAKCRAuuUaCiIF0
+Amt0AJ94GqeaOAoYRBYZc38KRFzoqfrYRgCg/kX5DrtpksjIIg0Qh+ZY2voxdW6I
+ygQQEQIAigUCSAN5GR8cSmltIEphZ2llbHNraSA8amltQGFwYWNoZS5vcmc+IBxK
+aW0gSmFnaWVsc2tpIDxqaW1AamFndU5FVC5jb20+HxxKaW0gSmFnaWVsc2tpIDxq
+aW1AamltamFnLmNvbT4iHEppbSBKYWdpZWxza2kgPGppbWpAY292YWxlbnQubmV0
+PgAKCRCLOmAfCMl15dUXAKCdley4hYAIF6VQ9DDdqGZiX44nJgCeOZvjSdl4X9Pw
+nKdu5M5jHOwtvRWJAhwEEAECAAYFAkhEBq0ACgkQGT8YCrVdmXfhfw//ajMPQx3g
+9WiuwgGt6wrGs2neI4+xdo1wM3IwNGTclP19aEFEDBYfUOHlIe2mK9yTlcAUMrMb
+UAcxagL8yiUJ7Gc2mLIIO91u8yFeZ2ULdncdQHvDLHrhywlChm4R+waAzvm+1y9d
+dWRmylgoUT8c3bQ7YSpudihU/dfYlh/A73roLAt6nMHrQbayOLVFNAtERQ+Tt+lq
+t/KCFT7BGy2NyEEQ/euM+11SwrsnjiWOZpyPTqYx9CLn5EDU2nH6R/25x0Hkz0+v
+TLsF9F8pw8BlkgZAokW76jOtISZPvgwn6xEEhw+FdyLLqqQfc911o6hqH/IciEGh
+EvHU+WCpqCxjmrd4w3SR0e5ms8hWkuyYklDOs3SrtQYj7TFefgBW4+//rfKA6AFd
+LK8a/RYYp3h7La6ZM3fbMXnSWmcYQHTb2lZz17hhkOGcawppttXLeAB6sxK1cbLc
+CBUVtxAhQ9R6ty47U7fPkuThneJGQSBafasz13E/lErH9dQL+dBPU573XUNqpxn+
+meUsnbrAbDtqs7UDEXwx70ORl8MmEbJ5ta5wfn1VMBPSTPADwtImMzWI0SUgv4qh
+JMUye/xCAyRgSfdJgfgnK9OPrbN6GS820SEvhvBB2Xc0uNH+ZrN7ZOg7C6rhvm5I
+fG+XbZnYDnA6G7WsRfaOTHVfulXb79YRniG5Ag0EQZUrQRAIAPZCV7cIfwgXcqK6
+1qlC8wXo+VMROU+28W65Szgg2gGnVqMU6Y9AVfPQB8bLQ6mUrfdMZIZJ+AyDvWXp
+F9Sh01D49Vlf3HZSTz09jdvOmeFXklnN/biudE/F/Ha8g8VHMGHOfMlm/xX5u/2R
+XscBqtNbno2gpXI61Brwv0YAWCvl9Ij9WE5J280gtJ3kkQc2azNsOA1FHQ98iLMc
+fFstjvbzySPAQ/ClWxiNjrtVjLhdONM0/XwXV0OjHRhs3jMhLLUq/zzhsSlAGBGN
+fISnCnLWhsQDGcgHKXrKlQzZlp+r0ApQmwJG0wg9ZqRdQZ+cfL2JSyIZJrqrol7D
+VekyCzsAAgIIAMOpC9D4T2fxDyNJj35iGHmilIEwfKuO5wymOOsA7NZf5rFSRwFc
+BhAR7sZmwu6/6nwIH0lvvy4+F20iwqmmSFkrupX2ONyDiGFw+KXuXAp1pEIo/ody
+8UUerg5ga+XMIXhxLgdrDBVOZSYokEdfnl2JDzSuBYFUKRy1nm6DgwJU39I/IEUf
+mk7OXll6n0gPlBLF6Z+uOd232ShC15EZhM52+MchliWi1tjJZmkZWrmL3OtTOxSv
+M9eUkmW6uqInLaZxHH5IJwcXDc2t42UFe1jlmdwZQ9ZykOutbG5kvNf5y58W6L/Q
+ErNuStqJVwbB5BEYYzJxEXnb7+2r5ZgcItaITAQYEQIADAUCQZUrQQUbDAAAAAAK
+CRAYYcMixWAUshk0AJ9rvwrz8ysEb9RVJD2Ee+dY/TxsAwCeJD7drnKPGp/aTvf6
+KlOr5WVK9/M=
+=bH+7
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-lang3 b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/commons-lang3
new file mode 100644
index 000000000..e69de29bb
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/dom4j b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/dom4j
new file mode 100644
index 000000000..e69de29bb
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/eu.bitwalker b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/eu.bitwalker
new file mode 100644
index 000000000..65969a96c
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/eu.bitwalker
@@ -0,0 +1,33 @@
+rsa2048/61C269E4A5AA087B 2014-09-23 Harald Walker <dev at bitwalker.eu>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFQh0/kBCADJSIfEwgShOKRKA+yT77XkjWJRX0qfj00pNw2rCB12CROxDyNueN8KIMiH
+iOhCAKolBOkEjHMLr4AvxdcsHFBEDtAgN8lmHzaPDUbKKKb/rq40E4IYSGRUZc2KNF42c33h
+wDZeePxAlaC0y5kc5hBBfU1y1ewYUyARRkpn1blOrb+jzVXN15h3e0L+01fN+teWcHdZ4ZM6
+q7VioVbCiHxigaikjUm6fBAYaAtH1zuRc38N582kISsfTHfYgXIluicU0K4PS0GMR6dI01jc
+kkIHg2hAJamaWdIXzYkewIJct57XMC9Yo1Y7/oTeVOCcsRyPPV3tRg5x0/rSz6oZxlofABEB
+AAG0IEhhcmFsZCBXYWxrZXIgPGRldkBiaXR3YWxrZXIuZXU+iQE9BBMBCgAnBQJUIdP5Ahsv
+BQkHhh+ABQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEGHCaeSlqgh7O8cH/jHTdBuZzVbG
+bzc73I6NBrWTWLIOnLuYE4iEXrjuhvGIMOQXIVdx4XbgFJePSKJH4wemOSE8W6FZjfmvWE3e
+RQHA4iRUvAfUSSL7Nn3mulSRO9sU/zwIEwi81AoHk0T3lxv6dpYJLnlx+1fA6l0IKIfVeQrS
+fcrGj14Wxp8E6cpvHCB9iFxvq03gwm6MF2jedXwx/BPdzQjMrlvGiVJ5P9qqOh/kr/kQYzok
+g/c9XYgu1AxOtVYOvi3hAv+Xddh97iwCOckI4wHEUdvL0b6bcZ6tKMliuJiaeSwYIMNFOtbL
+t2jSoadh88asLInmkKTx9f+GRbGKnbsnpkAH+Cmvhaa5AQ0EVCHT+QEIAOX4yv2ben42iVK+
+5V1AH387OYDhEqJ66/ARiSuKbbPGO04QD9aQMD8pCYMlAG/+7SeR76fh+2S1OkTiL/HcuD6M
+RxP6aNsZx+ijLOExoo58eC4ai3y9woeiNWfI8s7MRaSFnWDsp/zIdRHzRxpeC3701BIi9wyG
+IdFic2YRygy/QAxohwBPPYKs5D9JsJedN1oWDfC8zI9+JrWGnO8JyJ7K8/ip+PzdY6kpk1qb
+mLkGyl2s0BjPyomiibzRkA8NdIUC4XSeMqJt9iTx1IcAP+cA09DjcoTl0EXi2MLO9LaFnl/f
+AwErPWUtHg1dvP3xbxJL2p4pBrOReQNTDGZ0w70AEQEAAYkCRAQYAQoADwUCVCHT+QIbLgUJ
+B4YfgAEpCRBhwmnkpaoIe8BdIAQZAQoABgUCVCHT+QAKCRCqFFDYrkkgOIsVB/9FfpTiDviz
+egYoSowlq7jW06APqru6ql2Sac5+Kq3WuM85TG0n/GnObyWVSdYQ/pnoeArYdefhFWTHab1Z
+GxuOBVslAZypHpTp7ZyNXZ/dx5raecKV+4QXmf0o0zFDXGIRee0HCa/yx1ZebfJ9Q+QX0W6T
+byg0c/XcEL6TdFuEw4Y+eUVpGZOMr1JiLTrjkXbRBKH2p0u1/o25fz3VdgmJfk62Pf/OQS1a
+DJ6o2NhaoI4XKa3r0JQEiBFu/D0YYhld52Qug832eXwH35I+hpiE+/P07KdX3FLM2ZoCdZFS
+HS/+uHP/fh3J1KzPbPPWxiNmUmMnLz9KCwUIuRaaXp22upQH/36hwFXn3BeFsSl+50h9HjNS
+IfoBJJVpumhD8mGT7uHcF86eFr/UboHeK/vNacRwvvLrwpq9vaB1mTou2t4b5Ko29ZXZRY/V
+zmf4LUjMBRbHuJM0KyCBhrtZg1lG8cMCQS1TN2qqkNDnKtOt1Ax3F42zP5X+UcC9AGf/v82u
+9RW0Uh61YKNRkFcIHXqzzvZRK9HENkUzIglhpom1Zb2GLQHt6QoRgL4qz1g1E7yd/Xd/MFfz
+H6gqPv4AXXz9TilzQH+KZpfq/eodhX+fPHzPQILG30w7ZlQ/auDVWbjFS0XggUQJ8T8u7KWH
+DmXRNZ4rfpLi/DU1A71Sm4/foIbdUsw=
+=M9cq
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/io.dropwizard.metrics b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/io.dropwizard.metrics
new file mode 100644
index 000000000..2fe6afca7
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/io.dropwizard.metrics
@@ -0,0 +1,80 @@
+ rsa4096/7D4868B53E31E7AD 2019-03-10 Dropwizard <dropwizard.committers at gmail.com>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=LwoI
+-----END PGP PUBLIC KEY BLOCK-----
+
+
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/jakarta.xml.bind b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/jakarta.xml.bind
new file mode 100644
index 000000000..bdf2fe2c0
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/jakarta.xml.bind
@@ -0,0 +1,69 @@
+rsa4096/083891AD4774845A 2018-10-03 Eclipse Project for JAXB <jaxb-dev at eclipse.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+miDnDUJ7XCfM
+=930f
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/javax.persistence b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/javax.persistence
new file mode 100644
index 000000000..fcc383b00
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/javax.persistence
@@ -0,0 +1,41 @@
+rsa2048/10066A9707090CF9 2013-05-08 Scott Marlow <smarlow at redhat.com>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=Lp7f
+-----END PGP PUBLIC KEY BLOCK-----
+
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/joda-time b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/joda-time
new file mode 100644
index 000000000..aba948eea
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/joda-time
@@ -0,0 +1,48 @@
+rsa4096/72385FF0AF338D52 2009-11-12 Stephen Colebourne (CODE SIGNING KEY) <scolebourne at joda.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+f7wF6Yt6o2KOu+jNqT7oglS+Bpw=
+=iGvG
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.bytebuddy b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.bytebuddy
new file mode 100644
index 000000000..43abf2014
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.bytebuddy
@@ -0,0 +1,79 @@
+rsa4096/1DA784CCB5C46DD5 2019-11-07 Rafael Winterhalter <rafael.wth at gmail.com>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=U17k
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.shibboleth.ext b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.shibboleth.ext
new file mode 100644
index 000000000..cd92e84d7
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.shibboleth.ext
@@ -0,0 +1,80 @@
+rsa4096/7D27E610B8A3DC52 2021-02-25 Philip David Smart <philip.smart at jisc.ac.uk>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=lKCr
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.shibboleth.liberty b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.shibboleth.liberty
new file mode 100644
index 000000000..66ed5c1f8
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.shibboleth.liberty
@@ -0,0 +1,81 @@
+rsa4096/7D27E610B8A3DC52 2021-02-25 Philip David Smart <philip.smart at jisc.ac.uk>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=lKCr
+-----END PGP PUBLIC KEY BLOCK-----
+
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.shibboleth.utilities b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.shibboleth.utilities
new file mode 100644
index 000000000..cd92e84d7
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.shibboleth.utilities
@@ -0,0 +1,80 @@
+rsa4096/7D27E610B8A3DC52 2021-02-25 Philip David Smart <philip.smart at jisc.ac.uk>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=lKCr
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.spy b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.spy
new file mode 100644
index 000000000..96038f2d8
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/net.spy
@@ -0,0 +1,28 @@
+rsa2048/A6BCCB72D65B0D0F 2012-10-24 Michael Nitschinger <michael.nitschinger at couchbase.com>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFCH+gEBCADARO5IAui9ArFp0b4PFJjUUDcDrIGN7ceABv0GHWPYNXO3UzTcXGik6B98
+Rt7E9KSBoa44MG2Tr2apv8ak2Ps63AjpGV1Cays118ZyuYVN5ntlpnJLYIUz3BkDOAQKI7Fd
+ViXe3LYeS9HTtNqXY7cDRk2oNXryu7K9sZDOLdxbqAfRpA+os6e0yHY5504HM0FuwzTX0SmJ
+JHCdaku3XMkXc2Ayi3T5vr6c9tA3U8jY20RgfFc7r1fpun8n9oN77Ez5JnwVTiuJ7724eHPG
+eigMvNRyaZQm+tel/Y5ZTsbNV7Q5TbxQVEz6n42KsTFd2B64zbd9TqW3RGZz0aSxHo/hABEB
+AAG0N01pY2hhZWwgTml0c2NoaW5nZXIgPG1pY2hhZWwubml0c2NoaW5nZXJAY291Y2hiYXNl
+LmNvbT6JATgEEwECACIFAlCH+gECGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEKa8
+y3LWWw0P1ewH/RNEcXAxN4M2D09ZGMyMN+6d3Nf5wlaSqImRubMBtmWaWn5GLe9jC2ozXHpM
+uSA9ENDALp/UnlC3Pad96RAQe7/nYaJoe6gzH6ZCWG23Q3p3lGMyVY+LINwTxc4F9Ph86/AQ
+AOBO6NgcULad52+c7JdGtigjwQ4jTaYLd9P+AUNsvI8tD8/JKtuOwyl77lNxz+Y2AvHUolIr
+xi4V6cojNTRp/VH5kfG4nP7/gUzwhney0zN/uDvmZzdgKxqLkwToxF/4thb+0i4gQrSEhd/Y
+xmXVt76MgKWterw2RnU2nUSJLeHYmBoJutBNByycipJ7haGbhWSUPuCOed9JhiCbuGK5AQ0E
+UIf6AQEIALbAnggUHoOg8UyGYW8JqssB11j7EuhHj5m1UjxX6gvDI5SCB9X+lyc+DoSUMMDp
+5ZbwQ5Ujbz3CN0GL09z5np6TI3Ay632l4cswvjWZyDcX0pfEpPQP1cYfyNDuzjGsQPSsdq2x
+UfmQP/iT5GBad/ceZPcvvynhngzgA2HtrPnd3zJmOjzuNQvQRT/XJUxp6uI8uH/HMo02r3gf
+aVUNsO14cOFIG9ZTkry/4uxOrOG+x3px3fkZ4WgH1JuJ7VzeS7OSa69+nrlh7kOmrQPZkokl
+ng89ecLuVc1l3L70yp6Ugk81jUyF7BKc+37yPmrCa+RUGItPvDdWW8AuJiwZZJUAEQEAAYkB
+HwQYAQIACQUCUIf6AQIbDAAKCRCmvMty1lsND4ETB/9WIrfYETBBExFYDy7Ml0iq0L+2oEza
+8JDBCaHcKA1h8c7vFFtVwvBEw7VXviQr4rMhozEgXyKxKKNASbgch4/t6rkd3aFjV7tAVwP3
+iv/zFi3R70OdXTZqzjPlKWDfALUISBMc9zmPabC7yS1HbD/zsi0wIDtpr0KaMJr4kXdPhuWg
+4dlaI6iq6iFFmSEhw02hLOTI9qN/xXjWtnVK8/AVWcwmXAdyII3lIM6JjpFtkkbupmN3b27i
+059o/qnXn5KbYGKqBw1JTImes38ArEu9V1jOBMWwxaTwbI3yHgW8HtlpYPlmct7OhS52T6Xa
+P1yUlWUgdP7gMXo5TsULfoTg
+=0Rac
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.commons b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.commons
new file mode 100644
index 000000000..a8bcc71a4
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.commons
@@ -0,0 +1,38 @@
+rsa2048/86FDC7E2A11262CB 2011-04-12 Gary David Gregory (Code signing key) <ggregory at apache.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=GKsT
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.httpcomponents b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.httpcomponents
new file mode 100644
index 000000000..84125b5c9
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.httpcomponents
@@ -0,0 +1,38 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Comment: User-ID: Oleg Kalnichevski <olegk at apache.org>
+Comment: a.k.a.: Oleg Kalnichevski <oleg at ural.ru>
+Comment: Created: 07/02/2006 13:21
+Comment: Type: 1024-bit DSA
+Comment: Usage: Signing, Encryption, Certifying User-IDs, SSH Authentication
+Comment: Fingerprint: 0785B3EFF60B1B1BEA94E0BB7C25280EAE63EBE5
+
+
+mQGiBEPonucRBACtbhYckAoyz1tuSXYX4XiqGa5390gIMcxe2hJ+Ncx9o3zX09Im
+f8PW27BnMrz7EIydgB2wphhjfK4vkNNtm5ZDWH/zJStsk1Fe7lNuuxs8XorX1+8D
+bhhFEuc2B85vNf2o9Y4V5GFwbD+tFNy4u24n7zg6/VgE2WDvYJ8JRqCEkwCggyLj
+ba0lsZ2XtSINh/W8ok+9f0sD/A8WhqBfDTEBuG9gnuCYXM0j7XBBPdPS+FXmmfea
+zyP+URKRprLCdt0ThZAMllIxZJrkbv7aeXVpM6KSZ/XvvaFQ/gha4o4iJFvpoKt1
+Er2j4Tz/STKztHGsMt6pqfrMNPWovu4tLuLZQmojtbIk+IwmcYxMy99owH8oV1WC
+U4HeA/9MlUxzmlmrQF7VLqFTGEEqQaEJqz95wNPj/t1DmI97hshPzXLD4zwKwa9m
+qZJPStRHM0a6xW2dztF12aXhrmYg1gIGNnsHtq+t8ZhfINZUurSWn0m65WT5notA
+15s6hwyDACHWWOgFQ9jmWuGDh0ZpiaBe7BxeTV+MsswY81sOn7QgT2xlZyBLYWxu
+aWNoZXZza2kgPG9sZWdAdXJhbC5ydT6IWwQTEQIAGwUCQ+ie5wYLCQgHAwIDFQID
+AxYCAQIeAQIXgAAKCRB8JSgOrmPr5VDrAJ9GdkLrR/ndy4hX6lZn/Mpkz8htZQCe
+JIn74fhSsEPFM8w3ezOUX7Kz3mS0JE9sZWcgS2FsbmljaGV2c2tpIDxvbGVna0Bh
+cGFjaGUub3JnPoheBBMRAgAeBQJD6KkTAhsjBgsJCAcDAgMVAgMDFgIBAh4BAheA
+AAoJEHwlKA6uY+vl40UAniBIdyVPLCxuBMc5w7O5JfkkeESjAJ9/s4z5sWIk4a4u
+UaL1oORIV89B6bkCDQRD6J8HEAgAsivVzAfz34QE+S4WTXCuknmYiSEEnyTwk9aw
+b52vrYlhoQ2t2EhRClc/tR6QbhNMhaMxPt1OYeutOvZN4q216IE2SwZzIDDTchYA
+pP/brBdIDf4L/XGWFIqftCSn+vnb0LAzYNVuNXtNwRni2q/fZ3g1wniVMbJ2MrJN
+t2VhLrP9K/ipFz7JCJittMngmmDF7mEKhnrqBROLubFsUfNmz1qRC6PiEwyyCCdG
++4m8fIiSyqna3CMkZr/UaVfxuGZHWM8HYGmiQjafqeLqo8aSbWerzDYtF2+v4hAA
+t9eDwdgYy8oNxXEvw7Q+G5lix+6SUMYV6NKLNUbBYffm9wjVuwADBQf8DbA7Rpzi
+ZWLv7DHjR31AA5nnGEeud0dCRO8rwfQNnaQvuJq8siRmU3uPAL2NwDgMaa0cT1xt
+7p4/8/RU0N9otVqnzkLMUTuqq/wtQrQt0OWsEJRyxemWFwiL9ZpU4eTg49cfOQXj
+g2q3fbx9D1Xr6Bu/Pn7UDU8r9GbDStGJ7R3Z0kkhtCErWnGNXbuqlVd8uEsyeM2H
+YpM76BmH/8vMg43lOJyyh6Id20ZTn3HgWzRI5QaDJ1JYBhMuVChbTPUCcMox+qgi
+H4KtRIAjt+m3w0Axjsqo3EFPweWGpRfqMyiUcESt4X/Z9V2Nf41NH+nQ74v3RvpP
+7EWKf9FfEtFpr4hGBBgRAgAGBQJD6J8HAAoJEHwlKA6uY+vlN70An1dGrF5xPmh6
+P43U9+ZwJMtk18aJAJ90ff5E8FspJCh/PZsbHv+eJN32qA==
+=jhwX
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.santuario b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.santuario
new file mode 100644
index 000000000..4fac7baf5
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.santuario
@@ -0,0 +1,35 @@
+rsa2048/67BF80B10AD53983 2011-02-10 Colm O hEigeartaigh <coheigea at apache.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=G4rY
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.velocity b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.velocity
new file mode 100644
index 000000000..ad2270271
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.apache.velocity
@@ -0,0 +1,28 @@
+rsa2048/BEFEEF227A98B809 2016-10-08 Claude Brisson <cbrisson at apache.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFf5HggBCADKaT/Jc8gPn9+FlIa9WQQzMUEmcv656B17wE+27lEiCz4G1GI1YyJSrBau
+7vV8qHIkChD7ysjMfdXTUeBAmNUgrEA98Qrp4eum/Xg5xf2k90hZq6dO7dvlGxjB3BByKPud
+QZ9f6UGTH+dhQfSiUhkTLciRSJ4oowuSI6FbfH5GMxb/XX1W1o4CP/RKLJM8LCIw3gCBV75k
+AFcPNbCYo4eDyky0N+c2NQd0p3H8GD3LM/El7JRK+Lj95wef7NH8KNIvxTDv+r8iJ6ScvfqF
+tTv1/hE7goP9r+mw5aIhYpTyt6cta/Lgj6HNdsvfKZoghoT+3nIeFsn/casVuIEI2bKPABEB
+AAG0JENsYXVkZSBCcmlzc29uIDxjYnJpc3NvbkBhcGFjaGUub3JnPokBOAQTAQIAIgUCV/ke
+CAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQvv7vInqYuAnFyQf/ZpKtA36JCUYc
+7Ik4BFy56dgrHi/9opzSLQncYmKyI/fkhviasDu+7e3EEZxWM0XPzViYXep1nWAZvhskwaLg
+lZyBw6Kds01qx08aXDSMg0+N7XAYaXRRFhqW7z7AbQIJisx6zNcDkhrj1BmSN65j5sLe41Vv
+3Gl5V/dzeXLikfwY5+WGJGKsGNySkKzjaHeQ/g57VnkkfhZx/jpUkV4RiBY0kyAacrXKv8Ab
+d7FFh9ilSKqySZEHhZTZiitSL+UR+/5+JG2z60NuI4Ow7mRWSm3scPPNmO4jW4esDC2khd3s
+Eeewh0Wq85YIuMGraOovjest7RKIGRtGmRdc3Z9rS7kBDQRX+R4IAQgAsixlmWPcTkqxdoSl
+h1M2Rz99U5UGTTWEYzdA+Bm/+q2w91eGIuiovsZ5v80dD0hO4AF9DV5X3+mB73b/+M1hXbnu
+KAVM0fAL/om7lc2iQ+99TXaWwg9m6JJE9H38CHvB40KvDf6KziU636Ll4Xm4xSxPOW2iCXVD
+zRe19Z6MBxPT0jTTVaqTx70V1iXuQ2etWkrNWuvYMXD+6UzQLTynrNPI3YhlEXSjCJxP0/gF
+O6l2E54C6h3WMRP3JcoPjozEOsjJwbWiacH5KKUVeiv+9lOHjehhNah9xqy54epSI1CGFULd
+olsNmYsUu7Y5d60ZA0ulxMMqzaG+OZeB1fvh2QARAQABiQEfBBgBAgAJBQJX+R4IAhsMAAoJ
+EL7+7yJ6mLgJ9+gH/RahK1Oz9AFeXiSQ5+gOElvL4b5ZT+n54PfRDS0BvRXhW/+yY7ibGs6o
+XXvxPP/gbS9F5EtY5ovfkhhuNjpWYiMu3xc1+JpK9ck1w0TLNRtlYbpdaMNsTC9wvbzFenij
+aNtEGxvk7+Irf1JUasEKLRW99W2E8zIQJ0e/xZCs7hseyZl3J+Yvn8mSiEtV4rytU+WdF+dp
+bHcbFJdz1Tow+c333hnhgNvibJqtj8kB0rTkffuHl20ubVdev8p9HCmUhAgjeLES0hpZrLn7
+t3piwid4fiWe5/Q9pYtn0jOsRBGzxQEs2XV/i7EQXT8kcqKGKmZWtUC7b92G/Yj0ZBB1FPA=
+=6ohL
+-----END PGP PUBLIC KEY BLOCK-----
+
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.bouncycastle b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.bouncycastle
new file mode 100644
index 000000000..34f0ac989
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.bouncycastle
@@ -0,0 +1,30 @@
+dsa1024/B341DDB020FCB6AB 2009-06-11 The Legion of the Bouncy Castle (Maven Repository Artifact Signer) <bcmavensync at bouncycastle.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGiBEowbDsRBAD2jx/Q2jNuCkgiS3fzIj6EzDP+2kipIKH2LEnpnTiBlds2PFYMxYibVab/
+grgQODxTdDnAKifbJA/4h1/T7ba+OV+xIUoSI5MbgaF3USidiDHPX0pYqvG+k3hKECLysQ2z
+oZpcC8c2ePiZQSVC2i5BRqgs0xZPz3kiT5U9WPozTwCgtasBTgHhkOGhZ0SOUuQ4dL54R9cE
+AIaDjdPcI7LxyOMvvGTuW/SaS9JyP21Kch+Vf6I4vKWWqXEaF0So8S088zHnBrcBKhu9D1sK
+IHS64EoYCrznfMUtoENPe4sf5QuJmZ9D+fBuFcudQIpkx8L73q+E3fmCK0uX+anqipJtS8mg
+pMeabKda4KkjDsZkiaNl7OBI0H09BACofK1HTNHNke2N0wXN1GyG7IAqprKl4lBbu5aRXvfK
+Q2tDj8s5webNQ+SeOm/Yg0Bi+CiONLgUjiwYe1wNls8zkk3LwYFeKIJ1AjAY3auBRWOI0/IF
+FzwTkV8JYPHa3Dl/kmYp8NMMwA5bgrblggM0Qhnp+k//xpb0FYbmwHMwUrRhVGhlIExlZ2lv
+biBvZiB0aGUgQm91bmN5IENhc3RsZSAoTWF2ZW4gUmVwb3NpdG9yeSBBcnRpZmFjdCBTaWdu
+ZXIpIDxiY21hdmVuc3luY0Bib3VuY3ljYXN0bGUub3JnPohgBBMRAgAgBQJKMGw7AhsDBgsJ
+CAcDAgQVAggDBBYCAwECHgECF4AACgkQs0HdsCD8tqsVVQCffP6hDSk3fnQ9Hls+Bc0syNyo
+/aAAn1WKdS/Sf2OQiVG6iPUE3F/o5gu5uQINBEowbDsQCADkwyW3z1uiaoTRNKrrcmc9pJ4Q
+qwDHoDUppdpKDQsQjt8x5tJBwB1V0AUGjgdpH6M00a/kkZO8A5suurGefmZT/6qF1PDhYJ/X
+tHgRMQpzeIU3fGunHPZV7DxlanDc9wSAJ7btk3TYnoGC0SqFP2/1/QSQCBEciRxoUKfGZ7XI
+84U347T+fUD7n0CvyubBwcailKhmUYMR0R2oSXH+yFCOqrovHdtZhdL58bNICKn4QBf92HxL
+2Zm5LpUJaMvHRK1rW26i6r0907Pn/hb/Ph0Xfpdtl3VRkeTDsNIBRdhd/B8c+asE6svHwv7e
+cuM2cXhJIF3XgB86GcFxNC28u5UzAAMFB/wML1mG0mocH9pexBKsm2agdtQe44Hcd3zjzpRt
+lH4E+eddCd23cubbNpJjemVYzaePEvjaS49WuF10u7h9aZYaGf92MWFR6FnuGytDDvfl4w+F
+ZlCkWddAFFf3wSVnhVWymzNIGHJvCUff2IJAE6/8i5H+3KRYjGM9jtEfjURZxI6MnUskzbKu
+T9H4WJ1TJ6151zBQCm4NkecfffROX/V74ximYzOB1QalT2/FkkcP27MRsjHJN3aTLbLdH6f/
+oSRG3cBT14jQhjUGpSHTAC4a/8yrZpINdc1gn+nOddJAGObLa28mWpef7AjX+6NEwdNMVQHJ
+K4zJmQLQ/BQACdYxiEkEGBECAAkFAkowbDsCGwwACgkQs0HdsCD8tqt9zQCcCZBsSD1ecuv+
+3SJRLv5XsVwvkqkAn2TctLkkj3uDcZlDYIeRDAnf5Zw/
+=tn4r
+-----END PGP PUBLIC KEY BLOCK-----
+
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.checkerframework b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.checkerframework
new file mode 100644
index 000000000..69d165cd6
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.checkerframework
@@ -0,0 +1,28 @@
+rsa2048/B16698A4ADF4D638 2014-03-28 Checker Framework (Official Release) <checker-framework-dev at googlegroups.com>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFM1v9ABCADD0KoXq2ZKlUHeIVovQy3gFmW9oFAaraV48ouv8cYvqdf+s91HNyqeyNPT
+/ihFeNqZJUAMyPdwN5xrWD6gxMrOCR7BFhA5kLmAKz4HfFCQ05ViyQdI/HVNFvTdF8LNnuF+
+a5aNgg+jjLvFwzkyMFkuiPGuUDFnqEGxC+z9J8t40tpOTOIwtPjSzkDN41AJDpUK/simKC5F
+0Im78nUbwMalE5z2IsZRWpYZyIhN1HhEdDvaDIh73vENjH7enAjWh0iGRu+GTP/fayZnX0uh
+mausCCwMMhsr489e63ZOaJrqeC//wWrXdtEJjcmvRmJ2hwLmgwMP4zSNKsnLGzP0sh69ABEB
+AAG0TUNoZWNrZXIgRnJhbWV3b3JrIChPZmZpY2lhbCBSZWxlYXNlKSA8Y2hlY2tlci1mcmFt
+ZXdvcmstZGV2QGdvb2dsZWdyb3Vwcy5jb20+iQE4BBMBAgAiBQJTNb/QAhsDBgsJCAcDAgYV
+CAIJCgsEFgIDAQIeAQIXgAAKCRCxZpikrfTWOJ4nB/sGNeq4d18M8Cbrfaj+YwQCkmO2ZELb
+VegqcJELSnvvs9EKO4X1c4Snnbk5r9apoCBSXhODYMfkZ6SUI4Op/8y4S4Km35PL8revBwku
+en1xMr5cRwRVkdZemKtLaKenUyY+ERpZPdRCSEfW7AVsRqRmsHIIz7UJ1p2tAiWHMnyhjFOM
+3Iap/w7liGPsLmqbHReKUkeriRo40H92ASlPcZxmnbKCMtkBwP2FuE1waOvjKfihtU1ZGjsP
+4JxriIcGz7h80kdGfWyFbZMIeZvnTFfB3odp5qNTZf5enUcYf3NO3IsUqege0gy1PWEF6c3R
+SPX97YzuW90OPKAHKt/QLON6uQENBFM1v9ABCADutkjG6oCMxBUBB5cTTeaWR3e5rKgxEiCx
+WBZCNZsZZA9LcBVjG5OJzB9lV4Yrk97paigTlFFDUKzu3oLX2xrIFb+G1m1B33mZH76Fg5Zm
+674tWC5Uf2ccxqQjXPHt2jnDd1yh5QcH1GnKOqXEwby6SjwP0wI5EzrSuAOQM79QksKc0iX9
+m1VW65+5ov68O/EpmQFdv67YjlOWvUvt387MC5NTzv8//3eFaAnC9rNlrnlTtUPfZHo5BOeZ
+d5WMBIgc1bgAPfENGucIPOL0RhWUFiyMPHNtDp9vnWXEy2XOtWY57CNS0py1FMkP38x0Pgcp
+0BfZeN2QjyhSJdduTBopABEBAAGJAR8EGAECAAkFAlM1v9ACGwwACgkQsWaYpK301jiXpQf/
+bw3Nxv5qyBwdT/85dBXZecEM2klXPSQf3HtNNfKbaZS+9dWn9GQ71qpmZCTZGLtJR4J54mlw
+dJdxhlDyGv02c1YBUkT4+uRVkzJAWzZ4RiMFeSFTj3Eiksg2J/f50D6ZlpeXw4/MYr+pCmMQ
+OIY40W0RrlF4iNnZ8hR7haWnH/wH/zHNFPwgw7s+WtY0uEmLmDPxxVS/dzzmc8C1Ef/hg7lS
+RZ5tdq5oxpyVYEdK1nCSiberwrAT1XyGpn5erxvjeE1kPXro/EXeIY7GDzsA34FSFBiIaU1C
+fn89OOn5M/TFp1+0SYeoaiwF0+x23NBUxbCmAGyyW5t0Pq1PY03TPA==
+=URva
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.codehaus.janino b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.codehaus.janino
new file mode 100644
index 000000000..a4c3b61c2
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.codehaus.janino
@@ -0,0 +1,27 @@
+rsa2048/58FE9D80369755E0 2014-07-03 Arno Unkrig <aunkrig at codehaus.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFO1ywwBCADEU9yzSA2+1ff33dI9vxuJLwjXrof3FfWAk/MZqQ0t8/Kj7gruhnvdvkWE
+U9sWBj0A/I1fwyCb3g8jCNafd+ycNIQ2riQu5q4zbrTDjWVQEktQKZ+LZIPPcIiMdP+IjZb0
+GLwGx3STINLdf5mjuaPE71bre0ZgLw6bepaGra3BNLsUO1FoDfNJzZuIPoHxj0mF1p+EughW
+K39fKMo0DUFCAhOL12LwcHBX4r6iSx06HJlHfNT/xhfYgx2+dlSArxq4X/EH73is2POVqWTP
+cjTUD09sYRdqvglLOfrxnkTpVx5MukdwCv8CpDZgiYEFTQ3pXul6T0TEfqAAzzQUi8u9ABEB
+AAG0IkFybm8gVW5rcmlnIDxhdW5rcmlnQGNvZGVoYXVzLm9yZz6JATgEEwECACIFAlO1ywwC
+GwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEFj+nYA2l1XggHwH/3LGoLMV724kU6Dp
+D7GB0bFjh6rk/oCOIdlSoy+f2xXiY/22Oe1O2rAycI1GNBizgybSN6lM1Ov4t3Mi0B0GpsvZ
+olAG3PaZvsTWnSQGJRceewGxT/0pFKiP8gqqHzrZqyLSvMOtHMH0ngjsnZm9e0e3zlGiSN3S
+Cke50CMV1pX/g1ZDvAGNSbxbd5d1vytkMwSQ3cXlFXGFvihbUHGjkgHEmfeoXM2QWvEBkgGR
+mPP57MHS+I069ZL0qqqQXikTYlsRRYg1VJ5+xY+sLLhd1WW3GO5UQxbOywL4hpu8pIzNTxva
+++8Ptloe0P/Hlwj3+BJohms/Nr6lBcuoYfhOrLW5AQ0EU7XLDAEIAMKKKtpoDjImA4zYwSM5
+xQjR3NRkz+NwNXdL4R8BsrKis/3X1bsoOjGktmDvQkpweORm3+xYUPHdRElTcLycztWeqMc4
+PqA3Q8I1HdKLuIx1V/t4vG9hOMNcZT/2ZHQhTbv+yJpOHBTpMvsjFAcvAyY18z1+anOAeHA5
+3bQpeKxArqhwl5KvndbLrCh2Z2wAUdCPerAYmdo0mcj600xwHRPGqP/5kuoNUmm1swIIrcRu
+CYwtYVdPDl2ufvk8c9sMRQe4OI/o4LSXEiHmqQde6PpRvlZe77IDr6pc8KIAEvPMmyyGnXmS
+MqE1wYMOnyZPg2qTycVV44ilZivWG2/0iUsAEQEAAYkBHwQYAQIACQUCU7XLDAIbDAAKCRBY
+/p2ANpdV4KS6CACSJfmOtQOkHTHheDDVxIkc51/Jpkhvmm9WlO+Pcb25+Euapo7s5zYx4O+S
+5riHDlSgZJf70X9tR4k8jx7BDZ7BYwm8NfOUceyvexUBWXrX/Ztm2JVBaJxG9nfEOAVD+GCj
+3Po8tSCpvB97LZardfJW20CVBbvBYqika14qt1TvDiORxpqws5vYcg5adVES5OuMb/qHEPIJ
+fgL9TdbbZs+2LICKw6QeFmVslB/vwfaDNZjxFsw5XuYmTavTJFuqe0J+BYQ3g7PR04o655NJ
+xA3aaEZMKOx7lS5Uex5mC0z2RHeg1TTKSphiqSjVXfshHt8qbu9tyvP2jGza8uj93k1/
+=+xNJ
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.codehaus.woodstox b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.codehaus.woodstox
new file mode 100644
index 000000000..dc905f149
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.codehaus.woodstox
@@ -0,0 +1,47 @@
+rsa4096/9CD8549ACF9BD0CE 2013-07-25 Tatu Saloranta (Home mac 2013/7) <tatu.saloranta at iki.fi>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=4NRH
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.cryptacular b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.cryptacular
new file mode 100644
index 000000000..fb867e532
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.cryptacular
@@ -0,0 +1,70 @@
+rsa4096/70B2EBE96C112CC9 2017-07-06 Daniel Fisher <dfisher at vt.edu>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=XIXS
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.dom4j b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.dom4j
new file mode 100644
index 000000000..48a9422ab
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.dom4j
@@ -0,0 +1,3 @@
+0X79E193516BE7998
+ Error handling request
+ Error handling request: unknown keyid type
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.glassfish b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.glassfish
new file mode 100644
index 000000000..678c801bc
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.glassfish
@@ -0,0 +1,68 @@
+rsa4096/005B27E7CA8E530D 2018-07-27 Eclipse JSON-P Project <jsonp-dev at eclipse.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+XGrAWORj5asyABq6VtNCyxKqo64DWAJo
+=R/to
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.glassfish.jaxb b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.glassfish.jaxb
new file mode 100644
index 000000000..91c723b6b
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.glassfish.jaxb
@@ -0,0 +1,67 @@
+rsa4096/CE8B1D1D2530EDC5 2018-09-11 Eclipse Implementation of JAXB Project <jaxb-impl-dev at eclipse.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=F+y6
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.hibernate b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.hibernate
new file mode 100644
index 000000000..2a5ad18b5
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.hibernate
@@ -0,0 +1,68 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Comment: User-ID: Bintray (by JFrog) <bintray at bintray.com>
+Comment: Created: 17/02/2015 07:41
+Comment: Type: 4096-bit RSA
+Comment: Usage: Signing, Encryption, Certifying User-IDs
+Comment: Fingerprint: 8756C4F765C9AC3CB6B85D62379CE192D401AB61
+
+
+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
+=7Wyn
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.hibernate.common b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.hibernate.common
new file mode 100644
index 000000000..e69de29bb
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.javassist b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.javassist
new file mode 100644
index 000000000..f4e0aa5a7
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.javassist
@@ -0,0 +1,39 @@
+rsa2048/10066A9707090CF9 2013-05-08 Scott Marlow <smarlow at redhat.com>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=Lp7f
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.jboss b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.jboss
new file mode 100644
index 000000000..e69de29bb
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.jboss.logging b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.jboss.logging
new file mode 100644
index 000000000..e69de29bb
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.jboss.spec.javax.transaction b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.jboss.spec.javax.transaction
new file mode 100644
index 000000000..e69de29bb
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.jetbrains b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.jetbrains
new file mode 100644
index 000000000..a0c8f4d94
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.jetbrains
@@ -0,0 +1,47 @@
+rsa4096/379CE192D401AB61 2015-02-17 Bintray (by JFrog) <bintray at bintray.com>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+fw==
+=EI0Z
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.ldaptive b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.ldaptive
new file mode 100644
index 000000000..37f7302c4
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.ldaptive
@@ -0,0 +1,71 @@
+rsa4096/70B2EBE96C112CC9 2017-07-06 Daniel Fisher <dfisher at vt.edu>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=XIXS
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.opensaml b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.opensaml
new file mode 100644
index 000000000..16eda2693
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.opensaml
@@ -0,0 +1,60 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Comment: User-ID: Brent Putman <putmanb at georgetown.edu>
+Comment: Created: 19/03/2021 20:09
+Comment: Type: 4096-bit RSA
+Comment: Usage: Signing, Encryption, Certifying User-IDs
+Comment: Fingerprint: 0E0CA56D354132B5E646C25F49A1796B9B494CB8
+
+
+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
+=FpHm
+-----END PGP PUBLIC KEY BLOCK-----
+
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.slf4j b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.slf4j
new file mode 100644
index 000000000..73b2b2670
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.slf4j
@@ -0,0 +1,27 @@
+rsa2048/2C7B12F2A511E325 2012-04-26 Ceki Gulcu <ceki at qos.ch>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBE+ZO+EBCAC3fZOOuYKthr0GcUge0PH2bh18sbM9XUmPKQz/W15l1NA/2ARS2gUXM0R+
+SunMlun9KsqjnojJ2ObVPvbm1Hg/66JSRgR3JWfIpSlJxLicpfu8rCfNbOjh4v9ZipD+px8w
+3o/RNrnZH/KRsoJg9yER6pf+pUZqTJfdg5lXezc1WF+/1qVoypldMGfrkfLsPrUZTT689ubb
+ig978e7eYmJEqldtaIwaAzHQnB70wIJyg/rEwFUMldsvs6t6czSuJ4zPMvmh8TMpTg9e6+DM
+ktPl1CWRONl8RPpgYMIC96gb4OnfDDjkEx6clSCwgbDwdeAyOjjR6pVq+pCNTo1Pcj5jABEB
+AAG0GENla2kgR3VsY3UgPGNla2lAcW9zLmNoPokBOAQTAQIAIgUCT5k74QIbAwYLCQgHAwIG
+FQgCCQoLBBYCAwECHgECF4AACgkQLHsS8qUR4yVwIwgAlj6R9Lxk/GnclmSvgtTyk1r5GxJ7
+5iSCzs7qDlNuM6EfFbuZvLWORGgP8KtdQdh/bdICtRbh2eoW0vEKJKkl0ZI0/RnVMYKYpIHi
+KVUSjPq0svwDk5tUa7taNSdHfi9o1G1doBHyPu1u1xDVzMSWsbEvx6aVr2HkBDRyA+VcmnX6
+tokZjyRX4C9ldX3tR+ffn7v2Iy0bIesM92nMPnH/fPXWlnbQKTxQeMj2qYSl3H/NGp57G7KN
+Sl1na5U8ueMcUtYb+eHphMsmaEb9xw8dM96CzIPZh1xMHNoQNNJibURysbUpFlGUTOv6K0A3
+92QkX3GwuCQGOeLWHOoQHD6Jt7kBDQRPmTvhAQgAtrGiCYnW3tqvDzaStXsguVw67pou65dO
+7LTcrX+NTvejJZ9SrC89JsfiKBwtvyS3X/qiB+S7RP21PH7SYOy+orwDw1nacNNeiTdPnxQC
+DQVNeWpSpmbLlA+0b6K3aPf/EaCKndXmnQyXVOoSXZJ9bqAe0um0NRbO7M+L1KArVkWW56ms
++DvHAeZaGnSDDHQpJI5haUqgSWWP/VoPEU1x0qiBZwY3lokSwRMISC4E/uiUvvm7rvfbBzfO
+iVrjNPLlsVPiQRgOTfQO7dUZAmt2yqWJt1Clliby4fgBVcOYUx0QCMiz8MZGtSB17+hSrC2C
+b1T6n0ypxuYyh4sV2LtqMQARAQABiQEfBBgBAgAJBQJPmTvhAhsMAAoJECx7EvKlEeMlX0UI
+AKS+4ZAKrGG9jbWfzTTDbu9zzkXgV13suMD+XcGz10DkdluTUBXj8wWlp289fXNm4E49ipsN
+K+dcZ+gOATjUvb1Llh6D6bHz1QM7olxBCeU2feTmYYKBH8GYY9JZzfAXNMQhcNiiPj+ntZqe
+Py/EFA4uZHM7We7vl2c7CBcDAq1NNeEczo0KvG7AWt6QoaMVmbvA14EKadNzrmEy9apkag1B
+KvwzXInYCvIHMa9ZqicOSUcI5QCYu5TufvIE7Eq3Khh2Ex1FiOaEA+57LMrt6NsSKXrB8JNY
+bI5pqE1rxJXZnYtx3ZpPAAEfLjPdi1AOkWhvhsoPmiGFC6ebYQ5eVbI=
+=9O4j
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.springframework b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.springframework
new file mode 100644
index 000000000..e5cf991da
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.springframework
@@ -0,0 +1,28 @@
+rsa2048/9A2C7A98E457C53D 2017-03-19 Spring Buildmaster <buildmaster at springframework.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFjN6bABCADHL68BhnXVXyJhOA9kO9cBwJXKmav2RftpcpXfaeHJTy+CMQa4rFxokx5W
+7E1IPlLg0qJfKSMeWhimVLOsLhY1MZV8Mb4fkK+SlDz/ah+5ej6dzOs3kMSzmn3nBbeacv5s
+zjB8dzF0ZGPPgciGp28KYrjfPbxrZvnX0PgL6C5RqNkI3cThoUZgYqXGUe/uj5gUiLr+eZvh
+5lajPqe2YF9fmxfRXklmX47TMYidFkcQKGwxIM477AKa5mKCp9MPKmxA2TG5F74sOwtSe7PY
+fzraVgaK0GGDJhm0Xr537EdtJfOpDRJFGizM3hYSgOp3Yo1wjPrkFA82EfB4hCNZK6ipABEB
+AAG0NFNwcmluZyBCdWlsZG1hc3RlciA8YnVpbGRtYXN0ZXJAc3ByaW5nZnJhbWV3b3JrLm9y
+Zz6JATgEEwECACIFAljN6bACGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEJosepjk
+V8U9gTkH/idVJvraJncACmmP3G0oGfe1puRBYXwoGNYccnqGslBfFckvenfw1WgsHT/VPkld
+u4ijeVkp9Mp7Hy4K1WZWC4pMuMYijMkzQ3e9ii/HDjJiqWaZYiAVGmZaf4kCUndBxS+Kl9Ml
+Uc+RMpD7q0L8a9YTQU4JX169CEfSD7l59wDHnFAlNg2uqXCaPDKjhGFp8CtukM5m6FLrfedu
+0Av+Alp7xv2dRJUAxrCNVmeeb9KvcROMVijEERnsB2JnrCTjkFi1ObH+hSW1wjIcBZnp9SyY
+pK+YvGvgG7O8fnup0Dvldo8Xa052hPS1N49rOWah/T4yO9V9H4FUTslwV4/TYHa5AQ0EWM3p
+sAEIAKi9vYsJkKjFWAswJAWCTTsYsfU6WPtJnErx1q5ZZa3uYXibODcs9sd8LhmJD2u8iAQL
+tWuDl/SC6nln1ikCRYy7v1JbENmJw8gWQqIBLjmma9v5GPUe/Dg1QSJqrem6VEjNtgszGJGr
+4+GDSCJN/AkNKlyMFgSdpRrMCBZkvpwnvSM2EFbhxonbtD/jvqSlx68OY32/2cesXPvS/Nj8
+RqQfj0RxcOK5AHGKFQGoMgK2NGXfAxdOhPOA3I2NwfQLnCNbAVbPOauNcV9tg9vbRg0l75CA
+bW0tmM1i/8Geh248QAlQL5NtApB3az11wbCEMAoFRh8maFLFtTJYTnKgW1MAEQEAAYkBHwQY
+AQIACQUCWM3psAIbDAAKCRCaLHqY5FfFPapEB/0RqqVPeoL01BivlBtcO6JGzfse9c2JNJyM
+eKCrxgA79GjVdda4u7e2IIlSqgUBebS4fW+kHZn5jcwQwInbpMjQQCQAFpAiOdrA1pV6baj6
+s8wedPvj+v7jfMXa7udRvpZ6GQo3YzVsf8n9a8Zb9bX/YwUPfhY4eW/tRu02Qj1us4JVClxw
+JkqSEOGjj2mGKfILAT7NzdxHRfDd27JEZ5CL/YGbhj6HeSgtmM5YpoLwlZu0ywyFwON7Nf8p
+kuNl55/cAkDrcZwPxiHlii+mt/oPBqYSoDWsH3J9iNV6IU7lPPwRZekWMybYuuUS60cr6DwX
+d1f1xbULR2+AL3uiePHO
+=S0c9
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.springframework.webflow b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.springframework.webflow
new file mode 100644
index 000000000..e5cf991da
--- /dev/null
+++ b/idp-installer/src/test/resources/net/shibboleth/idp/dependencies/stores/org.springframework.webflow
@@ -0,0 +1,28 @@
+rsa2048/9A2C7A98E457C53D 2017-03-19 Spring Buildmaster <buildmaster at springframework.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFjN6bABCADHL68BhnXVXyJhOA9kO9cBwJXKmav2RftpcpXfaeHJTy+CMQa4rFxokx5W
+7E1IPlLg0qJfKSMeWhimVLOsLhY1MZV8Mb4fkK+SlDz/ah+5ej6dzOs3kMSzmn3nBbeacv5s
+zjB8dzF0ZGPPgciGp28KYrjfPbxrZvnX0PgL6C5RqNkI3cThoUZgYqXGUe/uj5gUiLr+eZvh
+5lajPqe2YF9fmxfRXklmX47TMYidFkcQKGwxIM477AKa5mKCp9MPKmxA2TG5F74sOwtSe7PY
+fzraVgaK0GGDJhm0Xr537EdtJfOpDRJFGizM3hYSgOp3Yo1wjPrkFA82EfB4hCNZK6ipABEB
+AAG0NFNwcmluZyBCdWlsZG1hc3RlciA8YnVpbGRtYXN0ZXJAc3ByaW5nZnJhbWV3b3JrLm9y
+Zz6JATgEEwECACIFAljN6bACGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEJosepjk
+V8U9gTkH/idVJvraJncACmmP3G0oGfe1puRBYXwoGNYccnqGslBfFckvenfw1WgsHT/VPkld
+u4ijeVkp9Mp7Hy4K1WZWC4pMuMYijMkzQ3e9ii/HDjJiqWaZYiAVGmZaf4kCUndBxS+Kl9Ml
+Uc+RMpD7q0L8a9YTQU4JX169CEfSD7l59wDHnFAlNg2uqXCaPDKjhGFp8CtukM5m6FLrfedu
+0Av+Alp7xv2dRJUAxrCNVmeeb9KvcROMVijEERnsB2JnrCTjkFi1ObH+hSW1wjIcBZnp9SyY
+pK+YvGvgG7O8fnup0Dvldo8Xa052hPS1N49rOWah/T4yO9V9H4FUTslwV4/TYHa5AQ0EWM3p
+sAEIAKi9vYsJkKjFWAswJAWCTTsYsfU6WPtJnErx1q5ZZa3uYXibODcs9sd8LhmJD2u8iAQL
+tWuDl/SC6nln1ikCRYy7v1JbENmJw8gWQqIBLjmma9v5GPUe/Dg1QSJqrem6VEjNtgszGJGr
+4+GDSCJN/AkNKlyMFgSdpRrMCBZkvpwnvSM2EFbhxonbtD/jvqSlx68OY32/2cesXPvS/Nj8
+RqQfj0RxcOK5AHGKFQGoMgK2NGXfAxdOhPOA3I2NwfQLnCNbAVbPOauNcV9tg9vbRg0l75CA
+bW0tmM1i/8Geh248QAlQL5NtApB3az11wbCEMAoFRh8maFLFtTJYTnKgW1MAEQEAAYkBHwQY
+AQIACQUCWM3psAIbDAAKCRCaLHqY5FfFPapEB/0RqqVPeoL01BivlBtcO6JGzfse9c2JNJyM
+eKCrxgA79GjVdda4u7e2IIlSqgUBebS4fW+kHZn5jcwQwInbpMjQQCQAFpAiOdrA1pV6baj6
+s8wedPvj+v7jfMXa7udRvpZ6GQo3YzVsf8n9a8Zb9bX/YwUPfhY4eW/tRu02Qj1us4JVClxw
+JkqSEOGjj2mGKfILAT7NzdxHRfDd27JEZ5CL/YGbhj6HeSgtmM5YpoLwlZu0ywyFwON7Nf8p
+kuNl55/cAkDrcZwPxiHlii+mt/oPBqYSoDWsH3J9iNV6IU7lPPwRZekWMybYuuUS60cr6DwX
+d1f1xbULR2+AL3uiePHO
+=S0c9
+-----END PGP PUBLIC KEY BLOCK-----
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list