You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2013/12/09 21:38:08 UTC

git commit: JCLOUDS-32: Using less magic in route53 signature

Updated Branches:
  refs/heads/jclouds-32 [created] ed55e0a2b


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/ed55e0a2
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/ed55e0a2
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/ed55e0a2

Branch: refs/heads/jclouds-32
Commit: ed55e0a2b38b7e2c99d9be245b563abeda8cdb78
Parents: 295c6e7
Author: Adrian Cole <ad...@apache.org>
Authored: Mon Dec 9 15:34:54 2013 -0500
Committer: Andrew Phillips <an...@apache.org>
Committed: Mon Dec 9 15:37:45 2013 -0500

----------------------------------------------------------------------
 .../route53/filters/RestAuthentication.java     | 33 ++++++++++++--------
 1 file changed, 20 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed55e0a2/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);
       }
    }