You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/08/22 15:07:58 UTC

git commit: CAMEL-6657: improve unit test of camel-crypto. Thanks to Colm for the patch.

Updated Branches:
  refs/heads/master 1685f8f6c -> 5a0697421


CAMEL-6657: improve unit test of camel-crypto. Thanks to Colm 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/5a069742
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5a069742
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5a069742

Branch: refs/heads/master
Commit: 5a0697421efd930146953b1be0f98651b37c5698
Parents: 1685f8f
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Aug 22 15:07:48 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Aug 22 15:07:48 2013 +0200

----------------------------------------------------------------------
 .../crypto/DigitalSignatureConfiguration.java   |   2 +-
 .../component/crypto/ECDSASignatureTest.java    | 139 +++++++++++++++++++
 .../camel/component/crypto/SignatureTests.java  |  44 +++++-
 .../converter/crypto/CryptoDataFormatTest.java  | 115 ++++++++++++++-
 .../crypto/SpringCryptoDataFormatTest.java      |  14 ++
 .../crypto/SpringCryptoDataFormatTest.xml       |  51 +++++++
 .../component/crypto/SpringSignatureTests.xml   |  18 +++
 .../org/apache/camel/component/crypto/ecdsa.jks | Bin 0 -> 850 bytes
 8 files changed, 377 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/5a069742/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java
index c7ee58a..b7a1873 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java
@@ -33,7 +33,7 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa
     private PrivateKey privateKey;
     private KeyStore keystore;
     private SecureRandom secureRandom;
-    private String algorithm = "DSA";
+    private String algorithm = "SHA1WithDSA";
     private Integer bufferSize = Integer.valueOf(2048);
     private String provider;
     private String signatureHeaderName;

http://git-wip-us.apache.org/repos/asf/camel/blob/5a069742/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/ECDSASignatureTest.java
----------------------------------------------------------------------
diff --git a/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/ECDSASignatureTest.java b/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/ECDSASignatureTest.java
new file mode 100644
index 0000000..85f5981
--- /dev/null
+++ b/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/ECDSASignatureTest.java
@@ -0,0 +1,139 @@
+/**
+ * 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.crypto;
+
+import java.io.InputStream;
+import java.lang.reflect.Constructor;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.Security;
+import java.security.cert.X509Certificate;
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ECDSASignatureTest extends CamelTestSupport {
+
+    private String payload = "Dear Alice, Rest assured it's me, signed Bob";
+    private boolean ibmJDK;
+
+    public ECDSASignatureTest() throws Exception {
+        //
+        // BouncyCastle is required for ECDSA support for JDK 1.6
+        //
+        if (System.getProperty("java.version").startsWith("1.6")
+            && Security.getProvider("BC") == null) {
+            Constructor<?> cons = null;
+            Class<?> c = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
+            cons = c.getConstructor(new Class[] {});
+            
+            Provider provider = (java.security.Provider)cons.newInstance();
+            Security.insertProviderAt(provider, 2);
+        }
+        
+        //
+        // This test fails with the IBM JDK
+        //
+        if ("IBM Corporation".equals(System.getProperty("java.vendor"))) {
+            ibmJDK = true;
+        }
+    }
+    
+    @Override
+    protected RouteBuilder[] createRouteBuilders() throws Exception {
+        if (ibmJDK) {
+            return new RouteBuilder[] {};
+        }
+
+        return new RouteBuilder[]{new RouteBuilder() {
+            public void configure() throws Exception {
+                // START SNIPPET: ecdsa-sha1
+                KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
+                InputStream in = ECDSASignatureTest.class.getResourceAsStream("/org/apache/camel/component/crypto/ecdsa.jks");
+                keyStore.load(in, "security".toCharArray());
+                PrivateKey privateKey = 
+                    (PrivateKey)keyStore.getKey("ECDSA", "security".toCharArray());
+                X509Certificate x509 = (X509Certificate)keyStore.getCertificate("ECDSA");
+
+                // we can set the keys explicitly on the endpoint instances.
+                context.getEndpoint("crypto:sign://ecdsa-sha1?algorithm=SHA1withECDSA", DigitalSignatureEndpoint.class).setPrivateKey(privateKey);
+                context.getEndpoint("crypto:verify://ecdsa-sha1?algorithm=SHA1withECDSA", DigitalSignatureEndpoint.class).setPublicKey(x509.getPublicKey());
+                from("direct:ecdsa-sha1").to("crypto:sign://ecdsa-sha1?algorithm=SHA1withECDSA", "crypto:verify://ecdsa-sha1?algorithm=SHA1withECDSA", "mock:result");
+                // END SNIPPET: ecdsa-sha1
+            }
+        }};
+    }
+
+    @Test
+    public void testECDSASHA1() throws Exception {
+        if (ibmJDK) {
+            return;
+        }
+        setupMock();
+        sendBody("direct:ecdsa-sha1", payload);
+        assertMockEndpointsSatisfied();
+    }
+    
+    private MockEndpoint setupMock() {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived(payload);
+        return mock;
+    }
+
+    public Exchange doTestSignatureRoute(RouteBuilder builder) throws Exception {
+        return doSignatureRouteTest(builder, null, Collections.<String, Object>emptyMap());
+    }
+
+    public Exchange doSignatureRouteTest(RouteBuilder builder, Exchange e, Map<String, Object> headers) throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        try {
+            context.addRoutes(builder);
+            context.start();
+
+            MockEndpoint mock = context.getEndpoint("mock:result", MockEndpoint.class);
+            mock.setExpectedMessageCount(1);
+
+            ProducerTemplate template = context.createProducerTemplate();
+            if (e != null) {
+                template.send("direct:in", e);
+            } else {
+                template.sendBodyAndHeaders("direct:in", payload, headers);
+            }
+            assertMockEndpointsSatisfied();
+            return mock.getReceivedExchanges().get(0);
+        } finally {
+            context.stop();
+        }
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        disableJMX();
+        super.setUp();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/5a069742/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java
----------------------------------------------------------------------
diff --git a/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java b/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java
index 3240ba2..5751515 100644
--- a/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java
+++ b/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java
@@ -72,9 +72,7 @@ public class SignatureTests extends CamelTestSupport {
         }, new RouteBuilder() {
             public void configure() throws Exception {
                 // START SNIPPET: algorithm
-                KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
-                keyGen.initialize(512, new SecureRandom());
-                keyPair = keyGen.generateKeyPair();
+                keyPair = getKeyPair("RSA");
                 PrivateKey privateKey = keyPair.getPrivate();
                 PublicKey publicKey = keyPair.getPublic();
 
@@ -86,6 +84,32 @@ public class SignatureTests extends CamelTestSupport {
             }
         }, new RouteBuilder() {
             public void configure() throws Exception {
+                // START SNIPPET: rsa-sha1
+                keyPair = getKeyPair("RSA");
+                PrivateKey privateKey = keyPair.getPrivate();
+                PublicKey publicKey = keyPair.getPublic();
+
+                // we can set the keys explicitly on the endpoint instances.
+                context.getEndpoint("crypto:sign://rsa?algorithm=SHA1withRSA", DigitalSignatureEndpoint.class).setPrivateKey(privateKey);
+                context.getEndpoint("crypto:verify://rsa?algorithm=SHA1withRSA", DigitalSignatureEndpoint.class).setPublicKey(publicKey);
+                from("direct:rsa-sha1").to("crypto:sign://rsa?algorithm=SHA1withRSA", "crypto:verify://rsa?algorithm=SHA1withRSA", "mock:result");
+                // END SNIPPET: rsa-sha1
+            }
+        }, new RouteBuilder() {
+            public void configure() throws Exception {
+                // START SNIPPET: rsa-sha256
+                keyPair = getKeyPair("RSA");
+                PrivateKey privateKey = keyPair.getPrivate();
+                PublicKey publicKey = keyPair.getPublic();
+
+                // we can set the keys explicitly on the endpoint instances.
+                context.getEndpoint("crypto:sign://rsa?algorithm=SHA256withRSA", DigitalSignatureEndpoint.class).setPrivateKey(privateKey);
+                context.getEndpoint("crypto:verify://rsa?algorithm=SHA256withRSA", DigitalSignatureEndpoint.class).setPublicKey(publicKey);
+                from("direct:rsa-sha256").to("crypto:sign://rsa?algorithm=SHA256withRSA", "crypto:verify://rsa?algorithm=SHA256withRSA", "mock:result");
+                // END SNIPPET: rsa-sha256
+            }
+        }, new RouteBuilder() {
+            public void configure() throws Exception {
                 // START SNIPPET: buffersize
                 from("direct:buffersize").to("crypto:sign://buffer?privateKey=#myPrivateKey&buffersize=1024", "crypto:verify://buffer?publicKey=#myPublicKey&buffersize=1024", "mock:result");
                 // END SNIPPET: buffersize
@@ -163,6 +187,20 @@ public class SignatureTests extends CamelTestSupport {
         sendBody("direct:algorithm", payload);
         assertMockEndpointsSatisfied();
     }
+    
+    @Test
+    public void testRSASHA1() throws Exception {
+        setupMock();
+        sendBody("direct:rsa-sha1", payload);
+        assertMockEndpointsSatisfied();
+    }
+    
+    @Test
+    public void testRSASHA256() throws Exception {
+        setupMock();
+        sendBody("direct:rsa-sha256", payload);
+        assertMockEndpointsSatisfied();
+    }
 
     @Test
     public void testSetBufferInRouteDefinition() throws Exception {

http://git-wip-us.apache.org/repos/asf/camel/blob/5a069742/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/CryptoDataFormatTest.java
----------------------------------------------------------------------
diff --git a/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/CryptoDataFormatTest.java b/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/CryptoDataFormatTest.java
index 9d0f5a9..180af28 100644
--- a/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/CryptoDataFormatTest.java
+++ b/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/CryptoDataFormatTest.java
@@ -18,10 +18,14 @@ package org.apache.camel.converter.crypto;
 
 import java.io.ByteArrayInputStream;
 import java.security.Key;
+import java.security.SecureRandom;
 import java.util.Collections;
 import java.util.Map;
+
+import javax.crypto.Cipher;
 import javax.crypto.KeyGenerator;
 import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
@@ -29,7 +33,6 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.Test;
 
 public class CryptoDataFormatTest extends CamelTestSupport {
@@ -58,7 +61,12 @@ public class CryptoDataFormatTest extends CamelTestSupport {
     public void testSymmetricWithMD5HMAC() throws Exception {
         doRoundTripEncryptionTests("direct:hmac-algorithm");
     }
-
+    
+    @Test
+    public void testSymmetricWithSHA256HMAC() throws Exception {
+        doRoundTripEncryptionTests("direct:hmac-sha-256-algorithm");
+    }
+    
     @Test
     public void testKeySuppliedAsHeader() throws Exception {
         KeyGenerator generator = KeyGenerator.getInstance("DES");
@@ -81,6 +89,23 @@ public class CryptoDataFormatTest extends CamelTestSupport {
         Exchange received = mock.getReceivedExchanges().get(0);
         validateHeaderIsCleared(received);
     }
+    
+    @Test
+    public void test3DESECBSymmetric() throws Exception {
+        doRoundTripEncryptionTests("direct:3des-ecb-encryption");
+    }
+    
+    @Test
+    public void test3DESCBCSymmetric() throws Exception {
+        doRoundTripEncryptionTests("direct:3des-cbc-encryption");
+    }
+    
+    @Test
+    public void testAES128ECBSymmetric() throws Exception {
+        if (checkUnrestrictedPoliciesInstalled()) {
+            doRoundTripEncryptionTests("direct:aes-128-ecb-encryption");
+        }
+    }
 
     private void validateHeaderIsCleared(Exchange ex) {
         Object header = ex.getIn().getHeader(CryptoDataFormat.KEY);
@@ -199,6 +224,22 @@ public class CryptoDataFormatTest extends CamelTestSupport {
             }
         }, new RouteBuilder() {
             public void configure() throws Exception {
+                // START SNIPPET: hmac-sha256-algorithm
+                KeyGenerator generator = KeyGenerator.getInstance("DES");
+
+                CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES", generator.generateKey());
+                cryptoFormat.setShouldAppendHMAC(true);
+                cryptoFormat.setMacAlgorithm("HmacSHA256");
+
+                from("direct:hmac-sha-256-algorithm")
+                    .marshal(cryptoFormat)
+                    .to("mock:encrypted")
+                    .unmarshal(cryptoFormat)
+                    .to("mock:unencrypted");
+                // END SNIPPET: hmac-sha256-algorithm
+            }
+        }, new RouteBuilder() {
+            public void configure() throws Exception {
                 // START SNIPPET: key-in-header
                 CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES", null);
                 /**
@@ -221,6 +262,57 @@ public class CryptoDataFormatTest extends CamelTestSupport {
                 }).to("mock:unencrypted");
                 // END SNIPPET: key-in-header
             }
+        }, new RouteBuilder() {
+            public void configure() throws Exception {
+                // START SNIPPET: 3DES-ECB
+                KeyGenerator generator = KeyGenerator.getInstance("DESede");
+
+                CryptoDataFormat cryptoFormat = new CryptoDataFormat("DESede/ECB/PKCS5Padding", generator.generateKey());
+                
+                from("direct:3des-ecb-encryption")
+                    .marshal(cryptoFormat)
+                    .to("mock:encrypted")
+                    .unmarshal(cryptoFormat)
+                    .to("mock:unencrypted");
+                // END SNIPPET: 3DES-ECB
+            }
+        }, new RouteBuilder() {
+            public void configure() throws Exception {
+                // START SNIPPET: 3DES-CBC
+                KeyGenerator generator = KeyGenerator.getInstance("DES");
+                byte[] iv = new byte[8];
+                SecureRandom random = new SecureRandom();
+                random.nextBytes(iv);
+                Key key = generator.generateKey();
+
+                CryptoDataFormat encCryptoFormat = new CryptoDataFormat("DES/CBC/PKCS5Padding", key);
+                encCryptoFormat.setInitializationVector(iv);
+                encCryptoFormat.setShouldInlineInitializationVector(true);
+                
+                CryptoDataFormat decCryptoFormat = new CryptoDataFormat("DES/CBC/PKCS5Padding", key);
+                decCryptoFormat.setShouldInlineInitializationVector(true);
+                
+                from("direct:3des-cbc-encryption")
+                    .marshal(encCryptoFormat)
+                    .to("mock:encrypted")
+                    .unmarshal(decCryptoFormat)
+                    .to("mock:unencrypted");
+                // END SNIPPET: 3DES-CBC
+            }
+        }, new RouteBuilder() {
+            public void configure() throws Exception {
+                // START SNIPPET: AES-128-ECB
+                KeyGenerator generator = KeyGenerator.getInstance("AES");
+
+                CryptoDataFormat cryptoFormat = new CryptoDataFormat("AES/ECB/PKCS5Padding", generator.generateKey());
+                
+                from("direct:aes-128-ecb-encryption")
+                    .marshal(cryptoFormat)
+                    .to("mock:encrypted")
+                    .unmarshal(cryptoFormat)
+                    .to("mock:unencrypted");
+                // END SNIPPET: AES-128-ECB
+            }
         }};
     }
 
@@ -233,5 +325,24 @@ public class CryptoDataFormatTest extends CamelTestSupport {
         mockEp.expectedMessageCount(expected);
         return mockEp;
     }
+    
+    public static boolean checkUnrestrictedPoliciesInstalled() {
+        try {
+            byte[] data = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
+
+            SecretKey key192 = new SecretKeySpec(
+                new byte[] {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                            0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+                            0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17},
+                            "AES");
+            Cipher c = Cipher.getInstance("AES");
+            c.init(Cipher.ENCRYPT_MODE, key192);
+            c.doFinal(data);
+            return true;
+        } catch (Exception e) {
+            //
+        }
+        return false;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/5a069742/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/SpringCryptoDataFormatTest.java
----------------------------------------------------------------------
diff --git a/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/SpringCryptoDataFormatTest.java b/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/SpringCryptoDataFormatTest.java
index 27467c7..f472690 100644
--- a/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/SpringCryptoDataFormatTest.java
+++ b/components/camel-crypto/src/test/java/org/apache/camel/converter/crypto/SpringCryptoDataFormatTest.java
@@ -27,6 +27,8 @@ import org.apache.camel.spring.SpringCamelContext;
 public class SpringCryptoDataFormatTest extends CryptoDataFormatTest {
 
     private static Key deskey;
+    private static Key desEdekey;
+    private static Key aeskey;
 
     @Override
     protected RouteBuilder[] createRouteBuilders() throws Exception {
@@ -36,12 +38,24 @@ public class SpringCryptoDataFormatTest extends CryptoDataFormatTest {
     protected CamelContext createCamelContext() throws Exception {
         KeyGenerator generator = KeyGenerator.getInstance("DES");
         deskey = generator.generateKey();
+        generator = KeyGenerator.getInstance("DESede");
+        desEdekey = generator.generateKey();
+        generator = KeyGenerator.getInstance("AES");
+        aeskey = generator.generateKey();
         return SpringCamelContext.springCamelContext("/org/apache/camel/component/crypto/SpringCryptoDataFormatTest.xml");
     }
 
     public static Key getDesKey() {
         return deskey;
     }
+    
+    public static Key getDesEdeKey() {
+        return desEdekey;
+    }
+    
+    public static Key getAESKey() {
+        return aeskey;
+    }
 
     public static byte[] getIV() {
         return new byte[] {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};

http://git-wip-us.apache.org/repos/asf/camel/blob/5a069742/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringCryptoDataFormatTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringCryptoDataFormatTest.xml b/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringCryptoDataFormatTest.xml
index 0bba99f..b2ad9f4 100644
--- a/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringCryptoDataFormatTest.xml
+++ b/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringCryptoDataFormatTest.xml
@@ -44,9 +44,26 @@
       <crypto id="hmac-algorithm" algorithm="DES" keyRef="desKey" macAlgorithm="HmacMD5" shouldAppendHMAC="true" />
       <!-- END SNIPPET: hmac-algorithm -->
       
+      <!-- START SNIPPET: hmac-sha-256-algorithm -->
+      <crypto id="hmac-sha-256-algorithm" algorithm="DES" keyRef="desKey" macAlgorithm="HmacSHA256" shouldAppendHMAC="true" />
+      <!-- END SNIPPET: hmac-sha-256-algorithm -->
+      
       <!-- START SNIPPET: header-key -->
       <crypto id="nokey" algorithm="DES" />
       <!-- END SNIPPET: header-key -->
+      
+      <!-- START SNIPPET: tripledes-ecb-encryption -->
+      <crypto id="tripledes-ecb-encryption" algorithm="DESede/ECB/PKCS5Padding" keyRef="desEdeKey" />
+      <!-- END SNIPPET: tripledes-ecb-encryption -->
+      
+      <!-- START SNIPPET: tripledes-cbc-encryption -->
+      <crypto id="tripledes-cbc-encryption-encrypt" algorithm="DESede/CBC/PKCS5Padding" keyRef="desEdeKey" initVectorRef="initializationVector" inline="true" />
+      <crypto id="tripledes-cbc-encryption-decrypt" algorithm="DESede/CBC/PKCS5Padding" keyRef="desEdeKey" inline="true" />
+      <!-- END SNIPPET: tripledes-cbc-encryption -->
+      
+      <!-- START SNIPPET: aes-128-ecb-encryption -->
+      <crypto id="aes-128-ecb-encryption" algorithm="AES/ECB/PKCS5Padding" keyRef="aesKey" />
+      <!-- END SNIPPET: aes-128-ecb-encryption -->
     </dataFormats>
     
     <route>
@@ -90,6 +107,14 @@
     </route>
     
     <route>
+      <from uri="direct:hmac-sha-256-algorithm" />
+      <marshal ref="hmac-sha-256-algorithm" />
+      <to uri="mock:encrypted" />
+      <unmarshal ref="hmac-sha-256-algorithm" />
+      <to uri="mock:unencrypted" />
+    </route>
+    
+    <route>
       <from uri="direct:key-in-header-encrypt" />
       <marshal ref="nokey" />
       <setHeader headerName="CamelCryptoKey">
@@ -107,9 +132,35 @@
       <to uri="mock:unencrypted" />
     </route>
     
+    <route>
+      <from uri="direct:3des-ecb-encryption" />
+      <marshal ref="tripledes-ecb-encryption" />
+      <to uri="mock:encrypted" />
+      <unmarshal ref="tripledes-ecb-encryption" />
+      <to uri="mock:unencrypted" />
+    </route>
+    
+    <route>
+      <from uri="direct:3des-cbc-encryption" />
+      <marshal ref="tripledes-cbc-encryption-encrypt" />
+      <to uri="mock:encrypted" />
+      <unmarshal ref="tripledes-cbc-encryption-decrypt" />
+      <to uri="mock:unencrypted" />
+    </route>
+    
+    <route>
+      <from uri="direct:aes-128-ecb-encryption" />
+      <marshal ref="aes-128-ecb-encryption" />
+      <to uri="mock:encrypted" />
+      <unmarshal ref="aes-128-ecb-encryption" />
+      <to uri="mock:unencrypted" />
+    </route>
+    
   </camelContext>
   
   <bean id="desKey" class="org.apache.camel.converter.crypto.SpringCryptoDataFormatTest" factory-method="getDesKey" />
+  <bean id="desEdeKey" class="org.apache.camel.converter.crypto.SpringCryptoDataFormatTest" factory-method="getDesEdeKey" />
+  <bean id="aesKey" class="org.apache.camel.converter.crypto.SpringCryptoDataFormatTest" factory-method="getAESKey" />
   <bean id="initializationVector" class="org.apache.camel.converter.crypto.SpringCryptoDataFormatTest" factory-method="getIV" />
   
 </beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/5a069742/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml
----------------------------------------------------------------------
diff --git a/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml b/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml
index 9ee0579..04cef37 100644
--- a/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml
+++ b/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml
@@ -41,6 +41,24 @@
         </route>        
         <!-- END SNIPPET: algorithm -->
         
+        <!-- START SNIPPET: rsa-sha1 -->
+        <route>
+            <from uri="direct:rsa-sha1"/>
+            <to uri="crypto:sign://rsa?algorithm=SHA1withRSA&amp;privateKey=#rsaPrivateKey" />
+            <to uri="crypto:verify://rsa?algorithm=SHA1withRSA&amp;publicKey=#rsaPublicKey" />
+            <to uri="mock:result"/>
+        </route>        
+        <!-- END SNIPPET: rsa-sha1 -->
+        
+        <!-- START SNIPPET: rsa-sha256 -->
+        <route>
+            <from uri="direct:rsa-sha256"/>
+            <to uri="crypto:sign://rsa?algorithm=SHA256withRSA&amp;privateKey=#rsaPrivateKey" />
+            <to uri="crypto:verify://rsa?algorithm=SHA256withRSA&amp;publicKey=#rsaPublicKey" />
+            <to uri="mock:result"/>
+        </route>        
+        <!-- END SNIPPET: rsa-sha256 -->
+        
         <!-- START SNIPPET: buffersize -->
         <route>
             <from uri="direct:buffersize" />

http://git-wip-us.apache.org/repos/asf/camel/blob/5a069742/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/ecdsa.jks
----------------------------------------------------------------------
diff --git a/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/ecdsa.jks b/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/ecdsa.jks
new file mode 100644
index 0000000..699e0b7
Binary files /dev/null and b/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/ecdsa.jks differ