58 lines
1.6 KiB
Java
58 lines
1.6 KiB
Java
package org.scribe.services;
|
|
|
|
import javax.crypto.*;
|
|
import javax.crypto.spec.*;
|
|
|
|
import org.apache.commons.codec.binary.*;
|
|
import org.scribe.exceptions.*;
|
|
import org.scribe.utils.*;
|
|
|
|
/**
|
|
* HMAC-SHA1 implementation of {@SignatureService}
|
|
*
|
|
* @author Pablo Fernandez
|
|
*
|
|
*/
|
|
public class HMACSha1SignatureService implements SignatureService
|
|
{
|
|
private static final String EMPTY_STRING = "";
|
|
private static final String CARRIAGE_RETURN = "\r\n";
|
|
private static final String UTF8 = "UTF-8";
|
|
private static final String HMAC_SHA1 = "HmacSHA1";
|
|
private static final String METHOD = "HMAC-SHA1";
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public String getSignature(String baseString, String apiSecret, String tokenSecret)
|
|
{
|
|
try
|
|
{
|
|
Preconditions.checkEmptyString(baseString, "Base string cant be null or empty string");
|
|
Preconditions.checkEmptyString(apiSecret, "Api secret cant be null or empty string");
|
|
return doSign(baseString, URLUtils.percentEncode(apiSecret) + '&' + URLUtils.percentEncode(tokenSecret));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new OAuthSignatureException(baseString, e);
|
|
}
|
|
}
|
|
|
|
private String doSign(String toSign, String keyString) throws Exception
|
|
{
|
|
SecretKeySpec key = new SecretKeySpec((keyString).getBytes(UTF8), HMAC_SHA1);
|
|
Mac mac = Mac.getInstance(HMAC_SHA1);
|
|
mac.init(key);
|
|
byte[] bytes = mac.doFinal(toSign.getBytes(UTF8));
|
|
return new String(Base64.encodeBase64(bytes)).replace(CARRIAGE_RETURN, EMPTY_STRING);
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public String getSignatureMethod()
|
|
{
|
|
return METHOD;
|
|
}
|
|
}
|