Return-Path: Delivered-To: apmail-incubator-abdera-commits-archive@locus.apache.org Received: (qmail 87763 invoked from network); 6 Sep 2006 16:28:25 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 6 Sep 2006 16:28:25 -0000 Received: (qmail 89665 invoked by uid 500); 6 Sep 2006 16:28:25 -0000 Delivered-To: apmail-incubator-abdera-commits-archive@incubator.apache.org Received: (qmail 89644 invoked by uid 500); 6 Sep 2006 16:28:25 -0000 Mailing-List: contact abdera-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: abdera-dev@incubator.apache.org Delivered-To: mailing list abdera-commits@incubator.apache.org Received: (qmail 89635 invoked by uid 99); 6 Sep 2006 16:28:25 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 06 Sep 2006 09:28:25 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 06 Sep 2006 09:28:24 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 297E51A981A; Wed, 6 Sep 2006 09:28:04 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r440769 - in /incubator/abdera/java/trunk/security/src/test: java/org/ java/org/apache/ java/org/apache/abdera/ java/org/apache/abdera/test/ java/org/apache/abdera/test/security/ resources/ Date: Wed, 06 Sep 2006 16:28:03 -0000 To: abdera-commits@incubator.apache.org From: jmsnell@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20060906162804.297E51A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: jmsnell Date: Wed Sep 6 09:28:02 2006 New Revision: 440769 URL: http://svn.apache.org/viewvc?view=rev&rev=440769 Log: Adding security module tests. * Test XML digital signature creation, verification, roundtrip * Test XML Encryption roundtrip Added: incubator/abdera/java/trunk/security/src/test/java/org/ incubator/abdera/java/trunk/security/src/test/java/org/apache/ incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/ incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/ incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/ incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/DigitalSignatureTest.java incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/EncryptionTest.java incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/TestSuite.java incubator/abdera/java/trunk/security/src/test/resources/ incubator/abdera/java/trunk/security/src/test/resources/key.jks (with props) incubator/abdera/java/trunk/security/src/test/resources/log4j.properties Added: incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/DigitalSignatureTest.java URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/DigitalSignatureTest.java?view=auto&rev=440769 ============================================================================== --- incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/DigitalSignatureTest.java (added) +++ incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/DigitalSignatureTest.java Wed Sep 6 09:28:02 2006 @@ -0,0 +1,109 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. 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. For additional information regarding +* copyright in this work, please see the NOTICE file in the top level +* directory of this distribution. +*/ +package org.apache.abdera.test.security; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.security.KeyStore; +import java.security.PrivateKey; +import java.security.cert.X509Certificate; + +import javax.xml.namespace.QName; + +import junit.framework.TestCase; + +import org.apache.abdera.Abdera; +import org.apache.abdera.factory.Factory; +import org.apache.abdera.model.Document; +import org.apache.abdera.model.Entry; +import org.apache.abdera.security.AbderaSecurity; +import org.apache.abdera.security.Signature; +import org.apache.abdera.security.SignatureOptions; + +public class DigitalSignatureTest extends TestCase { + + private static final String keystoreFile = "/key.jks"; + private static final String keystoreType = "JKS"; + private static final String keystorePass = "testing"; + private static final String privateKeyAlias = "James"; + private static final String privateKeyPass = "testing"; + private static final String certificateAlias = "James"; + + public static void testSignEntry() throws Exception { + + // Initialize the keystore + KeyStore ks = KeyStore.getInstance(keystoreType); + assertNotNull(ks); + + InputStream in = DigitalSignatureTest.class.getResourceAsStream(keystoreFile); + assertNotNull(in); + + ks.load(in, keystorePass.toCharArray()); + PrivateKey signingKey = + (PrivateKey) ks.getKey( + privateKeyAlias, + privateKeyPass.toCharArray()); + X509Certificate cert = + (X509Certificate) ks.getCertificate( + certificateAlias); + assertNotNull(signingKey); + assertNotNull(cert); + + // Create the entry to sign + Abdera abdera = new Abdera(); + AbderaSecurity absec = new AbderaSecurity(abdera); + Factory factory = abdera.getFactory(); + + Entry entry = factory.newEntry(); + entry.setId("http://example.org/foo/entry"); + entry.setUpdated(new java.util.Date()); + entry.setTitle("This is an entry"); + entry.setContentAsXhtml("This is markup"); + entry.addAuthor("James"); + entry.addLink("http://www.example.org"); + + // Prepare the digital signature options + Signature sig = absec.getSignature(); + SignatureOptions options = sig.getDefaultSignatureOptions(); + options.setCertificate(cert); + options.setSigningKey(signingKey); + + // Sign the entry + entry = sig.sign(entry, options); + assertNotNull( + entry.getFirstChild( + new QName( + "http://www.w3.org/2000/09/xmldsig#", + "Signature"))); + + // Check the round trip + ByteArrayOutputStream out = new ByteArrayOutputStream(); + entry.writeTo(out); // do not use the pretty writer, it will break the signature + ByteArrayInputStream bais = new ByteArrayInputStream(out.toByteArray()); + Document entry_doc = abdera.getParser().parse(bais); + entry = entry_doc.getRoot(); + assertTrue(sig.verify(entry, null)); // the signature better still be valid + + entry.setTitle("Change the title"); + + assertFalse(sig.verify(entry, null)); // the signature better be invalid + + } + +} Added: incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/EncryptionTest.java URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/EncryptionTest.java?view=auto&rev=440769 ============================================================================== --- incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/EncryptionTest.java (added) +++ incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/EncryptionTest.java Wed Sep 6 09:28:02 2006 @@ -0,0 +1,93 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. 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. For additional information regarding +* copyright in this work, please see the NOTICE file in the top level +* directory of this distribution. +*/ +package org.apache.abdera.test.security; + +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.xml.namespace.QName; + +import org.apache.abdera.Abdera; +import org.apache.abdera.factory.Factory; +import org.apache.abdera.model.Document; +import org.apache.abdera.model.Entry; +import org.apache.abdera.security.AbderaSecurity; +import org.apache.abdera.security.Encryption; +import org.apache.abdera.security.EncryptionOptions; + +import junit.framework.TestCase; + +public class EncryptionTest extends TestCase { + + /** + * The bouncy castle JCE provider is required to run this test + */ + @SuppressWarnings("unchecked") + public static void testEncryption() throws Exception { + + try { + Class.forName("org.bouncycastle.LICENSE"); + } catch (Exception e) { + EncryptionTest.fail("The Bouncy Castle JCE Provider is not available"); + } + + // Generate Encryption Key + String jceAlgorithmName = "AES"; + KeyGenerator keyGenerator = + KeyGenerator.getInstance(jceAlgorithmName); + keyGenerator.init(128); + SecretKey key = keyGenerator.generateKey(); + + // Create the entry to encrypt + Abdera abdera = new Abdera(); + AbderaSecurity absec = new AbderaSecurity(abdera); + Factory factory = abdera.getFactory(); + + Entry entry = factory.newEntry(); + entry.setId("http://example.org/foo/entry"); + entry.setUpdated(new java.util.Date()); + entry.setTitle("This is an entry"); + entry.setContentAsXhtml("This is markup"); + entry.addAuthor("James"); + entry.addLink("http://www.example.org"); + + // Prepare the encryption options + Encryption enc = absec.getEncryption(); + EncryptionOptions options = enc.getDefaultEncryptionOptions(); + options.setDataEncryptionKey(key); + + // Encrypt the document using the generated key + Document enc_doc = enc.encrypt(entry.getDocument(), options); + + assertEquals( + enc_doc.getRoot().getQName(), + new QName( + "http://www.w3.org/2001/04/xmlenc#", + "EncryptedData")); + + // Decrypt the document using the generated key + Document entry_doc = enc.decrypt(enc_doc, options); + + assertTrue(entry_doc.getRoot() instanceof Entry); + + assertEquals( + entry_doc.getRoot().getId().toString(), + "http://example.org/foo/entry"); + + } + +} Added: incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/TestSuite.java URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/TestSuite.java?view=auto&rev=440769 ============================================================================== --- incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/TestSuite.java (added) +++ incubator/abdera/java/trunk/security/src/test/java/org/apache/abdera/test/security/TestSuite.java Wed Sep 6 09:28:02 2006 @@ -0,0 +1,31 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. 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. For additional information regarding +* copyright in this work, please see the NOTICE file in the top level +* directory of this distribution. +*/ +package org.apache.abdera.test.security; + +public class TestSuite extends junit.framework.TestSuite { + + public static void main(String[] args) { + junit.textui.TestRunner.run(new TestSuite()); + } + + public TestSuite() { + addTestSuite(DigitalSignatureTest.class); + addTestSuite(EncryptionTest.class); + } + +} Added: incubator/abdera/java/trunk/security/src/test/resources/key.jks URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/security/src/test/resources/key.jks?view=auto&rev=440769 ============================================================================== Binary file - no diff available. Propchange: incubator/abdera/java/trunk/security/src/test/resources/key.jks ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: incubator/abdera/java/trunk/security/src/test/resources/log4j.properties URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/security/src/test/resources/log4j.properties?view=auto&rev=440769 ============================================================================== --- incubator/abdera/java/trunk/security/src/test/resources/log4j.properties (added) +++ incubator/abdera/java/trunk/security/src/test/resources/log4j.properties Wed Sep 6 09:28:02 2006 @@ -0,0 +1,5 @@ +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.err +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%c{1}.%M: %m%n +log4j.rootLogger=warn, stdout \ No newline at end of file