public MqvPrivateParameters( ECPrivateKeyParameters staticPrivateKey, ECPrivateKeyParameters ephemeralPrivateKey, ECPublicKeyParameters ephemeralPublicKey) { this.staticPrivateKey = staticPrivateKey; this.ephemeralPrivateKey = ephemeralPrivateKey; this.ephemeralPublicKey = ephemeralPublicKey; }
public void Init( ICipherParameters parameters) { if (parameters is ParametersWithRandom) { parameters = ((ParametersWithRandom)parameters).Parameters; } this.privKey = (ECPrivateKeyParameters)parameters; }
// The ECMQV Primitive as described in SEC-1, 3.4 private static ECPoint calculateMqvAgreement( ECDomainParameters parameters, ECPrivateKeyParameters d1U, ECPrivateKeyParameters d2U, ECPublicKeyParameters Q2U, ECPublicKeyParameters Q1V, ECPublicKeyParameters Q2V) { BigInteger n = parameters.N; int e = (n.BitLength + 1) / 2; BigInteger powE = BigInteger.One.ShiftLeft(e); // The Q2U public key is optional ECPoint q; if (Q2U == null) { q = parameters.G.Multiply(d2U.D); } else { q = Q2U.Q; } BigInteger x = q.X.ToBigInteger(); BigInteger xBar = x.Mod(powE); BigInteger Q2UBar = xBar.SetBit(e); BigInteger s = d1U.D.Multiply(Q2UBar).Mod(n).Add(d2U.D).Mod(n); BigInteger xPrime = Q2V.Q.X.ToBigInteger(); BigInteger xPrimeBar = xPrime.Mod(powE); BigInteger Q2VBar = xPrimeBar.SetBit(e); BigInteger hs = parameters.H.Multiply(s).Mod(n); //ECPoint p = Q1V.Q.Multiply(Q2VBar).Add(Q2V.Q).Multiply(hs); ECPoint p = ECAlgorithms.SumOfTwoMultiplies( Q1V.Q, Q2VBar.Multiply(hs).Mod(n), Q2V.Q, hs); if (p.IsInfinity) throw new InvalidOperationException("Infinity is not a valid agreement value for MQV"); return p; }
public MqvPrivateParameters( ECPrivateKeyParameters staticPrivateKey, ECPrivateKeyParameters ephemeralPrivateKey) : this(staticPrivateKey, ephemeralPrivateKey, null) { }
protected bool Equals( ECPrivateKeyParameters other) { return d.Equals(other.d) && base.Equals(other); }
protected virtual byte[] CalculateECDHBasicAgreement(ECPublicKeyParameters publicKey, ECPrivateKeyParameters privateKey) { ECDHBasicAgreement basicAgreement = new ECDHBasicAgreement(); basicAgreement.Init(privateKey); BigInteger agreement = basicAgreement.CalculateAgreement(publicKey); return BigIntegers.AsUnsignedByteArray(agreement); }
protected virtual void GenerateEphemeralClientKeyExchange(ECDomainParameters ecParams, Stream output) { AsymmetricCipherKeyPair ecAgreeClientKeyPair = GenerateECKeyPair(ecParams); this.ecAgreeClientPrivateKey = (ECPrivateKeyParameters)ecAgreeClientKeyPair.Private; byte[] keData = ExternalizeKey((ECPublicKeyParameters)ecAgreeClientKeyPair.Public); TlsUtilities.WriteUint24(keData.Length + 1, output); TlsUtilities.WriteOpaque8(keData, output); }
internal static ECPublicKeyParameters GetCorrespondingPublicKey( ECPrivateKeyParameters privKey) { ECDomainParameters parameters = privKey.Parameters; ECPoint q = parameters.G.Multiply(privKey.D); if (privKey.PublicKeyParamSet != null) { return new ECPublicKeyParameters(privKey.AlgorithmName, q, privKey.PublicKeyParamSet); } return new ECPublicKeyParameters(privKey.AlgorithmName, q, parameters); }
protected bool Equals( ECPrivateKeyParameters other) { return(d.Equals(other.d) && base.Equals(other)); }