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; }