89 SecretKey premasterKey = spec.getPremasterSecret(); 90 byte[] premaster = premasterKey.getEncoded(); 91 92 int premasterMajor, premasterMinor; 93 if (premasterKey.getAlgorithm().equals("TlsRsaPremasterSecret")) { 94 // RSA 95 premasterMajor = premaster[0] & 0xff; 96 premasterMinor = premaster[1] & 0xff; 97 } else { 98 // DH, KRB5, others 99 premasterMajor = -1; 100 premasterMinor = -1; 101 } 102 103 try { 104 byte[] master; 105 byte[] clientRandom = spec.getClientRandom(); 106 byte[] serverRandom = spec.getServerRandom(); 107 108 if (protocolVersion >= 0x0301) { 109 byte[] seed = concat(clientRandom, serverRandom); 110 master = ((protocolVersion >= 0x0303) ? 111 doTLS12PRF(premaster, LABEL_MASTER_SECRET, seed, 48, 112 spec.getPRFHashAlg(), spec.getPRFHashLength(), 113 spec.getPRFBlockSize()) : 114 doTLS10PRF(premaster, LABEL_MASTER_SECRET, seed, 48)); 115 } else { 116 master = new byte[48]; 117 MessageDigest md5 = MessageDigest.getInstance("MD5"); 118 MessageDigest sha = MessageDigest.getInstance("SHA"); 119 120 byte[] tmp = new byte[20]; 121 for (int i = 0; i < 3; i++) { 122 sha.update(SSL3_CONST[i]); 123 sha.update(premaster); 124 sha.update(clientRandom); 125 sha.update(serverRandom); 126 sha.digest(tmp, 0, 20); 127 128 md5.update(premaster); 129 md5.update(tmp); 130 md5.digest(master, i << 4, 16); 131 } 132 133 } 134 | 89 SecretKey premasterKey = spec.getPremasterSecret(); 90 byte[] premaster = premasterKey.getEncoded(); 91 92 int premasterMajor, premasterMinor; 93 if (premasterKey.getAlgorithm().equals("TlsRsaPremasterSecret")) { 94 // RSA 95 premasterMajor = premaster[0] & 0xff; 96 premasterMinor = premaster[1] & 0xff; 97 } else { 98 // DH, KRB5, others 99 premasterMajor = -1; 100 premasterMinor = -1; 101 } 102 103 try { 104 byte[] master; 105 byte[] clientRandom = spec.getClientRandom(); 106 byte[] serverRandom = spec.getServerRandom(); 107 108 if (protocolVersion >= 0x0301) { 109 byte[] label; 110 byte[] seed; 111 byte[] extendedMasterSecretSessionHash = 112 spec.getExtendedMasterSecretSessionHash(); 113 if (extendedMasterSecretSessionHash != null) { 114 label = LABEL_EXTENDED_MASTER_SECRET; 115 seed = extendedMasterSecretSessionHash; 116 } else { 117 label = LABEL_MASTER_SECRET; 118 seed = concat(clientRandom, serverRandom); 119 } 120 master = ((protocolVersion >= 0x0303) ? 121 doTLS12PRF(premaster, label, seed, 48, 122 spec.getPRFHashAlg(), spec.getPRFHashLength(), 123 spec.getPRFBlockSize()) : 124 doTLS10PRF(premaster, label, seed, 48)); 125 } else { 126 master = new byte[48]; 127 MessageDigest md5 = MessageDigest.getInstance("MD5"); 128 MessageDigest sha = MessageDigest.getInstance("SHA"); 129 130 byte[] tmp = new byte[20]; 131 for (int i = 0; i < 3; i++) { 132 sha.update(SSL3_CONST[i]); 133 sha.update(premaster); 134 sha.update(clientRandom); 135 sha.update(serverRandom); 136 sha.digest(tmp, 0, 20); 137 138 md5.update(premaster); 139 md5.update(tmp); 140 md5.digest(master, i << 4, 16); 141 } 142 143 } 144 |