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 6313661 27 * @summary Basic tests for TlsRsaPremasterSecret generator 28 * @author Andreas Sterbenz 29 */ 30 31 import java.security.Security; 32 import java.security.Provider; 33 34 import javax.crypto.KeyGenerator; 35 import javax.crypto.SecretKey; 36 37 import sun.security.internal.spec.TlsRsaPremasterSecretParameterSpec; 38 39 public class TestPremaster { 40 41 public static void main(String[] args) throws Exception { 42 Provider provider = Security.getProvider("SunJCE"); 43 44 KeyGenerator kg; 45 46 kg = KeyGenerator.getInstance("SunTlsRsaPremasterSecret", provider); 47 48 try { 49 kg.generateKey(); 50 throw new Exception("no exception"); 51 } catch (IllegalStateException e) { 52 System.out.println("OK: " + e); 53 } 54 55 test(kg, 3, 0); 56 test(kg, 3, 1); 57 test(kg, 3, 2); 58 test(kg, 4, 0); 59 60 System.out.println("Done."); 61 } 62 63 private static void test(KeyGenerator kg, int major, int minor) throws Exception { 64 65 kg.init(new TlsRsaPremasterSecretParameterSpec(major, minor)); 66 SecretKey key = kg.generateKey(); 67 byte[] encoded = key.getEncoded(); 68 if (encoded.length != 48) { 69 throw new Exception("length: " + encoded.length); 70 } 71 if ((encoded[0] != major) || (encoded[1] != minor)) { 72 throw new Exception("version mismatch: " + encoded[0] + "." + encoded[1]); 73 } 74 System.out.println("OK: " + major + "." + minor); 75 } 76 } | 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 6313661 27 * @summary Basic tests for TlsRsaPremasterSecret generator 28 * @author Andreas Sterbenz 29 */ 30 31 import java.security.Security; 32 import java.security.Provider; 33 34 import javax.crypto.KeyGenerator; 35 import javax.crypto.SecretKey; 36 import java.util.Formatter; 37 38 import sun.security.internal.spec.TlsRsaPremasterSecretParameterSpec; 39 40 public class TestPremaster { 41 42 public static void main(String[] args) throws Exception { 43 Provider provider = Security.getProvider("SunJCE"); 44 45 KeyGenerator kg; 46 47 kg = KeyGenerator.getInstance("SunTlsRsaPremasterSecret", provider); 48 49 try { 50 kg.generateKey(); 51 throw new Exception("no exception"); 52 } catch (IllegalStateException e) { 53 System.out.println("OK: " + e); 54 } 55 56 int[] protocolVersions = {0x0300, 0x0301, 0x0302, 0x0400}; 57 for (int clientVersion : protocolVersions) { 58 for (int serverVersion : protocolVersions) { 59 test(kg, clientVersion, serverVersion); 60 if (serverVersion >= clientVersion) { 61 break; 62 } 63 } 64 } 65 66 System.out.println("Done."); 67 } 68 69 private static void test(KeyGenerator kg, 70 int clientVersion, int serverVersion) throws Exception { 71 72 System.out.printf( 73 "Testing RSA pre-master secret key generation between " + 74 "client (0x%04X) and server(0x%04X)%n", 75 clientVersion, serverVersion); 76 kg.init(new TlsRsaPremasterSecretParameterSpec( 77 clientVersion, serverVersion)); 78 79 SecretKey key = kg.generateKey(); 80 byte[] encoded = key.getEncoded(); 81 if (encoded != null) { // raw key material may be not extractable 82 if (encoded.length != 48) { 83 throw new Exception("length: " + encoded.length); 84 } 85 int v = versionOf(encoded[0], encoded[1]); 86 if (clientVersion != v) { 87 if (serverVersion != v || clientVersion >= 0x0302) { 88 throw new Exception(String.format( 89 "version mismatch: (0x%04X) rather than (0x%04X) " + 90 "is used in pre-master secret", v, clientVersion)); 91 } 92 System.out.printf("Use compatible version (0x%04X)%n", v); 93 } 94 System.out.println("Passed, version matches!"); 95 } else { 96 System.out.println("Raw key material is not extractable"); 97 } 98 } 99 100 private static int versionOf(int major, int minor) { 101 return ((major & 0xFF) << 8) | (minor & 0xFF); 102 } 103 } |