Przeglądaj źródła

go.crypto/ssh: use binary.BigEndian throughout

A small cleanup.

R=agl, gustav.paul
CC=golang-dev
https://golang.org/cl/6406043
Dave Cheney 13 lat temu
rodzic
commit
d1bf83abcb
3 zmienionych plików z 11 dodań i 8 usunięć
  1. 6 5
      ssh/client.go
  2. 3 2
      ssh/server.go
  3. 2 1
      ssh/transport.go

+ 6 - 5
ssh/client.go

@@ -7,6 +7,7 @@ package ssh
 import (
 	"crypto"
 	"crypto/rand"
+	"encoding/binary"
 	"errors"
 	"fmt"
 	"io"
@@ -212,8 +213,8 @@ func (c *ClientConn) mainLoop() {
 				// malformed data packet
 				return
 			}
-			remoteId := uint32(packet[1])<<24 | uint32(packet[2])<<16 | uint32(packet[3])<<8 | uint32(packet[4])
-			length := uint32(packet[5])<<24 | uint32(packet[6])<<16 | uint32(packet[7])<<8 | uint32(packet[8])
+			remoteId := binary.BigEndian.Uint32(packet[1:5])
+			length := binary.BigEndian.Uint32(packet[5:9])
 			packet = packet[9:]
 
 			if length != uint32(len(packet)) {
@@ -229,9 +230,9 @@ func (c *ClientConn) mainLoop() {
 				// malformed data packet
 				return
 			}
-			remoteId := uint32(packet[1])<<24 | uint32(packet[2])<<16 | uint32(packet[3])<<8 | uint32(packet[4])
-			datatype := uint32(packet[5])<<24 | uint32(packet[6])<<16 | uint32(packet[7])<<8 | uint32(packet[8])
-			length := uint32(packet[9])<<24 | uint32(packet[10])<<16 | uint32(packet[11])<<8 | uint32(packet[12])
+			remoteId := binary.BigEndian.Uint32(packet[1:5])
+			datatype := binary.BigEndian.Uint32(packet[5:9])
+			length := binary.BigEndian.Uint32(packet[9:13])
 			packet = packet[13:]
 
 			if length != uint32(len(packet)) {

+ 3 - 2
ssh/server.go

@@ -10,6 +10,7 @@ import (
 	"crypto/rand"
 	"crypto/rsa"
 	"crypto/x509"
+	"encoding/binary"
 	"encoding/pem"
 	"errors"
 	"io"
@@ -548,14 +549,14 @@ func (s *ServerConn) Accept() (Channel, error) {
 				// malformed data packet
 				return nil, ParseError{msgChannelData}
 			}
-			remoteId := uint32(packet[1])<<24 | uint32(packet[2])<<16 | uint32(packet[3])<<8 | uint32(packet[4])
+			remoteId := binary.BigEndian.Uint32(packet[1:5])
 			s.lock.Lock()
 			c, ok := s.channels[remoteId]
 			if !ok {
 				s.lock.Unlock()
 				continue
 			}
-			if length := int(packet[5])<<24 | int(packet[6])<<16 | int(packet[7])<<8 | int(packet[8]); length > 0 {
+			if length := binary.BigEndian.Uint32(packet[5:9]); length > 0 {
 				packet = packet[9:]
 				c.handleData(packet[:length])
 			}

+ 2 - 1
ssh/transport.go

@@ -9,6 +9,7 @@ import (
 	"crypto"
 	"crypto/cipher"
 	"crypto/subtle"
+	"encoding/binary"
 	"errors"
 	"hash"
 	"io"
@@ -90,7 +91,7 @@ func (r *reader) readOnePacket() ([]byte, error) {
 		macSize = uint32(r.mac.Size())
 	}
 
-	length := uint32(lengthBytes[0])<<24 | uint32(lengthBytes[1])<<16 | uint32(lengthBytes[2])<<8 | uint32(lengthBytes[3])
+	length := binary.BigEndian.Uint32(lengthBytes[0:4])
 	paddingLength := uint32(lengthBytes[4])
 
 	if length <= paddingLength+1 {