CalculateAgreement() public method

public CalculateAgreement ( ICipherParameters pubKey ) : BigInteger
pubKey ICipherParameters
return Org.BouncyCastle.Math.BigInteger
示例#1
0
        private static BigInteger calculateAgreement(
			AsymmetricCipherKeyPair U1,
			AsymmetricCipherKeyPair U2,
			AsymmetricCipherKeyPair V1,
			AsymmetricCipherKeyPair V2)
        {
            ECMqvBasicAgreement u = new ECMqvBasicAgreement();
            u.Init(new MqvPrivateParameters(
                (ECPrivateKeyParameters)U1.Private,
                (ECPrivateKeyParameters)U2.Private,
                (ECPublicKeyParameters)U2.Public));
            BigInteger ux = u.CalculateAgreement(new MqvPublicParameters(
                (ECPublicKeyParameters)V1.Public,
                (ECPublicKeyParameters)V2.Public));

            ECMqvBasicAgreement v = new ECMqvBasicAgreement();
            v.Init(new MqvPrivateParameters(
                (ECPrivateKeyParameters)V1.Private,
                (ECPrivateKeyParameters)V2.Private,
                (ECPublicKeyParameters)V2.Public));
            BigInteger vx = v.CalculateAgreement(new MqvPublicParameters(
                (ECPublicKeyParameters)U1.Public,
                (ECPublicKeyParameters)U2.Public));

            if (ux.Equals(vx))
                return ux;

            return null;
        }
        /**
        * X9.62 - 1998,<br/>
        * J.3.1, Page 152, ECDSA over the field Fp<br/>
        * an example with 192 bit prime
        */
        private static IBigInteger CalculateAgreement(
            IAsymmetricCipherKeyPair u1,
            IAsymmetricCipherKeyPair u2,
            IAsymmetricCipherKeyPair v1,
            IAsymmetricCipherKeyPair v2)
        {
            var u = new ECMqvBasicAgreement();
            u.Init(new MqvPrivateParameters(
                       (ECPrivateKeyParameters) u1.Private,
                       (ECPrivateKeyParameters) u2.Private,
                       (ECPublicKeyParameters) u2.Public));
            IBigInteger ux = u.CalculateAgreement(new MqvPublicParameters(
                                                      (ECPublicKeyParameters) v1.Public,
                                                      (ECPublicKeyParameters) v2.Public));

            var v = new ECMqvBasicAgreement();
            v.Init(new MqvPrivateParameters(
                       (ECPrivateKeyParameters) v1.Private,
                       (ECPrivateKeyParameters) v2.Private,
                       (ECPublicKeyParameters) v2.Public));
            IBigInteger vx = v.CalculateAgreement(new MqvPublicParameters(
                                                      (ECPublicKeyParameters) u1.Public,
                                                      (ECPublicKeyParameters) u2.Public));

            if (ux.Equals(vx))
                return ux;

            return null;
        }