| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | package cryptoimport (	"crypto/cipher"	"io"	"v2ray.com/core/common"	"v2ray.com/core/common/buf")type CryptionReader struct {	stream cipher.Stream	reader io.Reader}func NewCryptionReader(stream cipher.Stream, reader io.Reader) *CryptionReader {	return &CryptionReader{		stream: stream,		reader: reader,	}}func (r *CryptionReader) Read(data []byte) (int, error) {	nBytes, err := r.reader.Read(data)	if nBytes > 0 {		r.stream.XORKeyStream(data[:nBytes], data[:nBytes])	}	return nBytes, err}var (	_ buf.Writer = (*CryptionWriter)(nil))type CryptionWriter struct {	stream cipher.Stream	writer io.Writer}// NewCryptionWriter creates a new CryptionWriter.func NewCryptionWriter(stream cipher.Stream, writer io.Writer) *CryptionWriter {	return &CryptionWriter{		stream: stream,		writer: writer,	}}// Write implements io.Writer.Write().func (w *CryptionWriter) Write(data []byte) (int, error) {	w.stream.XORKeyStream(data, data)	return w.writer.Write(data)}// WriteMultiBuffer implements buf.Writer.func (w *CryptionWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {	defer mb.Release()	bs := mb.ToNetBuffers()	for _, b := range bs {		w.stream.XORKeyStream(b, b)	}	return common.Error2(bs.WriteTo(w.writer))}
 |