CAMEL-6837: PGP Data Format:allow other JCE providers than BC. Thanks to Franz Forsthofer for the patch.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/77b27f8d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/77b27f8d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/77b27f8d Branch: refs/heads/camel-2.12.x Commit: 77b27f8d41473ef2e529fda5d85113b82934b680 Parents: e8288db Author: Claus Ibsen <davscl...@apache.org> Authored: Fri Oct 11 15:22:25 2013 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Oct 11 15:22:39 2013 +0200 ---------------------------------------------------------------------- .../camel/model/dataformat/PGPDataFormat.java | 13 +++ .../camel/converter/crypto/PGPDataFormat.java | 88 +++++++++++++------- .../converter/crypto/PGPDataFormatUtil.java | 20 ++--- .../converter/crypto/PGPDataFormatTest.java | 12 +++ .../crypto/PGPDataFormatWithProvider.java | 25 ++++++ 5 files changed, 120 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/77b27f8d/camel-core/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java index 6f9fa26..39e9869 100644 --- a/camel-core/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java +++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java @@ -42,6 +42,8 @@ public class PGPDataFormat extends DataFormatDefinition { private Boolean armored; @XmlAttribute private Boolean integrity; + @XmlAttribute + private String provider; public PGPDataFormat() { super("pgp"); @@ -64,6 +66,9 @@ public class PGPDataFormat extends DataFormatDefinition { if (integrity != null) { setProperty(camelContext, dataFormat, "integrity", integrity); } + if (provider != null) { + setProperty(camelContext, dataFormat, "provider", provider); + } } public Boolean getArmored() { @@ -105,4 +110,12 @@ public class PGPDataFormat extends DataFormatDefinition { public void setPassword(String password) { this.password = password; } + + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/77b27f8d/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormat.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormat.java b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormat.java index d0d3730..eab0e71 100644 --- a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormat.java +++ b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormat.java @@ -30,6 +30,7 @@ import java.util.Date; import org.apache.camel.Exchange; import org.apache.camel.spi.DataFormat; +import org.apache.camel.support.ServiceSupport; import org.apache.camel.util.ExchangeHelper; import org.apache.camel.util.IOHelper; import org.apache.camel.util.ObjectHelper; @@ -65,12 +66,15 @@ import org.bouncycastle.openpgp.operator.jcajce.JcePGPDataEncryptorBuilder; import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder; import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyKeyEncryptionMethodGenerator; import org.bouncycastle.util.io.Streams; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** - * <code>PGPDataFormat</code> uses the <a href="http://www.bouncycastle.org/java.htm">bouncy castle</a> - * libraries to enable encryption and decryption in the PGP format. + * <code>PGPDataFormat</code> uses the <a + * href="http://www.bouncycastle.org/java.htm">bouncy castle</a> libraries to + * enable encryption and decryption in the PGP format. */ -public class PGPDataFormat implements DataFormat { +public class PGPDataFormat extends ServiceSupport implements DataFormat { public static final String KEY_FILE_NAME = "CamelPGPDataFormatKeyFileName"; public static final String ENCRYPTION_KEY_RING = "CamelPGPDataFormatEncryptionKeyRing"; @@ -81,8 +85,14 @@ public class PGPDataFormat implements DataFormat { public static final String SIGNATURE_KEY_USERID = "CamelPGPDataFormatSignatureKeyUserid"; public static final String SIGNATURE_KEY_PASSWORD = "CamelPGPDataFormatSignatureKeyPassword"; + private static final Logger LOG = LoggerFactory.getLogger(PGPDataFormat.class); + + private static final String BC = "BC"; private static final int BUFFER_SIZE = 16 * 1024; + // Java Cryptography Extension provider, default is Bouncy Castle + private String provider = BC; + // encryption / decryption key info (required) private String keyUserid; private String password; @@ -94,30 +104,27 @@ public class PGPDataFormat implements DataFormat { private String signatureKeyUserid; private String signaturePassword; private String signatureKeyFileName; - // alternatively to the sigknature key file name you can specify the signature key ring as byte array + // alternatively to the signature key file name you can specify the signature key ring as byte array private byte[] signatureKeyRing; private boolean armored; private boolean integrity = true; public PGPDataFormat() { - if (Security.getProvider("BC") == null) { - Security.addProvider(new BouncyCastleProvider()); - } } - + protected String findKeyFileName(Exchange exchange) { return exchange.getIn().getHeader(KEY_FILE_NAME, getKeyFileName(), String.class); } - + protected byte[] findEncryptionKeyRing(Exchange exchange) { return exchange.getIn().getHeader(ENCRYPTION_KEY_RING, getEncryptionKeyRing(), byte[].class); } - + protected String findKeyUserid(Exchange exchange) { return exchange.getIn().getHeader(KEY_USERID, getKeyUserid(), String.class); } - + protected String findKeyPassword(Exchange exchange) { return exchange.getIn().getHeader(KEY_PASSWORD, getPassword(), String.class); } @@ -125,7 +132,7 @@ public class PGPDataFormat implements DataFormat { protected String findSignatureKeyFileName(Exchange exchange) { return exchange.getIn().getHeader(SIGNATURE_KEY_FILE_NAME, getSignatureKeyFileName(), String.class); } - + protected byte[] findSignatureKeyRing(Exchange exchange) { return exchange.getIn().getHeader(SIGNATURE_KEY_RING, getSignatureKeyRing(), byte[].class); } @@ -139,7 +146,8 @@ public class PGPDataFormat implements DataFormat { } public void marshal(Exchange exchange, Object graph, OutputStream outputStream) throws Exception { - PGPPublicKey key = PGPDataFormatUtil.findPublicKey(exchange.getContext(), findKeyFileName(exchange), findEncryptionKeyRing(exchange), findKeyUserid(exchange), true); + PGPPublicKey key = PGPDataFormatUtil.findPublicKey(exchange.getContext(), findKeyFileName(exchange), + findEncryptionKeyRing(exchange), findKeyUserid(exchange), true); if (key == null) { throw new IllegalArgumentException("Public key is null, cannot proceed"); } @@ -150,10 +158,8 @@ public class PGPDataFormat implements DataFormat { outputStream = new ArmoredOutputStream(outputStream); } - PGPEncryptedDataGenerator encGen = new PGPEncryptedDataGenerator(new JcePGPDataEncryptorBuilder(SymmetricKeyAlgorithmTags.CAST5). - setWithIntegrityPacket(integrity). - setSecureRandom(new SecureRandom()). - setProvider("BC")); + PGPEncryptedDataGenerator encGen = new PGPEncryptedDataGenerator(new JcePGPDataEncryptorBuilder(SymmetricKeyAlgorithmTags.CAST5) + .setWithIntegrityPacket(integrity).setSecureRandom(new SecureRandom()).setProvider(getProvider())); encGen.addMethod(new JcePublicKeyKeyEncryptionMethodGenerator(key)); OutputStream encOut = encGen.open(outputStream, new byte[BUFFER_SIZE]); @@ -190,8 +196,8 @@ public class PGPDataFormat implements DataFormat { } } - protected PGPSignatureGenerator createSignatureGenerator(Exchange exchange, OutputStream out) - throws IOException, PGPException, NoSuchProviderException, NoSuchAlgorithmException { + protected PGPSignatureGenerator createSignatureGenerator(Exchange exchange, OutputStream out) throws IOException, PGPException, + NoSuchProviderException, NoSuchAlgorithmException { String sigKeyFileName = findSignatureKeyFileName(exchange); String sigKeyUserid = findSignatureKeyUserid(exchange); @@ -202,12 +208,13 @@ public class PGPDataFormat implements DataFormat { return null; } - PGPSecretKey sigSecretKey = PGPDataFormatUtil.findSecretKey(exchange.getContext(), sigKeyFileName, sigKeyRing, sigKeyPassword); + PGPSecretKey sigSecretKey = PGPDataFormatUtil.findSecretKey(exchange.getContext(), sigKeyFileName, sigKeyRing, sigKeyPassword, getProvider()); if (sigSecretKey == null) { throw new IllegalArgumentException("Signature secret key is null, cannot proceed"); } - PGPPrivateKey sigPrivateKey = sigSecretKey.extractPrivateKey(new JcePBESecretKeyDecryptorBuilder().setProvider("BC").build(sigKeyPassword.toCharArray())); + PGPPrivateKey sigPrivateKey = sigSecretKey.extractPrivateKey(new JcePBESecretKeyDecryptorBuilder().setProvider(getProvider()).build( + sigKeyPassword.toCharArray())); if (sigPrivateKey == null) { throw new IllegalArgumentException("Signature private key is null, cannot proceed"); } @@ -216,7 +223,8 @@ public class PGPDataFormat implements DataFormat { spGen.setSignerUserID(false, sigKeyUserid); int algorithm = sigSecretKey.getPublicKey().getAlgorithm(); - PGPSignatureGenerator sigGen = new PGPSignatureGenerator(new JcaPGPContentSignerBuilder(algorithm, HashAlgorithmTags.SHA1).setProvider("BC")); + PGPSignatureGenerator sigGen = new PGPSignatureGenerator( + new JcaPGPContentSignerBuilder(algorithm, HashAlgorithmTags.SHA1).setProvider(getProvider())); sigGen.init(PGPSignature.BINARY_DOCUMENT, sigPrivateKey); sigGen.setHashedSubpackets(spGen.generate()); sigGen.generateOnePassVersion(false).encode(out); @@ -228,7 +236,8 @@ public class PGPDataFormat implements DataFormat { return null; } - PGPPrivateKey key = PGPDataFormatUtil.findPrivateKey(exchange.getContext(), findKeyFileName(exchange), findEncryptionKeyRing(exchange), encryptedStream, findKeyPassword(exchange)); + PGPPrivateKey key = PGPDataFormatUtil.findPrivateKey(exchange.getContext(), findKeyFileName(exchange), + findEncryptionKeyRing(exchange), encryptedStream, findKeyPassword(exchange), getProvider()); if (key == null) { throw new IllegalArgumentException("Private key is null, cannot proceed"); } @@ -255,7 +264,7 @@ public class PGPDataFormat implements DataFormat { IOHelper.close(in); PGPPublicKeyEncryptedData pbe = (PGPPublicKeyEncryptedData) enc.get(0); - InputStream encData = pbe.getDataStream(new JcePublicKeyDataDecryptorFactoryBuilder().setProvider("BC").build(key)); + InputStream encData = pbe.getDataStream(new JcePublicKeyDataDecryptorFactoryBuilder().setProvider(getProvider()).build(key)); pgpFactory = new PGPObjectFactory(encData); PGPCompressedData comData = (PGPCompressedData) pgpFactory.nextObject(); @@ -291,16 +300,17 @@ public class PGPDataFormat implements DataFormat { return answer; } - protected PGPOnePassSignature getSignature(Exchange exchange, PGPOnePassSignatureList signatureList) - throws IOException, PGPException, NoSuchProviderException { + protected PGPOnePassSignature getSignature(Exchange exchange, PGPOnePassSignatureList signatureList) throws IOException, PGPException, + NoSuchProviderException { - PGPPublicKey sigPublicKey = PGPDataFormatUtil.findPublicKey(exchange.getContext(), findSignatureKeyFileName(exchange), findSignatureKeyRing(exchange), findSignatureKeyUserid(exchange), false); + PGPPublicKey sigPublicKey = PGPDataFormatUtil.findPublicKey(exchange.getContext(), findSignatureKeyFileName(exchange), + findSignatureKeyRing(exchange), findSignatureKeyUserid(exchange), false); if (sigPublicKey == null) { throw new IllegalArgumentException("Signature public key is null, cannot proceed"); } PGPOnePassSignature signature = signatureList.get(0); - signature.init(new JcaPGPContentVerifierBuilderProvider().setProvider("BC"), sigPublicKey); + signature.init(new JcaPGPContentVerifierBuilderProvider().setProvider(getProvider()), sigPublicKey); return signature; } @@ -408,4 +418,26 @@ public class PGPDataFormat implements DataFormat { this.signatureKeyRing = signatureKeyRing; } + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + @Override + protected void doStart() throws Exception { + if (Security.getProvider(BC) == null && BC.equals(getProvider())) { + LOG.debug("Adding BouncyCastleProvider as security provider"); + Security.addProvider(new BouncyCastleProvider()); + } else { + LOG.debug("Using custom provider {} which is expected to be enlisted manually.", getProvider()); + } + } + + @Override + protected void doStop() throws Exception { + // noop + } } http://git-wip-us.apache.org/repos/asf/camel/blob/77b27f8d/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java index aa4b9c7..1dfa33a 100644 --- a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java +++ b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java @@ -125,23 +125,23 @@ public final class PGPDataFormatUtil { public static PGPPrivateKey findPrivateKey(CamelContext context, String keychainFilename, InputStream encryptedInput, String passphrase) throws IOException, PGPException, NoSuchProviderException { - return findPrivateKey(context, keychainFilename, null, encryptedInput, passphrase); + return findPrivateKey(context, keychainFilename, null, encryptedInput, passphrase, "BC"); } public static PGPPrivateKey findPrivateKey(CamelContext context, String keychainFilename, byte[] secKeyRing, - InputStream encryptedInput, String passphrase) throws IOException, PGPException, NoSuchProviderException { + InputStream encryptedInput, String passphrase, String provider) throws IOException, PGPException, NoSuchProviderException { InputStream keyChainInputStream = determineKeyRingInputStream(context, keychainFilename, secKeyRing, true); PGPPrivateKey privKey = null; try { - privKey = findPrivateKey(keyChainInputStream, encryptedInput, passphrase); + privKey = findPrivateKey(keyChainInputStream, encryptedInput, passphrase, provider); } finally { IOHelper.close(keyChainInputStream); } return privKey; } - private static PGPPrivateKey findPrivateKey(InputStream keyringInput, InputStream encryptedInput, String passphrase) throws IOException, + private static PGPPrivateKey findPrivateKey(InputStream keyringInput, InputStream encryptedInput, String passphrase, String provider) throws IOException, PGPException, NoSuchProviderException { PGPSecretKeyRingCollection pgpSec = new PGPSecretKeyRingCollection(PGPUtil.getDecoderStream(keyringInput)); PGPObjectFactory factory = new PGPObjectFactory(PGPUtil.getDecoderStream(encryptedInput)); @@ -163,7 +163,7 @@ public final class PGPDataFormatUtil { encryptedData = (PGPPublicKeyEncryptedData) encryptedDataObjects.next(); PGPSecretKey pgpSecKey = pgpSec.getSecretKey(encryptedData.getKeyID()); if (pgpSecKey != null) { - privateKey = pgpSecKey.extractPrivateKey(new JcePBESecretKeyDecryptorBuilder().setProvider("BC").build(passphrase.toCharArray())); + privateKey = pgpSecKey.extractPrivateKey(new JcePBESecretKeyDecryptorBuilder().setProvider(provider).build(passphrase.toCharArray())); } } if (privateKey == null && pgpSec.size() > 0 && encryptedData != null) { @@ -174,23 +174,23 @@ public final class PGPDataFormatUtil { public static PGPSecretKey findSecretKey(CamelContext context, String keychainFilename, String passphrase) throws IOException, PGPException, NoSuchProviderException { - return findSecretKey(context, keychainFilename, null, passphrase); + return findSecretKey(context, keychainFilename, null, passphrase, "BC"); } - public static PGPSecretKey findSecretKey(CamelContext context, String keychainFilename, byte[] secKeyRing, String passphrase) + public static PGPSecretKey findSecretKey(CamelContext context, String keychainFilename, byte[] secKeyRing, String passphrase, String provider) throws IOException, PGPException, NoSuchProviderException { InputStream keyChainInputStream = determineKeyRingInputStream(context, keychainFilename, secKeyRing, false); PGPSecretKey secKey = null; try { - secKey = findSecretKey(keyChainInputStream, passphrase); + secKey = findSecretKey(keyChainInputStream, passphrase, provider); } finally { IOHelper.close(keyChainInputStream); } return secKey; } - private static PGPSecretKey findSecretKey(InputStream keyringInput, String passphrase) throws IOException, PGPException, NoSuchProviderException { + private static PGPSecretKey findSecretKey(InputStream keyringInput, String passphrase, String provider) throws IOException, PGPException, NoSuchProviderException { PGPSecretKey pgpSecKey = null; PGPSecretKeyRingCollection pgpSec = new PGPSecretKeyRingCollection(PGPUtil.getDecoderStream(keyringInput)); for (Iterator<?> i = pgpSec.getKeyRings(); i.hasNext() && pgpSecKey == null;) { @@ -198,7 +198,7 @@ public final class PGPDataFormatUtil { if (data instanceof PGPSecretKeyRing) { PGPSecretKeyRing keyring = (PGPSecretKeyRing) data; PGPSecretKey secKey = keyring.getSecretKey(); - PGPPrivateKey privateKey = secKey.extractPrivateKey(new JcePBESecretKeyDecryptorBuilder().setProvider("BC").build(passphrase.toCharArray())); + PGPPrivateKey privateKey = secKey.extractPrivateKey(new JcePBESecretKeyDecryptorBuilder().setProvider(provider).build(passphrase.toCharArray())); if (privateKey != null) { pgpSecKey = secKey; } http://git-wip-us.apache.org/repos/asf/camel/blob/77b27f8d/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java b/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java index 8597d12..8424ac4 100644 --- a/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java +++ b/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java @@ -45,6 +45,10 @@ public class PGPDataFormatTest extends AbstractPGPDataFormatTest { protected String getKeyPassword() { return "sdude"; } + + protected String getProvider() { + return "BC"; + } @Test public void testEncryption() throws Exception { @@ -100,11 +104,13 @@ public class PGPDataFormatTest extends AbstractPGPDataFormatTest { PGPDataFormat pgpEncrypt = new PGPDataFormat(); pgpEncrypt.setKeyFileName(keyFileName); pgpEncrypt.setKeyUserid(keyUserid); + pgpEncrypt.setProvider(getProvider()); PGPDataFormat pgpDecrypt = new PGPDataFormat(); pgpDecrypt.setKeyFileName(keyFileNameSec); pgpDecrypt.setKeyUserid(keyUserid); pgpDecrypt.setPassword(keyPassword); + pgpDecrypt.setProvider(getProvider()); from("direct:inline2") .marshal(pgpEncrypt) @@ -126,6 +132,7 @@ public class PGPDataFormatTest extends AbstractPGPDataFormatTest { pgpSignAndEncrypt.setSignatureKeyFileName(keyFileNameSec); pgpSignAndEncrypt.setSignatureKeyUserid(keyUserid); pgpSignAndEncrypt.setSignaturePassword(keyPassword); + pgpSignAndEncrypt.setProvider(getProvider()); PGPDataFormat pgpVerifyAndDecrypt = new PGPDataFormat(); pgpVerifyAndDecrypt.setKeyFileName(keyFileNameSec); @@ -133,6 +140,7 @@ public class PGPDataFormatTest extends AbstractPGPDataFormatTest { pgpVerifyAndDecrypt.setPassword(keyPassword); pgpVerifyAndDecrypt.setSignatureKeyFileName(keyFileName); pgpVerifyAndDecrypt.setSignatureKeyUserid(keyUserid); + pgpVerifyAndDecrypt.setProvider(getProvider()); from("direct:inline-sign") .marshal(pgpSignAndEncrypt) @@ -145,11 +153,13 @@ public class PGPDataFormatTest extends AbstractPGPDataFormatTest { PGPDataFormat pgpEncryptByteArray = new PGPDataFormat(); pgpEncryptByteArray.setEncryptionKeyRing(getPublicKeyRing()); pgpEncryptByteArray.setKeyUserid(keyUserid); + pgpEncryptByteArray.setProvider(getProvider()); PGPDataFormat pgpDecryptByteArray = new PGPDataFormat(); pgpDecryptByteArray.setEncryptionKeyRing(getSecKeyRing()); pgpDecryptByteArray.setKeyUserid(keyUserid); pgpDecryptByteArray.setPassword(keyPassword); + pgpDecryptByteArray.setProvider(getProvider()); from("direct:key-ring-byte-array").marshal(pgpEncryptByteArray).to("mock:encrypted").unmarshal(pgpDecryptByteArray) .to("mock:unencrypted"); @@ -161,12 +171,14 @@ public class PGPDataFormatTest extends AbstractPGPDataFormatTest { pgpSignAndEncryptByteArray.setSignatureKeyRing(getSecKeyRing()); pgpSignAndEncryptByteArray.setSignatureKeyUserid(keyUserid); pgpSignAndEncryptByteArray.setSignaturePassword(keyPassword); + pgpSignAndEncryptByteArray.setProvider(getProvider()); PGPDataFormat pgpVerifyAndDecryptByteArray = new PGPDataFormat(); pgpVerifyAndDecryptByteArray.setKeyUserid(keyUserid); pgpVerifyAndDecryptByteArray.setPassword(keyPassword); pgpVerifyAndDecryptByteArray.setEncryptionKeyRing(getSecKeyRing()); pgpVerifyAndDecryptByteArray.setSignatureKeyUserid(keyUserid); + pgpVerifyAndDecryptByteArray.setProvider(getProvider()); from("direct:sign-key-ring-byte-array") // encryption key ring can also be set as header http://git-wip-us.apache.org/repos/asf/camel/blob/77b27f8d/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatWithProvider.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatWithProvider.java b/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatWithProvider.java new file mode 100644 index 0000000..12621c1 --- /dev/null +++ b/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatWithProvider.java @@ -0,0 +1,25 @@ +/** + * 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.converter.crypto; + +public class PGPDataFormatWithProvider extends PGPDataFormatTest { + + protected String getProvider() { + return "BC"; //"IAIK"; + } + +}