|
|
|
@ -1,8 +1,6 @@
|
|
|
|
|
package encoding |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"crypto/aes" |
|
|
|
|
"crypto/cipher" |
|
|
|
|
"crypto/md5" |
|
|
|
|
"crypto/rand" |
|
|
|
|
"hash/fnv" |
|
|
|
@ -105,10 +103,8 @@ func (c *ClientSession) EncodeRequestHeader(header *protocol.RequestHeader, writ
|
|
|
|
|
common.Must(buffer.AppendSupplier(serial.WriteHash(fnv1a))) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
timestampHash := md5.New() |
|
|
|
|
common.Must2(timestampHash.Write(hashTimestamp(timestamp))) |
|
|
|
|
iv := timestampHash.Sum(nil) |
|
|
|
|
aesStream := crypto.NewAesEncryptionStream(account.ID.CmdKey(), iv) |
|
|
|
|
iv := md5.Sum(hashTimestamp(timestamp)) |
|
|
|
|
aesStream := crypto.NewAesEncryptionStream(account.ID.CmdKey(), iv[:]) |
|
|
|
|
aesStream.XORKeyStream(buffer.Bytes(), buffer.Bytes()) |
|
|
|
|
common.Must2(writer.Write(buffer.Bytes())) |
|
|
|
|
return nil |
|
|
|
@ -153,9 +149,7 @@ func (c *ClientSession) EncodeRequestBody(request *protocol.RequestHeader, write
|
|
|
|
|
|
|
|
|
|
return &buf.SequentialWriter{Writer: cryptionWriter} |
|
|
|
|
case protocol.SecurityType_AES128_GCM: |
|
|
|
|
block, _ := aes.NewCipher(c.requestBodyKey[:]) |
|
|
|
|
aead, _ := cipher.NewGCM(block) |
|
|
|
|
|
|
|
|
|
aead := crypto.NewAesGcm(c.requestBodyKey[:]) |
|
|
|
|
auth := &crypto.AEADAuthenticator{ |
|
|
|
|
AEAD: aead, |
|
|
|
|
NonceGenerator: GenerateChunkNonce(c.requestBodyIV[:], uint32(aead.NonceSize())), |
|
|
|
@ -163,7 +157,8 @@ func (c *ClientSession) EncodeRequestBody(request *protocol.RequestHeader, write
|
|
|
|
|
} |
|
|
|
|
return crypto.NewAuthenticationWriter(auth, sizeParser, writer, request.Command.TransferType(), padding) |
|
|
|
|
case protocol.SecurityType_CHACHA20_POLY1305: |
|
|
|
|
aead, _ := chacha20poly1305.New(GenerateChacha20Poly1305Key(c.requestBodyKey[:])) |
|
|
|
|
aead, err := chacha20poly1305.New(GenerateChacha20Poly1305Key(c.requestBodyKey[:])) |
|
|
|
|
common.Must(err) |
|
|
|
|
|
|
|
|
|
auth := &crypto.AEADAuthenticator{ |
|
|
|
|
AEAD: aead, |
|
|
|
@ -250,8 +245,7 @@ func (c *ClientSession) DecodeResponseBody(request *protocol.RequestHeader, read
|
|
|
|
|
|
|
|
|
|
return buf.NewReader(c.responseReader) |
|
|
|
|
case protocol.SecurityType_AES128_GCM: |
|
|
|
|
block, _ := aes.NewCipher(c.responseBodyKey[:]) |
|
|
|
|
aead, _ := cipher.NewGCM(block) |
|
|
|
|
aead := crypto.NewAesGcm(c.responseBodyKey[:]) |
|
|
|
|
|
|
|
|
|
auth := &crypto.AEADAuthenticator{ |
|
|
|
|
AEAD: aead, |
|
|
|
|