public MqvPrivateParameters( ECPrivateKeyParameters staticPrivateKey, ECPrivateKeyParameters ephemeralPrivateKey, ECPublicKeyParameters ephemeralPublicKey) { this.staticPrivateKey = staticPrivateKey; this.ephemeralPrivateKey = ephemeralPrivateKey; this.ephemeralPublicKey = ephemeralPublicKey; }
public virtual void Init( ICipherParameters parameters) { if (parameters is ParametersWithRandom) { parameters = ((ParametersWithRandom) parameters).Parameters; } this.key = (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); ECCurve curve = parameters.Curve; ECPoint[] points = new ECPoint[]{ // The Q2U public key is optional ECAlgorithms.ImportPoint(curve, Q2U == null ? parameters.G.Multiply(d2U.D) : Q2U.Q), ECAlgorithms.ImportPoint(curve, Q1V.Q), ECAlgorithms.ImportPoint(curve, Q2V.Q) }; curve.NormalizeAll(points); ECPoint q2u = points[0], q1v = points[1], q2v = points[2]; BigInteger x = q2u.AffineXCoord.ToBigInteger(); BigInteger xBar = x.Mod(powE); BigInteger Q2UBar = xBar.SetBit(e); BigInteger s = d1U.D.Multiply(Q2UBar).Add(d2U.D).Mod(n); BigInteger xPrime = q2v.AffineXCoord.ToBigInteger(); BigInteger xPrimeBar = xPrime.Mod(powE); BigInteger Q2VBar = xPrimeBar.SetBit(e); BigInteger hs = parameters.H.Multiply(s).Mod(n); return ECAlgorithms.SumOfTwoMultiplies( q1v, Q2VBar.Multiply(hs).Mod(n), q2v, hs); }
private ECPrivateKeyParameters ParseKey(string data) { Dictionary<string, string> values = ToDictionnary(data); var curveName = values["curve"].Replace("NIST", ""); var curve = SecNamedCurves.GetByOid(curves[curveName]); var domain = new ECDomainParameters(curve.Curve, curve.G, new BigInteger(values["q"], 16), curve.H); Assert.Equal(domain.N, curve.N); var key = new ECPrivateKeyParameters(new BigInteger(values["x"], 16), domain); ECPoint pub = curve.G.Multiply(key.D); Assert.Equal(pub.X.ToBigInteger(), new BigInteger(values["Ux"], 16)); Assert.Equal(pub.Y.ToBigInteger(), new BigInteger(values["Uy"], 16)); return key; }
private void TestSig(ECPrivateKeyParameters key, DeterministicSigTest test) { DeterministicECDSA dsa = new DeterministicECDSA(test.Hash); dsa.setPrivateKey(key); dsa.update(Encoding.UTF8.GetBytes(test.Message)); var result = dsa.sign(); Assert.Equal(test.K, dsa.LastK); Assert.Equal(test.R, dsa.LastR); Assert.Equal(test.S, ECDSASignature.FromDER(result).S); }
protected bool Equals( ECPrivateKeyParameters other) { return d.Equals(other.d) && base.Equals(other); }
public MqvPrivateParameters( ECPrivateKeyParameters staticPrivateKey, ECPrivateKeyParameters ephemeralPrivateKey) : this(staticPrivateKey, ephemeralPrivateKey, null) { }
protected bool Equals( ECPrivateKeyParameters other) { return(d.Equals(other.d) && base.Equals(other)); }
public void setPrivateKey(ECPrivateKeyParameters ecKey) { Init(true, ecKey); }
internal static ECPublicKeyParameters GetCorrespondingPublicKey( ECPrivateKeyParameters privKey) { ECDomainParameters ec = privKey.Parameters; ECPoint q = new FixedPointCombMultiplier().Multiply(ec.G, privKey.D); if (privKey.PublicKeyParamSet != null) { return new ECPublicKeyParameters(privKey.AlgorithmName, q, privKey.PublicKeyParamSet); } return new ECPublicKeyParameters(privKey.AlgorithmName, q, ec); }
public void setPrivateKey(ECPrivateKeyParameters ecKey) { this.x = ecKey.D; this.q = ecKey.Parameters.N; this.curve = ecKey.Parameters; qlen = q.BitLength; if(q.SignValue <= 0 || qlen < 8) { throw new InvalidOperationException( "bad group order: " + q); } rolen = (qlen + 7) >> 3; rlen = rolen * 8; bx = int2octets(x); }