Skip to content

Commit 9c8cd83

Browse files
RalphCorderoyagl
authored andcommitted
crypto/tls: len(clientRandom) used for serverRandom source
In keysFromMasterSecret(), don't copy from serverRandom into seed[:len(clientRandom)]. Actually, switch from an array to a slice in keysFromMasterSecret() and masterFromPreMasterSecret() so the length need not be given; that's how it's done elsewhere in the file. Fixes #13181 Change-Id: I92abaa892d1bba80c2d4f12776341cda7d538837 Reviewed-on: https://go-review.googlesource.com/16697 Run-TryBot: Adam Langley <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Adam Langley <[email protected]>
1 parent 9f08b6c commit 9c8cd83

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/crypto/tls/prf.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,25 +145,26 @@ func prfForVersion(version uint16, suite *cipherSuite) func(result, secret, labe
145145
// masterFromPreMasterSecret generates the master secret from the pre-master
146146
// secret. See http://tools.ietf.org/html/rfc5246#section-8.1
147147
func masterFromPreMasterSecret(version uint16, suite *cipherSuite, preMasterSecret, clientRandom, serverRandom []byte) []byte {
148-
var seed [tlsRandomLength * 2]byte
149-
copy(seed[0:len(clientRandom)], clientRandom)
150-
copy(seed[len(clientRandom):], serverRandom)
148+
seed := make([]byte, 0, len(clientRandom)+len(serverRandom))
149+
seed = append(seed, clientRandom...)
150+
seed = append(seed, serverRandom...)
151+
151152
masterSecret := make([]byte, masterSecretLength)
152-
prfForVersion(version, suite)(masterSecret, preMasterSecret, masterSecretLabel, seed[0:])
153+
prfForVersion(version, suite)(masterSecret, preMasterSecret, masterSecretLabel, seed)
153154
return masterSecret
154155
}
155156

156157
// keysFromMasterSecret generates the connection keys from the master
157158
// secret, given the lengths of the MAC key, cipher key and IV, as defined in
158159
// RFC 2246, section 6.3.
159160
func keysFromMasterSecret(version uint16, suite *cipherSuite, masterSecret, clientRandom, serverRandom []byte, macLen, keyLen, ivLen int) (clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV []byte) {
160-
var seed [tlsRandomLength * 2]byte
161-
copy(seed[0:len(clientRandom)], serverRandom)
162-
copy(seed[len(serverRandom):], clientRandom)
161+
seed := make([]byte, 0, len(serverRandom)+len(clientRandom))
162+
seed = append(seed, serverRandom...)
163+
seed = append(seed, clientRandom...)
163164

164165
n := 2*macLen + 2*keyLen + 2*ivLen
165166
keyMaterial := make([]byte, n)
166-
prfForVersion(version, suite)(keyMaterial, masterSecret, keyExpansionLabel, seed[0:])
167+
prfForVersion(version, suite)(keyMaterial, masterSecret, keyExpansionLabel, seed)
167168
clientMAC = keyMaterial[:macLen]
168169
keyMaterial = keyMaterial[macLen:]
169170
serverMAC = keyMaterial[:macLen]

0 commit comments

Comments
 (0)