diff --git a/.reuse/dep5 b/.reuse/dep5 index b613adc..b8bb6be 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -13,8 +13,3 @@ Source: https://pgpainless.org Files: gradle* Copyright: 2015 the original author or authors. License: Apache-2.0 - -# Woodpecker build files -Files: .woodpecker/* -Copyright: 2022 the original author or authors. -License: Apache-2.0 diff --git a/.woodpecker/.build.yml b/.woodpecker/.build.yml deleted file mode 100644 index f504b44..0000000 --- a/.woodpecker/.build.yml +++ /dev/null @@ -1,12 +0,0 @@ -pipeline: - run: - image: gradle:7.5-jdk8 - commands: - - git checkout $CI_COMMIT_BRANCH - # Code works - - gradle test - # Code is clean - - gradle check javadocAll - # Code has coverage - - gradle jacocoRootReport coveralls - secrets: [COVERALLS_REPO_TOKEN] diff --git a/.woodpecker/.reuse.yml b/.woodpecker/.reuse.yml deleted file mode 100644 index 58f17e6..0000000 --- a/.woodpecker/.reuse.yml +++ /dev/null @@ -1,7 +0,0 @@ -# Code is licensed properly -# See https://reuse.software/ -pipeline: - reuse: - image: fsfe/reuse:latest - commands: - - reuse lint \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index ea017bc..8fd697d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,21 +6,5 @@ SPDX-License-Identifier: Apache-2.0 # Changelog -## 0.1.2 -- Bump `pgpainless-core` to `1.5.6` -- Bump `cert-d-pgpainless` to `0.2.2` -- Bump `cert-d-java` to `0.2.2` - -## 0.1.1 -- Bump `pgpainless-core` to `1.2.1` -- Bump `cert-d-pgpainless` to `0.1.2` -- Bump `pgp-certificate-store` to `0.1.1` -- Bump `slf4j` to `1.7.36` -- Bump `logback` to `1.2.11` -- Bump `mockito` to `4.5.1` -- Bump `jackson-data-bind` to `2.13.2.2` -- Bump `jackson-data-format-xml` to `2.13.2` -- Rename `fetch` command to `get` - ## 0.1.0 - Initial Release diff --git a/README.md b/README.md index 98d25c6..6290bce 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,6 @@ SPDX-License-Identifier: Apache-2.0 # Web Key Directory for Java -[![status-badge](https://ci.codeberg.org/api/badges/PGPainless/wkd-java/status.svg)](https://ci.codeberg.org/PGPainless/wkd-java) -[![Coverage Status](https://coveralls.io/repos/github/pgpainless/wkd-java/badge.svg?branch=main)](https://coveralls.io/github/pgpainless/wkd-java?branch=main) -[![REUSE status](https://api.reuse.software/badge/github.com/pgpainless/wkd-java)](https://api.reuse.software/info/github.com/pgpainless/wkd-java) - -Client-side API for fetching OpenPGP certificates via the [Web Key Directory](https://www.ietf.org/archive/id/draft-koch-openpgp-webkey-service-13.html) protocol. - -## Modules - This repository consists of the following modules: * [wkd-java](/wkd-java): An implementation of Certificate Discovery diff --git a/build.gradle b/build.gradle index a970ae7..937bce4 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ buildscript { maven { url "https://plugins.gradle.org/m2/" } + mavenLocal() mavenCentral() } dependencies { @@ -60,7 +61,6 @@ allprojects { repositories { mavenCentral() - mavenLocal() } // Reproducible Builds @@ -70,6 +70,10 @@ allprojects { } project.ext { + junitVersion = '5.8.2' + slf4jVersion = '1.7.32' + logbackVersion = '1.2.10' + pgpainlessVersion = '1.1.1' rootConfigDir = new File(rootDir, 'config') gitCommit = getGitCommit() isContinuousIntegrationEnvironment = Boolean.parseBoolean(System.getenv('CI')) diff --git a/version.gradle b/version.gradle index b13e945..ef567db 100644 --- a/version.gradle +++ b/version.gradle @@ -4,22 +4,9 @@ allprojects { ext { - shortVersion = '0.1.3' - isSnapshot = true + shortVersion = '0.1.0' + isSnapshot = false minAndroidSdk = 10 javaSourceCompatibility = 1.8 - jacksonDataBindVersion = '2.15.2' - jacksonDataFormatXmlVersion = '2.15.2' - junitVersion = '5.8.2' - junitSysExitVersion = '1.1.2' - jsrVersion = '3.0.2' - slf4jVersion = '1.7.36' - logbackVersion = '1.2.11' - mockitoVersion = '4.5.1' - pgpainlessVersion = '1.5.6' - pgpainlessCertDVersion = '0.2.2' - picocliVersion = '4.6.3' - certDJavaVersion = '0.2.2' - zbase32Version = '1.0.0' } } diff --git a/wkd-java-cli/build.gradle b/wkd-java-cli/build.gradle index 859643d..d4dc225 100644 --- a/wkd-java-cli/build.gradle +++ b/wkd-java-cli/build.gradle @@ -14,31 +14,21 @@ repositories { } dependencies { - // JUnit testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" - // Test CLI Exit Codes // https://todd.ginsberg.com/post/testing-system-exit/ - testImplementation "com.ginsberg:junit5-system-exit:$junitSysExitVersion" + testImplementation 'com.ginsberg:junit5-system-exit:1.1.2' + testImplementation 'org.mockito:mockito-core:4.3.1' - // Test using mocked components - testImplementation "org.mockito:mockito-core:$mockitoVersion" - - // Certificates - implementation("org.pgpainless:pgpainless-cert-d:$pgpainlessCertDVersion") - - // WKD + implementation("org.pgpainless:pgpainless-cert-d:0.1.1") implementation project(':wkd-java') - - // CLI - implementation "info.picocli:picocli:$picocliVersion" + implementation "info.picocli:picocli:4.6.3" // Logging testImplementation "ch.qos.logback:logback-classic:$logbackVersion" - implementation "org.slf4j:slf4j-nop:$slf4jVersion" + implementation 'org.slf4j:slf4j-nop:1.7.36' - // Test Suite testImplementation project(":wkd-test-suite") } diff --git a/wkd-java-cli/src/main/java/pgp/wkd/cli/PGPainlessCertificateParser.java b/wkd-java-cli/src/main/java/pgp/wkd/cli/PGPainlessCertificateParser.java index 245ca33..8aeb723 100644 --- a/wkd-java-cli/src/main/java/pgp/wkd/cli/PGPainlessCertificateParser.java +++ b/wkd-java-cli/src/main/java/pgp/wkd/cli/PGPainlessCertificateParser.java @@ -6,11 +6,11 @@ package pgp.wkd.cli; import org.bouncycastle.openpgp.PGPException; import org.bouncycastle.openpgp.PGPPublicKeyRing; +import org.bouncycastle.openpgp.PGPPublicKeyRingCollection; import org.pgpainless.PGPainless; import org.pgpainless.certificate_store.CertificateFactory; -import org.pgpainless.key.collection.PGPKeyRingCollection; import org.pgpainless.key.info.KeyRingInfo; -import pgp.certificate_store.certificate.Certificate; +import pgp.certificate_store.Certificate; import pgp.wkd.CertificateAndUserIds; import pgp.wkd.discovery.CertificateParser; @@ -24,13 +24,10 @@ public class PGPainlessCertificateParser implements CertificateParser { public List read(InputStream inputStream) throws IOException { List certificatesAndUserIds = new ArrayList<>(); try { - PGPKeyRingCollection keyMaterial = PGPainless.readKeyRing().keyRingCollection(inputStream, true); - if (keyMaterial.getPGPSecretKeyRingCollection().size() != 0) { - throw new PGPException("Secret key material encountered!"); - } - for (PGPPublicKeyRing certificate : keyMaterial.getPgpPublicKeyRingCollection()) { + PGPPublicKeyRingCollection certificates = PGPainless.readKeyRing().publicKeyRingCollection(inputStream); + for (PGPPublicKeyRing certificate : certificates) { KeyRingInfo info = PGPainless.inspectKeyRing(certificate); - Certificate parsedCert = CertificateFactory.certificateFromPublicKeyRing(certificate, 0L); + Certificate parsedCert = CertificateFactory.certificateFromPublicKeyRing(certificate); List userIds = info.getValidAndExpiredUserIds(); certificatesAndUserIds.add(new CertificateAndUserIds(parsedCert, userIds)); } diff --git a/wkd-java-cli/src/main/java/pgp/wkd/cli/WKDCLI.java b/wkd-java-cli/src/main/java/pgp/wkd/cli/WKDCLI.java index 9615cc4..d4ff56d 100644 --- a/wkd-java-cli/src/main/java/pgp/wkd/cli/WKDCLI.java +++ b/wkd-java-cli/src/main/java/pgp/wkd/cli/WKDCLI.java @@ -6,15 +6,13 @@ package pgp.wkd.cli; import pgp.wkd.exception.CertNotFetchableException; import pgp.wkd.exception.RejectedCertificateException; -import pgp.wkd.cli.command.GetCmd; +import pgp.wkd.cli.command.Fetch; import picocli.CommandLine; @CommandLine.Command( - name = "wkd", - resourceBundle = "msg_wkd", subcommands = { CommandLine.HelpCommand.class, - GetCmd.class + Fetch.class } ) public class WKDCLI { diff --git a/wkd-java-cli/src/main/java/pgp/wkd/cli/command/GetCmd.java b/wkd-java-cli/src/main/java/pgp/wkd/cli/command/Fetch.java similarity index 85% rename from wkd-java-cli/src/main/java/pgp/wkd/cli/command/GetCmd.java rename to wkd-java-cli/src/main/java/pgp/wkd/cli/command/Fetch.java index 1606897..b977bf2 100644 --- a/wkd-java-cli/src/main/java/pgp/wkd/cli/command/GetCmd.java +++ b/wkd-java-cli/src/main/java/pgp/wkd/cli/command/Fetch.java @@ -20,19 +20,23 @@ import java.io.IOException; import java.io.OutputStream; @CommandLine.Command( - name = "get", - resourceBundle = "msg_get" + name = "fetch", + description = "Fetch an OpenPGP Certificate via the Web Key Directory" ) -public class GetCmd implements Runnable { +public class Fetch implements Runnable { @CommandLine.Parameters( index = "0", arity = "1", - paramLabel = "USERID") + paramLabel = "USERID", + description = "Certificate User-ID" + ) String userId; @CommandLine.Option( - names = {"-a", "--armor"}) + names = {"-a", "--armor"}, + description = "ASCII Armor the output" + ) boolean armor = false; public static final CertificateDiscoverer DEFAULT_DISCOVERER = new ValidatingCertificateDiscoverer( @@ -63,7 +67,7 @@ public class GetCmd implements Runnable { throw new NullPointerException("CertificateDiscoverer cannot be null."); } - GetCmd.discoverer = discoverer; + Fetch.discoverer = discoverer; } private WKDAddress addressFromUserId(String userId) { diff --git a/wkd-java-cli/src/main/resources/msg_get.properties b/wkd-java-cli/src/main/resources/msg_get.properties deleted file mode 100644 index e3d5714..0000000 --- a/wkd-java-cli/src/main/resources/msg_get.properties +++ /dev/null @@ -1,12 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Paul Schaub -# -# SPDX-License-Identifier: Apache-2.0 -usage.header=Get an OpenPGP Certificate via the Web Key Directory -USERID[0]=Certificate User-ID -armor=ASCII Armor the output - -# Generic TODO: Remove when bumping picocli to 4.7.0 -usage.synopsisHeading=Usage:\u0020 -usage.commandListHeading = %nCommands:%n -usage.optionListHeading = %nOptions:%n -usage.footerHeading=Powered by picocli%n diff --git a/wkd-java-cli/src/main/resources/msg_get_de.properties b/wkd-java-cli/src/main/resources/msg_get_de.properties deleted file mode 100644 index dc1e396..0000000 --- a/wkd-java-cli/src/main/resources/msg_get_de.properties +++ /dev/null @@ -1,12 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Paul Schaub -# -# SPDX-License-Identifier: Apache-2.0 -usage.header=Empfange ein OpenPGP Zertifikat mithilfe des Web Key Directory -USERID[0]=Nutzeridentität des Zertifikats -armor=Schütze die Ausgabe mit ASCII Armor - -# Generic TODO: Remove when bumping picocli to 4.7.0 -usage.synopsisHeading=Aufruf:\u0020 -usage.commandListHeading=%nBefehle:%n -usage.optionListHeading = %nOptionen:%n -usage.footerHeading=Powered by Picocli%n diff --git a/wkd-java-cli/src/main/resources/msg_wkd.properties b/wkd-java-cli/src/main/resources/msg_wkd.properties deleted file mode 100644 index cd73615..0000000 --- a/wkd-java-cli/src/main/resources/msg_wkd.properties +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Paul Schaub -# -# SPDX-License-Identifier: Apache-2.0 -usage.header=Interact with the Web Key Directory - -# Generic TODO: Remove when bumping picocli to 4.7.0 -usage.synopsisHeading=Usage:\u0020 -usage.commandListHeading = %nCommands:%n -usage.optionListHeading = %nOptions:%n -usage.footerHeading=Powered by picocli%n diff --git a/wkd-java-cli/src/main/resources/msg_wkd_de.properties b/wkd-java-cli/src/main/resources/msg_wkd_de.properties deleted file mode 100644 index b87f2a8..0000000 --- a/wkd-java-cli/src/main/resources/msg_wkd_de.properties +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Paul Schaub -# -# SPDX-License-Identifier: Apache-2.0 -usage.header=Interagiere mit dem Web Key Directory - -# Generic TODO: Remove when bumping picocli to 4.7.0 -usage.synopsisHeading=Aufruf:\u0020 -usage.commandListHeading=%nBefehle:%n -usage.optionListHeading = %nOptionen:%n -usage.footerHeading=Powered by Picocli%n diff --git a/wkd-java-cli/src/test/java/pgp/wkd/cli/online_test_vectors/TestGetKeysFromGithubPages.java b/wkd-java-cli/src/test/java/pgp/wkd/cli/online_test_vectors/TestFetchKeysFromGithubPages.java similarity index 85% rename from wkd-java-cli/src/test/java/pgp/wkd/cli/online_test_vectors/TestGetKeysFromGithubPages.java rename to wkd-java-cli/src/test/java/pgp/wkd/cli/online_test_vectors/TestFetchKeysFromGithubPages.java index 25bcd55..ef7cc8f 100644 --- a/wkd-java-cli/src/test/java/pgp/wkd/cli/online_test_vectors/TestGetKeysFromGithubPages.java +++ b/wkd-java-cli/src/test/java/pgp/wkd/cli/online_test_vectors/TestFetchKeysFromGithubPages.java @@ -12,11 +12,11 @@ import pgp.wkd.cli.WKDCLI; import static org.junit.jupiter.api.Assertions.assertEquals; @Disabled("For privacy reasons") -public class TestGetKeysFromGithubPages extends RedirectSystemStreamsTest { +public class TestFetchKeysFromGithubPages extends RedirectSystemStreamsTest { // Valid WKD publication. // Cert is available at https://pgpainless.github.io/.well-known/openpgpkey/hu/eprjcbeppbna3f6xabhtpddzpn41nknw - private static final String USERID_BASE = "WKD Test (Base Case - Valid User-ID) "; + private static final String USERID_BASE = "WKD Test [Base Case - Valid User-ID]"; private static final String MAIL_BASE = "wkd-test-base@pgpainless.github.io"; @Test diff --git a/wkd-java-cli/src/test/java/pgp/wkd/cli/test_suite/TestSuiteTestRunner.java b/wkd-java-cli/src/test/java/pgp/wkd/cli/test_suite/TestSuiteTestRunner.java index 1a24f27..a7596d3 100644 --- a/wkd-java-cli/src/test/java/pgp/wkd/cli/test_suite/TestSuiteTestRunner.java +++ b/wkd-java-cli/src/test/java/pgp/wkd/cli/test_suite/TestSuiteTestRunner.java @@ -10,7 +10,7 @@ import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.TestFactory; import pgp.wkd.cli.PGPainlessCertificateParser; import pgp.wkd.cli.WKDCLI; -import pgp.wkd.cli.command.GetCmd; +import pgp.wkd.cli.command.Fetch; import pgp.wkd.discovery.CertificateDiscoverer; import pgp.wkd.discovery.ValidatingCertificateDiscoverer; import pgp.wkd.discovery.DiscoveryMethod; @@ -45,7 +45,7 @@ public class TestSuiteTestRunner { // Fetch certificates from a local directory instead of the internetzzz. CertificateDiscoverer discoverer = new ValidatingCertificateDiscoverer( new PGPainlessCertificateParser(), new DirectoryBasedCertificateFetcher(tempPath)); - GetCmd.setCertificateDiscoverer(discoverer); + Fetch.setCertificateDiscoverer(discoverer); } @TestFactory @@ -61,7 +61,7 @@ public class TestSuiteTestRunner { String mail = testCase.getLookupMailAddress(); int exitCode = WKDCLI.execute(new String[] { - "get", "--armor", mail + "fetch", "--armor", mail }); if (testCase.isExpectSuccess()) { @@ -74,6 +74,6 @@ public class TestSuiteTestRunner { @AfterAll public static void reset() { - GetCmd.setCertificateDiscoverer(GetCmd.DEFAULT_DISCOVERER); + Fetch.setCertificateDiscoverer(Fetch.DEFAULT_DISCOVERER); } } diff --git a/wkd-java/build.gradle b/wkd-java/build.gradle index b382c4c..b4e2867 100644 --- a/wkd-java/build.gradle +++ b/wkd-java/build.gradle @@ -13,22 +13,19 @@ repositories { } dependencies { - // JUnit testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" // Logging api "org.slf4j:slf4j-api:$slf4jVersion" testImplementation "ch.qos.logback:logback-classic:$logbackVersion" - - // Certificate store - api "org.pgpainless:pgp-certificate-store:$certDJavaVersion" + api "org.pgpainless:pgp-certificate-store:0.1.0" // Z-Base32 - implementation "com.sandinh:zbase32-commons-codec:$zbase32Version" + implementation 'com.sandinh:zbase32-commons-codec:1.0.0' // @Nullable etc. - implementation "com.google.code.findbugs:jsr305:$jsrVersion" + implementation "com.google.code.findbugs:jsr305:3.0.2" } test { diff --git a/wkd-java/src/main/java/pgp/wkd/CertificateAndUserIds.java b/wkd-java/src/main/java/pgp/wkd/CertificateAndUserIds.java index f964805..5c0b606 100644 --- a/wkd-java/src/main/java/pgp/wkd/CertificateAndUserIds.java +++ b/wkd-java/src/main/java/pgp/wkd/CertificateAndUserIds.java @@ -4,7 +4,7 @@ package pgp.wkd; -import pgp.certificate_store.certificate.Certificate; +import pgp.certificate_store.Certificate; import java.util.ArrayList; import java.util.List; diff --git a/wkd-java/src/main/java/pgp/wkd/RejectedCertificate.java b/wkd-java/src/main/java/pgp/wkd/RejectedCertificate.java index f96b85e..7a227b4 100644 --- a/wkd-java/src/main/java/pgp/wkd/RejectedCertificate.java +++ b/wkd-java/src/main/java/pgp/wkd/RejectedCertificate.java @@ -4,8 +4,7 @@ package pgp.wkd; - -import pgp.certificate_store.certificate.Certificate; +import pgp.certificate_store.Certificate; /** * A rejected OpenPGP certificate. diff --git a/wkd-java/src/main/java/pgp/wkd/discovery/DiscoveryResponse.java b/wkd-java/src/main/java/pgp/wkd/discovery/DiscoveryResponse.java index d48a2ce..e1b6ac1 100644 --- a/wkd-java/src/main/java/pgp/wkd/discovery/DiscoveryResponse.java +++ b/wkd-java/src/main/java/pgp/wkd/discovery/DiscoveryResponse.java @@ -4,7 +4,7 @@ package pgp.wkd.discovery; -import pgp.certificate_store.certificate.Certificate; +import pgp.certificate_store.Certificate; import pgp.wkd.RejectedCertificate; import pgp.wkd.WKDAddress; import pgp.wkd.exception.MissingPolicyFileException; @@ -12,7 +12,6 @@ import pgp.wkd.exception.MissingPolicyFileException; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.net.URI; -import java.util.ArrayList; import java.util.List; /** @@ -171,8 +170,8 @@ public final class DiscoveryResponse { private DiscoveryMethod discoveryMethod; private WKDAddress address; - private List acceptableCertificates = new ArrayList<>(); - private List rejectedCertificates = new ArrayList<>(); + private List acceptableCertificates; + private List rejectedCertificates; private Throwable fetchingFailure; private WKDPolicy policy; private MissingPolicyFileException missingPolicyFileException; diff --git a/wkd-java/src/main/java/pgp/wkd/discovery/DiscoveryResult.java b/wkd-java/src/main/java/pgp/wkd/discovery/DiscoveryResult.java index 6946891..0030812 100644 --- a/wkd-java/src/main/java/pgp/wkd/discovery/DiscoveryResult.java +++ b/wkd-java/src/main/java/pgp/wkd/discovery/DiscoveryResult.java @@ -4,7 +4,7 @@ package pgp.wkd.discovery; -import pgp.certificate_store.certificate.Certificate; +import pgp.certificate_store.Certificate; import pgp.wkd.exception.CertNotFetchableException; import javax.annotation.Nonnull; diff --git a/wkd-java/src/main/java/pgp/wkd/discovery/ValidatingCertificateDiscoverer.java b/wkd-java/src/main/java/pgp/wkd/discovery/ValidatingCertificateDiscoverer.java index 09f6984..2613ce8 100644 --- a/wkd-java/src/main/java/pgp/wkd/discovery/ValidatingCertificateDiscoverer.java +++ b/wkd-java/src/main/java/pgp/wkd/discovery/ValidatingCertificateDiscoverer.java @@ -4,7 +4,7 @@ package pgp.wkd.discovery; -import pgp.certificate_store.certificate.Certificate; +import pgp.certificate_store.Certificate; import pgp.wkd.CertificateAndUserIds; import pgp.wkd.exception.MissingPolicyFileException; import pgp.wkd.exception.RejectedCertificateException; diff --git a/wkd-test-suite/build.gradle b/wkd-test-suite/build.gradle index 9d89a7b..fb48726 100644 --- a/wkd-test-suite/build.gradle +++ b/wkd-test-suite/build.gradle @@ -26,11 +26,11 @@ dependencies { implementation "org.pgpainless:pgpainless-core:$pgpainlessVersion" // CLI - implementation "info.picocli:picocli:$picocliVersion" + implementation "info.picocli:picocli:4.6.3" // Object Mapping - implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:$jacksonDataFormatXmlVersion" - implementation "com.fasterxml.jackson.core:jackson-databind:$jacksonDataBindVersion" + implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.1' + implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.1' } application { diff --git a/wkd-test-suite/src/main/java/pgp/wkd/test_suite/AbstractTestSuiteGenerator.java b/wkd-test-suite/src/main/java/pgp/wkd/test_suite/AbstractTestSuiteGenerator.java index 99ad9b5..a27af24 100644 --- a/wkd-test-suite/src/main/java/pgp/wkd/test_suite/AbstractTestSuiteGenerator.java +++ b/wkd-test-suite/src/main/java/pgp/wkd/test_suite/AbstractTestSuiteGenerator.java @@ -38,7 +38,7 @@ public class AbstractTestSuiteGenerator { } protected PGPSecretKeyRing secretKey(String userId) throws PGPException, InvalidAlgorithmParameterException, NoSuchAlgorithmException { - PGPSecretKeyRing secretKeys = PGPainless.generateKeyRing().modernKeyRing(userId); + PGPSecretKeyRing secretKeys = PGPainless.generateKeyRing().modernKeyRing(userId, null); return secretKeys; }