|  | @@ -86,6 +86,7 @@ type AuthenticationReader struct {
 | 
	
		
			
				|  |  |  	auth         Authenticator
 | 
	
		
			
				|  |  |  	reader       *buf.BufferedReader
 | 
	
		
			
				|  |  |  	sizeParser   ChunkSizeDecoder
 | 
	
		
			
				|  |  | +	sizeBytes    []byte
 | 
	
		
			
				|  |  |  	transferType protocol.TransferType
 | 
	
		
			
				|  |  |  	padding      PaddingLengthGenerator
 | 
	
		
			
				|  |  |  	size         uint16
 | 
	
	
		
			
				|  | @@ -95,13 +96,20 @@ type AuthenticationReader struct {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func NewAuthenticationReader(auth Authenticator, sizeParser ChunkSizeDecoder, reader io.Reader, transferType protocol.TransferType, paddingLen PaddingLengthGenerator) *AuthenticationReader {
 | 
	
		
			
				|  |  | -	return &AuthenticationReader{
 | 
	
		
			
				|  |  | +	r := &AuthenticationReader{
 | 
	
		
			
				|  |  |  		auth:         auth,
 | 
	
		
			
				|  |  | -		reader:       &buf.BufferedReader{Reader: buf.NewReader(reader)},
 | 
	
		
			
				|  |  |  		sizeParser:   sizeParser,
 | 
	
		
			
				|  |  |  		transferType: transferType,
 | 
	
		
			
				|  |  |  		padding:      paddingLen,
 | 
	
		
			
				|  |  | +		sizeBytes:    make([]byte, sizeParser.SizeBytes()),
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +	if breader, ok := reader.(*buf.BufferedReader); ok {
 | 
	
		
			
				|  |  | +		breader.Direct = false
 | 
	
		
			
				|  |  | +		r.reader = breader
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		r.reader = &buf.BufferedReader{Reader: buf.NewReader(reader)}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return r
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (r *AuthenticationReader) readSize() (uint16, uint16, error) {
 | 
	
	
		
			
				|  | @@ -109,15 +117,14 @@ func (r *AuthenticationReader) readSize() (uint16, uint16, error) {
 | 
	
		
			
				|  |  |  		r.hasSize = false
 | 
	
		
			
				|  |  |  		return r.size, r.paddingLen, nil
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	sizeBytes := make([]byte, r.sizeParser.SizeBytes())
 | 
	
		
			
				|  |  | -	if _, err := io.ReadFull(r.reader, sizeBytes); err != nil {
 | 
	
		
			
				|  |  | +	if _, err := io.ReadFull(r.reader, r.sizeBytes); err != nil {
 | 
	
		
			
				|  |  |  		return 0, 0, err
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	var padding uint16
 | 
	
		
			
				|  |  |  	if r.padding != nil {
 | 
	
		
			
				|  |  |  		padding = r.padding.NextPaddingLen()
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	size, err := r.sizeParser.Decode(sizeBytes)
 | 
	
		
			
				|  |  | +	size, err := r.sizeParser.Decode(r.sizeBytes)
 | 
	
		
			
				|  |  |  	return size, padding, err
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |