package freenet.crypt;
import java.security.interfaces.ECPublicKey;
import freenet.support.HexUtil;
import freenet.support.Logger;
public class ECDHLightContext extends KeyAgreementSchemeContext {
static { Logger.registerClass(ECDHLightContext.class); }
private static volatile boolean logMINOR;
private static volatile boolean logDEBUG;
public final ECDH ecdh;
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(super.toString());
return sb.toString();
}
public ECDHLightContext(ECDH.Curves curve) {
this.ecdh = new ECDH(curve);
this.lastUsedTime = System.currentTimeMillis();
}
public ECPublicKey getPublicKey() {
return ecdh.getPublicKey();
}
/*
* Calling the following is costy; avoid
*/
public byte[] getHMACKey(ECPublicKey peerExponential) {
synchronized(this) {
lastUsedTime = System.currentTimeMillis();
}
byte[] sharedKey = ecdh.getAgreedSecret(peerExponential);
if (logMINOR) {
Logger.minor(this, "Curve in use: " + ecdh.curve.toString());
if(logDEBUG) {
Logger.debug(this,
"My exponential: " + HexUtil.bytesToHex(ecdh.getPublicKey().getEncoded()));
Logger.debug(
this,
"Peer's exponential: "
+ HexUtil.bytesToHex(peerExponential.getEncoded()));
Logger.debug(this,
"SharedSecret = " + HexUtil.bytesToHex(sharedKey));
}
}
return sharedKey;
}
@Override
public byte[] getPublicKeyNetworkFormat() {
return ecdh.getPublicKeyNetworkFormat();
}
}