/* * Copyright 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.eclipse.elasticbeanstalk.git.util; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.util.Locale; import com.amazonaws.AmazonClientException; import com.amazonaws.SignableRequest; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSSessionCredentials; import com.amazonaws.auth.AbstractAWSSigner; import com.amazonaws.auth.SigningAlgorithm; public class BinaryUtils { public static byte[] hash(String text) throws AmazonClientException { try { return hash(getBytes(text)); } catch (Exception e) { throw new AmazonClientException("Unable to compute hash while signing request: " + e.getMessage(), e); } } public static byte[] hash(byte[] data) throws AmazonClientException { try { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(data); return md.digest(); } catch (Exception e) { throw new AmazonClientException("Unable to compute hash while signing request: " + e.getMessage(), e); } } public static byte[] sign(final byte[] data, final byte[] key) throws AmazonClientException { return new AbstractAWSSigner() { public void sign(SignableRequest<?> arg0, AWSCredentials arg1) {} protected void addSessionCredentials(SignableRequest<?> arg0, AWSSessionCredentials arg1) {} public byte[] sign() { return sign(data, key, SigningAlgorithm.HmacSHA256); } }.sign(); } public static String toHex(byte[] data) { StringBuilder sb = new StringBuilder(data.length * 2); for (int i = 0; i < data.length; i++) { String hex = Integer.toHexString(data[i]); if (hex.length() == 1) { // Append leading zero. sb.append("0"); } else if (hex.length() == 8) { // Remove ff prefix from negative numbers. hex = hex.substring(6); } sb.append(hex); } return sb.toString().toLowerCase(Locale.getDefault()); } public static byte[] getBytes(String s) { try { return s.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException("Unable to encode bytes as UTF-8"); } } }