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

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new c679053f3a7 CAMEL-22005 - Camel-PQC: Provide default for KEM and 
Signature/Verify even for non-standardized algorithms (#17844)
c679053f3a7 is described below

commit c679053f3a7650ae19466d775260f6b9e5d5f43f
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Apr 23 14:06:59 2025 +0200

    CAMEL-22005 - Camel-PQC: Provide default for KEM and Signature/Verify even 
for non-standardized algorithms (#17844)
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 .../apache/camel/component/pqc/PQCComponent.java   | 29 ++++++-
 ...Material.java => PQCDefaultFalconMaterial.java} | 20 ++---
 .../pqc/crypto/PQCDefaultLMSMaterial.java          |  6 +-
 .../pqc/crypto/PQCDefaultMLDSAMaterial.java        |  6 +-
 ...Material.java => PQCDefaultPicnicMaterial.java} | 20 ++---
 ...aterial.java => PQCDefaultRainbowMaterial.java} | 20 ++---
 .../pqc/crypto/PQCDefaultSLHDSAMaterial.java       |  6 +-
 .../pqc/crypto/PQCDefaultXMSSMaterial.java         |  6 +-
 .../PQCDefaultNTRULPRimeMaterial.java}             | 37 +++++----
 .../PQCDefaultNTRUMaterial.java}                   | 37 +++++----
 ...TRUGenerateEncapsulationAESNoAutowiredTest.java | 89 ++++++++++++++++++++++
 .../pqc/PQCSignatureFalconNoAutowiredTest.java     | 75 ++++++++++++++++++
 .../pqc/PQCSignaturePicnicNoAutowiredTest.java     | 75 ++++++++++++++++++
 .../pqc/PQCSignatureRainbowNoAutowiredTest.java    | 76 ++++++++++++++++++
 14 files changed, 425 insertions(+), 77 deletions(-)

diff --git 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCComponent.java
 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCComponent.java
index eca95c19d14..c0f672f33e2 100644
--- 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCComponent.java
+++ 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCComponent.java
@@ -21,7 +21,14 @@ import java.util.Map;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.pqc.crypto.*;
-import org.apache.camel.component.pqc.crypto.kem.*;
+import org.apache.camel.component.pqc.crypto.kem.PQCDefaultBIKEMaterial;
+import org.apache.camel.component.pqc.crypto.kem.PQCDefaultCMCEMaterial;
+import org.apache.camel.component.pqc.crypto.kem.PQCDefaultFRODOMaterial;
+import org.apache.camel.component.pqc.crypto.kem.PQCDefaultHQCMaterial;
+import org.apache.camel.component.pqc.crypto.kem.PQCDefaultMLKEMMaterial;
+import org.apache.camel.component.pqc.crypto.kem.PQCDefaultNTRULPRimeMaterial;
+import org.apache.camel.component.pqc.crypto.kem.PQCDefaultNTRUMaterial;
+import org.apache.camel.component.pqc.crypto.kem.PQCDefaultSABERMaterial;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.HealthCheckComponent;
@@ -70,6 +77,18 @@ public class PQCComponent extends HealthCheckComponent {
                         configuration.setSigner(PQCDefaultXMSSMaterial.signer);
                         
configuration.setKeyPair(PQCDefaultXMSSMaterial.keyPair);
                         break;
+                    case "FALCON":
+                        
configuration.setSigner(PQCDefaultFalconMaterial.signer);
+                        
configuration.setKeyPair(PQCDefaultFalconMaterial.keyPair);
+                        break;
+                    case "PICNIC":
+                        
configuration.setSigner(PQCDefaultPicnicMaterial.signer);
+                        
configuration.setKeyPair(PQCDefaultPicnicMaterial.keyPair);
+                        break;
+                    case "RAINBOW":
+                        
configuration.setSigner(PQCDefaultRainbowMaterial.signer);
+                        
configuration.setKeyPair(PQCDefaultRainbowMaterial.keyPair);
+                        break;
                     default:
                         break;
                 }
@@ -103,6 +122,14 @@ public class PQCComponent extends HealthCheckComponent {
                         
configuration.setKeyGenerator(PQCDefaultFRODOMaterial.keyGenerator);
                         
configuration.setKeyPair(PQCDefaultFRODOMaterial.keyPair);
                         break;
+                    case "NTRU":
+                        
configuration.setKeyGenerator(PQCDefaultNTRUMaterial.keyGenerator);
+                        
configuration.setKeyPair(PQCDefaultNTRUMaterial.keyPair);
+                        break;
+                    case "NTRULPRime":
+                        
configuration.setKeyGenerator(PQCDefaultNTRULPRimeMaterial.keyGenerator);
+                        
configuration.setKeyPair(PQCDefaultNTRULPRimeMaterial.keyPair);
+                        break;
                     default:
                         break;
                 }
diff --git 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultFalconMaterial.java
similarity index 70%
copy from 
components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
copy to 
components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultFalconMaterial.java
index 3584582b0ae..79fc840bf9b 100644
--- 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
+++ 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultFalconMaterial.java
@@ -16,17 +16,12 @@
  */
 package org.apache.camel.component.pqc.crypto;
 
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.SecureRandom;
-import java.security.Signature;
+import java.security.*;
 
-import org.bouncycastle.jcajce.spec.MLDSAParameterSpec;
+import org.apache.camel.component.pqc.PQCSignatureAlgorithms;
+import org.bouncycastle.pqc.jcajce.spec.FalconParameterSpec;
 
-public class PQCDefaultMLDSAMaterial {
+public class PQCDefaultFalconMaterial {
     public static final KeyPair keyPair;
     public static final Signature signer;
 
@@ -35,7 +30,7 @@ public class PQCDefaultMLDSAMaterial {
         try {
             generator = prepareKeyPair();
             keyPair = generator.generateKeyPair();
-            signer = Signature.getInstance("ML-DSA");
+            signer = 
Signature.getInstance(PQCSignatureAlgorithms.FALCON.getAlgorithm());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -43,8 +38,9 @@ public class PQCDefaultMLDSAMaterial {
 
     protected static KeyPairGenerator prepareKeyPair()
             throws NoSuchAlgorithmException, NoSuchProviderException, 
InvalidAlgorithmParameterException {
-        KeyPairGenerator kpGen = KeyPairGenerator.getInstance("ML-DSA", "BC");
-        kpGen.initialize(MLDSAParameterSpec.ml_dsa_65, new SecureRandom());
+        KeyPairGenerator kpGen = 
KeyPairGenerator.getInstance(PQCSignatureAlgorithms.FALCON.getAlgorithm(),
+                PQCSignatureAlgorithms.FALCON.getBcProvider());
+        kpGen.initialize(FalconParameterSpec.falcon_1024);
         return kpGen;
     }
 }
diff --git 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultLMSMaterial.java
 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultLMSMaterial.java
index 0c9d37c2da4..9863700d317 100644
--- 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultLMSMaterial.java
+++ 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultLMSMaterial.java
@@ -23,6 +23,7 @@ import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
 import java.security.Signature;
 
+import org.apache.camel.component.pqc.PQCSignatureAlgorithms;
 import org.bouncycastle.pqc.crypto.lms.LMOtsParameters;
 import org.bouncycastle.pqc.crypto.lms.LMSigParameters;
 import org.bouncycastle.pqc.jcajce.spec.LMSKeyGenParameterSpec;
@@ -36,7 +37,7 @@ public class PQCDefaultLMSMaterial {
         try {
             generator = prepareKeyPair();
             keyPair = generator.generateKeyPair();
-            signer = Signature.getInstance("LMS");
+            signer = 
Signature.getInstance(PQCSignatureAlgorithms.LMS.getAlgorithm());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -44,7 +45,8 @@ public class PQCDefaultLMSMaterial {
 
     protected static KeyPairGenerator prepareKeyPair()
             throws NoSuchAlgorithmException, NoSuchProviderException, 
InvalidAlgorithmParameterException {
-        KeyPairGenerator kpGen = KeyPairGenerator.getInstance("LMS", "BC");
+        KeyPairGenerator kpGen = 
KeyPairGenerator.getInstance(PQCSignatureAlgorithms.LMS.getAlgorithm(),
+                PQCSignatureAlgorithms.LMS.getBcProvider());
         kpGen.initialize(new 
LMSKeyGenParameterSpec(LMSigParameters.lms_sha256_n32_h5, 
LMOtsParameters.sha256_n32_w1));
         return kpGen;
     }
diff --git 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
index 3584582b0ae..df61680f877 100644
--- 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
+++ 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
@@ -24,6 +24,7 @@ import java.security.NoSuchProviderException;
 import java.security.SecureRandom;
 import java.security.Signature;
 
+import org.apache.camel.component.pqc.PQCSignatureAlgorithms;
 import org.bouncycastle.jcajce.spec.MLDSAParameterSpec;
 
 public class PQCDefaultMLDSAMaterial {
@@ -35,7 +36,7 @@ public class PQCDefaultMLDSAMaterial {
         try {
             generator = prepareKeyPair();
             keyPair = generator.generateKeyPair();
-            signer = Signature.getInstance("ML-DSA");
+            signer = 
Signature.getInstance(PQCSignatureAlgorithms.MLDSA.getAlgorithm());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -43,7 +44,8 @@ public class PQCDefaultMLDSAMaterial {
 
     protected static KeyPairGenerator prepareKeyPair()
             throws NoSuchAlgorithmException, NoSuchProviderException, 
InvalidAlgorithmParameterException {
-        KeyPairGenerator kpGen = KeyPairGenerator.getInstance("ML-DSA", "BC");
+        KeyPairGenerator kpGen = 
KeyPairGenerator.getInstance(PQCSignatureAlgorithms.MLDSA.getAlgorithm(),
+                PQCSignatureAlgorithms.MLDSA.getBcProvider());
         kpGen.initialize(MLDSAParameterSpec.ml_dsa_65, new SecureRandom());
         return kpGen;
     }
diff --git 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultPicnicMaterial.java
similarity index 70%
copy from 
components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
copy to 
components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultPicnicMaterial.java
index 3584582b0ae..ac79b22add9 100644
--- 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
+++ 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultPicnicMaterial.java
@@ -16,17 +16,12 @@
  */
 package org.apache.camel.component.pqc.crypto;
 
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.SecureRandom;
-import java.security.Signature;
+import java.security.*;
 
-import org.bouncycastle.jcajce.spec.MLDSAParameterSpec;
+import org.apache.camel.component.pqc.PQCSignatureAlgorithms;
+import org.bouncycastle.pqc.jcajce.spec.PicnicParameterSpec;
 
-public class PQCDefaultMLDSAMaterial {
+public class PQCDefaultPicnicMaterial {
     public static final KeyPair keyPair;
     public static final Signature signer;
 
@@ -35,7 +30,7 @@ public class PQCDefaultMLDSAMaterial {
         try {
             generator = prepareKeyPair();
             keyPair = generator.generateKeyPair();
-            signer = Signature.getInstance("ML-DSA");
+            signer = 
Signature.getInstance(PQCSignatureAlgorithms.PICNIC.getAlgorithm());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -43,8 +38,9 @@ public class PQCDefaultMLDSAMaterial {
 
     protected static KeyPairGenerator prepareKeyPair()
             throws NoSuchAlgorithmException, NoSuchProviderException, 
InvalidAlgorithmParameterException {
-        KeyPairGenerator kpGen = KeyPairGenerator.getInstance("ML-DSA", "BC");
-        kpGen.initialize(MLDSAParameterSpec.ml_dsa_65, new SecureRandom());
+        KeyPairGenerator kpGen = 
KeyPairGenerator.getInstance(PQCSignatureAlgorithms.PICNIC.getAlgorithm(),
+                PQCSignatureAlgorithms.PICNIC.getBcProvider());
+        kpGen.initialize(PicnicParameterSpec.picnic3l5);
         return kpGen;
     }
 }
diff --git 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultRainbowMaterial.java
similarity index 70%
copy from 
components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
copy to 
components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultRainbowMaterial.java
index 3584582b0ae..cb173db50f7 100644
--- 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultMLDSAMaterial.java
+++ 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultRainbowMaterial.java
@@ -16,17 +16,12 @@
  */
 package org.apache.camel.component.pqc.crypto;
 
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.SecureRandom;
-import java.security.Signature;
+import java.security.*;
 
-import org.bouncycastle.jcajce.spec.MLDSAParameterSpec;
+import org.apache.camel.component.pqc.PQCSignatureAlgorithms;
+import org.bouncycastle.pqc.jcajce.spec.RainbowParameterSpec;
 
-public class PQCDefaultMLDSAMaterial {
+public class PQCDefaultRainbowMaterial {
     public static final KeyPair keyPair;
     public static final Signature signer;
 
@@ -35,7 +30,7 @@ public class PQCDefaultMLDSAMaterial {
         try {
             generator = prepareKeyPair();
             keyPair = generator.generateKeyPair();
-            signer = Signature.getInstance("ML-DSA");
+            signer = 
Signature.getInstance(PQCSignatureAlgorithms.RAINBOW.getAlgorithm());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -43,8 +38,9 @@ public class PQCDefaultMLDSAMaterial {
 
     protected static KeyPairGenerator prepareKeyPair()
             throws NoSuchAlgorithmException, NoSuchProviderException, 
InvalidAlgorithmParameterException {
-        KeyPairGenerator kpGen = KeyPairGenerator.getInstance("ML-DSA", "BC");
-        kpGen.initialize(MLDSAParameterSpec.ml_dsa_65, new SecureRandom());
+        KeyPairGenerator kpGen = 
KeyPairGenerator.getInstance(PQCSignatureAlgorithms.RAINBOW.getAlgorithm(),
+                PQCSignatureAlgorithms.RAINBOW.getBcProvider());
+        kpGen.initialize(RainbowParameterSpec.rainbowVclassic);
         return kpGen;
     }
 }
diff --git 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultSLHDSAMaterial.java
 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultSLHDSAMaterial.java
index 4d783915556..ba89b3ffb2d 100644
--- 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultSLHDSAMaterial.java
+++ 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultSLHDSAMaterial.java
@@ -24,6 +24,7 @@ import java.security.NoSuchProviderException;
 import java.security.SecureRandom;
 import java.security.Signature;
 
+import org.apache.camel.component.pqc.PQCSignatureAlgorithms;
 import org.bouncycastle.jcajce.spec.SLHDSAParameterSpec;
 
 public class PQCDefaultSLHDSAMaterial {
@@ -35,7 +36,7 @@ public class PQCDefaultSLHDSAMaterial {
         try {
             generator = prepareKeyPair();
             keyPair = generator.generateKeyPair();
-            signer = Signature.getInstance("SLH-DSA");
+            signer = 
Signature.getInstance(PQCSignatureAlgorithms.SLHDSA.getAlgorithm());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -43,7 +44,8 @@ public class PQCDefaultSLHDSAMaterial {
 
     protected static KeyPairGenerator prepareKeyPair()
             throws NoSuchAlgorithmException, NoSuchProviderException, 
InvalidAlgorithmParameterException {
-        KeyPairGenerator kpGen = KeyPairGenerator.getInstance("SLH-DSA", "BC");
+        KeyPairGenerator kpGen = 
KeyPairGenerator.getInstance(PQCSignatureAlgorithms.SLHDSA.getAlgorithm(),
+                PQCSignatureAlgorithms.SLHDSA.getBcProvider());
         kpGen.initialize(SLHDSAParameterSpec.slh_dsa_sha2_128s, new 
SecureRandom());
         return kpGen;
     }
diff --git 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultXMSSMaterial.java
 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultXMSSMaterial.java
index 48cc6d5e550..f00b19d3413 100644
--- 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultXMSSMaterial.java
+++ 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultXMSSMaterial.java
@@ -24,6 +24,7 @@ import java.security.NoSuchProviderException;
 import java.security.SecureRandom;
 import java.security.Signature;
 
+import org.apache.camel.component.pqc.PQCSignatureAlgorithms;
 import org.bouncycastle.pqc.jcajce.spec.XMSSParameterSpec;
 
 public class PQCDefaultXMSSMaterial {
@@ -35,7 +36,7 @@ public class PQCDefaultXMSSMaterial {
         try {
             generator = prepareKeyPair();
             keyPair = generator.generateKeyPair();
-            signer = Signature.getInstance("XMSS");
+            signer = 
Signature.getInstance(PQCSignatureAlgorithms.XMSS.getAlgorithm());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -43,7 +44,8 @@ public class PQCDefaultXMSSMaterial {
 
     protected static KeyPairGenerator prepareKeyPair()
             throws NoSuchAlgorithmException, NoSuchProviderException, 
InvalidAlgorithmParameterException {
-        KeyPairGenerator kpGen = KeyPairGenerator.getInstance("XMSS", "BCPQC");
+        KeyPairGenerator kpGen = 
KeyPairGenerator.getInstance(PQCSignatureAlgorithms.XMSS.getAlgorithm(),
+                PQCSignatureAlgorithms.XMSS.getBcProvider());
         kpGen.initialize(new XMSSParameterSpec(10, XMSSParameterSpec.SHA256), 
new SecureRandom());
         return kpGen;
     }
diff --git 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultXMSSMaterial.java
 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/kem/PQCDefaultNTRULPRimeMaterial.java
similarity index 53%
copy from 
components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultXMSSMaterial.java
copy to 
components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/kem/PQCDefaultNTRULPRimeMaterial.java
index 48cc6d5e550..7b72e5a3309 100644
--- 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultXMSSMaterial.java
+++ 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/kem/PQCDefaultNTRULPRimeMaterial.java
@@ -14,28 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.pqc.crypto;
+package org.apache.camel.component.pqc.crypto.kem;
 
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.SecureRandom;
-import java.security.Signature;
+import java.security.*;
 
-import org.bouncycastle.pqc.jcajce.spec.XMSSParameterSpec;
+import javax.crypto.KeyGenerator;
+
+import org.apache.camel.component.pqc.PQCKeyEncapsulationAlgorithms;
+import org.bouncycastle.pqc.jcajce.spec.NTRULPRimeParameterSpec;
+
+public class PQCDefaultNTRULPRimeMaterial {
 
-public class PQCDefaultXMSSMaterial {
     public static final KeyPair keyPair;
-    public static final Signature signer;
+    public static final KeyGenerator keyGenerator;
+    public static final KeyPairGenerator generator;
 
     static {
-        KeyPairGenerator generator;
         try {
             generator = prepareKeyPair();
             keyPair = generator.generateKeyPair();
-            signer = Signature.getInstance("XMSS");
+            keyGenerator = prepareKeyGenerator();
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -43,8 +41,15 @@ public class PQCDefaultXMSSMaterial {
 
     protected static KeyPairGenerator prepareKeyPair()
             throws NoSuchAlgorithmException, NoSuchProviderException, 
InvalidAlgorithmParameterException {
-        KeyPairGenerator kpGen = KeyPairGenerator.getInstance("XMSS", "BCPQC");
-        kpGen.initialize(new XMSSParameterSpec(10, XMSSParameterSpec.SHA256), 
new SecureRandom());
-        return kpGen;
+        KeyPairGenerator kpg = 
KeyPairGenerator.getInstance(PQCKeyEncapsulationAlgorithms.NTRULPRime.getAlgorithm(),
+                PQCKeyEncapsulationAlgorithms.NTRULPRime.getBcProvider());
+        kpg.initialize(NTRULPRimeParameterSpec.ntrulpr761, new SecureRandom());
+        return kpg;
+    }
+
+    protected static KeyGenerator prepareKeyGenerator() throws 
NoSuchAlgorithmException, NoSuchProviderException {
+        KeyGenerator kg = 
KeyGenerator.getInstance(PQCKeyEncapsulationAlgorithms.NTRULPRime.getAlgorithm(),
+                PQCKeyEncapsulationAlgorithms.NTRULPRime.getBcProvider());
+        return kg;
     }
 }
diff --git 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultXMSSMaterial.java
 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/kem/PQCDefaultNTRUMaterial.java
similarity index 54%
copy from 
components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultXMSSMaterial.java
copy to 
components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/kem/PQCDefaultNTRUMaterial.java
index 48cc6d5e550..9cf117d8dc2 100644
--- 
a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/PQCDefaultXMSSMaterial.java
+++ 
b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/crypto/kem/PQCDefaultNTRUMaterial.java
@@ -14,28 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.pqc.crypto;
+package org.apache.camel.component.pqc.crypto.kem;
 
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.SecureRandom;
-import java.security.Signature;
+import java.security.*;
 
-import org.bouncycastle.pqc.jcajce.spec.XMSSParameterSpec;
+import javax.crypto.KeyGenerator;
+
+import org.apache.camel.component.pqc.PQCKeyEncapsulationAlgorithms;
+import org.bouncycastle.pqc.jcajce.spec.NTRUParameterSpec;
+
+public class PQCDefaultNTRUMaterial {
 
-public class PQCDefaultXMSSMaterial {
     public static final KeyPair keyPair;
-    public static final Signature signer;
+    public static final KeyGenerator keyGenerator;
+    public static final KeyPairGenerator generator;
 
     static {
-        KeyPairGenerator generator;
         try {
             generator = prepareKeyPair();
             keyPair = generator.generateKeyPair();
-            signer = Signature.getInstance("XMSS");
+            keyGenerator = prepareKeyGenerator();
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -43,8 +41,15 @@ public class PQCDefaultXMSSMaterial {
 
     protected static KeyPairGenerator prepareKeyPair()
             throws NoSuchAlgorithmException, NoSuchProviderException, 
InvalidAlgorithmParameterException {
-        KeyPairGenerator kpGen = KeyPairGenerator.getInstance("XMSS", "BCPQC");
-        kpGen.initialize(new XMSSParameterSpec(10, XMSSParameterSpec.SHA256), 
new SecureRandom());
-        return kpGen;
+        KeyPairGenerator kpg = 
KeyPairGenerator.getInstance(PQCKeyEncapsulationAlgorithms.NTRU.getAlgorithm(),
+                PQCKeyEncapsulationAlgorithms.NTRU.getBcProvider());
+        kpg.initialize(NTRUParameterSpec.ntruhps2048509, new SecureRandom());
+        return kpg;
+    }
+
+    protected static KeyGenerator prepareKeyGenerator() throws 
NoSuchAlgorithmException, NoSuchProviderException {
+        KeyGenerator kg = 
KeyGenerator.getInstance(PQCKeyEncapsulationAlgorithms.NTRU.getAlgorithm(),
+                PQCKeyEncapsulationAlgorithms.NTRU.getBcProvider());
+        return kg;
     }
 }
diff --git 
a/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCNTRUGenerateEncapsulationAESNoAutowiredTest.java
 
b/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCNTRUGenerateEncapsulationAESNoAutowiredTest.java
new file mode 100644
index 00000000000..efffc0a1336
--- /dev/null
+++ 
b/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCNTRUGenerateEncapsulationAESNoAutowiredTest.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.pqc;
+
+import java.security.NoSuchAlgorithmException;
+import java.security.Security;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.bouncycastle.jcajce.SecretKeyWithEncapsulation;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider;
+import org.bouncycastle.util.Arrays;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class PQCNTRUGenerateEncapsulationAESNoAutowiredTest extends 
CamelTestSupport {
+
+    @EndpointInject("mock:encapsulate")
+    protected MockEndpoint resultEncapsulate;
+
+    @Produce("direct:encapsulate")
+    protected ProducerTemplate templateEncapsulate;
+
+    @EndpointInject("mock:extract")
+    protected MockEndpoint resultExtract;
+
+    public PQCNTRUGenerateEncapsulationAESNoAutowiredTest() throws 
NoSuchAlgorithmException {
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:encapsulate").to(
+                        
"pqc:keyenc?operation=generateSecretKeyEncapsulation&symmetricKeyAlgorithm=AES&keyEncapsulationAlgorithm=NTRU")
+                        .to("mock:encapsulate")
+                        
.to("pqc:keyenc?operation=extractSecretKeyEncapsulation&symmetricKeyAlgorithm=AES&keyEncapsulationAlgorithm=NTRU")
+                        .to("mock:extract");
+            }
+        };
+    }
+
+    @BeforeAll
+    public static void startup() throws Exception {
+        Security.addProvider(new BouncyCastleProvider());
+        Security.addProvider(new BouncyCastlePQCProvider());
+    }
+
+    @Test
+    void testSignAndVerify() throws Exception {
+        resultEncapsulate.expectedMessageCount(1);
+        resultExtract.expectedMessageCount(1);
+        templateEncapsulate.sendBody("Hello");
+        resultEncapsulate.assertIsSatisfied();
+        
assertNotNull(resultEncapsulate.getExchanges().get(0).getMessage().getBody(SecretKeyWithEncapsulation.class));
+        assertEquals(PQCSymmetricAlgorithms.AES.getAlgorithm(),
+                
resultEncapsulate.getExchanges().get(0).getMessage().getBody(SecretKeyWithEncapsulation.class).getAlgorithm());
+        SecretKeyWithEncapsulation secEncrypted
+                = 
resultEncapsulate.getExchanges().get(0).getMessage().getBody(SecretKeyWithEncapsulation.class);
+        
assertNotNull(resultExtract.getExchanges().get(0).getMessage().getBody(SecretKeyWithEncapsulation.class));
+        assertEquals(PQCSymmetricAlgorithms.AES.getAlgorithm(),
+                
resultExtract.getExchanges().get(0).getMessage().getBody(SecretKeyWithEncapsulation.class).getAlgorithm());
+        SecretKeyWithEncapsulation secEncryptedExtracted
+                = 
resultExtract.getExchanges().get(0).getMessage().getBody(SecretKeyWithEncapsulation.class);
+        assertTrue(Arrays.areEqual(secEncrypted.getEncoded(), 
secEncryptedExtracted.getEncoded()));
+    }
+}
diff --git 
a/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCSignatureFalconNoAutowiredTest.java
 
b/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCSignatureFalconNoAutowiredTest.java
new file mode 100644
index 00000000000..9e8969952c9
--- /dev/null
+++ 
b/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCSignatureFalconNoAutowiredTest.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.pqc;
+
+import java.security.*;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class PQCSignatureFalconNoAutowiredTest extends CamelTestSupport {
+
+    @EndpointInject("mock:sign")
+    protected MockEndpoint resultSign;
+
+    @EndpointInject("mock:verify")
+    protected MockEndpoint resultVerify;
+
+    @Produce("direct:sign")
+    protected ProducerTemplate templateSign;
+
+    public PQCSignatureFalconNoAutowiredTest() throws NoSuchAlgorithmException 
{
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                
from("direct:sign").to("pqc:sign?operation=sign&signatureAlgorithm=FALCON").to("mock:sign")
+                        
.to("pqc:verify?operation=verify&signatureAlgorithm=FALCON")
+                        .to("mock:verify");
+            }
+        };
+    }
+
+    @BeforeAll
+    public static void startup() throws Exception {
+        Security.addProvider(new BouncyCastleProvider());
+        Security.addProvider(new BouncyCastlePQCProvider());
+    }
+
+    @Test
+    void testSignAndVerify() throws Exception {
+        resultSign.expectedMessageCount(1);
+        resultVerify.expectedMessageCount(1);
+        templateSign.sendBody("Hello");
+        resultSign.assertIsSatisfied();
+        resultVerify.assertIsSatisfied();
+        
assertTrue(resultVerify.getExchanges().get(0).getMessage().getHeader(PQCConstants.VERIFY,
 Boolean.class));
+    }
+}
diff --git 
a/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCSignaturePicnicNoAutowiredTest.java
 
b/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCSignaturePicnicNoAutowiredTest.java
new file mode 100644
index 00000000000..3526bebf688
--- /dev/null
+++ 
b/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCSignaturePicnicNoAutowiredTest.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.pqc;
+
+import java.security.*;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class PQCSignaturePicnicNoAutowiredTest extends CamelTestSupport {
+
+    @EndpointInject("mock:sign")
+    protected MockEndpoint resultSign;
+
+    @EndpointInject("mock:verify")
+    protected MockEndpoint resultVerify;
+
+    @Produce("direct:sign")
+    protected ProducerTemplate templateSign;
+
+    public PQCSignaturePicnicNoAutowiredTest() throws NoSuchAlgorithmException 
{
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                
from("direct:sign").to("pqc:sign?operation=sign&signatureAlgorithm=PICNIC").to("mock:sign")
+                        
.to("pqc:verify?operation=verify&signatureAlgorithm=PICNIC")
+                        .to("mock:verify");
+            }
+        };
+    }
+
+    @BeforeAll
+    public static void startup() throws Exception {
+        Security.addProvider(new BouncyCastleProvider());
+        Security.addProvider(new BouncyCastlePQCProvider());
+    }
+
+    @Test
+    void testSignAndVerify() throws Exception {
+        resultSign.expectedMessageCount(1);
+        resultVerify.expectedMessageCount(1);
+        templateSign.sendBody("Hello");
+        resultSign.assertIsSatisfied();
+        resultVerify.assertIsSatisfied();
+        
assertTrue(resultVerify.getExchanges().get(0).getMessage().getHeader(PQCConstants.VERIFY,
 Boolean.class));
+    }
+}
diff --git 
a/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCSignatureRainbowNoAutowiredTest.java
 
b/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCSignatureRainbowNoAutowiredTest.java
new file mode 100644
index 00000000000..c4f58b39d62
--- /dev/null
+++ 
b/components/camel-pqc/src/test/java/org/apache/camel/component/pqc/PQCSignatureRainbowNoAutowiredTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.pqc;
+
+import java.security.NoSuchAlgorithmException;
+import java.security.Security;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class PQCSignatureRainbowNoAutowiredTest extends CamelTestSupport {
+
+    @EndpointInject("mock:sign")
+    protected MockEndpoint resultSign;
+
+    @EndpointInject("mock:verify")
+    protected MockEndpoint resultVerify;
+
+    @Produce("direct:sign")
+    protected ProducerTemplate templateSign;
+
+    public PQCSignatureRainbowNoAutowiredTest() throws 
NoSuchAlgorithmException {
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                
from("direct:sign").to("pqc:sign?operation=sign&signatureAlgorithm=RAINBOW").to("mock:sign")
+                        
.to("pqc:verify?operation=verify&signatureAlgorithm=RAINBOW")
+                        .to("mock:verify");
+            }
+        };
+    }
+
+    @BeforeAll
+    public static void startup() throws Exception {
+        Security.addProvider(new BouncyCastleProvider());
+        Security.addProvider(new BouncyCastlePQCProvider());
+    }
+
+    @Test
+    void testSignAndVerify() throws Exception {
+        resultSign.expectedMessageCount(1);
+        resultVerify.expectedMessageCount(1);
+        templateSign.sendBody("Hello");
+        resultSign.assertIsSatisfied();
+        resultVerify.assertIsSatisfied();
+        
assertTrue(resultVerify.getExchanges().get(0).getMessage().getHeader(PQCConstants.VERIFY,
 Boolean.class));
+    }
+}


Reply via email to