Updated Branches: refs/heads/master 4cef85d1c -> acde2beff
JCLOUDS-32: Using less magic in route53 signature Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/acde2bef Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/acde2bef Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/acde2bef Branch: refs/heads/master Commit: acde2beff1d04301af69a68ce598d7d3a96a92f0 Parents: 4cef85d Author: Adrian Cole <[email protected]> Authored: Mon Dec 9 15:34:54 2013 -0500 Committer: Andrew Phillips <[email protected]> Committed: Mon Dec 9 19:04:21 2013 -0500 ---------------------------------------------------------------------- .../route53/filters/RestAuthentication.java | 33 ++++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/acde2bef/apis/route53/src/main/java/org/jclouds/route53/filters/RestAuthentication.java ---------------------------------------------------------------------- diff --git a/apis/route53/src/main/java/org/jclouds/route53/filters/RestAuthentication.java b/apis/route53/src/main/java/org/jclouds/route53/filters/RestAuthentication.java index c84445a..f849daa 100644 --- a/apis/route53/src/main/java/org/jclouds/route53/filters/RestAuthentication.java +++ b/apis/route53/src/main/java/org/jclouds/route53/filters/RestAuthentication.java @@ -19,20 +19,18 @@ package org.jclouds.route53.filters; import static com.google.common.base.Charsets.UTF_8; import static com.google.common.base.Throwables.propagate; import static com.google.common.io.BaseEncoding.base64; -import static com.google.common.io.ByteStreams.readBytes; import static javax.ws.rs.core.HttpHeaders.DATE; -import static org.jclouds.crypto.Macs.asByteProcessor; -import static org.jclouds.util.Strings2.toInputStream; -import java.io.IOException; import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; import javax.inject.Inject; import javax.inject.Provider; import javax.inject.Singleton; import org.jclouds.aws.domain.SessionCredentials; -import org.jclouds.crypto.Crypto; import org.jclouds.date.TimeStamp; import org.jclouds.domain.Credentials; import org.jclouds.http.HttpException; @@ -41,7 +39,6 @@ import org.jclouds.http.HttpRequestFilter; import org.jclouds.rest.RequestSigner; import com.google.common.base.Supplier; -import com.google.common.io.ByteProcessor; /** * Signs the Route53 request. @@ -57,14 +54,12 @@ public class RestAuthentication implements HttpRequestFilter, RequestSigner { private final Supplier<Credentials> creds; private final Provider<String> timeStampProvider; - private final Crypto crypto; @Inject public RestAuthentication(@org.jclouds.location.Provider Supplier<Credentials> creds, - @TimeStamp Provider<String> timeStampProvider, Crypto crypto) { + @TimeStamp Provider<String> timeStampProvider) { this.creds = creds; this.timeStampProvider = timeStampProvider; - this.crypto = crypto; } public HttpRequest filter(HttpRequest request) throws HttpException { @@ -90,15 +85,27 @@ public class RestAuthentication implements HttpRequestFilter, RequestSigner { public String createStringToSign(HttpRequest input) { return input.getFirstHeaderOrNull(DATE); } - + + /** + * signs {@code toSign} using {@code HmacSHA256} initialized with + * {@link Credentials#credential}. + * + * @param toSign + * string to sign in UTF-8 encoding + * + * @return base-64 encoded signature. + */ @Override public String sign(String toSign) { try { - ByteProcessor<byte[]> hmacSHA256 = asByteProcessor(crypto.hmacSHA256(creds.get().credential.getBytes(UTF_8))); - return base64().encode(readBytes(toInputStream(toSign), hmacSHA256)); + SecretKeySpec keySpec = new SecretKeySpec(creds.get().credential.getBytes(UTF_8), "HmacSHA256"); + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(keySpec); + byte[] result = mac.doFinal(toSign.getBytes(UTF_8)); + return base64().encode(result); } catch (InvalidKeyException e) { throw propagate(e); - } catch (IOException e) { + } catch (NoSuchAlgorithmException e) { throw propagate(e); } }
