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)); }
public EphemeralKeyPair(byte[] publicKey, GenerateSharedKeyDelegate generator) { PublicKey = publicKey; _generator = generator; }