|  | @@ -198,16 +198,34 @@ class MessageFileParser:
 | 
	
		
			
				|  |  |                      if "amazonaws.com" not in parsed_url.netloc:
 | 
	
		
			
				|  |  |                          return False
 | 
	
		
			
				|  |  |                      query_params = parse_qs(parsed_url.query)
 | 
	
		
			
				|  |  | -                    required_params = ["Signature", "Expires"]
 | 
	
		
			
				|  |  | -                    for param in required_params:
 | 
	
		
			
				|  |  | -                        if param not in query_params:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    def check_presign_v2(query_params):
 | 
	
		
			
				|  |  | +                        required_params = ["Signature", "Expires"]
 | 
	
		
			
				|  |  | +                        for param in required_params:
 | 
	
		
			
				|  |  | +                            if param not in query_params:
 | 
	
		
			
				|  |  | +                                return False
 | 
	
		
			
				|  |  | +                        if not query_params["Expires"][0].isdigit():
 | 
	
		
			
				|  |  |                              return False
 | 
	
		
			
				|  |  | -                    if not query_params["Expires"][0].isdigit():
 | 
	
		
			
				|  |  | -                        return False
 | 
	
		
			
				|  |  | -                    signature = query_params["Signature"][0]
 | 
	
		
			
				|  |  | -                    if not re.match(r"^[A-Za-z0-9+/]+={0,2}$", signature):
 | 
	
		
			
				|  |  | -                        return False
 | 
	
		
			
				|  |  | -                    return True
 | 
	
		
			
				|  |  | +                        signature = query_params["Signature"][0]
 | 
	
		
			
				|  |  | +                        if not re.match(r"^[A-Za-z0-9+/]+={0,2}$", signature):
 | 
	
		
			
				|  |  | +                            return False
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        return True
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    def check_presign_v4(query_params):
 | 
	
		
			
				|  |  | +                        required_params = ["X-Amz-Signature", "X-Amz-Expires"]
 | 
	
		
			
				|  |  | +                        for param in required_params:
 | 
	
		
			
				|  |  | +                            if param not in query_params:
 | 
	
		
			
				|  |  | +                                return False
 | 
	
		
			
				|  |  | +                        if not query_params["X-Amz-Expires"][0].isdigit():
 | 
	
		
			
				|  |  | +                            return False
 | 
	
		
			
				|  |  | +                        signature = query_params["X-Amz-Signature"][0]
 | 
	
		
			
				|  |  | +                        if not re.match(r"^[A-Za-z0-9+/]+={0,2}$", signature):
 | 
	
		
			
				|  |  | +                            return False
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        return True
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    return check_presign_v4(query_params) or check_presign_v2(query_params)
 | 
	
		
			
				|  |  |                  except Exception:
 | 
	
		
			
				|  |  |                      return False
 | 
	
		
			
				|  |  |  
 |