dhbasicagreement.java

来自「bouncycastle 是一个JAVA安全提供者」· Java 代码 · 共 73 行

JAVA
73
字号
package org.bouncycastle.crypto.agreement;import java.math.BigInteger;import java.security.SecureRandom;import org.bouncycastle.crypto.BasicAgreement;import org.bouncycastle.crypto.CipherParameters;import org.bouncycastle.crypto.params.DHParameters;import org.bouncycastle.crypto.params.DHPublicKeyParameters;import org.bouncycastle.crypto.params.DHPrivateKeyParameters;import org.bouncycastle.crypto.params.AsymmetricKeyParameter;import org.bouncycastle.crypto.params.ParametersWithRandom;/** * a Diffie-Hellman key agreement class. * <p> * note: This is only the basic algorithm, it doesn't take advantage of * long term public keys if they are available. See the DHAgreement class * for a "better" implementation. */public class DHBasicAgreement    implements BasicAgreement{    private DHPrivateKeyParameters  key;    private DHParameters            dhParams;    private SecureRandom            random;    public void init(        CipherParameters    param)    {        AsymmetricKeyParameter  kParam;        if (param instanceof ParametersWithRandom)        {            ParametersWithRandom    rParam = (ParametersWithRandom)param;            this.random = rParam.getRandom();            kParam = (AsymmetricKeyParameter)rParam.getParameters();        }        else        {            this.random = new SecureRandom();            kParam = (AsymmetricKeyParameter)param;        }                if (!(kParam instanceof DHPrivateKeyParameters))        {            throw new IllegalArgumentException("DHEngine expects DHPrivateKeyParameters");        }        this.key = (DHPrivateKeyParameters)kParam;        this.dhParams = key.getParameters();    }    /**     * given a short term public key from a given party calculate the next     * message in the agreement sequence.      */    public BigInteger calculateAgreement(        CipherParameters   pubKey)    {        DHPublicKeyParameters   pub = (DHPublicKeyParameters)pubKey;        if (!pub.getParameters().equals(dhParams))        {            throw new IllegalArgumentException("Diffie-Hellman public key has wrong parameters.");        }        return pub.getY().modPow(key.getX(), dhParams.getP());    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?