/**
* 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.model.dataformat;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.camel.CamelContext;
import org.apache.camel.model.DataFormatDefinition;
import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.Metadata;
/**
* PGP data format
*/
@Metadata(firstVersion = "2.9.0", label = "dataformat,transformation,security", title = "PGP")
@XmlRootElement(name = "pgp")
@XmlAccessorType(XmlAccessType.FIELD)
public class PGPDataFormat extends DataFormatDefinition {
@XmlAttribute
private String keyUserid;
@XmlAttribute
private String signatureKeyUserid;
@XmlAttribute
private String password;
@XmlAttribute
private String signaturePassword;
@XmlAttribute
private String keyFileName;
@XmlAttribute
private String signatureKeyFileName;
@XmlAttribute
private String signatureKeyRing;
@XmlAttribute
private Boolean armored;
@XmlAttribute @Metadata(defaultValue = "true")
private Boolean integrity;
@XmlAttribute
private String provider;
@XmlAttribute
private Integer algorithm;
@XmlAttribute
private Integer compressionAlgorithm;
@XmlAttribute
private Integer hashAlgorithm;
@XmlAttribute
private String signatureVerificationOption;
public PGPDataFormat() {
super("pgp");
}
@Override
protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
if (keyUserid != null) {
setProperty(camelContext, dataFormat, "keyUserid", keyUserid);
}
if (signatureKeyUserid != null) {
setProperty(camelContext, dataFormat, "signatureKeyUserid", signatureKeyUserid);
}
if (password != null) {
setProperty(camelContext, dataFormat, "password", password);
}
if (signaturePassword != null) {
setProperty(camelContext, dataFormat, "signaturePassword", signaturePassword);
}
if (keyFileName != null) {
setProperty(camelContext, dataFormat, "keyFileName", keyFileName);
}
if (signatureKeyFileName != null) {
setProperty(camelContext, dataFormat, "signatureKeyFileName", signatureKeyFileName);
}
if (signatureKeyRing != null) {
setProperty(camelContext, dataFormat, "signatureKeyRing", signatureKeyRing);
}
if (armored != null) {
setProperty(camelContext, dataFormat, "armored", armored);
}
if (integrity != null) {
setProperty(camelContext, dataFormat, "integrity", integrity);
}
if (provider != null) {
setProperty(camelContext, dataFormat, "provider", provider);
}
if (algorithm != null) {
setProperty(camelContext, dataFormat, "algorithm", algorithm);
}
if (compressionAlgorithm != null) {
setProperty(camelContext, dataFormat, "compressionAlgorithm", compressionAlgorithm);
}
if (hashAlgorithm != null) {
setProperty(camelContext, dataFormat, "hashAlgorithm", hashAlgorithm);
}
if (signatureVerificationOption != null) {
setProperty(camelContext, dataFormat, "signatureVerificationOption", signatureVerificationOption);
}
}
public String getSignatureKeyUserid() {
return signatureKeyUserid;
}
/**
* User ID of the key in the PGP keyring used for signing (during encryption) or signature verification (during decryption).
* During the signature verification process the specified User ID restricts the public keys from the public
* keyring which can be used for the verification. If no User ID is specified for the signature verficiation
* then any public key in the public keyring can be used for the verification. Can also be only a part of a user ID.
* For example, if the user ID is "Test User <test@camel.com>" then you can use the
* part "Test User" or "<test@camel.com>" to address the User ID.
*/
public void setSignatureKeyUserid(String signatureKeyUserid) {
this.signatureKeyUserid = signatureKeyUserid;
}
public String getSignaturePassword() {
return signaturePassword;
}
/**
* Password used when opening the private key used for signing (during encryption).
*/
public void setSignaturePassword(String signaturePassword) {
this.signaturePassword = signaturePassword;
}
public String getSignatureKeyFileName() {
return signatureKeyFileName;
}
/**
* Filename of the keyring to use for signing (during encryption) or for signature verification (during decryption);
* must be accessible as a classpath resource (but you can specify a location in the file system by using the "file:" prefix).
*/
public void setSignatureKeyFileName(String signatureKeyFileName) {
this.signatureKeyFileName = signatureKeyFileName;
}
public String getSignatureKeyRing() {
return signatureKeyRing;
}
/**
* Keyring used for signing/verifying as byte array.
* You can not set the signatureKeyFileName and signatureKeyRing at the same time.
*/
public void setSignatureKeyRing(String signatureKeyRing) {
this.signatureKeyRing = signatureKeyRing;
}
public Integer getHashAlgorithm() {
return hashAlgorithm;
}
/**
* Signature hash algorithm; possible values are defined in org.bouncycastle.bcpg.HashAlgorithmTags;
* for example 2 (= SHA1), 8 (= SHA256), 9 (= SHA384), 10 (= SHA512), 11 (=SHA224). Only relevant for signing.
*/
public void setHashAlgorithm(Integer hashAlgorithm) {
this.hashAlgorithm = hashAlgorithm;
}
public Boolean getArmored() {
return armored;
}
/**
* This option will cause PGP to base64 encode the encrypted text, making it available for copy/paste, etc.
*/
public void setArmored(Boolean armored) {
this.armored = armored;
}
public Boolean getIntegrity() {
return integrity;
}
/**
* Adds an integrity check/sign into the encryption file.
* <p/>
* The default value is true.
*/
public void setIntegrity(Boolean integrity) {
this.integrity = integrity;
}
public String getKeyFileName() {
return keyFileName;
}
/**
* Filename of the keyring; must be accessible as a classpath resource (but you can specify a location in the file system by using the "file:" prefix).
*/
public void setKeyFileName(String keyFileName) {
this.keyFileName = keyFileName;
}
public String getKeyUserid() {
return keyUserid;
}
/**
* The user ID of the key in the PGP keyring used during encryption.
* Can also be only a part of a user ID.
* For example, if the user ID is "Test User <test@camel.com>"
* then you can use the part "Test User" or "<test@camel.com>" to address the user ID.
*/
public void setKeyUserid(String keyUserid) {
this.keyUserid = keyUserid;
}
public String getPassword() {
return password;
}
public Integer getAlgorithm() {
return algorithm;
}
/**
* Symmetric key encryption algorithm; possible values are defined in org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags;
* for example 2 (= TRIPLE DES), 3 (= CAST5), 4 (= BLOWFISH), 6 (= DES), 7 (= AES_128). Only relevant for encrypting.
*/
public void setAlgorithm(Integer algorithm) {
this.algorithm = algorithm;
}
public Integer getCompressionAlgorithm() {
return compressionAlgorithm;
}
/**
* Compression algorithm; possible values are defined in org.bouncycastle.bcpg.CompressionAlgorithmTags;
* for example 0 (= UNCOMPRESSED), 1 (= ZIP), 2 (= ZLIB), 3 (= BZIP2). Only relevant for encrypting.
*/
public void setCompressionAlgorithm(Integer compressionAlgorithm) {
this.compressionAlgorithm = compressionAlgorithm;
}
/**
* Password used when opening the private key (not used for encryption).
*/
public void setPassword(String password) {
this.password = password;
}
public String getProvider() {
return provider;
}
/**
* Java Cryptography Extension (JCE) provider, default is Bouncy Castle
* ("BC"). Alternatively you can use, for example, the IAIK JCE provider; in
* this case the provider must be registered beforehand and the Bouncy
* Castle provider must not be registered beforehand. The Sun JCE provider
* does not work.
*/
public void setProvider(String provider) {
this.provider = provider;
}
public String getSignatureVerificationOption() {
return signatureVerificationOption;
}
/**
* Controls the behavior for verifying the signature during unmarshaling. There are 4 values possible:
* "optional": The PGP message may or may not contain signatures; if it does contain signatures, then a signature verification is executed.
* "required": The PGP message must contain at least one signature; if this is not the case an exception (PGPException) is thrown. A signature verification is executed.
* "ignore": Contained signatures in the PGP message are ignored; no signature verification is executed.
* "no_signature_allowed": The PGP message must not contain a signature; otherwise an exception (PGPException) is thrown.
*/
public void setSignatureVerificationOption(String signatureVerificationOption) {
this.signatureVerificationOption = signatureVerificationOption;
}
}