MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / makeMasterSecret

Method makeMasterSecret

extra/yassl/src/yassl_int.cpp:977–1017  ·  view source on GitHub ↗

Create and store the master secret see page 32, 6.1

Source from the content-addressed store, hash-verified

975
976// Create and store the master secret see page 32, 6.1
977void SSL::makeMasterSecret()
978{
979 if (isTLS())
980 makeTLSMasterSecret();
981 else {
982 opaque sha_output[SHA_LEN];
983
984 const uint& preSz = secure_.get_connection().pre_secret_len_;
985 output_buffer md5_input(preSz + SHA_LEN);
986 output_buffer sha_input(PREFIX + preSz + 2 * RAN_LEN);
987
988 MD5 md5;
989 SHA sha;
990
991 md5_input.write(secure_.get_connection().pre_master_secret_, preSz);
992
993 for (int i = 0; i < MASTER_ROUNDS; ++i) {
994 opaque prefix[PREFIX];
995 if (!setPrefix(prefix, i)) {
996 SetError(prefix_error);
997 return;
998 }
999
1000 sha_input.set_current(0);
1001 sha_input.write(prefix, i + 1);
1002
1003 sha_input.write(secure_.get_connection().pre_master_secret_,preSz);
1004 sha_input.write(secure_.get_connection().client_random_, RAN_LEN);
1005 sha_input.write(secure_.get_connection().server_random_, RAN_LEN);
1006 sha.get_digest(sha_output, sha_input.get_buffer(),
1007 sha_input.get_size());
1008
1009 md5_input.set_current(preSz);
1010 md5_input.write(sha_output, SHA_LEN);
1011 md5.get_digest(&secure_.use_connection().master_secret_[i*MD5_LEN],
1012 md5_input.get_buffer(), md5_input.get_size());
1013 }
1014 deriveKeys();
1015 }
1016 secure_.use_connection().CleanPreMaster();
1017}
1018
1019
1020// create TLSv1 master secret

Callers 2

sendClientKeyExchangeFunction · 0.80
readMethod · 0.80

Calls 8

isTLSFunction · 0.85
setPrefixFunction · 0.85
set_currentMethod · 0.80
get_digestMethod · 0.80
get_sizeMethod · 0.80
CleanPreMasterMethod · 0.80
writeMethod · 0.45
get_bufferMethod · 0.45

Tested by

no test coverage detected