示例#1
0
        public void Ecdh(BigInt publicX, BigInt publicY, RandomNumberGenerator rng, out byte[] preMasterSecret, out Affine publicPoint)
        {
            var limbLen = (curveByteLen + 3) >> 2;

            var priv = GenPriv(rng);

            var serverPublic = new EllipticCurve.Projective()
            {
                x = publicX, y = publicY, z = new EllipticCurve.BigInt(1, limbLen)
            };
            var commonSecretProj = EcMult(priv, serverPublic);
            var commonSecretAff  = EcAffinify(commonSecretProj);

            serverPublic.Clear();
            commonSecretProj.Clear();

            var g = new EllipticCurve.Projective()
            {
                x = xg, y = yg, z = new EllipticCurve.BigInt(1, limbLen)
            };
            var pubProj = EcMult(priv, g);
            var pubAff  = EcAffinify(pubProj);

            priv.Clear();
            pubProj.Clear();

            preMasterSecret = commonSecretAff.x.ExportToBigEndian(curveByteLen);
            commonSecretAff.Clear();

            publicPoint = pubAff;
        }
示例#2
0
        public void Ecdh(BigInt publicX, BigInt publicY, RandomNumberGenerator rng, out byte[] preMasterSecret, out Affine publicPoint)
        {
            var limbLen = (curveByteLen + 3) >> 2;

            var priv = GenPriv(rng);

            var serverPublic = new EllipticCurve.Projective() { x = publicX, y = publicY, z = new EllipticCurve.BigInt(1, limbLen) };
            var commonSecretProj = EcMult(priv, serverPublic);
            var commonSecretAff = EcAffinify(commonSecretProj);
            serverPublic.Clear();
            commonSecretProj.Clear();

            var g = new EllipticCurve.Projective() { x = xg, y = yg, z = new EllipticCurve.BigInt(1, limbLen) };
            var pubProj = EcMult(priv, g);
            var pubAff = EcAffinify(pubProj);
            priv.Clear();
            pubProj.Clear();

            preMasterSecret = commonSecretAff.x.ExportToBigEndian(curveByteLen);
            commonSecretAff.Clear();

            publicPoint = pubAff;
        }