diff --git a/.woodpecker/.build.yml b/.woodpecker/.build.yml
index f504b44..c40f8ae 100644
--- a/.woodpecker/.build.yml
+++ b/.woodpecker/.build.yml
@@ -1,6 +1,8 @@
-pipeline:
- run:
- image: gradle:7.5-jdk8
+steps:
+ build:
+ image: gradle:8.8-jdk11
+ when:
+ branch: main
commands:
- git checkout $CI_COMMIT_BRANCH
# Code works
@@ -9,4 +11,6 @@ pipeline:
- gradle check javadocAll
# Code has coverage
- gradle jacocoRootReport coveralls
- secrets: [COVERALLS_REPO_TOKEN]
+ environment:
+ COVERALLS_REPO_TOKEN:
+ from_secret: COVERALLS_REPO_TOKEN
diff --git a/.woodpecker/.reuse.yml b/.woodpecker/.reuse.yml
index 58f17e6..7eb6ab9 100644
--- a/.woodpecker/.reuse.yml
+++ b/.woodpecker/.reuse.yml
@@ -1,7 +1,9 @@
# Code is licensed properly
# See https://reuse.software/
-pipeline:
+steps:
reuse:
+ when:
+ branch: main
image: fsfe/reuse:latest
commands:
- reuse lint
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index da3d624..5088134 100644
--- a/build.gradle
+++ b/build.gradle
@@ -16,10 +16,6 @@ buildscript {
}
}
-plugins {
- id 'ru.vyarus.animalsniffer' version '1.5.3'
-}
-
apply from: 'version.gradle'
allprojects {
@@ -38,7 +34,7 @@ allprojects {
// checkstyle
checkstyle {
- toolVersion = '8.18'
+ toolVersion = '10.26.0'
}
group 'org.pgpainless'
@@ -65,8 +61,7 @@ allprojects {
isReleaseVersion = !isSnapshot
signingRequired = !(isSnapshot || isContinuousIntegrationEnvironment)
sonatypeCredentialsAvailable = project.hasProperty('sonatypeUsername') && project.hasProperty('sonatypePassword')
- sonatypeSnapshotUrl = 'https://oss.sonatype.org/content/repositories/snapshots'
- sonatypeStagingUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2'
+ sonatypeStagingUrl = 'https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/'
}
if (isSnapshot) {
@@ -83,7 +78,7 @@ allprojects {
}
jacoco {
- toolVersion = "0.8.7"
+ toolVersion = "0.8.13"
}
jacocoTestReport {
@@ -91,7 +86,7 @@ allprojects {
sourceDirectories.setFrom(project.files(sourceSets.main.allSource.srcDirs))
classDirectories.setFrom(project.files(sourceSets.main.output))
reports {
- xml.enabled true
+ xml.required = true
}
}
@@ -109,15 +104,15 @@ subprojects {
apply plugin: 'signing'
task sourcesJar(type: Jar, dependsOn: classes) {
- classifier = 'sources'
+ archiveClassifier = 'sources'
from sourceSets.main.allSource
}
task javadocJar(type: Jar, dependsOn: javadoc) {
- classifier = 'javadoc'
+ archiveClassifier = 'javadoc'
from javadoc.destinationDir
}
task testsJar(type: Jar, dependsOn: testClasses) {
- classifier = 'tests'
+ archiveClassifier = 'tests'
from sourceSets.test.output
}
@@ -161,7 +156,7 @@ subprojects {
repositories {
if (sonatypeCredentialsAvailable) {
maven {
- url isSnapshot ? sonatypeSnapshotUrl : sonatypeStagingUrl
+ url sonatypeStagingUrl
credentials {
username = sonatypeUsername
password = sonatypePassword
@@ -214,7 +209,7 @@ task jacocoRootReport(type: JacocoReport) {
classDirectories.setFrom(files(subprojects.sourceSets.main.output))
executionData.setFrom(files(subprojects.jacocoTestReport.executionData))
reports {
- xml.enabled true
+ xml.required = true
xml.destination file("${buildDir}/reports/jacoco/test/jacocoTestReport.xml")
}
// We could remove the following setOnlyIf line, but then
@@ -225,10 +220,6 @@ task jacocoRootReport(type: JacocoReport) {
}
task javadocAll(type: Javadoc) {
- def currentJavaVersion = JavaVersion.current()
- if (currentJavaVersion.compareTo(JavaVersion.VERSION_1_9) >= 0) {
- options.addStringOption("-release", "8");
- }
source subprojects.collect {project ->
project.sourceSets.main.allJava }
destinationDir = new File(buildDir, 'javadoc')
diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml
index 531fde9..73313cc 100644
--- a/config/checkstyle/checkstyle.xml
+++ b/config/checkstyle/checkstyle.xml
@@ -113,17 +113,6 @@ SPDX-License-Identifier: CC0-1.0
-
-
-
-
-
-
-
-
-
-
-
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 69a9715..0d18421 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/pgpainless-cert-d-cli/build.gradle b/pgpainless-cert-d-cli/build.gradle
index 4c64b45..dac8fdc 100644
--- a/pgpainless-cert-d-cli/build.gradle
+++ b/pgpainless-cert-d-cli/build.gradle
@@ -4,13 +4,14 @@
plugins {
id 'application'
- id "com.github.johnrengelman.shadow" version "6.1.0"
+ id 'com.gradleup.shadow' version '8.3.6'
}
group 'org.pgpainless'
repositories {
mavenCentral()
+ mavenLocal()
}
dependencies {
@@ -19,7 +20,8 @@ dependencies {
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
// Logging
- implementation ("org.slf4j:slf4j-nop:$slf4jVersion")
+ // implementation ("org.slf4j:slf4j-nop:$slf4jVersion")
+ implementation "ch.qos.logback:logback-classic:$logbackVersion"
// pgp.cert.d using PGPainless
implementation project(":pgpainless-cert-d")
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 9e92e9f..16c7850 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
@@ -7,6 +7,7 @@ package pgp.cert_d.cli.commands;
import org.bouncycastle.openpgp.PGPPublicKeyRing;
import org.bouncycastle.openpgp.PGPPublicKeyRingCollection;
import org.pgpainless.PGPainless;
+import org.pgpainless.key.OpenPgpFingerprint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.pgpainless.certificate_store.MergeCallbacks;
@@ -30,21 +31,22 @@ public class Import implements Runnable {
PGPPublicKeyRingCollection certificates = PGPainless.readKeyRing().publicKeyRingCollection(System.in);
for (PGPPublicKeyRing cert : certificates) {
ByteArrayInputStream certIn = new ByteArrayInputStream(cert.getEncoded());
- Certificate certificate = PGPCertDCli.getCertificateDirectory()
- .insert(certIn, MergeCallbacks.mergeWithExisting());
- // CHECKSTYLE:OFF
- System.out.println(certificate.getFingerprint());
- // CHECKSTYLE:ON
+ try {
+ Certificate certificate = PGPCertDCli.getCertificateDirectory()
+ .insert(certIn, MergeCallbacks.mergeWithExisting());
+ LOGGER.info(certificate.getFingerprint());
+ } catch (BadDataException e) {
+ LOGGER.error("Certificate " + OpenPgpFingerprint.of(cert) + " contains bad data.", e);
+ } catch (IOException e) {
+ LOGGER.error("IO error importing certificate " + OpenPgpFingerprint.of(cert), e);
+ } catch (InterruptedException e) {
+ LOGGER.error("Thread interrupted while importing certificate " + OpenPgpFingerprint.of(cert), e);
+ System.exit(1);
+ }
}
} catch (IOException e) {
LOGGER.error("IO-Error.", e);
- System.exit(-1);
- } catch (InterruptedException e) {
- LOGGER.error("Thread interrupted.", e);
- System.exit(-1);
- } catch (BadDataException e) {
- LOGGER.error("Certificate contains bad data.", e);
- System.exit(-1);
+ 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 070c284..7c762f1 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
@@ -4,14 +4,13 @@
package pgp.cert_d.cli.commands;
-import org.bouncycastle.openpgp.PGPException;
import org.bouncycastle.openpgp.PGPSecretKeyRing;
import org.pgpainless.PGPainless;
import org.pgpainless.algorithm.KeyFlag;
import org.pgpainless.key.generation.KeyRingBuilder;
import org.pgpainless.key.generation.KeySpec;
import org.pgpainless.key.generation.type.KeyType;
-import org.pgpainless.key.generation.type.eddsa.EdDSACurve;
+import org.pgpainless.key.generation.type.eddsa_legacy.EdDSALegacyCurve;
import org.pgpainless.util.Passphrase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,8 +23,6 @@ import picocli.CommandLine;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
@CommandLine.Command(name = "setup",
resourceBundle = "msg_setup")
@@ -86,12 +83,8 @@ public class Setup implements Runnable {
if (passphrase != null) {
builder.setPassphrase(passphrase);
}
- builder.setPrimaryKey(KeySpec.getBuilder(KeyType.EDDSA(EdDSACurve._Ed25519), KeyFlag.CERTIFY_OTHER));
- try {
+ builder.setPrimaryKey(KeySpec.getBuilder(KeyType.EDDSA_LEGACY(EdDSALegacyCurve._Ed25519), KeyFlag.CERTIFY_OTHER));
trustRoot = builder.build();
- } catch (NoSuchAlgorithmException | PGPException | InvalidAlgorithmParameterException e) {
- throw new RuntimeException("Cannot generate trust-root OpenPGP key", e);
- }
return trustRoot;
}
diff --git a/pgpainless-cert-d/build.gradle b/pgpainless-cert-d/build.gradle
index ed891ec..c4617d0 100644
--- a/pgpainless-cert-d/build.gradle
+++ b/pgpainless-cert-d/build.gradle
@@ -10,13 +10,10 @@ group 'org.pgpainless'
repositories {
mavenCentral()
+ mavenLocal()
}
-apply plugin: 'ru.vyarus.animalsniffer'
-
dependencies {
- // animal sniffer for ensuring Android API compatibility
- signature "net.sf.androidscents.signature:android-api-level-${minAndroidSdk}:2.3.3_r2@signature"
// JUnit
testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"
@@ -37,10 +34,6 @@ dependencies {
api "org.pgpainless:pgp-certificate-store:$pgpCertDJavaVersion"
}
-animalsniffer {
- sourceSets = [sourceSets.main]
-}
-
test {
useJUnitPlatform()
}
diff --git a/pgpainless-cert-d/src/test/java/org/pgpainless/cert_d/SharedPGPCertificateDirectoryTest.java b/pgpainless-cert-d/src/test/java/org/pgpainless/cert_d/SharedPGPCertificateDirectoryTest.java
index d3fc5ec..38fd992 100644
--- a/pgpainless-cert-d/src/test/java/org/pgpainless/cert_d/SharedPGPCertificateDirectoryTest.java
+++ b/pgpainless-cert-d/src/test/java/org/pgpainless/cert_d/SharedPGPCertificateDirectoryTest.java
@@ -36,7 +36,7 @@ import org.pgpainless.certificate_store.PGPainlessCertD;
import org.pgpainless.key.OpenPgpFingerprint;
import org.pgpainless.key.generation.KeySpec;
import org.pgpainless.key.generation.type.KeyType;
-import org.pgpainless.key.generation.type.eddsa.EdDSACurve;
+import org.pgpainless.key.generation.type.eddsa_legacy.EdDSALegacyCurve;
import pgp.cert_d.subkey_lookup.InMemorySubkeyLookupFactory;
import pgp.certificate_store.certificate.Certificate;
import pgp.certificate_store.certificate.KeyMaterial;
@@ -94,7 +94,7 @@ public class SharedPGPCertificateDirectoryTest {
BadDataException, InterruptedException, BadNameException {
PGPSecretKeyRing key = PGPainless.buildKeyRing()
.addUserId("trust-root")
- .setPrimaryKey(KeySpec.getBuilder(KeyType.EDDSA(EdDSACurve._Ed25519), KeyFlag.CERTIFY_OTHER))
+ .setPrimaryKey(KeySpec.getBuilder(KeyType.EDDSA_LEGACY(EdDSALegacyCurve._Ed25519), KeyFlag.CERTIFY_OTHER))
.build();
PGPPublicKeyRing trustRoot = PGPainless.extractCertificate(key);
OpenPgpFingerprint fingerprint = OpenPgpFingerprint.of(trustRoot);
diff --git a/version.gradle b/version.gradle
index beeb5c3..de6b8dc 100644
--- a/version.gradle
+++ b/version.gradle
@@ -7,12 +7,13 @@ allprojects {
shortVersion = '0.2.3'
isSnapshot = true
minAndroidSdk = 10
- javaSourceCompatibility = 1.8
+ javaSourceCompatibility = "11"
slf4jVersion = '1.7.36'
- logbackVersion = '1.2.11'
+ logbackVersion = '1.5.13'
junitVersion = '5.8.2'
mockitoVersion = '4.5.1'
- pgpainlessVersion = '1.5.6'
+ bouncyCastleVersion = '1.82'
+ pgpainlessVersion = '1.7.7'
pgpCertDJavaVersion = '0.2.2'
picocliVersion = '4.6.3'
}