@ -308,12 +308,27 @@ func (r *Signature) DoesPresignedSignatureMatch() (bool, *probe.Error) {
query . Set ( "X-Amz-Expires" , strconv . Itoa ( expireSeconds ) )
query . Set ( "X-Amz-SignedHeaders" , r . getSignedHeaders ( r . extractSignedHeaders ( ) ) )
query . Set ( "X-Amz-Credential" , r . AccessKeyID + "/" + r . getScope ( t ) )
encodedQuery := query . Encode ( )
newSignature := r . getSignature ( r . getSigningKey ( t ) , r . getStringToSign ( r . getPresignedCanonicalRequest ( encodedQuery ) , t ) )
encodedQuery += "&X-Amz-Signature=" + newSignature
if encodedQuery != r . Request . URL . RawQuery {
// Verify if date query is same.
if r . Request . URL . Query ( ) . Get ( "X-Amz-Date" ) != query . Get ( "X-Amz-Date" ) {
return false , nil
}
// Verify if expires query is same.
if r . Request . URL . Query ( ) . Get ( "X-Amz-Expires" ) != query . Get ( "X-Amz-Expires" ) {
return false , nil
}
// Verify if signed headers query is same.
if r . Request . URL . Query ( ) . Get ( "X-Amz-SignedHeaders" ) != query . Get ( "X-Amz-SignedHeaders" ) {
return false , nil
}
// Verify if credential query is same.
if r . Request . URL . Query ( ) . Get ( "X-Amz-Credential" ) != query . Get ( "X-Amz-Credential" ) {
return false , nil
}
// Verify finally if signature is same.
newSignature := r . getSignature ( r . getSigningKey ( t ) , r . getStringToSign ( r . getPresignedCanonicalRequest ( encodedQuery ) , t ) )
if r . Request . URL . Query ( ) . Get ( "X-Amz-Signature" ) != newSignature {
return false , nil
}
return true , nil