|  | @@ -238,6 +238,11 @@ func (s *ServerSession) DecodeRequestBody(request *protocol.RequestHeader, reade
 | 
	
		
			
				|  |  |  	if request.Option.Has(protocol.RequestOptionChunkMasking) {
 | 
	
		
			
				|  |  |  		sizeParser = NewShakeSizeParser(s.requestBodyIV[:])
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +	var padding crypto.PaddingLengthGenerator = nil
 | 
	
		
			
				|  |  | +	if request.Option.Has(protocol.RequestOptionGlobalPadding) {
 | 
	
		
			
				|  |  | +		padding = sizeParser.(crypto.PaddingLengthGenerator)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	switch request.Security {
 | 
	
		
			
				|  |  |  	case protocol.SecurityType_NONE:
 | 
	
		
			
				|  |  |  		if request.Option.Has(protocol.RequestOptionChunkStream) {
 | 
	
	
		
			
				|  | @@ -250,7 +255,7 @@ func (s *ServerSession) DecodeRequestBody(request *protocol.RequestHeader, reade
 | 
	
		
			
				|  |  |  				NonceGenerator:          crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  				AdditionalDataGenerator: crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			return crypto.NewAuthenticationReader(auth, sizeParser, reader, protocol.TransferTypePacket)
 | 
	
		
			
				|  |  | +			return crypto.NewAuthenticationReader(auth, sizeParser, reader, protocol.TransferTypePacket, padding)
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return buf.NewReader(reader)
 | 
	
	
		
			
				|  | @@ -263,7 +268,7 @@ func (s *ServerSession) DecodeRequestBody(request *protocol.RequestHeader, reade
 | 
	
		
			
				|  |  |  				NonceGenerator:          crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  				AdditionalDataGenerator: crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			return crypto.NewAuthenticationReader(auth, sizeParser, cryptionReader, request.Command.TransferType())
 | 
	
		
			
				|  |  | +			return crypto.NewAuthenticationReader(auth, sizeParser, cryptionReader, request.Command.TransferType(), padding)
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return buf.NewReader(cryptionReader)
 | 
	
	
		
			
				|  | @@ -276,7 +281,7 @@ func (s *ServerSession) DecodeRequestBody(request *protocol.RequestHeader, reade
 | 
	
		
			
				|  |  |  			NonceGenerator:          GenerateChunkNonce(s.requestBodyIV[:], uint32(aead.NonceSize())),
 | 
	
		
			
				|  |  |  			AdditionalDataGenerator: crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		return crypto.NewAuthenticationReader(auth, sizeParser, reader, request.Command.TransferType())
 | 
	
		
			
				|  |  | +		return crypto.NewAuthenticationReader(auth, sizeParser, reader, request.Command.TransferType(), padding)
 | 
	
		
			
				|  |  |  	case protocol.SecurityType_CHACHA20_POLY1305:
 | 
	
		
			
				|  |  |  		aead, _ := chacha20poly1305.New(GenerateChacha20Poly1305Key(s.requestBodyKey[:]))
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -285,7 +290,7 @@ func (s *ServerSession) DecodeRequestBody(request *protocol.RequestHeader, reade
 | 
	
		
			
				|  |  |  			NonceGenerator:          GenerateChunkNonce(s.requestBodyIV[:], uint32(aead.NonceSize())),
 | 
	
		
			
				|  |  |  			AdditionalDataGenerator: crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		return crypto.NewAuthenticationReader(auth, sizeParser, reader, request.Command.TransferType())
 | 
	
		
			
				|  |  | +		return crypto.NewAuthenticationReader(auth, sizeParser, reader, request.Command.TransferType(), padding)
 | 
	
		
			
				|  |  |  	default:
 | 
	
		
			
				|  |  |  		panic("Unknown security type.")
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -313,6 +318,11 @@ func (s *ServerSession) EncodeResponseBody(request *protocol.RequestHeader, writ
 | 
	
		
			
				|  |  |  	if request.Option.Has(protocol.RequestOptionChunkMasking) {
 | 
	
		
			
				|  |  |  		sizeParser = NewShakeSizeParser(s.responseBodyIV[:])
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +	var padding crypto.PaddingLengthGenerator = nil
 | 
	
		
			
				|  |  | +	if request.Option.Has(protocol.RequestOptionGlobalPadding) {
 | 
	
		
			
				|  |  | +		padding = sizeParser.(crypto.PaddingLengthGenerator)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	switch request.Security {
 | 
	
		
			
				|  |  |  	case protocol.SecurityType_NONE:
 | 
	
		
			
				|  |  |  		if request.Option.Has(protocol.RequestOptionChunkStream) {
 | 
	
	
		
			
				|  | @@ -325,7 +335,7 @@ func (s *ServerSession) EncodeResponseBody(request *protocol.RequestHeader, writ
 | 
	
		
			
				|  |  |  				NonceGenerator:          crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  				AdditionalDataGenerator: crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			return crypto.NewAuthenticationWriter(auth, sizeParser, writer, protocol.TransferTypePacket)
 | 
	
		
			
				|  |  | +			return crypto.NewAuthenticationWriter(auth, sizeParser, writer, protocol.TransferTypePacket, padding)
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return buf.NewWriter(writer)
 | 
	
	
		
			
				|  | @@ -336,7 +346,7 @@ func (s *ServerSession) EncodeResponseBody(request *protocol.RequestHeader, writ
 | 
	
		
			
				|  |  |  				NonceGenerator:          crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  				AdditionalDataGenerator: crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			return crypto.NewAuthenticationWriter(auth, sizeParser, s.responseWriter, request.Command.TransferType())
 | 
	
		
			
				|  |  | +			return crypto.NewAuthenticationWriter(auth, sizeParser, s.responseWriter, request.Command.TransferType(), padding)
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return buf.NewWriter(s.responseWriter)
 | 
	
	
		
			
				|  | @@ -349,7 +359,7 @@ func (s *ServerSession) EncodeResponseBody(request *protocol.RequestHeader, writ
 | 
	
		
			
				|  |  |  			NonceGenerator:          GenerateChunkNonce(s.responseBodyIV[:], uint32(aead.NonceSize())),
 | 
	
		
			
				|  |  |  			AdditionalDataGenerator: crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		return crypto.NewAuthenticationWriter(auth, sizeParser, writer, request.Command.TransferType())
 | 
	
		
			
				|  |  | +		return crypto.NewAuthenticationWriter(auth, sizeParser, writer, request.Command.TransferType(), padding)
 | 
	
		
			
				|  |  |  	case protocol.SecurityType_CHACHA20_POLY1305:
 | 
	
		
			
				|  |  |  		aead, _ := chacha20poly1305.New(GenerateChacha20Poly1305Key(s.responseBodyKey[:]))
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -358,7 +368,7 @@ func (s *ServerSession) EncodeResponseBody(request *protocol.RequestHeader, writ
 | 
	
		
			
				|  |  |  			NonceGenerator:          GenerateChunkNonce(s.responseBodyIV[:], uint32(aead.NonceSize())),
 | 
	
		
			
				|  |  |  			AdditionalDataGenerator: crypto.GenerateEmptyBytes(),
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		return crypto.NewAuthenticationWriter(auth, sizeParser, writer, request.Command.TransferType())
 | 
	
		
			
				|  |  | +		return crypto.NewAuthenticationWriter(auth, sizeParser, writer, request.Command.TransferType(), padding)
 | 
	
		
			
				|  |  |  	default:
 | 
	
		
			
				|  |  |  		panic("Unknown security type.")
 | 
	
		
			
				|  |  |  	}
 |