|
|
|
@ -245,6 +245,11 @@ func (w *AuthenticationWriter) seal(b *buf.Buffer) (*buf.Buffer, error) {
|
|
|
|
|
paddingSize = int(w.padding.NextPaddingLen())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
totalSize := encryptedSize + paddingSize
|
|
|
|
|
if totalSize > buf.Size {
|
|
|
|
|
return nil, newError("size too large: ", totalSize)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
eb := buf.New()
|
|
|
|
|
common.Must(eb.Reset(func(bb []byte) (int, error) {
|
|
|
|
|
w.sizeParser.Encode(uint16(encryptedSize+paddingSize), bb[:0])
|
|
|
|
@ -301,17 +306,17 @@ func (w *AuthenticationWriter) writePacket(mb buf.MultiBuffer) error {
|
|
|
|
|
|
|
|
|
|
mb2Write := buf.NewMultiBufferCap(int32(len(mb)) + 1)
|
|
|
|
|
|
|
|
|
|
for !mb.IsEmpty() {
|
|
|
|
|
b := mb.SplitFirst()
|
|
|
|
|
for _, b := range mb {
|
|
|
|
|
if b.IsEmpty() {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
eb, err := w.seal(b)
|
|
|
|
|
b.Release()
|
|
|
|
|
if err != nil {
|
|
|
|
|
mb2Write.Release()
|
|
|
|
|
return err
|
|
|
|
|
newError("failed to encrypt packet").Base(err).AtWarning().WriteToLog()
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mb2Write.Append(eb)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -324,7 +329,8 @@ func (w *AuthenticationWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {
|
|
|
|
|
b := buf.New()
|
|
|
|
|
defer b.Release()
|
|
|
|
|
|
|
|
|
|
eb, _ := w.seal(b)
|
|
|
|
|
eb, err := w.seal(b)
|
|
|
|
|
common.Must(err)
|
|
|
|
|
return w.writer.WriteMultiBuffer(buf.NewMultiBufferValue(eb))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|