// kafka-connector options: START
[[camel-crypto-kafka-connector-sink]]
= camel-crypto-kafka-connector sink configuration

When using camel-crypto-kafka-connector as sink make sure to use the following Maven dependency to have support for the connector:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.kafkaconnector</groupId>
  <artifactId>camel-crypto-kafka-connector</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel Kafka connector version -->
</dependency>
----


The camel-crypto sink connector supports 26 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Priority
| *camel.sink.path.cryptoOperation* | Set the Crypto operation from that supplied after the crypto scheme in the endpoint uri e.g. crypto:sign sets sign as the operation. One of: [sign] [verify] | null | ConfigDef.Importance.HIGH
| *camel.sink.path.name* | The logical name of this operation. | null | ConfigDef.Importance.HIGH
| *camel.sink.endpoint.algorithm* | Sets the JCE name of the Algorithm that should be used for the signer. | "SHA256withRSA" | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.alias* | Sets the alias used to query the KeyStore for keys and {link java.security.cert.Certificate Certificates} to be used in signing and verifying exchanges. This value can be provided at runtime via the message header org.apache.camel.component.crypto.DigitalSignatureConstants#KEYSTORE_ALIAS | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.certificateName* | Sets the reference name for a PrivateKey that can be found in the registry. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.keystore* | Sets the KeyStore that can contain keys and Certficates for use in signing and verifying exchanges. A KeyStore is typically used with an alias, either one supplied in the Route definition or dynamically via the message header CamelSignatureKeyStoreAlias. If no alias is supplied and there is only a single entry in the Keystore, then this single entry will be used. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.keystoreName* | Sets the reference name for a Keystore that can be found in the registry. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.lazyStartProducer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.privateKey* | Set the PrivateKey that should be used to sign the exchange | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.privateKeyName* | Sets the reference name for a PrivateKey that can be found in the registry. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.provider* | Set the id of the security provider that provides the configured Signature algorithm. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.publicKeyName* | references that should be resolved when the context changes | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.secureRandomName* | Sets the reference name for a SecureRandom that can be found in the registry. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.signatureHeaderName* | Set the name of the message header that should be used to store the base64 encoded signature. This defaults to 'CamelDigitalSignature' | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.basicPropertyBinding* | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.bufferSize* | Set the size of the buffer used to read in the Exchange payload data. | "2048" | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.certificate* | Set the Certificate that should be used to verify the signature in the exchange based on its payload. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.clearHeaders* | Determines if the Signature specific headers be cleared after signing and verification. Defaults to true, and should only be made otherwise at your extreme peril as vital private information such as Keys and passwords may escape if unset. | true | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.keyStoreParameters* | Sets the KeyStore that can contain keys and Certficates for use in signing and verifying exchanges based on the given KeyStoreParameters. A KeyStore is typically used with an alias, either one supplied in the Route definition or dynamically via the message header CamelSignatureKeyStoreAlias. If no alias is supplied and there is only a single entry in the Keystore, then this single entry will be used. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.publicKey* | Set the PublicKey that should be used to verify the signature in the exchange. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.secureRandom* | Set the SecureRandom used to initialize the Signature service | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.synchronous* | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.password* | Sets the password used to access an aliased PrivateKey in the KeyStore. | null | ConfigDef.Importance.MEDIUM
| *camel.component.crypto.lazyStartProducer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | ConfigDef.Importance.MEDIUM
| *camel.component.crypto.basicPropertyBinding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | ConfigDef.Importance.MEDIUM
| *camel.component.crypto.configuration* | To use the shared DigitalSignatureConfiguration as configuration | null | ConfigDef.Importance.MEDIUM
|===
// kafka-connector options: END
