crypto/hmac: make Sum idempotent
Fixes #978. R=rsc CC=golang-dev https://golang.org/cl/1967045
This commit is contained in:
parent
c6f2f6c1ab
commit
f610c8e06b
@ -8,7 +8,6 @@ import (
|
||||
"crypto/hmac"
|
||||
"crypto/rc4"
|
||||
"crypto/rsa"
|
||||
"crypto/sha1"
|
||||
"crypto/subtle"
|
||||
"crypto/x509"
|
||||
"io"
|
||||
@ -226,7 +225,7 @@ func (c *Conn) clientHandshake() os.Error {
|
||||
|
||||
cipher, _ := rc4.NewCipher(clientKey)
|
||||
|
||||
c.out.prepareCipherSpec(cipher, hmac.New(sha1.New(), clientMAC))
|
||||
c.out.prepareCipherSpec(cipher, hmac.NewSHA1(clientMAC))
|
||||
c.writeRecord(recordTypeChangeCipherSpec, []byte{1})
|
||||
|
||||
finished := new(finishedMsg)
|
||||
@ -235,7 +234,7 @@ func (c *Conn) clientHandshake() os.Error {
|
||||
c.writeRecord(recordTypeHandshake, finished.marshal())
|
||||
|
||||
cipher2, _ := rc4.NewCipher(serverKey)
|
||||
c.in.prepareCipherSpec(cipher2, hmac.New(sha1.New(), serverMAC))
|
||||
c.in.prepareCipherSpec(cipher2, hmac.NewSHA1(serverMAC))
|
||||
c.readRecord(recordTypeChangeCipherSpec)
|
||||
if c.err != nil {
|
||||
return c.err
|
||||
|
@ -16,7 +16,6 @@ import (
|
||||
"crypto/hmac"
|
||||
"crypto/rc4"
|
||||
"crypto/rsa"
|
||||
"crypto/sha1"
|
||||
"crypto/subtle"
|
||||
"crypto/x509"
|
||||
"io"
|
||||
@ -227,7 +226,7 @@ func (c *Conn) serverHandshake() os.Error {
|
||||
keysFromPreMasterSecret11(preMasterSecret, clientHello.random, hello.random, suite.hashLength, suite.cipherKeyLength)
|
||||
|
||||
cipher, _ := rc4.NewCipher(clientKey)
|
||||
c.in.prepareCipherSpec(cipher, hmac.New(sha1.New(), clientMAC))
|
||||
c.in.prepareCipherSpec(cipher, hmac.NewSHA1(clientMAC))
|
||||
c.readRecord(recordTypeChangeCipherSpec)
|
||||
if err := c.error(); err != nil {
|
||||
return err
|
||||
@ -264,7 +263,7 @@ func (c *Conn) serverHandshake() os.Error {
|
||||
finishedHash.Write(clientFinished.marshal())
|
||||
|
||||
cipher2, _ := rc4.NewCipher(serverKey)
|
||||
c.out.prepareCipherSpec(cipher2, hmac.New(sha1.New(), serverMAC))
|
||||
c.out.prepareCipherSpec(cipher2, hmac.NewSHA1(serverMAC))
|
||||
c.writeRecord(recordTypeChangeCipherSpec, []byte{1})
|
||||
|
||||
finished := new(finishedMsg)
|
||||
|
6
prf.go
6
prf.go
@ -20,7 +20,7 @@ func splitPreMasterSecret(secret []byte) (s1, s2 []byte) {
|
||||
}
|
||||
|
||||
// pHash implements the P_hash function, as defined in RFC 4346, section 5.
|
||||
func pHash(result, secret, seed []byte, hash hash.Hash) {
|
||||
func pHash(result, secret, seed []byte, hash func() hash.Hash) {
|
||||
h := hmac.New(hash, secret)
|
||||
h.Write(seed)
|
||||
a := h.Sum()
|
||||
@ -46,8 +46,8 @@ func pHash(result, secret, seed []byte, hash hash.Hash) {
|
||||
|
||||
// pRF11 implements the TLS 1.1 pseudo-random function, as defined in RFC 4346, section 5.
|
||||
func pRF11(result, secret, label, seed []byte) {
|
||||
hashSHA1 := sha1.New()
|
||||
hashMD5 := md5.New()
|
||||
hashSHA1 := sha1.New
|
||||
hashMD5 := md5.New
|
||||
|
||||
labelAndSeed := make([]byte, len(label)+len(seed))
|
||||
copy(labelAndSeed, label)
|
||||
|
Loading…
Reference in New Issue
Block a user