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 Hughespackage org.apache.harmony.security.tests.java.security.spec;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Key;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.KeyFactory;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.KeyPair;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.KeyPairGenerator;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.interfaces.DSAPrivateKey;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.interfaces.DSAPublicKey;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.spec.PKCS8EncodedKeySpec;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.spec.X509EncodedKeySpec;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class EncodedKeySpec2Test extends TestCase {
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @tests java.security.spec.EncodedKeySpec#getEncoded()
358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void test_getEncoded() throws Exception {
378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA");
398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        keyGen.initialize(1024);
418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        KeyPair keys = keyGen.generateKeyPair();
428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        KeyFactory fact = KeyFactory.getInstance("DSA");
458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // check public key encoding
488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        byte[] encoded = keys.getPublic().getEncoded();
498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Key key = fact.generatePublic(new X509EncodedKeySpec(encoded));
508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue("public key encodings were different",
528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                isEqual(key, keys.getPublic()));
538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // check private key encoding
558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        encoded = keys.getPrivate().getEncoded();
568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        key = fact.generatePrivate(new PKCS8EncodedKeySpec(encoded));
578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue("private key encodings were different",
598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                isEqual(key, keys.getPrivate()));
608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private boolean isEqual(Key key1, Key key2) {
638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        if (key1 instanceof DSAPublicKey && key2 instanceof DSAPublicKey) {
648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            DSAPublicKey dsa1 = ((DSAPublicKey) key1);
658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            DSAPublicKey dsa2 = ((DSAPublicKey) key2);
668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return dsa1.getY().equals(dsa2.getY())
678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    && dsa1.getParams().getG().equals(dsa2.getParams().getG())
688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    && dsa1.getParams().getP().equals(dsa2.getParams().getP())
698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    && dsa1.getParams().getQ().equals(dsa2.getParams().getQ());
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } else if (key1 instanceof DSAPrivateKey
728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                && key2 instanceof DSAPrivateKey) {
738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            DSAPrivateKey dsa1 = ((DSAPrivateKey) key1);
748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            DSAPrivateKey dsa2 = ((DSAPrivateKey) key2);
758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return dsa1.getX().equals(dsa2.getX())
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    && dsa1.getParams().getG().equals(dsa2.getParams().getG())
778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    && dsa1.getParams().getP().equals(dsa2.getParams().getP())
788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    && dsa1.getParams().getQ().equals(dsa2.getParams().getQ());
798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } else {
808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return false;
818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}