1 /* 2 * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /** 25 * @test 26 * @bug 4807942 7033170 27 * @summary Test the Cipher.getMaxAllowedKeyLength(String) and 28 * getMaxAllowedParameterSpec(String) methods 29 * @author Valerie Peng 30 */ 31 32 import java.util.*; 33 import java.nio.*; 34 35 import java.security.*; 36 import java.security.spec.*; 37 38 import javax.crypto.*; 39 import javax.crypto.spec.*; 40 41 public class GetMaxAllowed { 42 runTest1(boolean isUnlimited)43 private static void runTest1(boolean isUnlimited) throws Exception { 44 System.out.println("Testing " + (isUnlimited? "un":"") + 45 "limited policy..."); 46 47 String algo = "Blowfish"; 48 int keyLength = Cipher.getMaxAllowedKeyLength(algo); 49 AlgorithmParameterSpec spec = Cipher.getMaxAllowedParameterSpec(algo); 50 if (isUnlimited) { 51 if ((keyLength != Integer.MAX_VALUE) || (spec != null)) { 52 throw new Exception("Check for " + algo + 53 " failed under unlimited policy"); 54 } 55 } else { 56 if ((keyLength != 128) || (spec != null)) { 57 throw new Exception("Check for " + algo + 58 " failed under default policy"); 59 } 60 } 61 algo = "RC5"; 62 keyLength = Cipher.getMaxAllowedKeyLength(algo); 63 RC5ParameterSpec rc5param = (RC5ParameterSpec) 64 Cipher.getMaxAllowedParameterSpec(algo); 65 if (isUnlimited) { 66 if ((keyLength != Integer.MAX_VALUE) || (rc5param != null)) { 67 throw new Exception("Check for " + algo + 68 " failed under unlimited policy"); 69 } 70 } else { 71 if ((keyLength != 128) || (rc5param.getRounds() != 12) || 72 (rc5param.getVersion() != Integer.MAX_VALUE) || 73 (rc5param.getWordSize() != Integer.MAX_VALUE)) { 74 throw new Exception("Check for " + algo + 75 " failed under default policy"); 76 } 77 } 78 System.out.println("All tests passed"); 79 } 80 runTest2()81 private static void runTest2() throws Exception { 82 System.out.println("Testing against Security.getAlgorithms()"); 83 84 Set<String> algorithms = Security.getAlgorithms("Cipher"); 85 86 for (String algorithm: algorithms) { 87 int keylength = -1; 88 89 // if 7033170 is not fixed, NoSuchAlgorithmException is thrown 90 keylength = Cipher.getMaxAllowedKeyLength(algorithm); 91 92 } 93 } 94 main(String[] args)95 public static void main(String[] args) throws Exception { 96 // decide if the installed jurisdiction policy file is the 97 // unlimited version 98 boolean isUnlimited = true; 99 Cipher c = Cipher.getInstance("AES", "SunJCE"); 100 try { 101 c.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(new byte[24], "AES")); 102 } catch (InvalidKeyException ike) { 103 isUnlimited = false; 104 } 105 runTest1(isUnlimited); 106 107 // test using the set of algorithms returned by Security.getAlgorithms() 108 runTest2(); 109 } 110 } 111