< prev index next >

src/java.base/share/classes/com/sun/crypto/provider/TlsMasterSecretGenerator.java

Print this page




  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 


< prev index next >