package com.openfeint.internal.request; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class Signer { private String mKey; public String getKey() { return mKey; } private String mSecret; private String mSigningKey; private String mAccessToken; public Signer(String key, String secret) { mKey = key; mSecret = secret; mSigningKey = mSecret + "&"; } public void setAccessToken(String token, String tokenSecret) { mAccessToken = token; mSigningKey = mSecret + "&" + tokenSecret; } public String sign(String path, String method, long secondsSinceEpoch, OrderedArgList unsignedParams) { if (mAccessToken != null) { unsignedParams.put("token", mAccessToken); } StringBuilder sigbase = new StringBuilder(); sigbase.append(path); sigbase.append('+'); sigbase.append(mSecret); sigbase.append('+'); sigbase.append(method); sigbase.append('+'); final String argString = unsignedParams.getArgString(); sigbase.append(argString == null ? "" : argString); try { SecretKeySpec key = new SecretKeySpec((mSigningKey).getBytes("UTF-8"),"HmacSHA1"); Mac mac = Mac.getInstance("HmacSHA1"); mac.init(key); byte[] bytes = mac.doFinal(sigbase.toString().getBytes("UTF-8")); return new String(Base64.encodeBase64(bytes)).replace("\r\n", ""); } catch (UnsupportedEncodingException e) { } catch (InvalidKeyException e) { } catch (NoSuchAlgorithmException e) { } return null; } };