This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-gpg-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new e2ed355  Add test for BC signer leveraging subkeys (#305)
e2ed355 is described below

commit e2ed3557774ecefbc61630a9152fc21b1823e2c0
Author: Konrad Windszus <[email protected]>
AuthorDate: Mon Dec 1 16:21:57 2025 +0100

    Add test for BC signer leveraging subkeys (#305)
    
    This relates to #301
---
 .../org/apache/maven/plugins/gpg/BcSigner.java     |  2 +-
 .../org/apache/maven/plugins/gpg/BcSignerTest.java | 89 ++++++++++++++++++++++
 .../signing-key-with-multiple-subkeys.asc          | 85 +++++++++++++++++++++
 3 files changed, 175 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/maven/plugins/gpg/BcSigner.java 
b/src/main/java/org/apache/maven/plugins/gpg/BcSigner.java
index 6de774f..6c9dbfd 100644
--- a/src/main/java/org/apache/maven/plugins/gpg/BcSigner.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/BcSigner.java
@@ -252,7 +252,7 @@ public class BcSigner extends AbstractGpgSigner {
     private final String agentSocketLocations;
     private final String keyFilePath;
     private final String keyFingerprint;
-    private PGPSecretKey secretKey;
+    PGPSecretKey secretKey;
     private PGPPrivateKey privateKey;
     private PGPSignatureSubpacketVector hashSubPackets;
 
diff --git a/src/test/java/org/apache/maven/plugins/gpg/BcSignerTest.java 
b/src/test/java/org/apache/maven/plugins/gpg/BcSignerTest.java
index 49bfb97..60e92a1 100644
--- a/src/test/java/org/apache/maven/plugins/gpg/BcSignerTest.java
+++ b/src/test/java/org/apache/maven/plugins/gpg/BcSignerTest.java
@@ -20,13 +20,18 @@ package org.apache.maven.plugins.gpg;
 
 import java.io.File;
 
+import org.apache.maven.plugin.MojoFailureException;
+import org.bouncycastle.bcpg.PublicKeyAlgorithmTags;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.internal.impl.DefaultLocalPathComposer;
 import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
 import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 /**
  * Tests for {@link BcSigner}.
  */
@@ -78,4 +83,88 @@ class BcSignerTest {
         signer.setInteractive(false);
         signer.prepare();
     }
+
+    @Test
+    void testSingleKeyAsc() throws NoLocalRepositoryManagerException, 
MojoFailureException {
+        DefaultRepositorySystemSession session = new 
DefaultRepositorySystemSession();
+        session.setLocalRepositoryManager(new 
SimpleLocalRepositoryManagerFactory(new DefaultLocalPathComposer())
+                .newInstance(session, new 
LocalRepository("target/local-repo")));
+        BcSigner signer = new BcSigner(
+                session,
+                "unimportant",
+                "unimportant",
+                "undefined",
+                new 
File("src/test/resources/signing-key.asc").getAbsolutePath(),
+                "583C18F38D66BE2A3833548F8E3F6C0F255684D1"); // fingerprint 
only contained key
+        signer.setPassPhrase("TEST");
+        signer.setUseAgent(false);
+        signer.setInteractive(false);
+        signer.prepare();
+        // check key algorithm, must be ElGamal
+        assertEquals(
+                PublicKeyAlgorithmTags.ELGAMAL_ENCRYPT,
+                signer.secretKey.getPublicKey().getAlgorithm());
+    }
+
+    @Test
+    void testFirstSubkeyFromAsc() throws NoLocalRepositoryManagerException, 
MojoFailureException {
+        DefaultRepositorySystemSession session = new 
DefaultRepositorySystemSession();
+        session.setLocalRepositoryManager(new 
SimpleLocalRepositoryManagerFactory(new DefaultLocalPathComposer())
+                .newInstance(session, new 
LocalRepository("target/local-repo")));
+        BcSigner signer = new BcSigner(
+                session,
+                "unimportant",
+                "unimportant",
+                "undefined",
+                new 
File("src/test/resources/signing-key-with-multiple-subkeys.asc").getAbsolutePath(),
+                "583C18F38D66BE2A3833548F8E3F6C0F255684D1"); // fingerprint 
1st subkey
+        signer.setPassPhrase("TEST");
+        signer.setUseAgent(false);
+        signer.setInteractive(false);
+        signer.prepare();
+        // check key algorithm, must be ElGamal
+        assertEquals(
+                PublicKeyAlgorithmTags.ELGAMAL_ENCRYPT,
+                signer.secretKey.getPublicKey().getAlgorithm());
+    }
+
+    @Test
+    void testSecondSubkeyFromAsc() throws NoLocalRepositoryManagerException, 
MojoFailureException {
+        DefaultRepositorySystemSession session = new 
DefaultRepositorySystemSession();
+        session.setLocalRepositoryManager(new 
SimpleLocalRepositoryManagerFactory(new DefaultLocalPathComposer())
+                .newInstance(session, new 
LocalRepository("target/local-repo")));
+        BcSigner signer = new BcSigner(
+                session,
+                "unimportant",
+                "unimportant",
+                "undefined",
+                new 
File("src/test/resources/signing-key-with-multiple-subkeys.asc").getAbsolutePath(),
+                "7EB913227724A94C160596926356A7B4E9AF6EFB"); // fingerprint 
2nd subkey
+        signer.setPassPhrase("TEST");
+        signer.setUseAgent(false);
+        signer.setInteractive(false);
+        signer.prepare();
+        // check key algorithm, must be RSA
+        assertEquals(
+                PublicKeyAlgorithmTags.RSA_GENERAL,
+                signer.secretKey.getPublicKey().getAlgorithm());
+    }
+
+    @Test
+    void testKeyFromKeyringFromConf() throws 
NoLocalRepositoryManagerException, MojoFailureException {
+        DefaultRepositorySystemSession session = new 
DefaultRepositorySystemSession();
+        session.setLocalRepositoryManager(new 
SimpleLocalRepositoryManagerFactory(new DefaultLocalPathComposer())
+                .newInstance(session, new 
LocalRepository("target/local-repo")));
+        BcSigner signer = new BcSigner(
+                session,
+                "unimportant",
+                "unimportant",
+                "undefined",
+                new 
File("src/test/resources/gnupg/secring.gpg").getAbsolutePath(),
+                null);
+        signer.setPassPhrase("TEST");
+        signer.setUseAgent(false);
+        signer.setInteractive(false);
+        signer.prepare();
+    }
 }
diff --git a/src/test/resources/signing-key-with-multiple-subkeys.asc 
b/src/test/resources/signing-key-with-multiple-subkeys.asc
new file mode 100644
index 0000000..bc3519c
--- /dev/null
+++ b/src/test/resources/signing-key-with-multiple-subkeys.asc
@@ -0,0 +1,85 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+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
+=Q8Xx
+-----END PGP PRIVATE KEY BLOCK-----

Reply via email to