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}