MCPcopy Create free account
hub / github.com/XTLS/Go / keysFromMasterSecret

Function keysFromMasterSecret

prf.go:121–141  ·  view source on GitHub ↗

keysFromMasterSecret generates the connection keys from the master secret, given the lengths of the MAC key, cipher key and IV, as defined in RFC 2246, Section 6.3.

(version uint16, suite *cipherSuite, masterSecret, clientRandom, serverRandom []byte, macLen, keyLen, ivLen int)

Source from the content-addressed store, hash-verified

119// secret, given the lengths of the MAC key, cipher key and IV, as defined in
120// RFC 2246, Section 6.3.
121func keysFromMasterSecret(version uint16, suite *cipherSuite, masterSecret, clientRandom, serverRandom []byte, macLen, keyLen, ivLen int) (clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV []byte) {
122 seed := make([]byte, 0, len(serverRandom)+len(clientRandom))
123 seed = append(seed, serverRandom...)
124 seed = append(seed, clientRandom...)
125
126 n := 2*macLen + 2*keyLen + 2*ivLen
127 keyMaterial := make([]byte, n)
128 prfForVersion(version, suite)(keyMaterial, masterSecret, keyExpansionLabel, seed)
129 clientMAC = keyMaterial[:macLen]
130 keyMaterial = keyMaterial[macLen:]
131 serverMAC = keyMaterial[:macLen]
132 keyMaterial = keyMaterial[macLen:]
133 clientKey = keyMaterial[:keyLen]
134 keyMaterial = keyMaterial[keyLen:]
135 serverKey = keyMaterial[:keyLen]
136 keyMaterial = keyMaterial[keyLen:]
137 clientIV = keyMaterial[:ivLen]
138 keyMaterial = keyMaterial[ivLen:]
139 serverIV = keyMaterial[:ivLen]
140 return
141}
142
143func newFinishedHash(version uint16, cipherSuite *cipherSuite) finishedHash {
144 var buffer []byte

Callers 2

establishKeysMethod · 0.85
establishKeysMethod · 0.85

Calls 1

prfForVersionFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…