vmess: fixed bug in aes-128-gcm

This commit is contained in:
nadoo 2018-07-11 00:50:38 +08:00
parent d84f540c4d
commit 5ebbf7ffe8

View File

@ -36,14 +36,14 @@ func (w *aeadWriter) Write(b []byte) (int, error) {
func (w *aeadWriter) ReadFrom(r io.Reader) (n int64, err error) { func (w *aeadWriter) ReadFrom(r io.Reader) (n int64, err error) {
for { for {
buf := w.buf buf := w.buf
payloadBuf := buf[lenSize : lenSize+defaultChunkSize] payloadBuf := buf[lenSize : lenSize+defaultChunkSize-w.Overhead()]
nr, er := r.Read(payloadBuf) nr, er := r.Read(payloadBuf)
if nr > 0 { if nr > 0 {
n += int64(nr) n += int64(nr)
buf = buf[:lenSize+nr+w.Overhead()] buf = buf[:lenSize+nr+w.Overhead()]
payloadBuf = payloadBuf[:nr] payloadBuf = payloadBuf[:nr]
binary.BigEndian.PutUint16(buf[:lenSize], uint16(nr)) binary.BigEndian.PutUint16(buf[:lenSize], uint16(nr+w.Overhead()))
binary.BigEndian.PutUint16(w.nonce[:2], w.count) binary.BigEndian.PutUint16(w.nonce[:2], w.count)
copy(w.nonce[2:], w.iv[2:12]) copy(w.nonce[2:], w.iv[2:12])
@ -126,9 +126,10 @@ func (r *aeadReader) Read(b []byte) (int, error) {
return 0, err return 0, err
} }
m := copy(b, r.buf[:len]) dataLen := int(len) - r.Overhead()
if m < int(len) { m := copy(b, r.buf[:dataLen])
r.leftover = r.buf[m:len] if m < int(dataLen) {
r.leftover = r.buf[m:dataLen]
} }
return m, err return m, err