1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 /** 19 * @author Vera Y. Petrashkova 20 * @version $Revision$ 21 */ 22 23 package org.apache.harmony.crypto.tests.javax.crypto.interfaces; 24 25 import java.math.BigInteger; 26 import java.security.KeyPair; 27 import java.security.KeyPairGenerator; 28 import java.security.SecureRandom; 29 30 import javax.crypto.KeyGenerator; 31 import javax.crypto.interfaces.DHKey; 32 import javax.crypto.interfaces.DHPrivateKey; 33 import javax.crypto.spec.DHParameterSpec; 34 35 import junit.framework.TestCase; 36 37 /** 38 * Tests for <code>DHPrivateKey</code> class field 39 * 40 */ 41 public class DHPrivateKeyTest extends TestCase { 42 43 /** 44 * Test for <code>serialVersionUID</code> field 45 */ 46 public void testField() { 47 checkDHPrivateKey key = new checkDHPrivateKey(); 48 assertEquals("Incorrect serialVersionUID", 49 key.getSerVerUID(), //DHPrivateKey.serialVersionUID 50 2211791113380396553L); 51 } 52 53 public void test_getParams_initToHardCoded() throws Exception { 54 // (p, g) values from RFC 7919, Appendix A (2048-bit group) 55 String pStr = "FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1" + 56 "D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF9" + 57 "7D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD6561" + 58 "2433F51F5F066ED0856365553DED1AF3B557135E7F57C935" + 59 "984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE735" + 60 "30ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FB" + 61 "B96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB19" + 62 "0B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F61" + 63 "9172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD73" + 64 "3BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA" + 65 "886B423861285C97FFFFFFFFFFFFFFFF"; 66 BigInteger p = new BigInteger(new BigInteger(pStr, 16).toByteArray()); 67 BigInteger g = BigInteger.valueOf(2); 68 KeyPairGenerator kg = KeyPairGenerator.getInstance("DH"); 69 kg.initialize(new DHParameterSpec(p, g), new SecureRandom()); 70 check_getParams(kg); 71 } 72 73 public void test_getParams_initToRandom192bit() throws Exception { 74 KeyPairGenerator kg = KeyPairGenerator.getInstance("DH"); 75 // DH group generation is slow, so we test with a small (insecure) value 76 kg.initialize(192); 77 check_getParams(kg); 78 } 79 80 private static void check_getParams(KeyPairGenerator kg) throws Exception { 81 KeyPair kp1 = kg.genKeyPair(); 82 KeyPair kp2 = kg.genKeyPair(); 83 DHPrivateKey pk1 = (DHPrivateKey) kp1.getPrivate(); 84 DHPrivateKey pk2 = (DHPrivateKey) kp2.getPrivate(); 85 86 assertTrue(pk1.getX().getClass().getCanonicalName().equals("java.math.BigInteger")); 87 assertTrue(pk1.getParams().getClass().getCanonicalName().equals("javax.crypto.spec.DHParameterSpec")); 88 assertFalse(pk1.equals(pk2)); 89 assertTrue(pk1.getX().equals(pk1.getX())); 90 } 91 92 public class checkDHPrivateKey implements DHPrivateKey { 93 public String getAlgorithm() { 94 return "SecretKey"; 95 } 96 public String getFormat() { 97 return "Format"; 98 } 99 public byte[] getEncoded() { 100 return new byte[0]; 101 } 102 public long getSerVerUID() { 103 return serialVersionUID; 104 } 105 public BigInteger getX() { 106 return null; 107 } 108 public DHParameterSpec getParams() { 109 return null; 110 } 111 } 112 } 113