1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-12-21 09:36:34 -05:00

fix encoding bug in shadowsocks

This commit is contained in:
Darien Raymond 2018-11-02 22:04:52 +01:00
parent 18ddde4fd4
commit 8bb018dae2
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
3 changed files with 41 additions and 2 deletions

View File

@ -216,7 +216,7 @@ func (c *AEADCipher) DecodePacket(key []byte, b *buf.Buffer) error {
if err != nil {
return err
}
b.Resize(ivLen, ivLen+int32(len(bbb)))
b.Resize(ivLen, int32(len(bbb)))
return nil
}

View File

@ -0,0 +1,38 @@
package shadowsocks_test
import (
"crypto/rand"
"testing"
"v2ray.com/core/common"
"v2ray.com/core/common/buf"
"v2ray.com/core/common/compare"
"v2ray.com/core/proxy/shadowsocks"
)
func TestAEADCipherUDP(t *testing.T) {
rawAccount := &shadowsocks.Account{
CipherType: shadowsocks.CipherType_AES_128_GCM,
Password: "test",
}
account, err := rawAccount.AsAccount()
common.Must(err)
cipher := account.(*shadowsocks.MemoryAccount).Cipher
key := make([]byte, cipher.KeySize())
common.Must2(rand.Read(key))
payload := make([]byte, 1024)
common.Must2(rand.Read(payload))
b1 := buf.New()
common.Must2(b1.ReadFullFrom(rand.Reader, cipher.IVSize()))
common.Must2(b1.Write(payload))
common.Must(cipher.EncodePacket(key, b1))
common.Must(cipher.DecodePacket(key, b1))
if err := compare.BytesEqualWithDetail(b1.Bytes(), payload); err != nil {
t.Error(err)
}
}

View File

@ -142,8 +142,9 @@ func WriteTCPRequest(request *protocol.RequestHeader, writer io.Writer) (buf.Wri
header.SetByte(0, header.Byte(0)|0x10)
authenticator := NewAuthenticator(HeaderKeyGenerator(account.Key, iv))
authPayload := header.Bytes()
authBuffer := header.Extend(AuthSize)
authenticator.Authenticate(header.Bytes(), authBuffer)
authenticator.Authenticate(authPayload, authBuffer)
}
if err := w.WriteMultiBuffer(buf.NewMultiBufferValue(header)); err != nil {