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