Esempio n. 1
0
        public static EphemeralKeyPair Generate(string curveName)
        {
            var ecp = CustomNamedCurves.GetByName(curveName);
            var ecs = new ECDomainParameters(ecp.Curve, ecp.G, ecp.N, ecp.H, ecp.GetSeed());
            var g   = new ECKeyPairGenerator();

            g.Init(new ECKeyGenerationParameters(ecs, new SecureRandom()));

            var pair  = g.GenerateKeyPair();
            var agree = new ECDHBasicAgreement();

            agree.Init(pair.Private);

            var pubkey = MarshalCurvePoint(((ECPublicKeyParameters)pair.Public).Q);
            var done   = new GenerateSharedKeyDelegate(theirPub =>
            {
                var point = UnmarshalCurvePoint(ecp.Curve, theirPub);
                var key   = new ECPublicKeyParameters(point, ecs);

                return(agree.CalculateAgreement(key).ToByteArray());
            });

            return(new EphemeralKeyPair(pubkey, done));
        }
Esempio n. 2
0
 public EphemeralKeyPair(byte[] publicKey, GenerateSharedKeyDelegate generator)
 {
     PublicKey  = publicKey;
     _generator = generator;
 }