org.bouncycastle.crypto.agreement.XDHUnifiedAgreement Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcprov-jdk15to18 Show documentation
Show all versions of bcprov-jdk15to18 Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.5 to JDK 1.8.
package org.bouncycastle.crypto.agreement;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.RawAgreement;
import org.bouncycastle.crypto.params.XDHUPrivateParameters;
import org.bouncycastle.crypto.params.XDHUPublicParameters;
public class XDHUnifiedAgreement
implements RawAgreement
{
private final RawAgreement xAgreement;
private XDHUPrivateParameters privParams;
public XDHUnifiedAgreement(RawAgreement xAgreement)
{
this.xAgreement = xAgreement;
}
public void init(
CipherParameters key)
{
this.privParams = (XDHUPrivateParameters)key;
xAgreement.init(privParams.getStaticPrivateKey()); // constraint check
}
public int getAgreementSize()
{
return xAgreement.getAgreementSize() * 2;
}
public void calculateAgreement(CipherParameters publicKey, byte[] buf, int off)
{
XDHUPublicParameters pubParams = (XDHUPublicParameters)publicKey;
xAgreement.init(privParams.getEphemeralPrivateKey());
xAgreement.calculateAgreement(pubParams.getEphemeralPublicKey(), buf, off);
xAgreement.init(privParams.getStaticPrivateKey());
xAgreement.calculateAgreement(pubParams.getStaticPublicKey(), buf, off + xAgreement.getAgreementSize());
}
}