Skip to content

Commit 5d56cf9

Browse files
author
Hans-Peter Klett
committed
Fixed international signature string creation.
* Url encoded the request path when creating the string to sign. * Cleaned up the mega one-liner string concatenation.
1 parent 61d07cd commit 5d56cf9

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

sdk/src/main/java/com/spectralogic/ds3client/NetworkClientImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515

1616
package com.spectralogic.ds3client;
1717

18+
import com.google.common.net.UrlEscapers;
1819
import com.spectralogic.ds3client.commands.Ds3Request;
1920
import com.spectralogic.ds3client.models.SignatureDetails;
2021
import com.spectralogic.ds3client.networking.*;
2122
import com.spectralogic.ds3client.utils.DateFormatter;
2223
import com.spectralogic.ds3client.utils.Signature;
24+
2325
import org.apache.http.HttpHost;
2426
import org.apache.http.HttpRequest;
2527
import org.apache.http.HttpStatus;
@@ -167,7 +169,7 @@ private void addHeaders(final HttpRequest httpRequest) throws IOException, Signa
167169
this.ds3Request.getContentType().toString(),
168170
date,
169171
"",
170-
this.ds3Request.getPath(),
172+
UrlEscapers.urlFragmentEscaper().escape(this.ds3Request.getPath()),
171173
NetworkClientImpl.this.connectionDetails.getCredentials()
172174
)));
173175
}

sdk/src/main/java/com/spectralogic/ds3client/utils/Signature.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
package com.spectralogic.ds3client.utils;
1717

1818
import com.spectralogic.ds3client.models.SignatureDetails;
19+
1920
import org.apache.commons.codec.binary.Base64;
2021

22+
import java.security.SignatureException;
23+
2124
import javax.crypto.Mac;
2225
import javax.crypto.spec.SecretKeySpec;
23-
import java.security.SignatureException;
2426

2527
public class Signature {
2628

@@ -52,7 +54,7 @@ public static String calculateRFC2104HMAC(final String data, final String key)
5254
// compute the hmac on input data bytes
5355
final byte[] rawHmac = mac.doFinal(data.getBytes());
5456
result = Base64.encodeBase64String(rawHmac);
55-
} catch (Exception e) {
57+
} catch (final Exception e) {
5658
throw new SignatureException("Failed to generate HMAC : " + e.getMessage());
5759
}
5860
return result.trim();
@@ -64,7 +66,14 @@ public static String calculateRFC2104HMAC(final String data, final String key)
6466
*/
6567
public static String signature(final SignatureDetails signatureDetails)
6668
throws SignatureException {
67-
68-
return calculateRFC2104HMAC(String.valueOf(signatureDetails.getVerb()) + '\n' + signatureDetails.getContentMd5() + '\n' + signatureDetails.getContentType() + '\n' + signatureDetails.getDate() + '\n' + signatureDetails.getCanonicalizedAmzHeaders() + signatureDetails.getCanonicalizedResource(), signatureDetails.getCredentials().getKey());
69+
return calculateRFC2104HMAC(
70+
String.valueOf(signatureDetails.getVerb()) + '\n'
71+
+ signatureDetails.getContentMd5() + '\n'
72+
+ signatureDetails.getContentType() + '\n'
73+
+ signatureDetails.getDate() + '\n'
74+
+ signatureDetails.getCanonicalizedAmzHeaders()
75+
+ signatureDetails.getCanonicalizedResource(),
76+
signatureDetails.getCredentials().getKey()
77+
);
6978
}
7079
}

0 commit comments

Comments
 (0)