Author: davsclaus
Date: Tue Jan 29 19:28:33 2013
New Revision: 1440072
URL: http://svn.apache.org/viewvc?rev=1440072&view=rev
Log:
CAMEL-6019: Add PGP signature and signature verification support to
PGPDataFormat. Thanks to Daniel Gredler for the patch.
Modified:
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormat.java
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/AbstractPGPDataFormatTest.java
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatDynamicTest.java
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatElGamalTest.java
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/SpringPGPDataFormatTest.java
Modified:
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormat.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormat.java?rev=1440072&r1=1440071&r2=1440072&view=diff
==============================================================================
---
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormat.java
(original)
+++
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormat.java
Tue Jan 29 19:28:33 2013
@@ -16,11 +16,17 @@
*/
package org.apache.camel.converter.crypto;
+import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
+import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.Security;
+import java.security.SignatureException;
+import java.util.Date;
import org.apache.camel.Exchange;
import org.apache.camel.spi.DataFormat;
@@ -29,16 +35,27 @@ import org.apache.camel.util.IOHelper;
import org.apache.commons.io.IOUtils;
import org.bouncycastle.bcpg.ArmoredOutputStream;
import org.bouncycastle.bcpg.CompressionAlgorithmTags;
+import org.bouncycastle.bcpg.HashAlgorithmTags;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openpgp.PGPCompressedData;
+import org.bouncycastle.openpgp.PGPCompressedDataGenerator;
import org.bouncycastle.openpgp.PGPEncryptedData;
import org.bouncycastle.openpgp.PGPEncryptedDataGenerator;
import org.bouncycastle.openpgp.PGPEncryptedDataList;
+import org.bouncycastle.openpgp.PGPException;
import org.bouncycastle.openpgp.PGPLiteralData;
+import org.bouncycastle.openpgp.PGPLiteralDataGenerator;
import org.bouncycastle.openpgp.PGPObjectFactory;
+import org.bouncycastle.openpgp.PGPOnePassSignature;
+import org.bouncycastle.openpgp.PGPOnePassSignatureList;
import org.bouncycastle.openpgp.PGPPrivateKey;
import org.bouncycastle.openpgp.PGPPublicKey;
import org.bouncycastle.openpgp.PGPPublicKeyEncryptedData;
+import org.bouncycastle.openpgp.PGPSecretKey;
+import org.bouncycastle.openpgp.PGPSignature;
+import org.bouncycastle.openpgp.PGPSignatureGenerator;
+import org.bouncycastle.openpgp.PGPSignatureList;
+import org.bouncycastle.openpgp.PGPSignatureSubpacketGenerator;
import org.bouncycastle.openpgp.PGPUtil;
import org.bouncycastle.util.io.Streams;
@@ -51,9 +68,22 @@ public class PGPDataFormat implements Da
public static final String KEY_FILE_NAME = "CamelPGPDataFormatKeyFileName";
public static final String KEY_USERID = "CamelPGPDataFormatKeyUserid";
public static final String KEY_PASSWORD = "CamelPGPDataFormatKeyPassword";
+ public static final String SIGNATURE_KEY_FILE_NAME =
"CamelPGPDataFormatSignatureKeyFileName";
+ public static final String SIGNATURE_KEY_USERID =
"CamelPGPDataFormatSignatureKeyUserid";
+ public static final String SIGNATURE_KEY_PASSWORD =
"CamelPGPDataFormatSignatureKeyPassword";
+
+ private static final int BUFFER_SIZE = 16 * 1024;
+
+ // encryption / decryption key info (required)
private String keyUserid;
private String password;
private String keyFileName;
+
+ // signature / verification key info (optional)
+ private String signatureKeyUserid;
+ private String signaturePassword;
+ private String signatureKeyFileName;
+
private boolean armored;
private boolean integrity = true;
@@ -75,21 +105,25 @@ public class PGPDataFormat implements Da
return exchange.getIn().getHeader(KEY_PASSWORD, password,
String.class);
}
+ protected String findSignatureKeyFileName(Exchange exchange) {
+ return exchange.getIn().getHeader(SIGNATURE_KEY_FILE_NAME,
signatureKeyFileName, String.class);
+ }
+
+ protected String findSignatureKeyUserid(Exchange exchange) {
+ return exchange.getIn().getHeader(SIGNATURE_KEY_USERID,
signatureKeyUserid, String.class);
+ }
+
+ protected String findSignatureKeyPassword(Exchange exchange) {
+ return exchange.getIn().getHeader(SIGNATURE_KEY_PASSWORD,
signaturePassword, String.class);
+ }
+
public void marshal(Exchange exchange, Object graph, OutputStream
outputStream) throws Exception {
- PGPPublicKey key =
PGPDataFormatUtil.findPublicKey(exchange.getContext(),
findKeyFileName(exchange), findKeyUserid(exchange));
+ PGPPublicKey key =
PGPDataFormatUtil.findPublicKey(exchange.getContext(),
findKeyFileName(exchange), findKeyUserid(exchange), true);
if (key == null) {
throw new IllegalArgumentException("Public key is null, cannot
proceed");
}
- byte[] plaintextData;
- InputStream plaintextStream = null;
- try {
- plaintextStream = ExchangeHelper.convertToMandatoryType(exchange,
InputStream.class, graph);
- plaintextData = IOUtils.toByteArray(plaintextStream);
- } finally {
- IOUtils.closeQuietly(plaintextStream);
- }
- byte[] compressedData = PGPDataFormatUtil.compress(plaintextData,
PGPLiteralData.CONSOLE, CompressionAlgorithmTags.ZIP);
+ InputStream input = ExchangeHelper.convertToMandatoryType(exchange,
InputStream.class, graph);
if (armored) {
outputStream = new ArmoredOutputStream(outputStream);
@@ -97,15 +131,67 @@ public class PGPDataFormat implements Da
PGPEncryptedDataGenerator encGen = new
PGPEncryptedDataGenerator(PGPEncryptedData.CAST5, integrity, new
SecureRandom(), "BC");
encGen.addMethod(key);
+ OutputStream encOut = encGen.open(outputStream, new byte[BUFFER_SIZE]);
+
+ PGPCompressedDataGenerator comData = new
PGPCompressedDataGenerator(CompressionAlgorithmTags.ZIP);
+ OutputStream comOut = new BufferedOutputStream(comData.open(encOut));
+
+ PGPSignatureGenerator sigGen = createSignatureGenerator(exchange,
comOut);
+
+ PGPLiteralDataGenerator litData = new PGPLiteralDataGenerator();
+ OutputStream litOut = litData.open(comOut, PGPLiteralData.BINARY,
PGPLiteralData.CONSOLE, new Date(), new byte[BUFFER_SIZE]);
- OutputStream encOut = encGen.open(outputStream, compressedData.length);
try {
- encOut.write(compressedData);
+ byte[] buffer = new byte[BUFFER_SIZE];
+ int bytesRead;
+ while ((bytesRead = input.read(buffer)) != -1) {
+ litOut.write(buffer, 0, bytesRead);
+ if (sigGen != null) {
+ sigGen.update(buffer, 0, bytesRead);
+ }
+ litOut.flush();
+ }
} finally {
- IOHelper.close(encOut, outputStream);
+ IOHelper.close(litOut);
+ if (sigGen != null) {
+ sigGen.generate().encode(comOut);
+ }
+ IOHelper.close(comOut, encOut, outputStream, input);
}
}
+ protected PGPSignatureGenerator createSignatureGenerator(Exchange
exchange, OutputStream out)
+ throws IOException, PGPException, NoSuchProviderException,
NoSuchAlgorithmException {
+
+ String sigKeyFileName = findSignatureKeyFileName(exchange);
+ String sigKeyUserid = findSignatureKeyUserid(exchange);
+ String sigKeyPassword = findSignatureKeyPassword(exchange);
+
+ if (sigKeyFileName == null || sigKeyUserid == null || sigKeyPassword
== null) {
+ return null;
+ }
+
+ PGPSecretKey sigSecretKey =
PGPDataFormatUtil.findSecretKey(exchange.getContext(), sigKeyFileName,
sigKeyPassword);
+ if (sigSecretKey == null) {
+ throw new IllegalArgumentException("Signature secret key is null,
cannot proceed");
+ }
+
+ PGPPrivateKey sigPrivateKey =
sigSecretKey.extractPrivateKey(sigKeyPassword.toCharArray(), "BC");
+ if (sigPrivateKey == null) {
+ throw new IllegalArgumentException("Signature private key is null,
cannot proceed");
+ }
+
+ PGPSignatureSubpacketGenerator spGen = new
PGPSignatureSubpacketGenerator();
+ spGen.setSignerUserID(false, sigKeyUserid);
+
+ int algorithm = sigSecretKey.getPublicKey().getAlgorithm();
+ PGPSignatureGenerator sigGen = new PGPSignatureGenerator(algorithm,
HashAlgorithmTags.SHA1, "BC");
+ sigGen.initSign(PGPSignature.BINARY_DOCUMENT, sigPrivateKey);
+ sigGen.setHashedSubpackets(spGen.generate());
+ sigGen.generateOnePassVersion(false).encode(out);
+ return sigGen;
+ }
+
public Object unmarshal(Exchange exchange, InputStream encryptedStream)
throws Exception {
if (encryptedStream == null) {
return null;
@@ -125,36 +211,69 @@ public class PGPDataFormat implements Da
IOUtils.closeQuietly(encryptedStream);
}
- PGPObjectFactory pgpF = new PGPObjectFactory(in);
- PGPEncryptedDataList enc;
- Object o = pgpF.nextObject();
+ PGPObjectFactory pgpFactory = new PGPObjectFactory(in);
+ Object o = pgpFactory.nextObject();
- // the first object might be a PGP marker packet.
+ // the first object might be a PGP marker packet
+ PGPEncryptedDataList enc;
if (o instanceof PGPEncryptedDataList) {
enc = (PGPEncryptedDataList) o;
} else {
- enc = (PGPEncryptedDataList) pgpF.nextObject();
+ enc = (PGPEncryptedDataList) pgpFactory.nextObject();
}
IOHelper.close(in);
PGPPublicKeyEncryptedData pbe = (PGPPublicKeyEncryptedData) enc.get(0);
- InputStream clear = pbe.getDataStream(key, "BC");
+ InputStream encData = pbe.getDataStream(key, "BC");
- PGPObjectFactory pgpFact = new PGPObjectFactory(clear);
- PGPCompressedData cData = (PGPCompressedData) pgpFact.nextObject();
- pgpFact = new PGPObjectFactory(cData.getDataStream());
- PGPLiteralData ld = (PGPLiteralData) pgpFact.nextObject();
+ pgpFactory = new PGPObjectFactory(encData);
+ PGPCompressedData comData = (PGPCompressedData)
pgpFactory.nextObject();
+
+ pgpFactory = new PGPObjectFactory(comData.getDataStream());
+ Object object = pgpFactory.nextObject();
+
+ PGPOnePassSignature signature;
+ if (object instanceof PGPOnePassSignatureList) {
+ signature = getSignature(exchange, (PGPOnePassSignatureList)
object);
+ object = pgpFactory.nextObject();
+ } else {
+ signature = null;
+ }
+
+ PGPLiteralData ld = (PGPLiteralData) object;
+ InputStream litData = ld.getInputStream();
byte[] answer;
try {
- answer = Streams.readAll(ld.getInputStream());
+ answer = Streams.readAll(litData);
} finally {
- IOHelper.close(clear);
+ IOHelper.close(litData, encData, in);
+ }
+
+ if (signature != null) {
+ signature.update(answer);
+ PGPSignatureList sigList = (PGPSignatureList)
pgpFactory.nextObject();
+ if (!signature.verify(sigList.get(0))) {
+ throw new SignatureException("Cannot verify PGP signature");
+ }
}
return answer;
}
+ protected PGPOnePassSignature getSignature(Exchange exchange,
PGPOnePassSignatureList signatureList)
+ throws IOException, PGPException, NoSuchProviderException {
+
+ PGPPublicKey sigPublicKey =
PGPDataFormatUtil.findPublicKey(exchange.getContext(),
findSignatureKeyFileName(exchange), findSignatureKeyUserid(exchange), false);
+ if (sigPublicKey == null) {
+ throw new IllegalArgumentException("Signature public key is null,
cannot proceed");
+ }
+
+ PGPOnePassSignature signature = signatureList.get(0);
+ signature.initVerify(sigPublicKey, "BC");
+ return signature;
+ }
+
/**
* Sets if the encrypted file should be written in ascii visible text
*/
@@ -209,4 +328,37 @@ public class PGPDataFormat implements Da
public String getPassword() {
return password;
}
+
+ /**
+ * Userid of the signature key used to sign/verify
+ */
+ public void setSignatureKeyUserid(String signatureKeyUserid) {
+ this.signatureKeyUserid = signatureKeyUserid;
+ }
+
+ public String getSignatureKeyUserid() {
+ return signatureKeyUserid;
+ }
+
+ /**
+ * filename of the signature keyring that will be used, classpathResource
+ */
+ public void setSignatureKeyFileName(String signatureKeyFileName) {
+ this.signatureKeyFileName = signatureKeyFileName;
+ }
+
+ public String getSignatureKeyFileName() {
+ return signatureKeyFileName;
+ }
+
+ /**
+ * Password used to open the signature private keyring
+ */
+ public void setSignaturePassword(String signaturePassword) {
+ this.signaturePassword = signaturePassword;
+ }
+
+ public String getSignaturePassword() {
+ return signaturePassword;
+ }
}
Modified:
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java?rev=1440072&r1=1440071&r2=1440072&view=diff
==============================================================================
---
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java
(original)
+++
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java
Tue Jan 29 19:28:33 2013
@@ -16,22 +16,16 @@
*/
package org.apache.camel.converter.crypto;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.security.NoSuchProviderException;
-import java.util.Date;
import java.util.Iterator;
import org.apache.camel.CamelContext;
import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ResourceHelper;
-import org.bouncycastle.openpgp.PGPCompressedDataGenerator;
import org.bouncycastle.openpgp.PGPEncryptedDataList;
import org.bouncycastle.openpgp.PGPException;
-import org.bouncycastle.openpgp.PGPLiteralData;
-import org.bouncycastle.openpgp.PGPLiteralDataGenerator;
import org.bouncycastle.openpgp.PGPObjectFactory;
import org.bouncycastle.openpgp.PGPPrivateKey;
import org.bouncycastle.openpgp.PGPPublicKey;
@@ -39,29 +33,36 @@ import org.bouncycastle.openpgp.PGPPubli
import org.bouncycastle.openpgp.PGPPublicKeyRing;
import org.bouncycastle.openpgp.PGPPublicKeyRingCollection;
import org.bouncycastle.openpgp.PGPSecretKey;
+import org.bouncycastle.openpgp.PGPSecretKeyRing;
import org.bouncycastle.openpgp.PGPSecretKeyRingCollection;
import org.bouncycastle.openpgp.PGPUtil;
+import static org.bouncycastle.bcpg.PublicKeyAlgorithmTags.DSA;
+import static org.bouncycastle.bcpg.PublicKeyAlgorithmTags.ECDSA;
+import static org.bouncycastle.bcpg.PublicKeyAlgorithmTags.ELGAMAL_GENERAL;
+import static org.bouncycastle.bcpg.PublicKeyAlgorithmTags.RSA_GENERAL;
+import static org.bouncycastle.bcpg.PublicKeyAlgorithmTags.RSA_SIGN;
+
public final class PGPDataFormatUtil {
private PGPDataFormatUtil() {
}
-
- public static PGPPublicKey findPublicKey(CamelContext context, String
filename, String userid) throws IOException, PGPException,
+
+ public static PGPPublicKey findPublicKey(CamelContext context, String
filename, String userid, boolean forEncryption) throws IOException,
PGPException,
NoSuchProviderException {
InputStream is =
ResourceHelper.resolveMandatoryResourceAsInputStream(context.getClassResolver(),
filename);
- PGPPublicKey privKey;
+ PGPPublicKey pubKey;
try {
- privKey = findPublicKey(context, is, userid);
+ pubKey = findPublicKey(is, userid, forEncryption);
} finally {
IOHelper.close(is);
}
- return privKey;
+ return pubKey;
}
@SuppressWarnings("unchecked")
- public static PGPPublicKey findPublicKey(CamelContext context, InputStream
input, String userid) throws IOException, PGPException,
+ private static PGPPublicKey findPublicKey(InputStream input, String
userid, boolean forEncryption) throws IOException, PGPException,
NoSuchProviderException {
PGPPublicKeyRingCollection pgpSec = new
PGPPublicKeyRingCollection(PGPUtil.getDecoderStream(input));
@@ -76,8 +77,12 @@ public final class PGPDataFormatUtil {
for (Iterator<String> iterator = key.getUserIDs();
iterator.hasNext();) {
keyUserId = iterator.next();
}
- if (key.isEncryptionKey() && keyUserId != null &&
keyUserId.contains(userid)) {
- return key;
+ if (keyUserId != null && keyUserId.contains(userid)) {
+ if (forEncryption && key.isEncryptionKey()) {
+ return key;
+ } else if (!forEncryption && isSignatureKey(key)) {
+ return key;
+ }
}
}
}
@@ -85,6 +90,11 @@ public final class PGPDataFormatUtil {
return null;
}
+ private static boolean isSignatureKey(PGPPublicKey key) {
+ int algorithm = key.getAlgorithm();
+ return algorithm == RSA_GENERAL || algorithm == RSA_SIGN || algorithm
== DSA || algorithm == ECDSA || algorithm == ELGAMAL_GENERAL;
+ }
+
public static PGPPrivateKey findPrivateKey(CamelContext context, String
keychainFilename, InputStream encryptedInput, String passphrase)
throws IOException, PGPException, NoSuchProviderException {
@@ -92,14 +102,14 @@ public final class PGPDataFormatUtil {
PGPPrivateKey privKey = null;
try {
- privKey = findPrivateKey(context, keyChainInputStream,
encryptedInput, passphrase);
+ privKey = findPrivateKey(keyChainInputStream, encryptedInput,
passphrase);
} finally {
IOHelper.close(keyChainInputStream);
}
return privKey;
}
- public static PGPPrivateKey findPrivateKey(CamelContext context,
InputStream keyringInput, InputStream encryptedInput, String passphrase) throws
IOException,
+ private static PGPPrivateKey findPrivateKey(InputStream keyringInput,
InputStream encryptedInput, String passphrase) throws IOException,
PGPException, NoSuchProviderException {
PGPSecretKeyRingCollection pgpSec = new
PGPSecretKeyRingCollection(PGPUtil.getDecoderStream(keyringInput));
PGPObjectFactory factory = new
PGPObjectFactory(PGPUtil.getDecoderStream(encryptedInput));
@@ -122,26 +132,34 @@ public final class PGPDataFormatUtil {
return privateKey;
}
- public static byte[] compress(byte[] clearData, String fileName, int
algorithm) throws IOException {
- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
- PGPCompressedDataGenerator comData = new
PGPCompressedDataGenerator(algorithm);
- OutputStream cos = comData.open(bOut); // open it with the final
destination
-
- PGPLiteralDataGenerator lData = new PGPLiteralDataGenerator();
-
- OutputStream pOut = lData.open(cos, // the compressed output stream
- PGPLiteralData.BINARY, fileName, // "filename" to store
- clearData.length, // length of clear data
- new Date() // current time
- );
+ public static PGPSecretKey findSecretKey(CamelContext context, String
keychainFilename, String passphrase)
+ throws IOException, PGPException, NoSuchProviderException {
+
+ InputStream keyChainInputStream =
ResourceHelper.resolveMandatoryResourceAsInputStream(context.getClassResolver(),
keychainFilename);
+ PGPSecretKey secKey = null;
try {
- pOut.write(clearData);
+ secKey = findSecretKey(keyChainInputStream, passphrase);
} finally {
- IOHelper.close(pOut);
- comData.close();
+ IOHelper.close(keyChainInputStream);
}
- return bOut.toByteArray();
+ return secKey;
}
+ private static PGPSecretKey findSecretKey(InputStream keyringInput, String
passphrase) throws IOException, PGPException, NoSuchProviderException {
+ PGPSecretKey pgpSecKey = null;
+ PGPSecretKeyRingCollection pgpSec = new
PGPSecretKeyRingCollection(PGPUtil.getDecoderStream(keyringInput));
+ for (Iterator<?> i = pgpSec.getKeyRings(); i.hasNext() && pgpSecKey ==
null;) {
+ Object data = i.next();
+ if (data instanceof PGPSecretKeyRing) {
+ PGPSecretKeyRing keyring = (PGPSecretKeyRing) data;
+ PGPSecretKey secKey = keyring.getSecretKey();
+ PGPPrivateKey privateKey =
secKey.extractPrivateKey(passphrase.toCharArray(), "BC");
+ if (privateKey != null) {
+ pgpSecKey = secKey;
+ }
+ }
+ }
+ return pgpSecKey;
+ }
}
Modified:
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/AbstractPGPDataFormatTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/AbstractPGPDataFormatTest.java?rev=1440072&r1=1440071&r2=1440072&view=diff
==============================================================================
---
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/AbstractPGPDataFormatTest.java
(original)
+++
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/AbstractPGPDataFormatTest.java
Tue Jan 29 19:28:33 2013
@@ -17,6 +17,7 @@
package org.apache.camel.converter.crypto;
import java.io.ByteArrayInputStream;
+import java.util.HashMap;
import java.util.Map;
import org.apache.camel.CamelContext;
@@ -27,11 +28,12 @@ import org.apache.camel.test.junit4.Came
public abstract class AbstractPGPDataFormatTest extends CamelTestSupport {
- protected void doRoundTripEncryptionTests(String endpoint, Map<String,
Object> headers) throws Exception {
+ protected void doRoundTripEncryptionTests(String endpoint) throws
Exception {
MockEndpoint encrypted = setupExpectations(context, 3,
"mock:encrypted");
MockEndpoint unencrypted = setupExpectations(context, 3,
"mock:unencrypted");
String payload = "Hi Alice, Be careful Eve is listening, signed Bob";
+ Map<String, Object> headers = getHeaders();
template.sendBodyAndHeaders(endpoint, payload, headers);
template.sendBodyAndHeaders(endpoint, payload.getBytes(), headers);
template.sendBodyAndHeaders(endpoint, new
ByteArrayInputStream(payload.getBytes()), headers);
@@ -39,6 +41,10 @@ public abstract class AbstractPGPDataFor
assertMocksSatisfied(encrypted, unencrypted, payload);
}
+ protected Map<String, Object> getHeaders() {
+ return new HashMap<String, Object>();
+ }
+
protected void assertMocksSatisfied(MockEndpoint encrypted, MockEndpoint
unencrypted, String payload) throws InterruptedException,
InvalidPayloadException {
awaitAndAssert(unencrypted);
awaitAndAssert(encrypted);
Modified:
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatDynamicTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatDynamicTest.java?rev=1440072&r1=1440071&r2=1440072&view=diff
==============================================================================
---
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatDynamicTest.java
(original)
+++
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatDynamicTest.java
Tue Jan 29 19:28:33 2013
@@ -19,38 +19,24 @@ package org.apache.camel.converter.crypt
import java.util.HashMap;
import java.util.Map;
-import org.junit.Test;
-
public class PGPDataFormatDynamicTest extends PGPDataFormatTest {
// setup a wrong userid
protected String getKeyUserId() {
return "wrong";
}
+
// setup a wrong password
protected String getKeyPassword() {
return "wrong";
}
-
- private Map<String, Object> getHeaders() {
+
+ // override wrong userid and password with correct userid and password in
the headers
+ protected Map<String, Object> getHeaders() {
Map<String, Object> headers = new HashMap<String, Object>();
headers.put(PGPDataFormat.KEY_USERID, "[email protected]");
+ headers.put(PGPDataFormat.SIGNATURE_KEY_USERID, "[email protected]");
headers.put(PGPDataFormat.KEY_PASSWORD, "sdude");
+ headers.put(PGPDataFormat.SIGNATURE_KEY_PASSWORD, "sdude");
return headers;
}
-
- @Test
- public void testEncryption() throws Exception {
- doRoundTripEncryptionTests("direct:inline", getHeaders());
- }
-
- @Test
- public void testEncryption2() throws Exception {
- doRoundTripEncryptionTests("direct:inline2", getHeaders());
- }
-
- @Test
- public void testEncryptionArmor() throws Exception {
- doRoundTripEncryptionTests("direct:inline-armor", getHeaders());
- }
-
}
Modified:
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatElGamalTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatElGamalTest.java?rev=1440072&r1=1440071&r2=1440072&view=diff
==============================================================================
---
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatElGamalTest.java
(original)
+++
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatElGamalTest.java
Tue Jan 29 19:28:33 2013
@@ -18,8 +18,7 @@ package org.apache.camel.converter.crypt
import org.junit.Ignore;
-@Ignore("It looks like the bcpg dosen't work well with the JDK of CI"
-+ "The tests are passed in my Mac JDK-1.6.0_33")
+@Ignore("Requires JCE unlimited strength jurisdiction policy files on CI
server")
public class PGPDataFormatElGamalTest extends PGPDataFormatTest {
protected String getKeyFileName() {
return "org/apache/camel/component/crypto/pubring-ElGamal.gpg";
Modified:
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java?rev=1440072&r1=1440071&r2=1440072&view=diff
==============================================================================
---
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java
(original)
+++
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java
Tue Jan 29 19:28:33 2013
@@ -16,8 +16,6 @@
*/
package org.apache.camel.converter.crypto;
-import java.util.HashMap;
-
import org.apache.camel.builder.RouteBuilder;
import org.junit.Test;
@@ -41,17 +39,22 @@ public class PGPDataFormatTest extends A
@Test
public void testEncryption() throws Exception {
- doRoundTripEncryptionTests("direct:inline", new HashMap<String,
Object>());
+ doRoundTripEncryptionTests("direct:inline");
}
@Test
public void testEncryption2() throws Exception {
- doRoundTripEncryptionTests("direct:inline2", new HashMap<String,
Object>());
+ doRoundTripEncryptionTests("direct:inline2");
}
@Test
public void testEncryptionArmor() throws Exception {
- doRoundTripEncryptionTests("direct:inline-armor", new HashMap<String,
Object>());
+ doRoundTripEncryptionTests("direct:inline-armor");
+ }
+
+ @Test
+ public void testEncryptionSigned() throws Exception {
+ doRoundTripEncryptionTests("direct:inline-sign");
}
protected RouteBuilder createRouteBuilder() {
@@ -96,6 +99,26 @@ public class PGPDataFormatTest extends A
.unmarshal().pgp(keyFileNameSec, keyUserid,
keyPassword, true, true)
.to("mock:unencrypted");
// END SNIPPET: pgp-format-header
+
+ PGPDataFormat pgpSignAndEncrypt = new PGPDataFormat();
+ pgpSignAndEncrypt.setKeyFileName(keyFileName);
+ pgpSignAndEncrypt.setKeyUserid(keyUserid);
+ pgpSignAndEncrypt.setSignatureKeyFileName(keyFileNameSec);
+ pgpSignAndEncrypt.setSignatureKeyUserid(keyUserid);
+ pgpSignAndEncrypt.setSignaturePassword(keyPassword);
+
+ PGPDataFormat pgpVerifyAndDecrypt = new PGPDataFormat();
+ pgpVerifyAndDecrypt.setKeyFileName(keyFileNameSec);
+ pgpVerifyAndDecrypt.setKeyUserid(keyUserid);
+ pgpVerifyAndDecrypt.setPassword(keyPassword);
+ pgpVerifyAndDecrypt.setSignatureKeyFileName(keyFileName);
+ pgpVerifyAndDecrypt.setSignatureKeyUserid(keyUserid);
+
+ from("direct:inline-sign")
+ .marshal(pgpSignAndEncrypt)
+ .to("mock:encrypted")
+ .unmarshal(pgpVerifyAndDecrypt)
+ .to("mock:unencrypted");
}
};
}
Modified:
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/SpringPGPDataFormatTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/SpringPGPDataFormatTest.java?rev=1440072&r1=1440071&r2=1440072&view=diff
==============================================================================
---
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/SpringPGPDataFormatTest.java
(original)
+++
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/SpringPGPDataFormatTest.java
Tue Jan 29 19:28:33 2013
@@ -16,8 +16,6 @@
*/
package org.apache.camel.converter.crypto;
-import java.util.HashMap;
-
import org.apache.camel.CamelContext;
import org.apache.camel.spring.SpringCamelContext;
import org.junit.Test;
@@ -30,7 +28,7 @@ public class SpringPGPDataFormatTest ext
@Test
public void testEncryption() throws Exception {
- doRoundTripEncryptionTests("direct:inline", new HashMap<String,
Object>());
+ doRoundTripEncryptionTests("direct:inline");
}
}