package org.knowm.xchange.therock.service;
import java.math.BigInteger;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.ws.rs.HeaderParam;
import org.knowm.xchange.therock.TheRockAuthenticated;
import si.mazi.rescu.ParamsDigest;
import si.mazi.rescu.RestInvocation;
public class TheRockDigest implements ParamsDigest {
public static final String HMAC_SHA_512 = "HmacSHA512";
private final Mac mac;
public TheRockDigest(String secretKeyStr) {
try {
final SecretKey secretKey = new SecretKeySpec(secretKeyStr.getBytes(), HMAC_SHA_512);
mac = Mac.getInstance(HMAC_SHA_512);
mac.init(secretKey);
} catch (Exception e) {
throw new RuntimeException("Error initializing The Rock Signer", e);
}
}
@Override
public String digestParams(RestInvocation restInvocation) {
final String nonce = restInvocation.getParamValue(HeaderParam.class, TheRockAuthenticated.X_TRT_NONCE).toString();
mac.update(nonce.getBytes());
mac.update(restInvocation.getInvocationUrl().getBytes());
return String.format("%0128x", new BigInteger(1, mac.doFinal()));
}
}