1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @author Vladimir N. Molotkov
208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.java.security.serialization;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.Serializable;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Key;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.KeyPair;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.tests.support.PrivateKeyStub;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.tests.support.PublicKeyStub;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests for <code>KeyPair</code> serialization
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class KeyPairTest extends TestCase {
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // key pair for testing
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private KeyPair keyPair;
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() throws Exception {
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PrivateKeyStub privateKey = new PrivateKeyStub("privateAlgorithm",
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "privateFormat", new byte[] { 0x00, 0x05, 0x10 });
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PublicKeyStub publicKey = new PublicKeyStub("publicAlgorithm",
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "publicFormat", new byte[] { 0x01, 0x02, 0x12 });
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        keyPair = new KeyPair(publicKey, privateKey);
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests serialization compatibility
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerializationCompatibility() throws Exception {
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SerializationTest.verifyGolden(this, keyPair, comparator);
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests serialization/deserialization
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerializationSelf() throws Exception {
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SerializationTest.verifySelf(keyPair, comparator);
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // comparator for KeyPair objects
728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static SerializableAssert comparator = new SerializableAssert() {
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void assertDeserialized(Serializable reference, Serializable test) {
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // check result: compare public keys
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            Key key1 = ((KeyPair) test).getPublic();
778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            Key key2 = ((KeyPair) reference).getPublic();
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("PublicKey class", key1.getClass(), key2.getClass());
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("PublicKey algorithm", key1.getAlgorithm(), key2
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getAlgorithm());
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("PublicKey format", key1.getFormat(), key2.getFormat());
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("PublicKey encoded", Arrays.equals(key1.getEncoded(),
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    key2.getEncoded()));
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // check result: compare private keys
878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            key1 = ((KeyPair) test).getPrivate();
888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            key2 = ((KeyPair) reference).getPrivate();
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("PrivateKey class", key1.getClass(), key2.getClass());
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("PrivateKey algorithm", key1.getAlgorithm(), key2
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getAlgorithm());
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("PrivateKey format", key1.getFormat(), key2.getFormat());
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("PrivateKey encoded", Arrays.equals(key1.getEncoded(),
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    key2.getEncoded()));
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
99