This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch pqc-keylifecycle-managerr in repository https://gitbox.apache.org/repos/asf/camel.git
commit 9a0eed93b594900a562e4d7e43e8cd9ce10d4fbb Author: Andrea Cosentino <[email protected]> AuthorDate: Fri Feb 27 15:05:50 2026 +0100 CAMEL-23098 - Camel-PQC: Wire KeyLifecycleManager into PQC producer to enable key lifecycle operations Signed-off-by: Andrea Cosentino <[email protected]> --- .gitignore | 1 + AGENTS.md | 29 +++ .../org/apache/camel/catalog/components/pqc.json | 42 ++-- .../component/pqc/PQCComponentConfigurer.java | 8 +- .../camel/component/pqc/PQCEndpointConfigurer.java | 8 +- .../camel/component/pqc/PQCEndpointUriFactory.java | 3 +- .../org/apache/camel/component/pqc/pqc.json | 42 ++-- .../camel/component/pqc/PQCConfiguration.java | 17 ++ .../apache/camel/component/pqc/PQCProducer.java | 226 +++++++++++++++++++++ .../component/pqc/stateful/StatefulKeyState.java | 63 ++++++ .../component/dsl/PqcComponentBuilderFactory.java | 18 ++ .../endpoint/dsl/PQCEndpointBuilderFactory.java | 32 +++ 12 files changed, 446 insertions(+), 43 deletions(-) diff --git a/.gitignore b/.gitignore index 6dafc7809cc6..de2fa30d9aef 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ mvnd.zip* .camel-jbang .camel-jbang-run .mvn/.develocity/develocity-workspace-id +backlog diff --git a/AGENTS.md b/AGENTS.md index f2f3385bef39..1a03fda5f7ad 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -135,3 +135,32 @@ Reference JIRA when applicable. - https://issues.apache.org/jira/browse/CAMEL - [email protected] - https://camel.zulipchat.com/ + +<!-- BACKLOG.MD MCP GUIDELINES START --> + +<CRITICAL_INSTRUCTION> + +## BACKLOG WORKFLOW INSTRUCTIONS + +This project uses Backlog.md MCP for all task and project management activities. + +**CRITICAL GUIDANCE** + +- If your client supports MCP resources, read `backlog://workflow/overview` to understand when and how to use Backlog for this project. +- If your client only supports tools or the above request fails, call `backlog.get_workflow_overview()` tool to load the tool-oriented overview (it lists the matching guide tools). + +- **First time working here?** Read the overview resource IMMEDIATELY to learn the workflow +- **Already familiar?** You should have the overview cached ("## Backlog.md Overview (MCP)") +- **When to read it**: BEFORE creating tasks, or when you're unsure whether to track work + +These guides cover: +- Decision framework for when to create tasks +- Search-first workflow to avoid duplicates +- Links to detailed guides for task creation, execution, and finalization +- MCP tools reference + +You MUST read the overview resource to understand the complete workflow. The information is NOT summarized here. + +</CRITICAL_INSTRUCTION> + +<!-- BACKLOG.MD MCP GUIDELINES END --> diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pqc.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pqc.json index 3fbc016cd7cc..a7ad60e9a84c 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pqc.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pqc.json @@ -36,17 +36,18 @@ "hybridKdfAlgorithm": { "index": 9, "kind": "property", "displayName": "Hybrid Kdf Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "HKDF-SHA256", "HKDF-SHA384", "HKDF-SHA512" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "HKDF-SHA256", "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "de [...] "keyEncapsulationAlgorithm": { "index": 10, "kind": "property", "displayName": "Key Encapsulation Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLKEM", "BIKE", "HQC", "CMCE", "SABER", "FRODO", "NTRU", "NTRULPRime", "SNTRUPrime", "KYBER" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configu [...] "keyGenerator": { "index": 11, "kind": "property", "displayName": "Key Generator", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.crypto.KeyGenerator", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Key Generator to be used in encapsulation and extraction" }, - "keyPair": { "index": 12, "kind": "property", "displayName": "Key Pair", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyPair", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyPair to be used" }, - "keyPairAlias": { "index": 13, "kind": "property", "displayName": "Key Pair Alias", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyPair alias to use in combination with KeyStore parameter" }, - "keyStore": { "index": 14, "kind": "property", "displayName": "Key Store", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyStore", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyStore where we could get Cryptographic material" }, - "keyStorePassword": { "index": 15, "kind": "property", "displayName": "Key Store Password", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyStore password to use in combination with KeyStore Parameter" }, - "signatureAlgorithm": { "index": 16, "kind": "property", "displayName": "Signature Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLDSA", "SLHDSA", "LMS", "HSS", "XMSS", "XMSSMT", "DILITHIUM", "FALCON", "PICNIC", "SNOVA", "MAYO", "SPHINCSPLUS" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "c [...] - "signer": { "index": 17, "kind": "property", "displayName": "Signer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.Signature", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Signer to be used" }, - "storeExtractedSecretKeyAsHeader": { "index": 18, "kind": "property", "displayName": "Store Extracted Secret Key As Header", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "In the context of extractSec [...] - "symmetricKeyAlgorithm": { "index": 19, "kind": "property", "displayName": "Symmetric Key Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "AES", "ARIA", "RC2", "RC5", "CAMELLIA", "CAST5", "CAST6", "CHACHA7539", "DSTU7624", "GOST28147", "GOST3412_2015", "GRAIN128", "HC128", "HC256", "SALSA20", "SEED", "SM4", "DESEDE" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "co [...] - "symmetricKeyLength": { "index": 20, "kind": "property", "displayName": "Symmetric Key Length", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 128, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The required length of the symmetric key used" }, - "healthCheckConsumerEnabled": { "index": 21, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" }, - "healthCheckProducerEnabled": { "index": 22, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...] + "keyLifecycleManager": { "index": 12, "kind": "property", "displayName": "Key Lifecycle Manager", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyLifecycleManager to [...] + "keyPair": { "index": 13, "kind": "property", "displayName": "Key Pair", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyPair", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyPair to be used" }, + "keyPairAlias": { "index": 14, "kind": "property", "displayName": "Key Pair Alias", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyPair alias to use in combination with KeyStore parameter" }, + "keyStore": { "index": 15, "kind": "property", "displayName": "Key Store", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyStore", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyStore where we could get Cryptographic material" }, + "keyStorePassword": { "index": 16, "kind": "property", "displayName": "Key Store Password", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyStore password to use in combination with KeyStore Parameter" }, + "signatureAlgorithm": { "index": 17, "kind": "property", "displayName": "Signature Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLDSA", "SLHDSA", "LMS", "HSS", "XMSS", "XMSSMT", "DILITHIUM", "FALCON", "PICNIC", "SNOVA", "MAYO", "SPHINCSPLUS" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "c [...] + "signer": { "index": 18, "kind": "property", "displayName": "Signer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.Signature", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Signer to be used" }, + "storeExtractedSecretKeyAsHeader": { "index": 19, "kind": "property", "displayName": "Store Extracted Secret Key As Header", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "In the context of extractSec [...] + "symmetricKeyAlgorithm": { "index": 20, "kind": "property", "displayName": "Symmetric Key Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "AES", "ARIA", "RC2", "RC5", "CAMELLIA", "CAST5", "CAST6", "CHACHA7539", "DSTU7624", "GOST28147", "GOST3412_2015", "GRAIN128", "HC128", "HC256", "SALSA20", "SEED", "SM4", "DESEDE" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "co [...] + "symmetricKeyLength": { "index": 21, "kind": "property", "displayName": "Symmetric Key Length", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 128, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The required length of the symmetric key used" }, + "healthCheckConsumerEnabled": { "index": 22, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" }, + "healthCheckProducerEnabled": { "index": 23, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...] }, "headers": { "CamelPQCOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform", "constantName": "org.apache.camel.component.pqc.PQCConstants#OPERATION" }, @@ -85,14 +86,15 @@ "hybridKdfAlgorithm": { "index": 8, "kind": "parameter", "displayName": "Hybrid Kdf Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "HKDF-SHA256", "HKDF-SHA384", "HKDF-SHA512" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "HKDF-SHA256", "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "d [...] "keyEncapsulationAlgorithm": { "index": 9, "kind": "parameter", "displayName": "Key Encapsulation Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLKEM", "BIKE", "HQC", "CMCE", "SABER", "FRODO", "NTRU", "NTRULPRime", "SNTRUPrime", "KYBER" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configu [...] "keyGenerator": { "index": 10, "kind": "parameter", "displayName": "Key Generator", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.crypto.KeyGenerator", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Key Generator to be used in encapsulation and extraction" }, - "keyPair": { "index": 11, "kind": "parameter", "displayName": "Key Pair", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyPair", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyPair to be used" }, - "keyPairAlias": { "index": 12, "kind": "parameter", "displayName": "Key Pair Alias", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyPair alias to use in combination with KeyStore parameter" }, - "keyStore": { "index": 13, "kind": "parameter", "displayName": "Key Store", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyStore", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyStore where we could get Cryptographic material" }, - "keyStorePassword": { "index": 14, "kind": "parameter", "displayName": "Key Store Password", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyStore password to use in combination with KeyStore Parameter" }, - "signatureAlgorithm": { "index": 15, "kind": "parameter", "displayName": "Signature Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLDSA", "SLHDSA", "LMS", "HSS", "XMSS", "XMSSMT", "DILITHIUM", "FALCON", "PICNIC", "SNOVA", "MAYO", "SPHINCSPLUS" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", " [...] - "signer": { "index": 16, "kind": "parameter", "displayName": "Signer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.Signature", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Signer to be used" }, - "storeExtractedSecretKeyAsHeader": { "index": 17, "kind": "parameter", "displayName": "Store Extracted Secret Key As Header", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "In the context of extractSe [...] - "symmetricKeyAlgorithm": { "index": 18, "kind": "parameter", "displayName": "Symmetric Key Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "AES", "ARIA", "RC2", "RC5", "CAMELLIA", "CAST5", "CAST6", "CHACHA7539", "DSTU7624", "GOST28147", "GOST3412_2015", "GRAIN128", "HC128", "HC256", "SALSA20", "SEED", "SM4", "DESEDE" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "c [...] - "symmetricKeyLength": { "index": 19, "kind": "parameter", "displayName": "Symmetric Key Length", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 128, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The required length of the symmetric key used" } + "keyLifecycleManager": { "index": 11, "kind": "parameter", "displayName": "Key Lifecycle Manager", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyLifecycleManager to [...] + "keyPair": { "index": 12, "kind": "parameter", "displayName": "Key Pair", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyPair", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyPair to be used" }, + "keyPairAlias": { "index": 13, "kind": "parameter", "displayName": "Key Pair Alias", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyPair alias to use in combination with KeyStore parameter" }, + "keyStore": { "index": 14, "kind": "parameter", "displayName": "Key Store", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyStore", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyStore where we could get Cryptographic material" }, + "keyStorePassword": { "index": 15, "kind": "parameter", "displayName": "Key Store Password", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyStore password to use in combination with KeyStore Parameter" }, + "signatureAlgorithm": { "index": 16, "kind": "parameter", "displayName": "Signature Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLDSA", "SLHDSA", "LMS", "HSS", "XMSS", "XMSSMT", "DILITHIUM", "FALCON", "PICNIC", "SNOVA", "MAYO", "SPHINCSPLUS" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", " [...] + "signer": { "index": 17, "kind": "parameter", "displayName": "Signer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.Signature", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Signer to be used" }, + "storeExtractedSecretKeyAsHeader": { "index": 18, "kind": "parameter", "displayName": "Store Extracted Secret Key As Header", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "In the context of extractSe [...] + "symmetricKeyAlgorithm": { "index": 19, "kind": "parameter", "displayName": "Symmetric Key Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "AES", "ARIA", "RC2", "RC5", "CAMELLIA", "CAST5", "CAST6", "CHACHA7539", "DSTU7624", "GOST28147", "GOST3412_2015", "GRAIN128", "HC128", "HC256", "SALSA20", "SEED", "SM4", "DESEDE" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "c [...] + "symmetricKeyLength": { "index": 20, "kind": "parameter", "displayName": "Symmetric Key Length", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 128, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The required length of the symmetric key used" } } } diff --git a/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCComponentConfigurer.java b/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCComponentConfigurer.java index 6017b9fcb364..a4da0eb7933c 100644 --- a/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCComponentConfigurer.java +++ b/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCComponentConfigurer.java @@ -53,6 +53,8 @@ public class PQCComponentConfigurer extends PropertyConfigurerSupport implements case "keyEncapsulationAlgorithm": getOrCreateConfiguration(target).setKeyEncapsulationAlgorithm(property(camelContext, java.lang.String.class, value)); return true; case "keygenerator": case "keyGenerator": getOrCreateConfiguration(target).setKeyGenerator(property(camelContext, javax.crypto.KeyGenerator.class, value)); return true; + case "keylifecyclemanager": + case "keyLifecycleManager": getOrCreateConfiguration(target).setKeyLifecycleManager(property(camelContext, org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager.class, value)); return true; case "keypair": case "keyPair": getOrCreateConfiguration(target).setKeyPair(property(camelContext, java.security.KeyPair.class, value)); return true; case "keypairalias": @@ -79,7 +81,7 @@ public class PQCComponentConfigurer extends PropertyConfigurerSupport implements @Override public String[] getAutowiredNames() { - return new String[]{"classicalKeyAgreement", "classicalKeyPair", "classicalSigner", "keyGenerator", "keyPair", "keyStore", "signer"}; + return new String[]{"classicalKeyAgreement", "classicalKeyPair", "classicalSigner", "keyGenerator", "keyLifecycleManager", "keyPair", "keyStore", "signer"}; } @Override @@ -108,6 +110,8 @@ public class PQCComponentConfigurer extends PropertyConfigurerSupport implements case "keyEncapsulationAlgorithm": return java.lang.String.class; case "keygenerator": case "keyGenerator": return javax.crypto.KeyGenerator.class; + case "keylifecyclemanager": + case "keyLifecycleManager": return org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager.class; case "keypair": case "keyPair": return java.security.KeyPair.class; case "keypairalias": @@ -159,6 +163,8 @@ public class PQCComponentConfigurer extends PropertyConfigurerSupport implements case "keyEncapsulationAlgorithm": return getOrCreateConfiguration(target).getKeyEncapsulationAlgorithm(); case "keygenerator": case "keyGenerator": return getOrCreateConfiguration(target).getKeyGenerator(); + case "keylifecyclemanager": + case "keyLifecycleManager": return getOrCreateConfiguration(target).getKeyLifecycleManager(); case "keypair": case "keyPair": return getOrCreateConfiguration(target).getKeyPair(); case "keypairalias": diff --git a/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCEndpointConfigurer.java b/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCEndpointConfigurer.java index 6b006728cb64..1d15c2a783b7 100644 --- a/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCEndpointConfigurer.java +++ b/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCEndpointConfigurer.java @@ -39,6 +39,8 @@ public class PQCEndpointConfigurer extends PropertyConfigurerSupport implements case "keyEncapsulationAlgorithm": target.getConfiguration().setKeyEncapsulationAlgorithm(property(camelContext, java.lang.String.class, value)); return true; case "keygenerator": case "keyGenerator": target.getConfiguration().setKeyGenerator(property(camelContext, javax.crypto.KeyGenerator.class, value)); return true; + case "keylifecyclemanager": + case "keyLifecycleManager": target.getConfiguration().setKeyLifecycleManager(property(camelContext, org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager.class, value)); return true; case "keypair": case "keyPair": target.getConfiguration().setKeyPair(property(camelContext, java.security.KeyPair.class, value)); return true; case "keypairalias": @@ -65,7 +67,7 @@ public class PQCEndpointConfigurer extends PropertyConfigurerSupport implements @Override public String[] getAutowiredNames() { - return new String[]{"classicalKeyAgreement", "classicalKeyPair", "classicalSigner", "keyGenerator", "keyPair", "keyStore", "signer"}; + return new String[]{"classicalKeyAgreement", "classicalKeyPair", "classicalSigner", "keyGenerator", "keyLifecycleManager", "keyPair", "keyStore", "signer"}; } @Override @@ -87,6 +89,8 @@ public class PQCEndpointConfigurer extends PropertyConfigurerSupport implements case "keyEncapsulationAlgorithm": return java.lang.String.class; case "keygenerator": case "keyGenerator": return javax.crypto.KeyGenerator.class; + case "keylifecyclemanager": + case "keyLifecycleManager": return org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager.class; case "keypair": case "keyPair": return java.security.KeyPair.class; case "keypairalias": @@ -131,6 +135,8 @@ public class PQCEndpointConfigurer extends PropertyConfigurerSupport implements case "keyEncapsulationAlgorithm": return target.getConfiguration().getKeyEncapsulationAlgorithm(); case "keygenerator": case "keyGenerator": return target.getConfiguration().getKeyGenerator(); + case "keylifecyclemanager": + case "keyLifecycleManager": return target.getConfiguration().getKeyLifecycleManager(); case "keypair": case "keyPair": return target.getConfiguration().getKeyPair(); case "keypairalias": diff --git a/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCEndpointUriFactory.java b/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCEndpointUriFactory.java index 7cd7770f07b0..60e66d94b1e8 100644 --- a/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCEndpointUriFactory.java +++ b/components/camel-pqc/src/generated/java/org/apache/camel/component/pqc/PQCEndpointUriFactory.java @@ -23,7 +23,7 @@ public class PQCEndpointUriFactory extends org.apache.camel.support.component.En private static final Set<String> SECRET_PROPERTY_NAMES; private static final Map<String, String> MULTI_VALUE_PREFIXES; static { - Set<String> props = new HashSet<>(20); + Set<String> props = new HashSet<>(21); props.add("classicalKEMAlgorithm"); props.add("classicalKeyAgreement"); props.add("classicalKeyPair"); @@ -32,6 +32,7 @@ public class PQCEndpointUriFactory extends org.apache.camel.support.component.En props.add("hybridKdfAlgorithm"); props.add("keyEncapsulationAlgorithm"); props.add("keyGenerator"); + props.add("keyLifecycleManager"); props.add("keyPair"); props.add("keyPairAlias"); props.add("keyStore"); diff --git a/components/camel-pqc/src/generated/resources/META-INF/org/apache/camel/component/pqc/pqc.json b/components/camel-pqc/src/generated/resources/META-INF/org/apache/camel/component/pqc/pqc.json index 3fbc016cd7cc..a7ad60e9a84c 100644 --- a/components/camel-pqc/src/generated/resources/META-INF/org/apache/camel/component/pqc/pqc.json +++ b/components/camel-pqc/src/generated/resources/META-INF/org/apache/camel/component/pqc/pqc.json @@ -36,17 +36,18 @@ "hybridKdfAlgorithm": { "index": 9, "kind": "property", "displayName": "Hybrid Kdf Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "HKDF-SHA256", "HKDF-SHA384", "HKDF-SHA512" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "HKDF-SHA256", "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "de [...] "keyEncapsulationAlgorithm": { "index": 10, "kind": "property", "displayName": "Key Encapsulation Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLKEM", "BIKE", "HQC", "CMCE", "SABER", "FRODO", "NTRU", "NTRULPRime", "SNTRUPrime", "KYBER" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configu [...] "keyGenerator": { "index": 11, "kind": "property", "displayName": "Key Generator", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.crypto.KeyGenerator", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Key Generator to be used in encapsulation and extraction" }, - "keyPair": { "index": 12, "kind": "property", "displayName": "Key Pair", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyPair", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyPair to be used" }, - "keyPairAlias": { "index": 13, "kind": "property", "displayName": "Key Pair Alias", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyPair alias to use in combination with KeyStore parameter" }, - "keyStore": { "index": 14, "kind": "property", "displayName": "Key Store", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyStore", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyStore where we could get Cryptographic material" }, - "keyStorePassword": { "index": 15, "kind": "property", "displayName": "Key Store Password", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyStore password to use in combination with KeyStore Parameter" }, - "signatureAlgorithm": { "index": 16, "kind": "property", "displayName": "Signature Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLDSA", "SLHDSA", "LMS", "HSS", "XMSS", "XMSSMT", "DILITHIUM", "FALCON", "PICNIC", "SNOVA", "MAYO", "SPHINCSPLUS" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "c [...] - "signer": { "index": 17, "kind": "property", "displayName": "Signer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.Signature", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Signer to be used" }, - "storeExtractedSecretKeyAsHeader": { "index": 18, "kind": "property", "displayName": "Store Extracted Secret Key As Header", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "In the context of extractSec [...] - "symmetricKeyAlgorithm": { "index": 19, "kind": "property", "displayName": "Symmetric Key Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "AES", "ARIA", "RC2", "RC5", "CAMELLIA", "CAST5", "CAST6", "CHACHA7539", "DSTU7624", "GOST28147", "GOST3412_2015", "GRAIN128", "HC128", "HC256", "SALSA20", "SEED", "SM4", "DESEDE" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "co [...] - "symmetricKeyLength": { "index": 20, "kind": "property", "displayName": "Symmetric Key Length", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 128, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The required length of the symmetric key used" }, - "healthCheckConsumerEnabled": { "index": 21, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" }, - "healthCheckProducerEnabled": { "index": 22, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...] + "keyLifecycleManager": { "index": 12, "kind": "property", "displayName": "Key Lifecycle Manager", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyLifecycleManager to [...] + "keyPair": { "index": 13, "kind": "property", "displayName": "Key Pair", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyPair", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyPair to be used" }, + "keyPairAlias": { "index": 14, "kind": "property", "displayName": "Key Pair Alias", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyPair alias to use in combination with KeyStore parameter" }, + "keyStore": { "index": 15, "kind": "property", "displayName": "Key Store", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyStore", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyStore where we could get Cryptographic material" }, + "keyStorePassword": { "index": 16, "kind": "property", "displayName": "Key Store Password", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyStore password to use in combination with KeyStore Parameter" }, + "signatureAlgorithm": { "index": 17, "kind": "property", "displayName": "Signature Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLDSA", "SLHDSA", "LMS", "HSS", "XMSS", "XMSSMT", "DILITHIUM", "FALCON", "PICNIC", "SNOVA", "MAYO", "SPHINCSPLUS" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "c [...] + "signer": { "index": 18, "kind": "property", "displayName": "Signer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.Signature", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Signer to be used" }, + "storeExtractedSecretKeyAsHeader": { "index": 19, "kind": "property", "displayName": "Store Extracted Secret Key As Header", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "In the context of extractSec [...] + "symmetricKeyAlgorithm": { "index": 20, "kind": "property", "displayName": "Symmetric Key Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "AES", "ARIA", "RC2", "RC5", "CAMELLIA", "CAST5", "CAST6", "CHACHA7539", "DSTU7624", "GOST28147", "GOST3412_2015", "GRAIN128", "HC128", "HC256", "SALSA20", "SEED", "SM4", "DESEDE" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "co [...] + "symmetricKeyLength": { "index": 21, "kind": "property", "displayName": "Symmetric Key Length", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 128, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The required length of the symmetric key used" }, + "healthCheckConsumerEnabled": { "index": 22, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" }, + "healthCheckProducerEnabled": { "index": 23, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...] }, "headers": { "CamelPQCOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform", "constantName": "org.apache.camel.component.pqc.PQCConstants#OPERATION" }, @@ -85,14 +86,15 @@ "hybridKdfAlgorithm": { "index": 8, "kind": "parameter", "displayName": "Hybrid Kdf Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "HKDF-SHA256", "HKDF-SHA384", "HKDF-SHA512" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "HKDF-SHA256", "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "d [...] "keyEncapsulationAlgorithm": { "index": 9, "kind": "parameter", "displayName": "Key Encapsulation Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLKEM", "BIKE", "HQC", "CMCE", "SABER", "FRODO", "NTRU", "NTRULPRime", "SNTRUPrime", "KYBER" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configu [...] "keyGenerator": { "index": 10, "kind": "parameter", "displayName": "Key Generator", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.crypto.KeyGenerator", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Key Generator to be used in encapsulation and extraction" }, - "keyPair": { "index": 11, "kind": "parameter", "displayName": "Key Pair", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyPair", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyPair to be used" }, - "keyPairAlias": { "index": 12, "kind": "parameter", "displayName": "Key Pair Alias", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyPair alias to use in combination with KeyStore parameter" }, - "keyStore": { "index": 13, "kind": "parameter", "displayName": "Key Store", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyStore", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyStore where we could get Cryptographic material" }, - "keyStorePassword": { "index": 14, "kind": "parameter", "displayName": "Key Store Password", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyStore password to use in combination with KeyStore Parameter" }, - "signatureAlgorithm": { "index": 15, "kind": "parameter", "displayName": "Signature Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLDSA", "SLHDSA", "LMS", "HSS", "XMSS", "XMSSMT", "DILITHIUM", "FALCON", "PICNIC", "SNOVA", "MAYO", "SPHINCSPLUS" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", " [...] - "signer": { "index": 16, "kind": "parameter", "displayName": "Signer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.Signature", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Signer to be used" }, - "storeExtractedSecretKeyAsHeader": { "index": 17, "kind": "parameter", "displayName": "Store Extracted Secret Key As Header", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "In the context of extractSe [...] - "symmetricKeyAlgorithm": { "index": 18, "kind": "parameter", "displayName": "Symmetric Key Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "AES", "ARIA", "RC2", "RC5", "CAMELLIA", "CAST5", "CAST6", "CHACHA7539", "DSTU7624", "GOST28147", "GOST3412_2015", "GRAIN128", "HC128", "HC256", "SALSA20", "SEED", "SM4", "DESEDE" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "c [...] - "symmetricKeyLength": { "index": 19, "kind": "parameter", "displayName": "Symmetric Key Length", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 128, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The required length of the symmetric key used" } + "keyLifecycleManager": { "index": 11, "kind": "parameter", "displayName": "Key Lifecycle Manager", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyLifecycleManager to [...] + "keyPair": { "index": 12, "kind": "parameter", "displayName": "Key Pair", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyPair", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyPair to be used" }, + "keyPairAlias": { "index": 13, "kind": "parameter", "displayName": "Key Pair Alias", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyPair alias to use in combination with KeyStore parameter" }, + "keyStore": { "index": 14, "kind": "parameter", "displayName": "Key Store", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.KeyStore", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "A KeyStore where we could get Cryptographic material" }, + "keyStorePassword": { "index": 15, "kind": "parameter", "displayName": "Key Store Password", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The KeyStore password to use in combination with KeyStore Parameter" }, + "signatureAlgorithm": { "index": 16, "kind": "parameter", "displayName": "Signature Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "MLDSA", "SLHDSA", "LMS", "HSS", "XMSS", "XMSSMT", "DILITHIUM", "FALCON", "PICNIC", "SNOVA", "MAYO", "SPHINCSPLUS" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", " [...] + "signer": { "index": 17, "kind": "parameter", "displayName": "Signer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.security.Signature", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The Signer to be used" }, + "storeExtractedSecretKeyAsHeader": { "index": 18, "kind": "parameter", "displayName": "Store Extracted Secret Key As Header", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "In the context of extractSe [...] + "symmetricKeyAlgorithm": { "index": 19, "kind": "parameter", "displayName": "Symmetric Key Algorithm", "group": "advanced", "label": "advanced", "required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ "AES", "ARIA", "RC2", "RC5", "CAMELLIA", "CAST5", "CAST6", "CHACHA7539", "DSTU7624", "GOST28147", "GOST3412_2015", "GRAIN128", "HC128", "HC256", "SALSA20", "SEED", "SM4", "DESEDE" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "c [...] + "symmetricKeyLength": { "index": 20, "kind": "parameter", "displayName": "Symmetric Key Length", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 128, "configurationClass": "org.apache.camel.component.pqc.PQCConfiguration", "configurationField": "configuration", "description": "The required length of the symmetric key used" } } } diff --git a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCConfiguration.java b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCConfiguration.java index 87ace93b481d..be91d6ffb789 100644 --- a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCConfiguration.java +++ b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCConfiguration.java @@ -24,6 +24,7 @@ import javax.crypto.KeyAgreement; import javax.crypto.KeyGenerator; import org.apache.camel.RuntimeCamelException; +import org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriParams; @@ -100,6 +101,10 @@ public class PQCConfiguration implements Cloneable { @Metadata(label = "advanced") private String hybridKdfAlgorithm = "HKDF-SHA256"; + @UriParam(description = "The KeyLifecycleManager to use for key lifecycle operations such as generation, rotation, import/export, expiration, and revocation") + @Metadata(label = "advanced", autowired = true) + private KeyLifecycleManager keyLifecycleManager; + public PQCOperations getOperation() { return operation; } @@ -299,6 +304,18 @@ public class PQCConfiguration implements Cloneable { this.hybridKdfAlgorithm = hybridKdfAlgorithm; } + public KeyLifecycleManager getKeyLifecycleManager() { + return keyLifecycleManager; + } + + /** + * The KeyLifecycleManager to use for key lifecycle operations such as generation, rotation, import/export, + * expiration, and revocation + */ + public void setKeyLifecycleManager(KeyLifecycleManager keyLifecycleManager) { + this.keyLifecycleManager = keyLifecycleManager; + } + // ************************************************* // // ************************************************* diff --git a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCProducer.java b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCProducer.java index fcdb77d397e6..5ab1c2d89a0a 100644 --- a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCProducer.java +++ b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/PQCProducer.java @@ -18,6 +18,7 @@ package org.apache.camel.component.pqc; import java.security.*; import java.security.cert.Certificate; +import java.util.List; import javax.crypto.KeyAgreement; import javax.crypto.KeyGenerator; @@ -29,11 +30,17 @@ import org.apache.camel.Exchange; import org.apache.camel.InvalidPayloadException; import org.apache.camel.component.pqc.crypto.hybrid.HybridKEM; import org.apache.camel.component.pqc.crypto.hybrid.HybridSignature; +import org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager; +import org.apache.camel.component.pqc.lifecycle.KeyMetadata; +import org.apache.camel.component.pqc.stateful.StatefulKeyState; import org.apache.camel.support.DefaultProducer; import org.apache.camel.util.ObjectHelper; import org.bouncycastle.jcajce.SecretKeyWithEncapsulation; import org.bouncycastle.jcajce.spec.KEMExtractSpec; import org.bouncycastle.jcajce.spec.KEMGenerateSpec; +import org.bouncycastle.pqc.jcajce.interfaces.LMSPrivateKey; +import org.bouncycastle.pqc.jcajce.interfaces.XMSSMTPrivateKey; +import org.bouncycastle.pqc.jcajce.interfaces.XMSSPrivateKey; /** * A Producer which sign or verify a payload @@ -86,6 +93,39 @@ public class PQCProducer extends DefaultProducer { case hybridExtractSecretKeyFromEncapsulation: hybridExtractSecretKeyFromEncapsulation(exchange); break; + case generateKeyPair: + lifecycleGenerateKeyPair(exchange); + break; + case exportKey: + lifecycleExportKey(exchange); + break; + case importKey: + lifecycleImportKey(exchange); + break; + case rotateKey: + lifecycleRotateKey(exchange); + break; + case getKeyMetadata: + lifecycleGetKeyMetadata(exchange); + break; + case listKeys: + lifecycleListKeys(exchange); + break; + case expireKey: + lifecycleExpireKey(exchange); + break; + case revokeKey: + lifecycleRevokeKey(exchange); + break; + case getRemainingSignatures: + statefulGetRemainingSignatures(exchange); + break; + case getKeyState: + statefulGetKeyState(exchange); + break; + case deleteKeyState: + statefulDeleteKeyState(exchange); + break; default: throw new IllegalArgumentException("Unsupported operation"); } @@ -439,4 +479,190 @@ public class PQCProducer extends DefaultProducer { } } + // ========== Key Lifecycle Operations ========== + + private KeyLifecycleManager getRequiredKeyLifecycleManager() { + KeyLifecycleManager klm = getConfiguration().getKeyLifecycleManager(); + if (klm == null) { + throw new IllegalStateException( + "A KeyLifecycleManager must be configured to use key lifecycle operations. " + + "Set the keyLifecycleManager option on the PQC endpoint."); + } + return klm; + } + + private void lifecycleGenerateKeyPair(Exchange exchange) throws Exception { + KeyLifecycleManager klm = getRequiredKeyLifecycleManager(); + String algorithm = exchange.getMessage().getHeader(PQCConstants.ALGORITHM, String.class); + String keyId = exchange.getMessage().getHeader(PQCConstants.KEY_ID, String.class); + + if (ObjectHelper.isEmpty(algorithm)) { + throw new IllegalArgumentException( + "Algorithm header (" + PQCConstants.ALGORITHM + ") is required for generateKeyPair"); + } + if (ObjectHelper.isEmpty(keyId)) { + throw new IllegalArgumentException("Key ID header (" + PQCConstants.KEY_ID + ") is required for generateKeyPair"); + } + + KeyPair generated = klm.generateKeyPair(algorithm, keyId); + exchange.getMessage().setHeader(PQCConstants.KEY_PAIR, generated); + } + + private void lifecycleExportKey(Exchange exchange) throws Exception { + KeyLifecycleManager klm = getRequiredKeyLifecycleManager(); + String formatStr = exchange.getMessage().getHeader(PQCConstants.KEY_FORMAT, String.class); + Boolean includePrivate = exchange.getMessage().getHeader(PQCConstants.INCLUDE_PRIVATE, Boolean.class); + + KeyLifecycleManager.KeyFormat format = formatStr != null + ? KeyLifecycleManager.KeyFormat.valueOf(formatStr) + : KeyLifecycleManager.KeyFormat.DER; + boolean inclPriv = includePrivate != null ? includePrivate : false; + + byte[] exported = klm.exportKey(keyPair, format, inclPriv); + exchange.getMessage().setHeader(PQCConstants.EXPORTED_KEY, exported); + } + + private void lifecycleImportKey(Exchange exchange) throws Exception { + KeyLifecycleManager klm = getRequiredKeyLifecycleManager(); + byte[] keyData = exchange.getMessage().getMandatoryBody(byte[].class); + String formatStr = exchange.getMessage().getHeader(PQCConstants.KEY_FORMAT, String.class); + String algorithm = exchange.getMessage().getHeader(PQCConstants.ALGORITHM, String.class); + + KeyLifecycleManager.KeyFormat format = formatStr != null + ? KeyLifecycleManager.KeyFormat.valueOf(formatStr) + : KeyLifecycleManager.KeyFormat.DER; + + if (ObjectHelper.isEmpty(algorithm)) { + throw new IllegalArgumentException("Algorithm header (" + PQCConstants.ALGORITHM + ") is required for importKey"); + } + + KeyPair imported = klm.importKey(keyData, format, algorithm); + exchange.getMessage().setHeader(PQCConstants.KEY_PAIR, imported); + } + + private void lifecycleRotateKey(Exchange exchange) throws Exception { + KeyLifecycleManager klm = getRequiredKeyLifecycleManager(); + String oldKeyId = exchange.getMessage().getHeader(PQCConstants.KEY_ID, String.class); + String newKeyId = exchange.getMessage().getHeader("CamelPQCNewKeyId", String.class); + String algorithm = exchange.getMessage().getHeader(PQCConstants.ALGORITHM, String.class); + + if (ObjectHelper.isEmpty(oldKeyId)) { + throw new IllegalArgumentException("Key ID header (" + PQCConstants.KEY_ID + ") is required for rotateKey"); + } + if (ObjectHelper.isEmpty(newKeyId)) { + throw new IllegalArgumentException("New Key ID header (CamelPQCNewKeyId) is required for rotateKey"); + } + if (ObjectHelper.isEmpty(algorithm)) { + throw new IllegalArgumentException("Algorithm header (" + PQCConstants.ALGORITHM + ") is required for rotateKey"); + } + + KeyPair rotated = klm.rotateKey(oldKeyId, newKeyId, algorithm); + exchange.getMessage().setHeader(PQCConstants.KEY_PAIR, rotated); + } + + private void lifecycleGetKeyMetadata(Exchange exchange) throws Exception { + KeyLifecycleManager klm = getRequiredKeyLifecycleManager(); + String keyId = exchange.getMessage().getHeader(PQCConstants.KEY_ID, String.class); + + if (ObjectHelper.isEmpty(keyId)) { + throw new IllegalArgumentException("Key ID header (" + PQCConstants.KEY_ID + ") is required for getKeyMetadata"); + } + + KeyMetadata metadata = klm.getKeyMetadata(keyId); + exchange.getMessage().setHeader(PQCConstants.KEY_METADATA, metadata); + } + + private void lifecycleListKeys(Exchange exchange) throws Exception { + KeyLifecycleManager klm = getRequiredKeyLifecycleManager(); + List<KeyMetadata> keys = klm.listKeys(); + exchange.getMessage().setHeader(PQCConstants.KEY_LIST, keys); + } + + private void lifecycleExpireKey(Exchange exchange) throws Exception { + KeyLifecycleManager klm = getRequiredKeyLifecycleManager(); + String keyId = exchange.getMessage().getHeader(PQCConstants.KEY_ID, String.class); + + if (ObjectHelper.isEmpty(keyId)) { + throw new IllegalArgumentException("Key ID header (" + PQCConstants.KEY_ID + ") is required for expireKey"); + } + + klm.expireKey(keyId); + } + + private void lifecycleRevokeKey(Exchange exchange) throws Exception { + KeyLifecycleManager klm = getRequiredKeyLifecycleManager(); + String keyId = exchange.getMessage().getHeader(PQCConstants.KEY_ID, String.class); + String reason = exchange.getMessage().getHeader(PQCConstants.REVOCATION_REASON, String.class); + + if (ObjectHelper.isEmpty(keyId)) { + throw new IllegalArgumentException("Key ID header (" + PQCConstants.KEY_ID + ") is required for revokeKey"); + } + + klm.revokeKey(keyId, reason); + } + + // ========== Stateful Key Operations ========== + + private void statefulGetRemainingSignatures(Exchange exchange) { + if (keyPair == null || keyPair.getPrivate() == null) { + throw new IllegalStateException("A KeyPair with a private key is required for getRemainingSignatures"); + } + + PrivateKey privateKey = keyPair.getPrivate(); + long remaining; + + if (privateKey instanceof XMSSPrivateKey) { + remaining = ((XMSSPrivateKey) privateKey).getUsagesRemaining(); + } else if (privateKey instanceof XMSSMTPrivateKey) { + remaining = ((XMSSMTPrivateKey) privateKey).getUsagesRemaining(); + } else if (privateKey instanceof LMSPrivateKey) { + remaining = ((LMSPrivateKey) privateKey).getUsagesRemaining(); + } else { + throw new IllegalArgumentException( + "getRemainingSignatures is only supported for stateful signature schemes (XMSS, XMSSMT, LMS/HSS). " + + "Key type: " + privateKey.getClass().getName()); + } + + exchange.getMessage().setHeader(PQCConstants.REMAINING_SIGNATURES, remaining); + } + + private void statefulGetKeyState(Exchange exchange) { + if (keyPair == null || keyPair.getPrivate() == null) { + throw new IllegalStateException("A KeyPair with a private key is required for getKeyState"); + } + + PrivateKey privateKey = keyPair.getPrivate(); + StatefulKeyState state; + + if (privateKey instanceof XMSSPrivateKey) { + XMSSPrivateKey xmssKey = (XMSSPrivateKey) privateKey; + state = new StatefulKeyState(privateKey.getAlgorithm(), xmssKey.getIndex(), xmssKey.getUsagesRemaining()); + } else if (privateKey instanceof XMSSMTPrivateKey) { + XMSSMTPrivateKey xmssmtKey = (XMSSMTPrivateKey) privateKey; + state = new StatefulKeyState(privateKey.getAlgorithm(), xmssmtKey.getIndex(), xmssmtKey.getUsagesRemaining()); + } else if (privateKey instanceof LMSPrivateKey) { + LMSPrivateKey lmsKey = (LMSPrivateKey) privateKey; + state = new StatefulKeyState(privateKey.getAlgorithm(), lmsKey.getIndex(), lmsKey.getUsagesRemaining()); + } else { + throw new IllegalArgumentException( + "getKeyState is only supported for stateful signature schemes (XMSS, XMSSMT, LMS/HSS). " + + "Key type: " + privateKey.getClass().getName()); + } + + exchange.getMessage().setHeader(PQCConstants.KEY_STATE, state); + } + + private void statefulDeleteKeyState(Exchange exchange) throws Exception { + String keyId = exchange.getMessage().getHeader(PQCConstants.KEY_ID, String.class); + + if (ObjectHelper.isEmpty(keyId)) { + throw new IllegalArgumentException("Key ID header (" + PQCConstants.KEY_ID + ") is required for deleteKeyState"); + } + + KeyLifecycleManager klm = getConfiguration().getKeyLifecycleManager(); + if (klm != null) { + klm.deleteKey(keyId); + } + } + } diff --git a/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/stateful/StatefulKeyState.java b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/stateful/StatefulKeyState.java new file mode 100644 index 000000000000..73b951cb9b18 --- /dev/null +++ b/components/camel-pqc/src/main/java/org/apache/camel/component/pqc/stateful/StatefulKeyState.java @@ -0,0 +1,63 @@ +/* + * 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.stateful; + +import java.io.Serializable; + +/** + * Represents the state of a stateful PQC signature key (XMSS, XMSSMT, LMS, HSS). These hash-based signature schemes + * have a limited number of signatures that can be produced before the key is exhausted. + */ +public class StatefulKeyState implements Serializable { + + private static final long serialVersionUID = 1L; + + private final String algorithm; + private final long index; + private final long usagesRemaining; + private final boolean exhausted; + + public StatefulKeyState(String algorithm, long index, long usagesRemaining) { + this.algorithm = algorithm; + this.index = index; + this.usagesRemaining = usagesRemaining; + this.exhausted = usagesRemaining <= 0; + } + + public String getAlgorithm() { + return algorithm; + } + + public long getIndex() { + return index; + } + + public long getUsagesRemaining() { + return usagesRemaining; + } + + public boolean isExhausted() { + return exhausted; + } + + @Override + public String toString() { + return String.format( + "StatefulKeyState[algorithm=%s, index=%d, usagesRemaining=%d, exhausted=%s]", + algorithm, index, usagesRemaining, exhausted); + } +} diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/PqcComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/PqcComponentBuilderFactory.java index 47dc3a913158..23be92c87793 100644 --- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/PqcComponentBuilderFactory.java +++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/PqcComponentBuilderFactory.java @@ -260,6 +260,23 @@ public interface PqcComponentBuilderFactory { return this; } + /** + * The KeyLifecycleManager to use for key lifecycle operations such as + * generation, rotation, import/export, expiration, and revocation. + * + * The option is a: + * <code>org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager</code> type. + * + * Group: advanced + * + * @param keyLifecycleManager the value to set + * @return the dsl builder + */ + default PqcComponentBuilder keyLifecycleManager(org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager keyLifecycleManager) { + doSetProperty("keyLifecycleManager", keyLifecycleManager); + return this; + } + /** * The KeyPair to be used. * @@ -474,6 +491,7 @@ public interface PqcComponentBuilderFactory { case "hybridKdfAlgorithm": getOrCreateConfiguration((PQCComponent) component).setHybridKdfAlgorithm((java.lang.String) value); return true; case "keyEncapsulationAlgorithm": getOrCreateConfiguration((PQCComponent) component).setKeyEncapsulationAlgorithm((java.lang.String) value); return true; case "keyGenerator": getOrCreateConfiguration((PQCComponent) component).setKeyGenerator((javax.crypto.KeyGenerator) value); return true; + case "keyLifecycleManager": getOrCreateConfiguration((PQCComponent) component).setKeyLifecycleManager((org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager) value); return true; case "keyPair": getOrCreateConfiguration((PQCComponent) component).setKeyPair((java.security.KeyPair) value); return true; case "keyPairAlias": getOrCreateConfiguration((PQCComponent) component).setKeyPairAlias((java.lang.String) value); return true; case "keyStore": getOrCreateConfiguration((PQCComponent) component).setKeyStore((java.security.KeyStore) value); return true; diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PQCEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PQCEndpointBuilderFactory.java index 31f0870473be..2e0bf7b2c35d 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PQCEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PQCEndpointBuilderFactory.java @@ -314,6 +314,38 @@ public interface PQCEndpointBuilderFactory { doSetProperty("keyGenerator", keyGenerator); return this; } + /** + * The KeyLifecycleManager to use for key lifecycle operations such as + * generation, rotation, import/export, expiration, and revocation. + * + * The option is a: + * <code>org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager</code> type. + * + * Group: advanced + * + * @param keyLifecycleManager the value to set + * @return the dsl builder + */ + default AdvancedPQCEndpointBuilder keyLifecycleManager(org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager keyLifecycleManager) { + doSetProperty("keyLifecycleManager", keyLifecycleManager); + return this; + } + /** + * The KeyLifecycleManager to use for key lifecycle operations such as + * generation, rotation, import/export, expiration, and revocation. + * + * The option will be converted to a + * <code>org.apache.camel.component.pqc.lifecycle.KeyLifecycleManager</code> type. + * + * Group: advanced + * + * @param keyLifecycleManager the value to set + * @return the dsl builder + */ + default AdvancedPQCEndpointBuilder keyLifecycleManager(String keyLifecycleManager) { + doSetProperty("keyLifecycleManager", keyLifecycleManager); + return this; + } /** * The KeyPair to be used. *
