From f109b598f6cf415b12378aa1dcf88a401d02c915 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Thu, 1 Sep 2022 11:18:08 +0200 Subject: [PATCH 1/4] Compare certs based on encoding --- .../org/pgpainless/certificate_store/MergeCallbacks.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pgpainless-cert-d/src/main/java/org/pgpainless/certificate_store/MergeCallbacks.java b/pgpainless-cert-d/src/main/java/org/pgpainless/certificate_store/MergeCallbacks.java index cbd3a44..000e935 100644 --- a/pgpainless-cert-d/src/main/java/org/pgpainless/certificate_store/MergeCallbacks.java +++ b/pgpainless-cert-d/src/main/java/org/pgpainless/certificate_store/MergeCallbacks.java @@ -16,6 +16,7 @@ import pgp.certificate_store.certificate.KeyMaterialMerger; import pgp.certificate_store.exception.BadDataException; import java.io.IOException; +import java.util.Arrays; import java.util.Iterator; public class MergeCallbacks { @@ -107,7 +108,7 @@ public class MergeCallbacks { } } - private void printOutDifferences(PGPKeyRing existingCert, PGPKeyRing mergedCert) { + private void printOutDifferences(PGPKeyRing existingCert, PGPKeyRing mergedCert) throws IOException { int numSigsBefore = countSigs(existingCert); int numSigsAfter = countSigs(mergedCert); int newSigs = numSigsAfter - numSigsBefore; @@ -115,7 +116,7 @@ public class MergeCallbacks { int numUidsAfter = count(mergedCert.getPublicKey().getUserIDs()); int newUids = numUidsAfter - numUidsBefore; - if (!existingCert.equals(mergedCert)) { + if (!Arrays.equals(existingCert.getEncoded(), mergedCert.getEncoded())) { OpenPgpFingerprint fingerprint = OpenPgpFingerprint.of(mergedCert); StringBuilder sb = new StringBuilder(); sb.append(String.format("Certificate %s has", fingerprint)); From 47e9f5f08abe88e115d85c7495af72bd0d7fd3c0 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Thu, 1 Sep 2022 11:29:47 +0200 Subject: [PATCH 2/4] Print out fingerprints when inserting|importing keys --- .../src/main/java/pgp/cert_d/cli/commands/Import.java | 3 +++ .../src/main/java/pgp/cert_d/cli/commands/Insert.java | 3 +++ .../src/main/java/pgp/cert_d/cli/commands/Setup.java | 7 ++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Import.java b/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Import.java index 3dfcfb4..5306d24 100644 --- a/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Import.java +++ b/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Import.java @@ -33,6 +33,9 @@ public class Import implements Runnable { ByteArrayInputStream certIn = new ByteArrayInputStream(cert.getEncoded()); Certificate certificate = PGPCertDCli.getCertificateDirectory() .insert(certIn, MergeCallbacks.mergeWithExisting()); + // CHECKSTYLE:OFF + System.out.println(certificate.getFingerprint()); + // CHECKSTYLE:ON } } catch (IOException e) { LOGGER.error("IO-Error.", e); diff --git a/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Insert.java b/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Insert.java index 25987d0..cf62fd8 100644 --- a/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Insert.java +++ b/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Insert.java @@ -25,6 +25,9 @@ public class Insert implements Runnable { try { Certificate certificate = PGPCertDCli.getCertificateDirectory() .insert(System.in, MergeCallbacks.mergeWithExisting()); + // CHECKSTYLE:OFF + System.out.println(certificate.getFingerprint()); + // CHECKSTYLE:ON } catch (IOException e) { LOGGER.error("IO-Error.", e); System.exit(-1); diff --git a/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Setup.java b/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Setup.java index 2cdc5c4..070c284 100644 --- a/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Setup.java +++ b/pgpainless-cert-d-cli/src/main/java/pgp/cert_d/cli/commands/Setup.java @@ -17,6 +17,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.pgpainless.certificate_store.MergeCallbacks; import pgp.cert_d.cli.PGPCertDCli; +import pgp.certificate_store.certificate.KeyMaterial; import pgp.certificate_store.exception.BadDataException; import picocli.CommandLine; @@ -61,7 +62,11 @@ public class Setup implements Runnable { try { InputStream inputStream = new ByteArrayInputStream(trustRoot.getEncoded()); - PGPCertDCli.getCertificateDirectory().insertTrustRoot(inputStream, MergeCallbacks.overrideExisting()); + KeyMaterial inserted = PGPCertDCli.getCertificateDirectory() + .insertTrustRoot(inputStream, MergeCallbacks.overrideExisting()); + // CHECKSTYLE:OFF + System.out.println(inserted.getFingerprint()); + // CHECKSTYLE:ON } catch (BadDataException e) { throw new RuntimeException(e); From 5b0f22f5151333caff24ff2bdf94f58506f10786 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Thu, 1 Sep 2022 11:37:09 +0200 Subject: [PATCH 3/4] Cert-D-PGPainless 0.2.0 --- CHANGELOG.md | 12 +++++++++++- README.md | 3 ++- version.gradle | 4 ++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2e320a..787c372 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,9 +5,19 @@ SPDX-License-Identifier: CC0-1.0 # Cert-D-PGPainless Changelog -## 0.1.3-SNAPSHOT +## 0.2.0 - `get`: Apply `toLowerCase()` to fingerprints - Use BCs `PGPPublicKeyRing.join(first, second)` method to properly merge certificates +- Implement storing of `trust-root` key +- Bump `cert-d-java` to `0.2.1` +- Changes to CLI + - Add support for i18n using resource bundles + - Rename `import` command to `insert` + - Rename `multi-import` command to `import` + - Add `export` command + - Add basic `list` command + - `get` command: Allow querying by special name + - Add armor headers to output of `get` command ## 0.1.2 - Add name and description to main command diff --git a/README.md b/README.md index e7e9981..4535866 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,8 @@ SPDX-License-Identifier: Apache-2.0 [![Coverage Status](https://coveralls.io/repos/github/pgpainless/cert-d-pgpainless/badge.svg?branch=main)](https://coveralls.io/github/pgpainless/cert-d-pgpainless?branch=main) [![REUSE status](https://api.reuse.software/badge/github.com/pgpainless/cert-d-pgpainless)](https://api.reuse.software/info/github.com/pgpainless/cert-d-pgpainless) -This repository contains implementations of the [Shared PGP Certificate Directory](https://sequoia-pgp.gitlab.io/pgp-cert-d/) specification using [PGPainless](https://pgpainless.org) as backend. +This repository contains implementations of the [Shared PGP Certificate Directory](https://sequoia-pgp.gitlab.io/pgp-cert-d/) +specification using [PGPainless](https://pgpainless.org) as backend. The module `pgpainless-cert-d` can be used as a drop-in implementation of `pgp-certificate-store`. diff --git a/version.gradle b/version.gradle index d7f242e..44b08ac 100644 --- a/version.gradle +++ b/version.gradle @@ -4,8 +4,8 @@ allprojects { ext { - shortVersion = '0.1.3' - isSnapshot = true + shortVersion = '0.2.0' + isSnapshot = false minAndroidSdk = 10 javaSourceCompatibility = 1.8 slf4jVersion = '1.7.36' From c8bf6c5f837b4d7b05abe628b01d270de5e857eb Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Thu, 1 Sep 2022 11:38:56 +0200 Subject: [PATCH 4/4] Cert-D-PGPainless 0.2.1-SNAPSHOT --- version.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.gradle b/version.gradle index 44b08ac..024bca2 100644 --- a/version.gradle +++ b/version.gradle @@ -4,8 +4,8 @@ allprojects { ext { - shortVersion = '0.2.0' - isSnapshot = false + shortVersion = '0.2.1' + isSnapshot = true minAndroidSdk = 10 javaSourceCompatibility = 1.8 slf4jVersion = '1.7.36'